First steps in free software contributions

Github

When I was in college, there was a free software group where, I remembered, some of their members were contributing to projects like TOR or the Godot Engine. They encouraged everyone to contribute to free software, as it was, firstly, a fun activity. And additionally, an excelent way to to gain knowledge and, ultimately, grow as a software developer. Some of them are now working at big companies like Red Hat.

I figured only good things would happen if I contribute, so I started navigating github for projects to contribute. The only problem was I had no idea where to begin, no idea what I’d like to work on. There are so many repos in github that you can’t possibly get to know them all. You have to find the ones that resonate with you the most. To find what was available, I made a visit to the rust awesome-list. Awesome lists are lists containing tons of resources/libraries for a specific programming language. I have always liked Rust, so I thought I would begin contributing to a project written in rust. Besides, the rust community is pretty active and friendly, so I thought it was a good place to start.

Awesome lists are a great resource to learn and find new projects in which to work on, but you can easily get lost in them. There are hundreds of resources over there, and having to go through them all, multiple times, can be exhausting and time consuming. That’s why I considered creating my own personal list. I have gathered a reduced number of projects I would consider working on in the future. Most of those are programs/libraries that I already use (You may not be aware, but there are tons of programs that you already use that are free software). Because I have a basic understanding on how they work, I feel much more motivated make contributions to them. The approach I usually follow is, first of all get to know the ins and out of a specific program; learn about all the features it contains, learn to use them, etc. While doing that, I will most probably find bugs and come up with additional features the program could benefit from. The last thing to do would be to get to work!

You also can search for projects in github (or any other repository platform). Go take a look at the search syntax to find the results that best suits your interests!. Githubs allows you to filter projects containing issues with the “good first issue” label. Those would be a great place to start, as they have been given that label by the community in order to attract new beginner contributors.

The general process of a contribution goes like this:

  1. Find issue. Don’t go looking for an issue with an interesting title. Chances are, most of the issues are about stuff you don’t know. That’s okay! You still don’t know the project. Go try to solve it as good as you can; take your time and ask all the questions you find relevant. After some time, you’ll start seeing issues look less intimidating. Some good first issues can involve making unit tests, refactoring existing code, improving documentation or fixing bugs. All of them are great ways to get to know the project’s codebase!

  2. Comment on that issue. Write a comment asking to work on it. One of the project’s collaborator will see your comment and, most likely, assign you the issue.

  3. Fork, fix and PR. You probably won’t have editing privileges in the repo. What you have to do instead is fork the repo, thus creating a copy of the repo that you’ll be able to modify. Once you have fixed the issue, commit that to your fork. When you navigate to your fork’s repo on github (or the platform where the project is hosted at), you will see a button you can click to make the pull request.

I don’t want to go into much more detail about the technical aspects of making a contribution, as that falls outside the scope of this post. But if you are interested, you can read more about it here.

My final advice is to live in the present. Involve yourself in online communities; hear what others are doing: what projects are they working on? which libraries are they using? which frameworks?. For that you can:

  • Look for programming communities in Discord. They usually have a different room for each programming topic (i.e. os, lang-dev, game-dev, web-dev). I don’t particularly like that it is propietary software, but it is undeniably a great place to learn and get to know new, skilled people.

  • Use forums (i.e stackoverflow, reddit, etc.). Forums are not as popular these days as chat-like platforms like discord are. However, I consider them to be great! To begin with, forums are indexed by search engines. That’s a pretty good thing when you are looking to solve a particular problem. Also, if you ask a question in a forum, it won’t get cluttered by others’ messages like it does in chats. And yet another good thing: I find answering questions to be quite fun! plus, you get to learn a lot!

  • Read news and posts from the community. I particularly like Lemmy (federated Reddit alternative) and Hackernews. Also, Youtube channels like fireship are great to maintain yourself updated with the latest news of the tech industry.

  • Watch conference talks, live coding streamings,etc. You can find them in platforms like Youtube or Twitch.

  • Read tweets from geeky people on Mastodon (federated twitter alternative). This is not (generally) a learning resource, but it is another great tool to get to know the latest events in tech. Also, many of this people like to share their work, which can give you ideas for your next hobby project.

Contributing to free software is a rewarding journey that benefits both you and the developer community. Remember that even small contributions can make a significant impact on the world of free software. Also, keep in mind that the greatest projects out there also had a beginning. So, improve, embrace the learning process, and become the best version of yourself! I hope you enjoyed reading my post!