I recently introduced myself in my city's local tech Slack workspace and an awesome Mozilla employee offered to mentor me in contributing to Firefox. Here's my advice for anyone wanting to get started contributing to an open source project.
What is open source software?
While there are many different licenses within OSS, variations on what open source means, and what the difference between OSS and FOSS (Free and open source software) is, I think the Wikipedia definition of open source software is a great place to start.
open-source software (OSS) is a type of computer software in which source code is released under a license in which the copyright holder grants users the rights to use, study, change, and distribute the software to anyone and for any purpose.
So not only does open source mean giving people access to the source code, it also means allowing users the right to change that source code and distribute the software for any purpose.
The benefits
So why would someone write open source software and let anyone use/alter/distribute it? There are tons of advantages to this philosophy including saving people money (not just companies), greater security (more eyes on the code), and faster development. Contributing to the opensource community is an awesome way to gain experience in larger projects involving lots of people. There are also a lot of pros for an individual to contribute. Here are just a few:
- Creating something cool for people to enjoy
- Creating something useful for yourself and others
- Giving back (you have most definitely utilized open source software)
- Looks great on a resume (you work well with others and can navigate the complexities of larger projects)
No matter the reason, open source software is an amazing part of our world and it all it takes to start helping build a better world (technologically speaking) is your time!
Find the right project
Programming is tough. Do you know what makes it tougher? Not enjoying it. We have all heard the old adage, "Do what you love and you'll never work a day in your life." While this quote specifically references work, I would say it rings even truer regarding personal projects. If something isn't absolutely necessary to my survival, you can bet I won't be doing it often unless I enjoy it. That is why the most important part of contributing to an open source project is finding one you are passionate about.
There are tons of projects out there, and you can find an awesome list of beginner friendly projects on MunGell's Awesome for Beginners. If you like making beats/samples for fun, and C++ is your jam maybe you want to check out LMMS. If you aren't sure what kind of project you would like to work on, I would recommend finding a project that uses the programming language you know or want to know.
Docs
While you are looking for a good project, definitely check out the documentation of a project. Skim through the README, see what kind of issues are open, get a feel for the project. The docs play an extremely important part in the development of the project, and should you choose a certain project you need to know you have the resources available to effectively contribute. I can't tell you how many times I looked for the answer to a question by searching on Google only to come back empty-handed. After feeling frustrated, I would hop on firefox-source-docs.mozilla.org and find the answer in the beginner's guide. Read the documentation!
It's important to understand not all projects have great documentation (Mozilla is kind of known for having great docs, I'm looking at you MDN). But you can help with that! Contributing to the documentation is just as important as contributing to the source code!
Mentor
More helpful than even documentation is the wonderful resource of people. If you can, reach out to whoever you can: a maintainer, a friend, a fellow contributor and get all the help you can. Large projects are often more complicated than our your usual helloWorld.js
, and you can quickly progress utilizing experienced individuals. Setting up Firefox for development proved to be quite the task, but thanks to my mentor, I was up and running without any hiccups.
It's important to note that not every project is going to have maintainers who have time to onboard new contributors. If this is the case, use the documentations as often as possible, and ask questions when you get stuck.
Tests
Testing is not something covered in a lot of bootcamps or universities, but it is an extremely important part of the development process, especially on larger projects with lots of people contributing. New features are added quickly with the help of many hands, but new bugs are added even quicker! If you aren't familiar with testing, the documentation is a great place to start. Look at already written tests, try writing one yourself, and if all else fails, ask for help.
Don't over do it
Contributing to open source projects doesn't need to be hard, but it can be. Once you find the right project, take it slow, and find an issue that you know you can handle. That doesn't mean you need to already know the solution before asking to take an issue, but make sure you have the time and energy to contribute. If you're worried about the code base being too complicated, don't sweat it. Remember how I talked about contributing to the documentation? It's a great way to get familiar with a project. Another great way to contribute is by finding issues and flagging them. Coding, writting about the code, and just using the software are all great ways to contribute to the open source community.
git goin'!
While it can seem like a huge jump going from developing personal projects to contributing to well known open-source software, you should take that jump! There are lots of resources out there including people, so what are you waiting for? Clone that repo and start hacking!
Top comments (1)
My note might sound like a little negative but good to know pros and cons before diving in any situation.
for me it's difficult to start on someone else's unfinished project. It's a tedious/labrous task just to setup the dev environment ( with versions often not matching up with what you have for your projects). Followed by documentation review, coding guidelines and trying to understand the future project plan. Without understanding these, you might end up going in wrong direction ( or you can fork the project). You should also be aware that your contribution might not be accepted. For a developer rewards lie in quick gratification in solving a problem, so self motivation is essential.
Said that, if you can get a good mentor then nothing better than that, though open source projects often don't have valuable resources to spare. I have forked couple of open source projects and modified them to my need/for my projects.