I am hearing a lot of persons interested in open-source and giving back to the community. I think it can be an exciting experience and it can be positive in many different ways: first of all more contributors mean better open-source software being produced and that is great, but it also means that the persons involved can improve their skills and they can learn more about how successful projects get created.
So I wondered why many developers do not do the first step: what is stopping them to send the first patch or the first pull-request? I think that often they do not know where to start or they think that contributing to the big projects out there is intimidating, something to be left to an alien form of life, some breed of extra-good programmers totally separated by the common fellows writing code in the world we experience daily.
I think that hearing the stories of a few developers that have given major contributions to top level project could help to go over these misconceptions. So I asked a few questions to this dear friend of mine, Luca Barbato, who contributed among the others to Gentoo and VLC.
Let’s start from the beginning: when did you start programming?
I started dabbling stuff during high school, but I started doing something more consistent at the time I started university.
What was your first contribution to an open-source project?
I think either patching the ati-drivers to work with the 2.6 series or hacking cloop (a early kernel module for compressed loops) to use lzo instead of gzip.
What are the main projects you have been involved into?
Gentoo, MPlayer, Libav, VLC, cairo/pixman
How did you started being involved in Gentoo? Can you explain the roles you have covered?
Daniel Robbins invited me to join, I thought “why not?
During the early times I took care of PowerPC and [Altivec](http://en.wikipedia.org/wiki/AltiVec), then I focused on the toolchain due the fact it gcc and binutils tended to break software in funny ways, then multimedia since altivec was mainly used there. I had been part of the Council a few times used to be a recruiter (if you want to join Gentoo feel free to contact me anyway, we love to have more people involved) and I’m involved with community relationship lately.
Are there other less famous projects you have contributed to?
I have minor contributions in quite a bit of software due. The fact is that in Gentoo we try our best to upstream our changes and I like to get back fixes to what I like to use.
What are your motivations to contribute to open-source?
Mainly because I can =)
Who helped you to start contributing? From who you have learnt the most?
Daniel Robbins surely had been one of the first asking me directly to help.
You learn from everybody so I can’t name a single person among all the great people I met.
How did you get to know Daniel Robbins? How did he helped you?
I was a gentoo user, I happened to do stuff he deemed interesting and asked me to join.
He involved me in quite a number of interesting projects, some worked (e.g. Gentoo PowerPC), some (e.g. Gentoo Games) not so much.
Do your contributions to open-source help your professional life?
In some way it does, contrary to the assumption I’m just seldom paid to improve the projects I care about the most, but at the same time having them working helps me when I need them during the professional work.
How do you face disagreement on technical solutions?
I’m a fan of informed consensus, otherwise prototypes (as in “do, test and then tell me back”) work the best.
To contribute to OSS are more important the technical skills or the diplomatic/relation skills?
Both are needed at different time, opensource is not just software, you MUST get along with people.
Have you found different way to organize projects? What works best in your opinion? What works worst?
Usually the main problem is dealing with poisonous people, doesn’t matter if it is a 10-people project or a 300+-people project. You can have a dictator, you can have a council, you can have global consensus, poisonous people are what makes your community suffer a lot. Bonus point if the poisonous people get clueless fan giving him additional voices.
Did you ever sent a patch for the Linux kernel?
Not really, I’m not fond of that coding style so usually other people correct the small bugs I stumble upon before I decide to polish my fix so it is acceptable =)
Do you have any suggestions for people looking to get started contributing to open-source?
Pick something you use, scratch your own itch first, do not assume other people are infallible or heroes.
ME: I certainly agree with that, it is one of the best advices. However if you cannot find anything suitable at the end of this post I wrote a short list of projects that could use some help.
Can you tell us about your best and your worst moments with contribution to OSS?
The best moment is recurring and it is when some user thanks you since you improved his or her life.
The worst moment for me is when some rabid fan claims I’m evil because I’m contributing to Libav and even praises FFmpeg for something originally written in Libav in the same statement, happened more than once.
What are you working on right now and what plans do you have for the future?
Libav, plaid, bmdtools, commonmark. In the future I might play a little more with [rust](http://www.rust-lang.org/).
Thanks Luca! I would be extremely happy if this short post could give to someone the last push they need to contribute to an existing open-source project or start their own: I think we could all use more, better, open-source software. So let’s write it.
One thing I admire in Luca is that he is always curious and ready to jump on the next challenge. I think this is the perfect attitude to become an OSS contributor: just start play around with the things you like and talk to people, you could find more possibilities to contribute that you could imagine.
I suggest to take a look at his blog.
A few open-source you could consider contributing to
Well, just in case you are eager to start writing some code and you are looking for some projects to contribute to here there are a few, written with different technologies. If you want to start contributing to any of those and you need directions just drop me a line (federico at tomassetti dot me) and I would be glad to help!
If you are interested in contributing to Libav, you can take a look at this post: there I explained how I submitted my first patch (approved in the meantime!). It is written in C.
You could be also interested in plaid: it is a Python web application to manage git patches sent by e-mail (there are a few projects using this model like libav or the linux kernel)
WorldEngine, it is a world generator written in Python
Plate-tectonics, it is a library for plate tectonics simulation. It is written in C++
JavaParser a Java parser, written in Java
Incremental Java parser, an incremental Java parser, written in Scala