by Piotr Gaczkowski
The Definitive Guide to Contributing to Open Source
I’ll tell you all I know about Open Source. Let’s start with something simple. You know what a product is? A product is something that you can easily consume, such as a burrito at a restaurant. But to create this product, you need to take some steps. At the restaurant, you have a chef who has a recipe for this burrito. They always follow the same recipe and make it from the same ingredients to ensure appropriate quality every time.
Contributing to Open Source can help you get into the tech field, switch your career or improve your current one. All while helping the community!
At most restaurants, if you went to the chef and asked, “I’m sorry, I love your burrito; could I get the recipe?” they would refuse — this is not Open Source. Open Source is when, in addition to the product, you also have access to all the ingredients and the recipe, meaning you can replicate the whole burrito right at home.
Now imagine you start making this burrito, but you come to the conclusion that you want to cut down on the meat. So you replace it with avocado. In that case, you take the recipe, exchange the meat for the avocado, follow the rest of the steps to the letter, and check what comes out.
It may turn out that your dish tastes better than the meal at the restaurant. If the restaurant were run like an Open Source project, you could then go to the chef and say, “Hey, your burrito is great, but I’ve added avocado and now it’s even better! You can add it to your menu.”
The role of the chef is that of product maintainer. They may accept the modifications or they may decide
that the avocado is a bad idea and does not fit the concept of the restaurant. Either way, by sharing your modifications to the project, you’ve just become a contributor.
What Makes a Project?
The Firefox browser is an example of an Open Source project. It’s made up of thousands of lines of source code and of instructions on how to turn this source code into a usable product, like a Web browser. This code is available publicly, so everybody can fetch it, read it, audit it, or build it. Each person who wants to modify the behavior of Firefox can make changes to the source code and build a customized version. Furthermore, everyone can send those changes back to the project’s maintainers.
But there is more to Open Source projects than just the code. We also have a user interface and graphic design. And yes, even terminal programs such as Vim editor have graphical interfaces.
You don’t need to code to contribute to Open Source!
Aside from the interface, there are also user interactions, usability, and something called User Experience (UX) — all of which have been gaining popularity in recent decades. If you have a background in design, fine arts or psychology you can find your niche with UI/UX. The next thing that comprises a product is the media, including sounds, graphics, or videos. Not all projects have these, but they’re not that rare either.
Documentation, however, is one of the parts that is often overlooked. An easy way to make a contribution is to improve the documentation. Copywriters should feel at home with those topics. Text assets and translations also present an easy entry.
Then, there’s marketing, which is also often lacking in Open Source projects. If you can fix this, the whole community benefits. Help a project with marketing, and this will also lure more potential contributors.
And finally, there’s the legal part, a rather rare component that mainly concerns huge projects. There are lawyers who deal primarily with Open Source issues, and most of them volunteer their time.
If you can write prose, draw, make music, are a good marketer, or a lawyer: Open Source community needs you!
If you feel incapable of designing, making changes, writing licenses, don’t be scared. You can make another kind of contribution. You can report an error or propose changes to behavior or appearance.
You know what’s best? If every member of the community contributes a bit of time, a bit of effort, and a bit of personal experience, the whole community gains a terrific product, often free of charge.
Don’t feel like a creator? Submit a bug report or issue a feature request!
Why is it worth my time?
Why is it worth contributing to Open Source? Why should you spend your time writing some proposals or code or making translations instead of going for a walk? There are several reasons. All of them stem from the premise that contributing to Open Source is publicly visible. Everybody can see what everyone else is doing. And that’s great!
You increase your competencies
If you are writing a piece of code, designing an interface, or creating graphics, you are learning. This is a great exercise for those looking for a career change. In Open Source, nobody cares whether you work as a senior developer or as a gardener. What matters is the quality of the contribution you can bring. And once you prove yourself in an Open Source project, you will have gained some valuable experience. No longer should you feel like an impostor who just finished a boot camp. You will be an established member of a community with a track record that anyone can check.
This works even if you are stuck with one technology, but imagine your future with something completely else. Say you are a COBOL developer dreaming of landing a UX job? Just start improving UX in Firefox and send your contributions. Once they’re accepted, you can add a new position to your resume: UX designer for Firefox project. You’ve just learned something useful and improved your credentials.
You Improve Your Visibility
When you join a community, such as an Open Source project, you immediately gain new acquaintances, meeting others who are also involved in the project. You can learn from them, and exchange ideas with them.
The second benefit from joining such a community is that all of your other channels automatically become more visible. For example, visitors to the Open Source project you contribute to, can learn of your YouTube channel or find you on LinkedIn to offer you a job.
This brings us to the next point.
It is a common practice nowadays for IT recruiters to check out GitHub in search of new talent. By making your code public you actually create a real-life resume anyone can verify. No need to contact your former employers or clients. And if your GitHub profile links to your LinkedIn profile or your homepage you are easily approachable so the chances of you landing a job of your dreams increase.
Keep in mind, you don’t even need to have commercial experience in that particular field. For those recruiters, your Open Source contributions are just as valid!
You Find Employment or New Clients
If you are really good, you can get a paid offer to work on an Open Source project. This is reserved mostly to those projects that have some stable financial backing, either from a corporation or a nonprofit.
You Find New Employees
This also works the other way — you can find potential employees. If you do something that is cool and useful to others , publish it as an Open Source project! There is a chance that someone will want to improve your project or work for you.
You Do Something for Others
Another advantage to being a part of these projects is the opportunity to do something for others and gain their gratitude. All the “thank you” notes you receive will make your time seem more than worthwhile — — and you may have even contributed to an awesome project.
You Get Access to Nice Statistics
Are you a fan of gamification? Then this one’s for you. Some people really like statistics, and for them GitHub offers something special. Each action we take in GitHub — the largest Open Source community — is marked with a green square on a huge calendar. The more things we do any given day, the brighter the square. When we contribute for several consecutive days, GitHub will count it as a streak and keep your score for future reference. This acts as a motivation to beat the best scores so far.
How Do You Find Your First Project?
There are several ways. First of all, the big players like Firefox or Android have a high user base and require a lot of changes and improvements. Once you introduce a change to such a project, your change becomes visible by millions. You can visit GitHub and see what are the most popular repositories. For example, at the moment of this writing, the number one most starred repository is freeCodeCamp.
I wouldn’t necessarily recommend this first approach if you are a newcomer. The huge projects’ main advantage is also their main curse. Everybody wants to contribute, but there is a limited number of maintainers who are able to respond to your requests. If you really want to make an impact, you can instead try smaller projects that are on the rise. GitHub Trending is a place to find such cases.
Why is it a good approach? The effort required to make an actual contribution is pretty low, so there is a high chance of getting a dopamine boost resulting from a job well done. This dopamine boost should trigger the next contribution and so on. Once the ball starts rolling, it’s hard to make it stop.
The final approach I recommend is piggybacking on a huge Open Source event. One such event celebrated each year in October is Hacktoberfest. The participants are expected to make five Pull Requests on GitHub (that is, make five contributions). Everyone who fulfills this task gets nice perks from the sponsors (like t-shirts and stickers). To make it easier for the participants, some example projects are listed on the website.
Another similar event is Google Summer of Code. You can check out a list of projects from the past. Maybe one will inspire you enough to make a contribution! Oh, and then there’s an Awesome First PR Opportunities list!
If you want to sustain-ably contribute to Open Source, find something that you use regularly. This way your contributions will also benefit yourself. This is by far the best way to ensure quality work.
What Makes a Contribution Valuable?
We now know why to contribute, and we know where to contribute. Now let’s focus on what makes our contribution valuable? A worthless contribution will not be accepted, so it’s better to prepare!
We Should Respect the Working Conditions
Above all, we should respect the working conditions of others. In many projects, you can find documents such as
CONTRIBUTORS.md that present the preferred way of making contributions. If the project you wish to join doesn’t have a similar document, check other possible places, like the
README.md or the project’s wiki page. Get acquainted with the rules and make sure you understand and obey them.
If your work doesn’t meet the conditions outlined in the contributors’ guidelines, it will probably be declined even before the review. Those guidelines and conditions serve to protect the time of maintainers. If you can’t follow them, the maintainers may assume you are just as careless with the other work you do.
Consider How Valuable Your Contribution Is to Others
Once we know how to behave, let’s consider how valuable our contribution is to others. Imagine for a moment, a company that produces tailor-made suits. You bought a suit at its store and then went for a beer. Inspiration strikes, so you attach a bottle opener to the suit at home. This way, each time you go for a beer, there’ll be no problem opening it.
In an Open Source fashion, you go to the tailor and present your great idea of attaching the opener to the suit. Now, regardless of the ingenuity of your idea, the tailor, who acts as a project maintainer, may not see your addition as fitting to his concept. It doesn’t mean that your work is weak or worthless; it just means that some features appeal only to a small audience. And since each feature needs to be maintained and secured, adding to the cost of the project, the project maintainer has to make sure that every feature provides a worthwhile amount of benefit.
Be Verbose in Communication
If it’s not a change that you are contributing but a report, be verbose. Write down everything you know to explain the context in detail. This is particularly important when reporting errors. The more context you describe, the easier it will be for someone to fix it the way you want. Keep in mind the possible use cases and expected behavior, but leave out any details not necessarily related to the report. Saying you want an element to be green because it matches other competing products is fine. Providing a thorough historical background on the competition is a bit too much.
Run, Test, Check, Then Double-Check Before Submitting
Check everything and test everything before you submit your change. Make sure your changes address the currently developed version, not some historical one. Keep in mind that you only need to run the tests once. The maintainers run many of them daily, so save them time by making sure everything is top-notch. And anyway, this just shows that you care and don’t submit sloppy work.
How to Avoid Getting Discouraged Online
Remember this: Each time you post something online, you open up yourself to criticism. Regardless, if it’s a comment, a photo, an article, or a code, you are now vulnerable. You should welcome some of the criticism, as it will help you grow.
But there are also other kinds of criticism: toxic and unwarranted. It’s best to learn how to deal with different kinds of criticism before you start sharing your work with the public. This way you will be prepared for what awaits you and won’t take everything personal.
Our Best Ideas Are Not the Best to Everyone
First of all, your best ideas may not be the best ideas according to everyone. Let’s keep this in mind. Don’t be offended if someone tells you that the bottle opener you devised isn’t compatible with their suit. If that is the will of the project maintainer, respect it. It may serve as a lesson if you would like to be involved again in this project. Or you can seek another project where they may need such a change.
Our Best Work May Not Be up to Standards
As difficult as it may be to hear, your best work might not be up to a project’s standard. I experienced it myself. In one project I was contributing to, I received a reasonable list of guidelines on how to write good code. I decided to do it perfectly (so I thought) the first time around. After all, I knew what to look out for. I sent my changes, and after some time I received a reply. Almost every line of code was highlighted. Interestingly, all comments were reasonable and accurate. What I considered perfect was lacking in almost every single line.
I corrected all the remarks and resubmitted the changes. This time I received only five remarks. Even if you are doing something right, other people may push you to work even better. That’s what reviewers are for. They should not be criticized or blamed — they want to help you, keep this in mind!
We Can Get Rejected Even If We Did Everything Right
Sometimes you just get “no” for an answer, and there’s not much you can do to change this. You still think suits with bottle openers are a great idea? Then start producing your own! In Open Source, the act of creating a new project based upon an existing one is called “forking.”
Correspondingly, the new project is considered a “fork” of the original. For example, Ubuntu is a fork of Debian. If the project maintainers refuse to incorporate your work into their product, you can consider forking the project and becoming a maintainer yourself. This should only be practiced in extreme cases. Not only is forking a burden for both groups of maintainers, it is also confusing for the community. If you happen to hear “no,” it is worth learning the reasons behind this answer.
It may be a valuable lesson for the future.
Trolls Are Everywhere
Now, the trolls.
As the Internet offers an illusion of anonymity, there has emerged a subculture that takes pleasure in destroying other people. This subculture is called the Internet trolls. I have not yet had the opportunity to fight someone like this. But I would recommend that you read “The Complete Guide to Understanding and Dealing With Online Trolls” by Ragen Chastain. It will help you prepare for such an unpleasant encounter.
Making Money on Open Source
If you’ve read this far, you’re probably wondering if it is possible to earn some money while working on Open Source projects.
Of course, it is!
Even though the software itself is usually free of charge, there are other ways to make a living with Open Source. In this respect, it very much resembles art. And as with art, some methods may work for you while others might not. It’s an inexact science.
My favorite method is the Donate button. You can see it at work on one of my projects: Songcorder. Depending on the size of the tips you expect, options worth considering include Paypal (if you plan to receive tips larger than $15) and Buy me a Coffee (for tips smaller than $15).
A Buy me a Coffee button looks like this (you can click it if you feel I deserve it):
Besides general purpose buttons, there are methods dedicated to Open Source projects, like Gittip/Liberapay (this one likes to change names quite often). Funny enough, one of the popular repositories supported by Liberapay is… awesome.
The premise is similar to that of Flattr. You choose the monthly amount of money you want to spend on creations, and when you approve of some work, the author of the work gets a share of your budget. Say, you decided that you can afford to pay $5 each month towards Open Source projects. If you approve of four projects in a particular month (by starring them or clicking the Flattr button) each of the projects’ authors gets $1.25. Pretty simple.
Instead of supporting entire projects, you can also make donations (almost) directly to the contributors. Tip4Commit operates this way. Supporters deposit some amount of Bitcoin into a project, and each contributor that commits to the project gets a share of the deposit.
Another possible approach is Patreon. Here, instead of an equally divided budget, supporters give a fixed amount of cash to any creator they choose. If you want to learn if this is the correct approach for you, Erika Sauter explains perfectly “Why Patreon is Dope AF for Creators”. Sindre Sorhus of awesome fame is one of the prominent Open Source maintainers there. But bigger projects such as Homebrew or Linuxbrew also use Patreon for funding.
All of the above-mentioned methods work well if you treat Open Source as a hobby or a side-hustle. If you are lucky, they could even turn your passion into a day job. But in reality, if you want to make Open Source your day job, the usual approach is to provide consulting services. This can mean selling pro features to enterprise clients or helping enterprise clients deploy and customize your products. Many businesses lack the skills necessary to adapt an Open Source project to their internal needs. And who’s better equipped for this task than the original project’s maintainer?
If you can help others and get paid for doing so, go for it!
One of the popular methods for bootstrapping funds on an Open Source project is crowdfunding. There are numerous platforms dedicated to this cause. Kickstarter, for example, helped to launch Mycroft Mark II, the Open Source voice assistant. Another big player Indiegogo hosted a campaign for an email client Geary. Sadly, the project did not meet its goals. MediaGoblin even went as far as launching their own campaign without any third-party.
If you fear you won’t find the many supporters needed for successful crowdfunding, you can try grants. I am aware of at least two foundations providing such grants. One of them is the Travis Foundation, backed by the company behind the popular Travis CI. The other one is the Mozilla Foundation, creators of Firefox Web Browser.
Most of the tools presented so far focus on Open Source maintainers. But contributors can make some dough by becoming Bounty Hunters too. Bounties are features requested by a third-party backed by a financial reward. To hunt them you need to fulfill the feature request and claim the reward. The most popular platform for Bounty Hunting at the moment seems to be Bountysource.
The paid internship is another valid approach. Two popular options available are:
Or, if you’re really passionate, why don’t you join a company dedicated to developing Open Source software? There are many to choose from. Just like with consulting, you will get paid and do something for the community at the same time.
It’s a win-win situation!
If you are looking for more inspiration, check out the lemonade-stand project on GitHub. Or add your own idea there. With Open Source, everything is possible!
Finding Your Kin
I haven’t mentioned it until now, but products, projects, and technology are only a tiny fraction of the whole Open Source movement. The first and foremost component is the fabulous community! Once you start contributing, you immediately gain lots of new acquaintances, people to learn from, people whom you can mentor, and people with whom you can exchange ideas.
Each project has its own community, but there are also places where Open Source enthusiasts hang out regardless of their background.
You can join groups on Social Media, such as the Linux & Open Source group on LinkedIn. There are also many interesting Gitter channels to check out. Gitter is an instant messaging system for Open Source communities. There are also mailing groups, forums, or platforms like GitHub that allow collaboration and communication. But if you want to meet like-minded people in person, consider visiting or joining a Hackerspace.
Hackerspaces are places that transfer the love of experimentation beyond the software world. Software, hardware, DIY, and handicraft are equally welcome. There’s a Wiki page listing all the Hackerspaces, so find the closest one and just pay them a visit. You’ll be surprised by what’s possible when ideation meets execution!
Did you like it? Have I helped you? If so, feel free to join my newsletter:
If you like the post consider subscribing to my Newsletter. You’ll be informed about everything I write and recommend (books, articles, tools, and probably music).