Welcome! If you’re here, I assume you’ve never contributed to open source. You might not even know what “open source” is. If you’re a software developer who wants to work on interesting projects, and help develop software for the community, this post is for you! Let’s get started!
Open source, as the name suggests, is code that is out in the open - accessible and visible to all. What can you use it for is a different question - that depends on what license covers that code. I’ll not go into much detail, but what differs among the licenses is whether you can modify the code, distribute it, make commercial use out of it and the like. Some famous examples of open source softwares are Mozilla Firefox, Ubuntu, VSCode, VLC Media Player, Python, React, and many, many others. You use open source software all the time, even when you don’t realize it. Google Chrome is based on an open source browser called Chromium, which is basically the same as Chrome, but without all the Google services and some extra functionalities that Google added into it. Microsoft, Whatsapp, Facebook, Uber, Twitter - all use React. Open source is taking over the world, really. It’s hard to over-emphasise it’s importance.
You do! Well, I mean people like you and me, who know how to code, or are willing to learn about it. Well, even that is sometimes not true, because even though projects can be open source, doesn’t mean you can always contribute to them. But most open source projects welcome new developers with open arms. Most open source softwares are available for free, and it takes a great deal of effort to maintain them. So if you know how to code, and can learn about the technologies and frameworks being used in an open source project, you can contribute to it! There is always a community around an open source project - on Slack, Discord, IRC, mailing lists.
Note: If you already use an open source software, and want to fix something in it, add a new feature, or just want to contribute to it, you can skip this section. You know what you want! Or if you’re like me, and don’t have anything specific in mind, read on.
So this is it, this is the hardest part of starting to contribute to open source. First, let me walk you through the two “types” of open source organizations/projects that I feel exist. This is not set in stone, just something I’ve come to realize over time:
React, Docker, Kubernetes are some projects in this list.
The entry barrier to contributing to these project is very high. There are professionals who work on these projects as part of their job. These projects requires esoteric knowledge, and good familiarity with the code base. A beginner to open source will probably find it very difficult to understand it and contribute to it.
Firefox, Ubuntu (GNOME, really), KDE, Django are some popular examples in this list.
Well, these aren’t particularly easy to start contributing to as well. There are a lot of experienced developers working on these projects too. The difference is that it is mostly not a part of their job. So, there are certain issues, bugs, or features that are low-priority for now, which they set aside for someone else to do, or for themselves to do later. These are sometimes mundane, and maybe easy to do, and these are the ones you want to search for. Once you find an easy bug to solve (or easy feature to implement), you will develop an understanding of the code-base while working on it, which will help you move on to the next bug, the next feature and so on. Many times, you discover a bug while solving a bug, and you can take that up after you’re done with your current task. You can see how it can spiral into you becoming a major contributor to the project if you’re willing to give it time and effort.
So, you now have a project to contribute to. Don’t worry if you’re not sure whether or not the project is perfect for you. It’s good for now. Here is a list of things you need to do after this:
- Search online for “Contributing to <project name>”
- Navigate and end up on a guide which tells you how developers can start contributing. This guide will contain informatino on where the code is hosted, how you can clone it and build the project
- Open the downloaded code in a good IDE (VSCode will work for most projects), and get scared about it’s complexity (NOT)
- Search for a bug or feature to get started
The common problem is - “What bugs are suitable to solve for a beginner like me?“. Well, many projects have a “Good First Bug” section, were you can find issues that do not requires extensive knowledge of the code-base. If you can’t find it, ask the community! Note: You will most probably find these to be tough as well. Maybe you won’t be able to understand the bug at all. Don’t stop. Pick up a bug, and ask the community what it means and how you can fix it. Just stick with it. As long as it takes, build the project and solve that first bug. You’ll find your way after that.
There’s an incredibly easy way to get started with open source - contributing to documentation. This might not be what you are looking for, but it’s a really great way to get to know the processes and people in the community. So, if you find a typo somewhere, or notice something that can be better in the docs, fix it! In an open source project I tried to build, I felt the instructions were not clear enough for beginners like me, and I made an edit to their building instructions. It’s as simple as that.
Contributing code to open source is not easy. Any project you choose has code written by other people, and it’s never easy to read and understand code written by other. Heck, it’s sometimes not easy to read code written by you some time back. There are docs, references and the community to help you out, for sure, but no one can (or will) help you actually write the code that is required.
The point I’m trying to make is that, yes, everyone can contribute code to open source, but you have to put in the required time and effort to do it. The journey can be bumpy from the get go. For example, let us suppose that you’re motivated to contribute to Firefox after reading this blog post, and you decide to contribute to it. You clone the code, and you try to build it. The steps to build it are right in front of you. You type in the first command, press enter, and you get a weird looking error - missing dependencies, version errors, and what not. Instead of giving up, try to look it up online, ask the community, and solve it. It will take time. I spent almost two weeks just trying to build my first open source project. So, stick with it. Once you get past the errors, there’s pure adrenaline, and great motivation.
Remember: Give it time!
That’s been it! I hope you have some valuable takeaways from this post. Let me know in the comments if you want more clarification on anything. Literally, anything at all. I know how daunting it seems at first, I’ve been there. This is another lesson, by the way. We are often scared by the vastness of the project, and we don’t ask what we think are “stupid” doubts. Don’t worry - everyone knows it’s tough. Ask freely, and you’ll get answers.
Do let me know if this post helped you!