The What, How and Why of the Open Source Community in Programming
It is astounding to see how the concept of Open Source programming is so underrated and misinterpreted in the current date. While it is given due respect and appreciation from developers who have been in the field for a long time, most of the beginners in the field have no idea about what opportunities it might hold for them. And not that it is anybody’s fault, that is simply because it seems much more tempting to look for internships online that would pay you a good amount as soon as you start. While that is something extremely important and worth your time, ignoring the concept and importance of Open Source at the same time can be a setback to any person’s career. Hence before I start, I would like to point out that I am in full support of going for internships, and have been in a few myself too. The reason for me writing this article is that I was exposed to the open-source world a few months back, and have been working on it ever since. And to put into words the amount I have learnt from it in this small period of time is really difficult, but I’ll try my best. So first of all, for the people reading this and wondering what I’m talking about, let’s just get a quick intro to what an open-source software really is.
What is Open Source
Open Source software is not something very different than what a lot of us use every day. In fact, you would be surprised if you go online and try to find a list of all popular open-source softwares right now. Mozilla Firefox, Ubuntu, WordPress, VLC media player and so many more. So what differentiates them for other softwares due to which they qualify as “open-source”, while other popular ones do not?
It’s simply that they have some pre-defined characteristics which define the term we have been talking about until now. Next question: What are these?
- It is free. That’s probably the most evident part of an open-source software. An open-source software would be free to everyone, whether it be the developer, the user or the owner. It would not charge you anything for any service that it offers. If it does, it loses the right to call itself that. Have you ever wondered why all the softwares I mentioned above give you such great services for free? You have the answer now.
- It is transparent. What this means is that all the code which is making the software work will be available on the internet for anyone to view, for free. You can see it, use it, do whatever you want with it. And most importantly, you can CONTRIBUTE to it, i.e. add your own code to it and put it in there, hence improving the software.
- It does not discriminate. Now this often seems like a pretty general point to a lot of people, but this is actually a really important aspect of open source. The software being released will be open to everyone, without giving any importance to their caste, religion, territory, gender or any other factor that might distinguish people from one another. Such software is open and same for all.
- It is free for further use. This might seem like a repetition of the second point, but the difference is that this is from the programmers perspective, implying that any programmer/developer is free to use the code written in an open-source software for his own personal use or project. Any functionality, any feature can be used as it is without any legal issues.
So this was a basic overview of what open-source actually means. After seeing all this, it is evident that an end user would not notice any difference between a software which is open-source and one which is not, except the fact that the first one is more likely to be free.
Who would contribute, and why?
This is a question which I’m sure a lot of you will have in your minds at the moment. Until now, we have come to know that these softwares are completely free. Of course, on knowing this it would initially seem like the developers making this are not receiving any payment for their work. Then why would someone want to devote their precious time into this? And what are the opportunities I mentioned in the beginning of this post?
First of all, open-source pays. And it pays a lot. There are various ways people are earning money through open source, and if someone keeps working on it, he/she will surely be able to earn too. But before I talk about the money aspect further, I would like to point out a few other benefits, which I believe are much more important than just money:
→ Knowledge, Experience: Of course, the evergreen points of getting knowledge out of work, and that always helps. But that is not all. In my personal opinion, contributing to open-source is the best way for a beginner to start getting experience. Why? Because of the fact that the internships one would look for, or just simple paid projects would mostly be under corporates, looking to get a whole lot of work and value out of you. And even though I have got extremely supportive managers and seniors in every internship I have been in, getting into one of them is not an easy task. Due to a large amount of aspirants, you would often be up against people having months, if not years of experience already on them. Hence, getting to work on a real-world project becomes difficult. Open-source provides the perfect platform to counter this. In this community, no matter how less work you put in, you are always an asset. Hence, the pressure is way low than an internship and learning experience can be much better. Due to this, it becomes the most effective way to gain more and more experience and get to work on an ever-expanding number of real-world projects.
→ Value: One of the most important factors of working in this domain. The amount of value you get will be amazing. This value can be from companies, individuals, owners of these project, and the programming community in general. Having a good open-source profile is always a big plus.
→Professional Network: This is something I have experienced myself a lot. When you work on projects online, you collaborate with a lot of people. And this collaboration, of course, includes a lot of communication. During this communication, it is obvious that a lot of professional links are formed. And hence, I have got people from London and Amsterdam in my active LinkedIn connections. Of course, you never know when your professional network may end up helping you to an extent you can’t even imagine.
→Opportunities: This point is closely related to the second point in this list(value). Specifically, value from companies. A lot of companies, including industry leaders like Google pay a lot of attention to open-source. So much so that one of their most prestigious programs for students, GSoC(Google Summer of Code) is completely open-source based. You can only get in if you have a good open-source profile, and then the project you work on is also open-source. This shows the importance of this domain in the industry at the moment. And the GSoC is not alone in this list, there are hundreds of prestigious internships out there looking for people with good open-source skills. Outreachy, MLH, Linux Foundation are just some examples. The reliance of these companies on open-source is just a reflection of the amount of value it has out there in the world.
And of course,
You get paid. The thinking that open source cannot pay you is completely wrong. Once you reach a good level, there’s a high chance that you are going to get hefty amounts from various sources for your work. How? Internships, Sponsors, Payment by companies: there are endless ways. A large number of people have worked really hard to make a system that ensures that people do not refrain from giving their time here just because it does not offer money. It does. Even the internships I talked about just now? They pay very good amounts to their interns, and a stipend of $6000 for 3 months by Outreachy is just one example.
Okay, I’m convinced. How do I start?
This is the question that I was confused with too, and was consistently doubting the ways I was following until I made my first contribution. But the thing is: you just need to follow the most straight forward method you can think of. However, before I jump to that, should we not know what all skills are required before we see how to do it?
The answer is nothing. Until now whatever I said makes it feel like you need to be good at programming to contribute to a project. Because of course, softwares are made up of code. But the catch here is: softwares are not made up of JUST the code. There are various aspects to a single software being launched into the market. The design, content, the documentation for using it, even reporting bugs is an essential part of a software. Do any of these require coding? No. You just do whatever you are already good at, and contribute to the project that needs you. That’s all.
However, considering everything I have said in this article is heavily about programming, it would be extremely unfair to ignore that aspect here. Though jumping into open source, in general, does not require building some new skill as such, jumping in as a programmer does have some requirements. Let’s list them out:
- Git: Git is officially the way of handling your software. It is not a language with which softwares are made, it is simply a tool that helps you keep your code in check. Using the power of git, you can create checkpoints in your code or make branches, which essentially means work on your code while keeping the previous version intact to ensure you can revert back if needed. Essentially, it is the version control system for your software, and as we see in the next point, git is extremely important not for developing the software, but for collaborating with others while doing it. And considering collaboration is the most important thing while doing open-source, git gets a similar status.
- Github: Github is the website where all of the open-source hosting takes place (it is not the ONLY place, but is undoubtedly the leader). That is basically the UI version of git and when closely integrated, it becomes the resource completely carrying the load of making collaboration possible. Hence, it becomes as essential as git in the workflow.
- Of course, a programming language. When contributing to a software, in the end, all of it is just code. So it would be essential to know the language the code is written in for obvious reasons.
That’s all. Most people aiming to start out as programmers already know some programming language, so the only new skills needed are git and Github. However, the good thing is: learning them is extremely easy, and cannot take more than 2 days, if not just one. Find a good tutorial on YouTube, and you’re good to go.
Now, about the procedure for starting. The only difficult part in the whole procedure is finding a software you can contribute to. As a beginner, it might take you some time to actually find the one which requires the skill set you possess(in terms of the programming language, of course). The best way to do that is just to keep looking. You can do that manually, or you can look for codebases having issues with the tag “good first issue” on Github (my suggestion: look for a package called “good-first-issue” on Github, that got me to my first software too). That will surely get you to the right place. Okay, you find your software. What next? Well, that’s all. You just make a copy of the code on your system, make the changes you want to make, and put the code back on the website. How to do that? That is where git and Github come in. Once you have learned them, doing these steps will be a breeze. And then congrats, you have made your first contribution and are now an open-source developer!
Great. So that was all the things that I wanted to share with you today. Signing off, hoping this article helped you understand why 40 million people are working on 28 million projects for “free” every day (and probably encouraged you to become one of them).