Ask HN: Why do you contribute to open source?

29 points by IsaacSchlueter ↗ HN
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?

45 comments

[ 6.0 ms ] story [ 106 ms ] thread
I learned software engineering from Mozilla. I earn my living on top of OSS. Pay it forward.
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 support Open Source Software because Open Source Software supports me.
Also Fame and Glory?
Well said mate, well said. Short and sweet - time for a sticker.
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.
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.

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 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.
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.

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.

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

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.
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 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.

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.
Because I get paid for it.
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.

Because I want a feature included, a bug fixed, or I wrote something cool and I want to share it.
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...

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)...

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.

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 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

> 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 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.

EDIT:

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.

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 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.