Why contribute to an Open Source project?

I've had many people ask me over the years about why I “give my work away for free” by contributing to an Open Source project. This question is coming a bit less frequently, but I still give the same answer:

Why are academic research papers peer reviewed? Why are the standards underlying the Internet called “Request for Comment” (RFC)? Why would someone get a mentor?

To learn and get better.

If you haven't realized it by now, you aren't the smartest person in the world. In addition, no matter how hard or smart you work, you will make mistakes. Finally, other smart people are probably working on similar concepts, ideas, and implementations. These aren't condemnations, just simple facts.

I have a lot to learn and so do you. We will each make mistakes, some are big, some are small, but we'll definitely make them. In addition, we will each learn things, some are big, some are small, but we'll each have a slightly different take on them. This is where Open Source projects come into play.

Have you ever been to a job interview for a development position where they say “Sorry, you just don't have enough experience” and you want to scream “If someone would just give me a job, I'd have the experience!” Wrong. You don't have the experience because you've chosen not to get it.

Last week, I was speaking with the Community/Program manager of a large company's Open Source initiative. He pointed out that the reason that Linux was able to get so many geeks so quickly was because it was a leaky boat. Linux lacked the basic functionality that users couldn't give up. Therefore, there was opportunity to get involved from day one. These opportunities are still there… they simply require a bit more dedication and normally an established track record.

This is what involvement in the Open Source community will do for you. It will put you in touch with other smart people and allow you to learn, contribute, get experience, and find out which parts you do and don't like. True, walking into an employer and saying “I worked for nVidia for 5 years writing video drivers” is different than saying “I wrote the nVidia driver for Linux Distro X”. The first implies hard work understanding, etc, but I believe the second shows passion, understanding, and dedication. More than anything, I – as an employer – can browse the mailing lists, source repositories, etc and determine more precisely what your contribution was. I can't do that with your contributions to your previous employers.

It's a walking talking resume.