3 Contributing to Open-Source Projects
Learning Objectives
- Learn how open software development projects work
- How to contribute to open-source software if you’re not a developer
- How to start on the path to becoming a developer that works on open-source projects
Introduction
Open-source software is about the whole community and not just developers. In fact, open-source software is made better by engaging a variety of people in the development process. This chapter will help you understand how you can contribute to an open-source project at any level of experience and expertise. For those of you who want to take the plunge into open-source coding and development, the end of the chapter has a guide on how to get started.
Focus Questions
- What are ways that anyone can contribute to an open-source project, even without knowing how to program?
- What is a way you can engage with the open-source community today?
- Why are open-source projects difficult to maintain?
Engaging with the Community
Section Summary
Getting involved with open-source software can be as easy as using the software and talking about it. This section goes over some soft ways to participate in the community for people at all skill levels without having to know a single bit of code. This section borrows from an article called How non-programmers can contribute to open-source projects by Duncan McKean from October 24, 2013[1].
Using Software
The first level of involvement with the open-source community is the simple act of using the software. Find a program that is open-source that you like, that you can use, and start using it regularly so you get to know it. This could be as simple as a word processor, or something more involved like a video or audio editing program.
You should approach using open-source software differently than using proprietary software. With proprietary software, you can install it and use it without really knowing how it’s made or how it is developed. You might encounter a problem and then just give up and find another way to do what you want. However, to get the most out of open-source software, and to give back to the community that made it, it’s best to be an active user. This means not just using the software, but understanding a little about how it’s made, how to report problems, and maybe understanding the community that makes it a little bit more.
The next step is to start becoming more familiar with the community that maintains the software. Often, these projects have websites that describe the project and how it’s maintained. We will use Wikipedia as an example since most people are familiar with it.
Wikipedia is run on a piece of software called MediaWiki. You can find it in the link at the very bottom of any Wikipedia article. The MediaWiki project page describes the project, has instructions for how to set up and install MediaWiki, how to edit and use MediaWiki, and then a guide on how to develop and extend the code. They even have helpful guides on how to start coding for a MediaWiki project if you are new to development. The project page also has information for if you are already a developer. The site also has news that describes updates to the software and what was included in that update. A good first start for getting involved in open-source software community is to start reading these updates and understand how software develops over time.
Join a group
Join a membership or just a users group for a particular piece of software and follow the discussion. Answer questions if you can. Post questions if you run into problems. Steering committees, standards group, advisory groups, working groups. Sometimes, just being at the table to discuss things is a huge help to the community.
Bug Test
As you use a piece of software, you will inevitably find problems with it. That is actually a great thing because you can then provide that information of the problem you encountered back to the community so that someone can fix it.
This requires you to find the places where that software’s community discuss bugs and problems. For the MediaWiki page, they have a bug tracker called Phabricator. On the page for the bug tracker, the community has guidelines for how to report software bugs, how to report security issues, and even how to request that a new feature be created. Have you ever sat down with a piece of software and wished it would do something specific for you? With open-source software, it is possible to request these of the greater community. It might be that other people also would like that enhancement, so you might get what you want.
Write Documentation
With proprietary software, you are almost always guaranteed to have documentation already written when you install the software. With open-source software, often documentation is the last step in the process. Developers are busy writing code, and many don’t have a passion for technical writing. A simple and effective way to contribute to these projects is just by going over the documentation and making it better, making it more clear, adding parts that are missing or writing out tutorials.
Other Ways to Contribute.
If you have experience or expertise in more than one language, then you might be able to help with translating either commands in the software to a new language or translating documentation.
If you are a librarian who does user experience (UX) work, you could do some UX testing on the software and provide that as feedback to the developers.
If you are a designer, you could actually help by designing the interface to be more appealing or modern.
If all else fails, and you have the funds, you can often support a open-source project by donating. MediaWiki, for example, is run by the Wikimedia Foundation which has goals to support education worldwide and fighting legal battles to make free knowledge possible around the world.
Development for Open-Source
Section Summary
In this section, we will talk about more direct ways of contributing to open-source software, like learning to code. This section borrows from A developer’s guide to getting into open-source by Radek Pazdera from Feb 19, 2015[2].
Learning to Code
You don’t have to have a computer science degree to code. The degree does help people understand the more complex aspects of software development, and it gives them forced practice. However, much like art, you don’t need a degree to be good at it and contribute to a worthy cause.
In an ideal world, you would find a project you want to contribute to and start down the process of learning the language it’s written in. However, not all languages are easy to learn. The ideal first language would be one that is relatively easy to learn, with lost of open resources so you don’t have to spend money to learn, and also teaches you the basics of programming. The language we recommend is Python. Python is a very versatile language that is designed to be structured in a way that makes the syntax easy to learn, and easy to read. Because it’s an established open-source programming language, there are a lot of high-quality resources out there.
If you want to get started in Python without having to download anything onto your computer, you can use the w3Schools’ Python Tutorial. This will get you a good introduction to the language, some experience coding, and all without having to download a single thing onto your computer. However, to get the most out of it, install Python on your computer and use the things that you learn in the tutorials to make a simple application. Try to use everything you learn. The application doesn’t have to make sense, it just has to help you remember what you’ve learned. Instead of paying for the certificate, try to start making your own portfolio of your learning.
Programming is all about learning the logic of how things work in programming. Once you’ve got a solid foundation with Python, you can then look into what projects you are interested in contributing to, and what language they are coded in, and you can find tutorials on those languages. You’ll find a lot of the concepts are the same, but the syntax that you use to express them are different for each language.
Choosing a Project
One of the most important parts is choosing a project that you care about. Preferably, it should be a piece of software that you use often and are familiar with. Being invested in the product will help your motivation stay high.
Learning the Code Base of a Particular Project
There are lots of good guides on how to get familiar with a codebase in general including the article: How to get familiar with a new codebase by Perikis Gkolias, published March 28, 2018. In this article, Gkolias talks about how this is a skill just as every other part of development is a skill, which means it can be practiced and you will get better at it over time. The first step Gkolias recommends is to read all the documentation available. Look for documentation on project pages, wiki pages, or in the code repository. Next is to read any notes commented out in the code itself. If it is a large piece of software, then try to focus on one segment of it and figure out how that works, then move to another. Break up the code into digestible bits that you can fully understand.
The next step is to understand the code’s dependencies by understanding how it is built. To build a piece of software is to create the environment it needs to run and add in all the software or mechanisms it’s dependent on. Gkolias suggests that once you have the software successfully running, start using it as an end-user, and then look at whatever logs are produced. This will give you an idea of the order of things, or what sequences functions happen in.
Gkolias’s next suggestion is that you start understanding the developer’s logic of the system, and start mapping out or drawing out the logic diagrams. These are visuals that help you understand how information flows in the system.
After you have an idea of how the system flows, then you can start trying to solve a bug or a problem. Something small and manageable.
Start Small, Form Partnerships, Develop a Reputation
Once you understand the codebase and are familiar with how things work, the next step is to get into the loop with the other developers on the project. Developers communicate in different ways in different projects, so just try to find where and how people are communicating about that one. Join any mailing lists available. You don’t have to read every email that comes your way, but you’ll start to see how things work with the community. Don’t hesitate to make direct contact with the developers or maintainers in asking how to get involved if the way is not immediately clear.
Make One Small Contribution, Then Make Another
Read any code submission guidelines, and follow them. Follow any naming conventions that the community has set out, and in general make it as easy as possible for the maintainers to use your code. Don’t get discouraged if someone reviews your code and rejects it. This is a learning process. Use it as a learning opportunity and take some extra time to try to understand why it was rejected, and get a sense for what the maintainers want.
Chapter Summary
In this chapter, we talked about various ways that anyone can contribute to an Open Source Software Project.
Links to External Resources
- A review of how most of open-source development is done by vendor supported developers: https://www.infoworld.com/article/3268001/open-source-isnt-the-community-you-think-it-is.html
Exercises
Document Writing Sprint
One of the problems with open-source software is a lack of documentation. One of the ways that communities try to address this is by having documentation writing sprints where a group of people gets together either physically or virtually, and contribute to filling out the documentation for the software. Sometimes this documentation is housed in a wiki, sometimes it’s organized somewhere else. You can use the DuraSpace DSpace Wiki to see an example of how documentation is organized.