Changing, editing, adding to, or rewriting the work of others can be daunting. This can be doubly said for Free and Open Source Software Projects, where code and documentation is often the product of many hours of volunteer work by many people. But these projects would not move forward if not for the communities surrounding them. That's why I've outlined a 5-step process for getting involved in FOSS projects. It's not a perfect system,[0] and it's not without exceptions, but I think it outlines the basics of what a newbie needs to get started.
1. Switch to Free Technology
Many people talk about cutting all proprietary software out of their life alltogether, but for most this is impossible. Whether you have to use Microsoft Teams for work or have a major Youtube addiction, going completely Free is just not attainable for everyone. That's why small steps are important. My first introduction to Free software was the Pine64 Pinetime.[1] I was looking for a new phone, and came across the Pinephone.[2] I didn't have the means to get a Pinephone yet, but the Pinetime development kit was a low-cost introduction to embedded programming. Mine soon arrived in the mail, and I wasted no time in getting InfiniTime[3] updated and paired to my Android device. This introduces an important point; you don't need to jump into the proverbial FOSS deep-end.
Do you currently use Microsoft office on your PC? Give Libreoffice[4] a try! It may not be for everyone, but I found Libreoffice to be a drop-in replacement for Google or Microsoft office products. Familiarize yourself with Libreoffice's keybindings, or even take a look through the code. Everyone starts somewhere. It's important to find a project that is large enough to have community support, but small enough to quickly accept new contributors. Find software that is applicable to your needs, because as you use that software you will inevitably find features that you wish it had or issues that need to be fixed.
2. Join a Community
Now that you're familiar with a FOSS project, get involved in the community. Join a mailing list, IRC room, or Matrix chat.[5] Many Free software communities have chat rooms or other means of communication, and watching these is a crucial step to getting involved in development. If another user has a question on how to use X feature, answer them! Community support is a huge part of FOSS. Check in with development mailing lists or chats, and see what new features are coming down the road. This is a great time to browse through the source code of the project. Whether it's hosted on Github/lab, codeberg, sourcehut,[6] or some other version control system platform, take a look at the changelog of the product or browse through reported issues. You just might find something you can help with! Some projects have development guides or documentation. Learning the basics of how your software works will inform you on how to fix problems or add features you see missing.
3. Become a Bug Reporter
After my Pinetime arrived, I found some issues and missing features. I logged on to Github, and created a few bug reports. I got feedback and guidance from experienced developers quite quickly. I chimed in on other's issues confirming I had a similar experiece. These quick comments can help a project's maintainer quite a bit. Just make sure to search for a similar issue or ask about it in a community chat before creating a post, as to not waste anyone's time (including yours).
Another big step is requesting and advocating for new features. Developers usually have their own ideas about what features to add to their software, but community feedback is crucial to foster a healthy project. Try to think about how easy your idea is to implement, and tag the ticket as a feature request if possible. This makes it more possible to get support from other FOSS users and developers. I often think of bug reporting as a gateway to development. It's a relatively quick and simple process, but still directly connected to the project's future.
4. Start Small
Start with small, simple contributions. Creating and improving documentation is a contribution that requires little coding, yet helps developers and users alike massively. Some tickets in the project's issue tracker may be tagged with "good first issue" or something similar. This means that it's a feature easy to implement and ready for a beginner to take on. For example, LinuxPhoneApps[7] is a fantastic community resource of mobile-ready Linux apps, and was actually the first project I ever contributed to. My Pinephone had not yet arrived, but I was itching to get contributing. I saw an issue that was tagged as a "good first issue", and it was! I went through and updated the listed license for each program in the list. Something that could easily be done in Libreoffice, and helped out the project. Be sure to work closely with the community at this point. If you get stuck or have questions, community chats are a great place to get answers. Creating a pull/merge request, marking it as a draft, and asking for feedback is also a way to get answers from developers in a more permenant format.
5. Grow your contributions
After your first few contributions, you are already on a path to increase your knowledge of programming and software development. As this happens, give back to the community. You can start completing larger projects like adding new features or porting a project from one platform to another. You may be learning more than ever, but you should still work with the community through chats, forums, and email. As your knowledge grows so can your contributions. You're making Free software better for everyone!
Wrapping Up
I hope these steps can help others wanting to contribute to a project they love. I had a hard time knowing where to start when it came to software development, and I realized that you can contribute quite a bit without much programming knowledge. I'm constantly learning from the FOSS community while trying to give back to it, and I want everyone to have the opportunity to do so. Get out there and get contributing!
Links/Notes
- Of course I acknowledge that these steps may not work for everyone. I'm just trying to collect my thoughts about how I got started contributing to FOSS projects, and helping other newbies in the process.
- pine64.org/pinetime
- pine64.org/pinephone
- infinitime.io
- libreoffice.org
- matrix.org
- sr.ht
- linuxphoneapps.org