Share: Facebook icon - Twitter icon - LinkedIn icon

The many ways of helping Open Source (and Free) Software projects

Published Wed Jan 10 2024

Tags: programming


Did you know that there are more ways to contribute to open source projects than just coding? If you want to help, there are several ways to do so! I have done a few of these myself, and I think you might get great joy from it to.

NB: I will use the term open source software going forward in this article for convenience. The suggestions below will off course also be valid for free software.

Those of you needing an extra motivation: Showing that you have worked on open source projects can be beneficial for your career. Some people use it to show that they can code, collaborate with others and so on. This can prove quite interesting for your possible employer, and might give a better first impression than other candidates. Many of the below suggestions shows activity on your Github profile or similar, which can provide a good impression. To me, contributing to open source has always been about the joy of programming, learning more about the inner workings of various tools, and improving the software I use. There is no shame in having other motivations though :)

In case some of you are curious on how to find projects to contribute to, here is a few tips:

Donating money to projects or developers

Donations is probably the simplest ways of helping projects and creators out there. Sometimes you might want to help individual developers or creators? Or maybe you want to help a bigger project have funds to manage the costs of their website? No matter what, a donation can help a lot in covering costs and motivate people. It costs money to live after all…

A lot of projects and creators have a donate button if they allow donations. On Github, you have a Sponsor button if the user or organization allows donations. A few example of creators and projects allowing donations include:

  • Jeff Geerling is an author, content creator and developer. He makes videos on YouTube, assists with open source projects and more. Donations will help him sustain these activities, which I think we would all prefer instead of him doing a classical 9-5 (unless he himself wants to off course) :)
  • DevkitPro has toolchains for various game consoles to help you develop your games and applications. It has been alive for many years, and has provided homebrew developers with tooling to help bring their creations to life. Whether you develop for Nintendo DS, GameBoy Advance, Nintendo Switch or something else, DevkitPro has a toolchain for it! Their donation button found in each repository on Github, and some people might therefore not find it right away. I prefer to use Patreon to support them.
  • emacs-lsp is a collection of Language Server Protocol (LSP) and Debug Adapter Protocol (DAP) tooling for Emacs. The most important one (in my view) is lsp-mode which provides language server integration in Emacs.
  • Bevy is a game engine for use with the Rust programming language, most famous for using an Entity Component System (ECS). There are many developers you can support to bring the progress of Bevy forward, so compared to others, there is not just one button here.
  • Homebrew is the best package manager for Mac OS X! Like many other projects, they have hosting costs, continuous integration pipelines and more.

Issues - Help out by reporting bugs or suggesting features

Most projects have an issue tracker where you can report issues. This might not be exclusive to open source software, as some commercial proprietary software also allows you to report bugs. In some issue trackers, you are also allowed to suggest features or improvements as well. Posting issues is not that hard, but you should remember that you want to help the project and the developers. If you just say something along the line of "Your system doesn't work", or "The code in file X is super ugly", or "you are stupid", does not help anyone… I should not have to tell you this, but some people do write comments like the ones mentioned. Remember that a lot of the time, you are getting something for free! Even with errors, someone did work in their spare time (unless they were paid by a company, which is rare for more niche and cool projects).

For bugfixes, you should make it really clear what the bug is about. The people who will fix it will need to be able to reproduce it, and helping them do that should be your primary concern. Here is a few tips to have in mind when posting bug reports as issues:

  • What steps did you take to encounted the bug? Explain briefly how it happened.
  • Did you get any error messages in any way, shape or form? Post them in the issue.
  • Does the program have any output? Is there anything wrong in it? Or can it be relevant to the issue?
  • Does the application have any GUI or features where it is easier to post a screenshot? Then post that screenshot as well!
  • Include logs if the project prints or emits them. If you are unsure on how to do it, you can always report your issue without it and ask how.
  • What system are you using? Some projects might behave differently on different platforms, operating systems or hardware. In some cases, it will be relevant for the maintainers and contributors of a project to know.
  • Are there any other applications on your system that might interfere? If you know of any, don't be afraid to quickly mention them. (usage of ports, possible file locks etc.)

(Not all of these will be relevant in all projects, so you need to pick the ones that apply to you. Consider them general hints. These might be based on my experience, so feel free to disagree in the comments or on social media.)

For features and improvements, you should describe the suggestion as good as possible. If the application is a graphical one, maybe you can make a quick sketch to make it clear what you are suggesting?

Translation/Localization

This one probably don't need a lot of explanation? You translate from one language to another, either by adding new languages or improving the existing translations. Many projects needs this kind of work, as they have a goal of being available in multiple languages. Some examples include:

  • Ubuntu. Yes, the GNU/Linux distribution. They rely on contributors from all over the world to make their distribution available in many different languages.
  • Unciv. This is a project that makes an open source remake of Civilization V. They provide a getting started guide for translators.
  • KDE. KDE contains many projects like the famous desktop environment and window manager. There are also various tools like the Kate text editor and their Konsole terminal emulator.

There are also sites like TranslateWiki.net that helps you find new projects depending on languages you know. I have not had much experiences contributing in this way, so my example list is a bit short here…

Sometimes the translations are delivered through pull requests, but other times there will be other ways to deliver your work (e.g, e-mail). Read the contributing and/or translation guides for the project to know for sure.

Helping by coding bugfixes, features or something else

Probably the most obvious one.. This is what people usually think about when talking about open source contributions. There is not much to say here; you contribute by writing code. How do you find the work to do? There are two main ways:

  • You find an issue (e.g, bug, feature etc.) in the projects issue tracker. You make sure that no one else has already delivered a pull request on it, which you can see in Github if the writer of the pull request have referenced the issue. Some projects also prefer to assign users to projects. Look around the issue tracker to see how your chosen project does it. Some projects make it easy for new contributors by tagging their issues "Good first issue" or similar.
  • You know of a bug or feature you really want to work on that is not reported. Not all projects allow it, but some smaller projects will. Many bigger projects like to discuss possible bugs or features first in an issue. Other projects will allow it, especially if they have less activity than the big ones.

The most important thing here is really to be familiar with the project. You don't need to know the code in details, as you can learn as you go along.

Some examples here to see a few different ones:

  • Quarkus. A framework for building web applications in Java (and other JVM languages like Kotlin). They provide a label called Good First Issue to help newcomers contribute to the project, and also have a guide for contributors (including guides for building the project, running tests, coding guidelines, and so on).
  • Rust Analyzer. The official language server and development tools for the Rust programming language. There is an issues view to find what to work on. You can also see which channels to use for discussions in the readme.
  • Unciv. The open source Civilization V project I mentioned earlier. They also have a getting started guide for coders! (mostly just building the project locally in this case).
  • lsp-mode. A project previously mentioned as part of emacs-lsp. This is the main language server integration component. There is off course an issue tracker, as well as a contribution guide. If you can't tell already, I LOOOOVE Emacs related stuff!



Hopefully you have now seen some way that you can contribute to the fantastic world of open source software! Maybe you also got some tips on where to get started if you are new to it? If I missed anything, or you have any questions, feel free to post them in the comments below! (enable your JavaScript and let Commento load its snippet if it's not showing!)




Other posts that might interest you: