EDIT: Hello from the future! This post is part of the old blog. That means it may be deprecated. However, I deemed it valuable enough to keep around. The new blog starts here!

Getting to the stage where you contribute to open source can be arduous. And contributing in itself is a daunting task at first. As someone just starting to contribute to open source, I want to put down now the thoughts I have while in the thick of it and before time blurs the events and the initial challenges or victories.

Getting there is hard

Simply getting the environment required to participate was a first hurdle. It was only four years ago when, after fighting uphill battles to complete my COMP classes' assignments on Windows, I decided to take the plunge and switch my operating system to Ubuntu. Open source is biased towards Unix-like environments (and the popular open source projects on Github are even more so towards Mac OS X). The switch was not easy, but it was rewarding.

After installation, my computer just kept on booting to a black screen and there was no way to switch to my Windows partition... since my keyboard had become unresponsive! Even after fiddling with the BIOS to make my keyboard work on bootup, I still had to figure out how to solve this black screen. And after that I had to figure out how to make my wireless card work. And after that I had to get accustomed to the different interfaces and software!

All of these steps required mucking about with things that even now I barely know about and would rather stay away from. It was quite painful. Oh god, it was sooo easy in 2010 to install Ubuntu. What are u talking about? It was like so much harder before that! <whinny> might say the horse-stradling veterans (we like you guys don't worry). To that I say:

No. It wasn't easy. And it probably still isn't.

The reason more experienced people may think it is easy now is because they understand the infrastructure and tools of today that solve the problems of yesterday. The solutions to the problems they faced during their first time have now had tons of work poured into them. As newcomers we don't know those solutions and even less those problems by definition. To us everything is new and every obstacle is as challenging as it was for the original first time of the veterans.

The wealth of information today has completely changed this some might say. You can find information on any topic easily! Hmmm... nah, I don't think so. At least not the easy part.

We have the opposite situation. Where before there was a scarcity of information -which was at least on topic-, now there is simply too much information on too many topics to be easily grokkable by onboarders. There are so many sites competing for your clicks that you get this cornucopia of patch-work information.

It is very hard to see this for a more experienced person because these solutions are solving past problems which are not even seen as such by neophytes today. I think it is this way because of this pernicious thing known as incremental change. Once you have boarded the technology train, you can see the changes as they are made and how they fit on top of previous choices. In this way you build up an understanding of how things evolve. You build up a little something called experience. But beware: it is the only kind of knowledge that hasn't yet been made available on the other side of a blue link.

All of this stemmed from getting an open source desktop, but the very same arguments hold for getting into the open source world in general. It is especially true for medium to large frameworks. There is often times this disconnect between the maintainers/long-time users' accumulated understanding and newcomers' sudden exposure to the lump sum. I don't like lump sums. They're lumpy.

Participating is easy?...Nah

Choosing a project shouldn't really be too hard. The trick is to use open source projects first. Oh... I see... Well, actually that puts you in an ideal position to discover the problems, limitations or missing features and then you know what to contribute.

You got the revision control software you need? the language environment? the dependencies? the tests' dependencies? the editor? the terminal? some basic understanding of the spoken language of the members of the project? the know-how to navigate these things? some courage? a little lunacy to get yourself out there?

Once you make a list of all the things needed to get into open source, it shouldn't be quite surprising why there aren't that many participants. The technical knowledge required is wide and the time demanded is non-trivial. It gets better with time though. It gets better with experience.

Personally, I was quite lucky to get good feedback on the first pull requests I made. This might also be your case! Others know how hard it can be and so camaraderie is encouraged. Start small and gradually try to give back to some of the bigger projects you use.

Getting into the open source world is a gradual process. That sums up my thoughts on the matter now. I am curious to see if this outlook will hold true as I become a so-called 'veteran'.