Hacker News new | comments | ask | show | jobs | submit login
Ask HN: Why do you contribute to open source?
29 points by IsaacSchlueter on Feb 7, 2012 | hide | past | web | favorite | 45 comments
My assumption is that most of the users here either contribute substantially to some open source project, or at least use some open source stuff and take some time to send patches/bugs to the project.

Why do you do it?

If you don't, then what stops you?

Not looking for should/shouldn't arguments here. Just curious about the general psychology of the decision.

What does it feel like? What kind of effect are you looking for? What motivates you to continue?

Although I admire OSS as a concept, generally when I contribute to an open-source project it's "by accident", e.g. I'm trying to fix/have fixed a bug that's affecting me or one of my customers, and it's easier to contribute the patch back to the project than re-patch every subsequent update. It's just, pragmatically, easier to fix the whole project than just for me.

- FWIW -

While I have a handful of my own open source projects (mostly libraries), I gave up on trying to contribute to open source. I tried approaching a number of projects and the level of disinterest and arrogance was frankly jaw-dropping. I was treated like someone who is out to outsmart and put to shame everyone on the "core team".

In one case I asked if they had any thoughts on moving from Google Code to GitHub, listing possible benefits and reasons. To this the first reply was that forking was evil, GitHub was broken and that I shouldn't really be troubling very busy people with such stupid questions. Then more people piled on with personal attacks. That was damn odd. All I wanted was to submit a bugfix.

With another project I wrote them how to trim down and lighten the code, and no one even bothered to reply. I wasn't condescending, always bearing in mind that it was their project and I was just passing by. Yet another project - made a replacement for an awful app icon - again, like talking to a wall, not a blip from the other end.

One notable exception was the Linux Kernel project. They accepted a couple of patches with no fuss whatsoever, and rejected another 2 or 3 with good arguments.

(edit) Having thought about it a bit more - the problems appear to lie with multi-person projects. I had good experience submitting fixes and patches to single-maintainer projects. They were all accepted or rejected promptly and with courtesy. But once there's a group, then there are leaders, prima donnas, politics, social hierarchies and you name it. A coding society, not a development project.

This is very interesting. The problem, of course, is that a single person can't get as much done as a team. At a certain point, many projects need to have more developers involved.

What do you think it was that made the Linux Kernel different? I assume there are leaders and social whatevers going on there.

In general terms, the key difference between a 'nice' group and a 'mean' group is the degree to whether the hierarchy in the group is obviously correct.

In the linux kernel, there is a clear hierarchy that is pretty close to being obviously correct. Linux obviously deserves to be the leader, and position/status is very clearly linked to a persons contributions to the greater good of the project.

On single person projects, the hierarchy is also trivially clear, obvious, correct and unassailable.

Many group projects fail the "clear hierarchy" test, often because they try to eliminate the hierarchy for some sort of ideals. But humans being human there is always some sort of hierarchy, so establishment of the hierarchy is informal and ongoing.

Of course, "informal and ongoing" is a lot better than 'wrong' which is the case with many clear hierarchies. This is why the idealism vis a vis trying to prevent hierarchies exists in the first place.

The obvious correctness of the hierarchy is one huge advantage small companies have over large companies and non-profits.

I'd say that the LK project has -

(a) A formalized well-functioning hierarchy. There are people responsible for each part of the project - networking, vm, file systems, etc.

(b) Highly skilled C developers. The language appear to have a big influence on how one carries himself in the community. C++ devs tend to be opinionated know-it-alls, Java devs - the same way but friendlier if a bit more condescending, etc. The C crowd is the humbliest by far and this makes the most pleasant to be in, so from this follows...

(c) An established culture of mutual respect between the peers. If someone says something dumb, there's always a chance that it is not and you are simply not getting it.

As with any community it could've gone in any direction, but in the end it all comes down to the leader. Linus is a witty opinionated, but inherently friendly and polite person, and so is the community in general.

To be fair, it might not be the best idea to come in with high-level ideas such as moving to another development platform or changing the code style. That kind of topic is just bound to have some high-profile opposition within the developer community and become political very fast.

I wasn't suggesting they'd move. I asked if they considered moving.

90% of my open source contributions come from running into a bug in an open source project that I'm currently using for something, and just fixing that and sending it back upstream.

10% is writing tools to solve problems I have that aren't adequately solved by existing things.

I think the positive answers to your questions are spot on and consistent with people I've spoken to. But I haven't seen anyone respond in the negative as to why they DON'T contribute so I'll take a stab.

I've asked a few developers this question and the reasons for not contributing tended to fall into 3 camps:

1. Not enough time. These folks come home from a long day coding at work and want to spend their free time with family/friends.

2. Not enough interest. They're not opposed to the idea of contributing, but 'just never got around to it'.

3. Not sure where to start. This was particularly true among younger developers. They'd be interested in joining a project to improve their skills and work w/ others, but they weren't sure how to get started. What should they work on? Where is the project headed? If they just start hacking on stuff, will the lead contributor find it useful?

I don't think there's much you can do to change the first reason for not contributing (no time). But I think if Open source projects had better communication tools, possibly the second, and definitely the third reasons could be addressed.

I'm working on a pre-launch startup to make it easier for open source teams to better collaborate and communicate with each other. We want to create a space where developers can have face-to-face meetings, code reviews, and pair with new programmers to get them up to speed.

You can see the prototype at www.codemeet.com. If this sounds like it'd be of interest Isaac, I'd love to talk to you more about how it could be integrated into some of the projects you're working on :)

3. Not sure where to start. This was particularly true among younger developers. They'd be interested in joining a project to improve their skills and work w/ others, but they weren't sure how to get started. What should they work on? Where is the project headed? If they just start hacking on stuff, will the lead contributor find it useful?

This is a deal-killer for me. Some of the OSS projects I've wanted to contribute to make getting up to speed rather difficult.

Few offer documentation that makes joining and getting up to speed quickly easy. I know why such documentation does not exist, because we just want to code. But every OSS project (that allows others to actively contribute), should have some kind of welcome-here-is-what-you-need-to-start-package.

Even a simple README committed to the git repo that outlines it would work fine.


That is one interesting app you got there.

I liked the F2F feature. Curious how it works in practice.

FYI, https://pair.io/ is in the same space. Since it is based on SSHing into a machine, you can work collaboratively in your text editor of choice with your own .dotfiles

This is extremely useful, thanks!

Just signed up for http://www.codemeet.com/ I'm isaacs on there, and my email is in my profile (and all over the web) if you think it can be helpful for node.js things.

I like to solve puzzles; most of my contributions to OSS is in the form of bug fixing, which comes about because I've come across the bug myself, decided that it needs to be fixed so that gives me a chance to solve the puzzle. I see myself as a reasonable coder so I should be able to solve most problems, and the problems I can't solve at least my investigation can provide a top-notch bug report for other maintainers can skip some of the tedious investigation.

I don't find that this is just an OSS motive to me though as even in closed-source I'll often find myself in disassemblers (in .NET) or JS files, etc trying to work out how something works so I can provide the best feedback I can.

The other motive is the "I know what it's like" feeling being a coordinator on a few projects myself. I know what it's like to have people say "what doesn't it do X" or "why are you doing Y", it's generally because I don't have time, so if I'm on the other side I am more than happy to try and solve that problem myself. Again this is somewhat related to my first point but really it's a bit more than that. Just because I need a product to do XYZ doesn't mean that that is what everyone wants to do, or what the other contributors are in a position to make it do, so if I've got the skills why don't I tackle it myself?

Lastly there's the exposure aspect of it. As much as I'd love to think that everything I do for OSS is altruistic in nature it's not. I like that when I go for a job I can put on my CV that I've contributed to projects so a prospective employer can see my skills as well as just relying on my word. I like that github handle/ twitter handle/ bitbucket handle/ etc get recognised by members of the community and that people can see my as an authority on what I present about, blog about or yammer mindlessly on twitter about.

The job aspect is pretty important.

Don't know if any people looking for employees do that, but I would hire a developer who writes patches, that are nice and I can browse them, to an open source project, instead of asking him to code a binary tree and insert on it on a technical interview or to read his CV.

Hopefully someday all those CVs will be obsolete, and people will only be employed by their open source contributions, I never liked writing CVs anyway :P

I release most of the code I write in my free time. There's no specific reason I do it. A while back people were mentioning using GitHub as a resume or a supplement to a resume. I like the idea, but I'm not sure how much it's used as that, or even if my code would say anything good about me. Mostly it's just a convenient way to have the stuff I write available where ever I am. None of it's spectacularly useful, but if it helps somebody out, cool.

Of the open source software that I use, I've yet to contribute back. The biggest reason is just a lack of time. On top of digging through the code to fix the bug, most projects have guidelines and a process for submitting patches. Even a little bug can be a big time sink the first time through. I do submit bug reports, if that counts...

I opensource most of the code I write because I think it's one of the best accountability mechanisms that we have in coding. Just knowing that someone is going to be looking through my code makes me work harder to ensure it's "good".

Getting to the point of contributing code to an existing project (usually via submitting a pull request or the like) always felt more intimidating than writing my own small libraries, but I eventually started doing this and I have to admit it has a "warmer, fuzzier" feeling associated with it. This is generally regardless of whether the patch is accepted or not. Helping out feels good.

In short, writing opensource software feels "right". That's why I keep doing it. Knowing people are using it (or think it's cool) helps, but it's not the main driver for me...

I support Open Source Software because Open Source Software supports me.

Well said mate, well said. Short and sweet - time for a sticker.

Well said, same reason here.

Also Fame and Glory?

Partly because my job, everything we do is open source

Every 'serious' line of code I have written has gone straight into my public github, even if I think it could be in future be used as a startup.

I think code belongs in the open, we wouldnt be anywhere near where we are in terms of technology if everyone kept a tight hold on their code, I think every line of code that is released as oss is another brick in a pyramid for others to build on, there isnt a limit to how high it can go.

As someone who runs a lot of his own open-source projects (see http://jcoglan.com), and occasionally contributes to others when I find bugs, the biggest reason I do it is to learn things. Not just to learn programming, and various problem domains, but to practise writing and speaking about my work, writing good documentation, and (crucially) practising API design.

Making something you're intending to ship to strangers (or to yourself writing future projects with your tools) forces you to write good documentation (if you want anyone to use it), which in turn forces you to hone your API design skills. If you're having trouble writing the docs for something, you probably haven't adequately solved the problem yet.

I'm not claiming to have done a great job at this on all my projects, but it's a learning process and occasionally my projects find a user base, which keeps me busy, provides new challenges when they find bugs, and if your code's any good it boosts your reputation as a nice side effect.

Funny this should come up today. I just haven't really known how. But today, I forked something, changed a file and submitted a pull request. It was just one line of code and I full expect it to get rejected but I figured I needed to start somewhere. GitHub made it easier then I imagined it would be.

I started working on OSS as a way to learn at the age of 18. I learned much more about programming and working with others than I learned in school. Plus, having a program that I work on be in the top #5 for downloads on SF back in the day was a bit of a cool factor.

Now these days, more than 10 years later, I have a family to support so most of my OSS contributions are fixing bugs that are show stoppers for me, in existing projects. I have open sourced a few very small things that I use for myself, in hopes that it saves some people from wasting time on doing something that has already been done.


I used to always think that it would help me out in getting a job, but the only way it helped me out was that I had a lot of experience. Having a OSS project on my resume never really helped out it seemed, in the jobs that I got.

I believe open source software benefits many people and I like helping people. OSS has also helped me become a better developer, I've also made new friends, and gotten jobs because of it so it has definitely been very rewarding and I guess that's why I continue.

When I contribute to FOSS software I know that the odds are very good that other people will actually benefit from the work that I do. Having worked for several startups, I know that the code I was paid to write is more likely than not going to end up in the trash can when the company folds, the project is cancelled or (best case so far) the application is re-written from the ground up by another team. My FOSS code, on the other hand, as humble as it may be, is much more likely to be picked up, used and even improved by others. And there is a satisfaction in knowing that I will always be able to use it whenever I want, something that is not the case with code I have written for my employers

I do it for fun.

I could probably write a more elaborate comment explaining how it improves my skillset, coding style and has a positive effect on my career but even so, I wouldn't do it out of any of these reasons as long as it wouldn't be fun.

> Why do you do it?

Just to be useful to people. I don't have an economic incentive to program, but I enjoy solving intellectual problems and I like feeling that I've contributed something.

One example of a particularly useful program I wrote is TankCalc (http://arachnoid.com/TankCalc), a Java app that profiles storage tanks. It's pretty popular among tank farm managers worldwide, people who need to know exactly what their tanks contain but who don't have the math background that would require.

To be useful -- that's it in a nutshell.

I am really interested in the replies here... I've never really done anything with open source... I started my programming career as someone who couldn't afford to pay someone for things I wanted (Big things done open source now, that weren't available back in 1999-2000 when I started) and ended up starting to sell my code to others. And because of that I never really had the whole open source mindset... Everything I did was for me to make money, didn't want to give the cow away for free when I was trying to sell the milk.

I mostly publish my own projects (where applicable/possible) as open source. I don't often submit patches (though I have in the past) because I usually end up using the software as is and it's fine; or I have to modify it in some way that is specific to the problem at hand (and thus, not useful to anyone else).

I definitely don't have a problem with contributing changes, it just doesn't come up very often.

I don't code, but am behind a startup that intends to contract an app that will eventually be FOSS. Simply because once I'm no longer developing it, I hope there'll be a community that forms around the project that can keep developing it to their needs. I only plan to take the project so far, but like the idea of it having a life of its own after it meets my minimum requirements.

1. Why I do it?

I do it because people need software, and they don't have the time/resources to acquire it.

2. It feels like changing a flat tire for a stranger.

3. Effects? Get in contact with me if you have a position open and would like me to work with you (after trying out my work). Though this is not my motivation, it is a nice side effect.

4. I enjoy shipping software, so that motivates me to continue building more and more apps.

Honest question... If you've contributed to FOSS to fix a bug, could you specify the package and the bug?

I use a handful of FOSS libraries - and I'd readily contribute - but I find that most of the FOSS projects I use are bug free, as is? Perhaps I don't use enough 'cutting edge' libraries (in which case, I'd like to hear how these are discovered)...

Outside of the altruistic and technical reasons, it's a great background check for technical interviewers. It's pretty hard for me to lie about my contributions or quickly make up 2-3 years worth of github history. It also gets around all those pesky NDA's I've signed such that I can't show my paying work to anyone.

Someone probably already mentioned this below, but the ability to improve individually as well as collectively. When you contribute something, it's great to hear from people 3000 miles away telling you there's a better way of doing it.

I recently put together a blog post on exactly this topic, namely the self-serving motivations behind contributing:


great way to learn, share, and collaborate on ideas. I think if you couldn't share interesting things you wouldn't necessarily want to build them at all, or at least not build them as well as you may have if it were open-source

Awesome attitude. I've personally learned a lot looking through your code (amongst others).

I think OS development helps create the craftsmanship side of software development. We all both mentors and students at the same time - genuinely cool stuff.

Definitely I agree, lets you be creative with code in a way that actually matters. If no one saw your code being creative & clean wouldn't matter a whole lot, depending on who you work for it might be better job security-wise to produce more obscure code haha.

I do it mainly when I find a bug and want future releases to also include my fix so I don't have to patch future versions. So it's kind of selfish in a sense, but overall makes the software better.

Read my blog post on the psychology of contribution http://drupal4hu.com/node/102

Because I want a feature included, a bug fixed, or I wrote something cool and I want to share it.

I learned software engineering from Mozilla. I earn my living on top of OSS. Pay it forward.

Because I get paid for it.

I don't.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact