The Ultimate Beginner’s Guide to Open Source Contribution
Tags: opensource, contributorswanted, github, git
Published: 2022-12-06 20:42:44

Although there’s a wide range of open source projects out there waiting for your expertise, knowing where to find them and how to contribute in a way that is meaningful to the project can sometimes prove to be a barrier for beginner contributors. Therefore, this article guides you on what open source is, who is involved in managing an open source project, myths related to contributing to open source, terms you should know, ways of contributing, programs to participate in and recommended projects to contribute to.
![The Ultimate Beginner’s Guide to Open Source Contribution](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k0ct3x27hodi01jfbe2p.png)
_💡 Fun Fact: The world’s first open source software was the A-2 system, developed for the UNIVAC compiler in 1953._

## What is Open Source Software
Open source software is software with source code that can be freely used, modified, and shared by anyone
Open source software plays a huge role in our life and quite often we do not realize that each one of us uses it even when not aware. For example, most phones run on Android Operating System, which is an open source project maintained by Google ([Android Open Source Project](https://source.android.com/)). This means that if it wasn't for open source, there would be no device that goes from just working to actually making life easier.
Check out [my former article](https://medium.com/@nasasirad92/why-should-you-contribute-to-open-source-dfc0f6a72e6f) to know more about all the basics of open source software and why you should contribute to open source.

## Who is involved in managing an open source project
You might be wondering how random people from different backgrounds can add their contributions and have a product like Andriod running on your smart phone that you carry every day. Seems un coordinated right!
Well, almost every open source project has some structure which varies depending on the project, but these are some commonalities in who is involved when managing an open source project.
- **Leaders:** These are people responsible for making the final decision about features, releases, and other activities. In some cases, this is a single person, while in other projects, there may be one or more committees responsible for various aspects of a project. For example, Apache Software Foundation project management committee (PMC) is a committee charged with responsibility and governance for their top level project. 
- **Maintainers:** These are people who are responsible for maintaining specific parts of the project, and in large projects, these maintainers may also delegate to people who are responsible for subcomponents of their portion.
- **Committers:** These are people who have contributed to the project and are seen as trusted members of the community. 
- **Contributors:** These are people who contribute to open source projects. The contribution can be code or non-code contribution and it is reviewed by a committer or maintainer before being included.
- **Users:** These are the most valuable people in an open source project since they are the ones that use the product and help it grow. They also provide feedback about features, bug reports and more. It is also important to note that to be a contributor or maintainer, you have to be a user of the product too.

## Myths related to contributing to open source
As you start out your open source journey, you will hear various misconceptions about contributing to open source and I hope that after reading these you’ll give this amazing open source world a try.
“I must have it all figured out to start” 
- You don’t need to — you can figure it out along the way! 
“My contribution has to be huge to actually make a difference” 
- Smaller contributions also lead to significant value. 
“I need to have a lot of experience” 
- All experience levels matter in some way or the other. 
“It is extremely complicated to contribute” 
- Start small and ask for help — the community is there for you. 
“I need to have a technical background” 
- Non-technical contributions also exist. 

## Preparing To Contribute
Well, not so fast! Before diving deep into contributing, you will still want to be sure if the contribution is welcome. The contributor guide might vary depending on the open source project, but here are a couple of ways to prepare to contribute:
- Check the license: open source licenses can tell you a lot about a project 
- Check README: a project’s README is much like a manual, and has a wealth of information you should get familiar with. 
- Check issues and pull requests: check for pending issues. It’s also a good idea to look for active discussions surrounding these issues. 
- Check the contributing docs: while the README provides a general manual, the contributing docs or guide will specify the contribution process, and which contributions are needed. For example, Apache APISIX has an amazing [contributor guide](https://apisix.apache.org/docs/general/contributor-guide/).

## Ways of contributing
You may now be wondering exactly what ways to contribute based on your background, but the good news is that the open source world is for everyone.  
Contributors can be classified into two categories (**code contributions or no-code contributions**). While the way in which you contribute may vary by project, here’s some general ideas of contributions 

**Fix a Bug**
Bugs are small errors in code that may be debilitating to software and produce unexpected results. Therefore, you can contribute your knowledge to solving a bug.
**Propose a Feature**
Open source projects benefit from a diversity of thought and your personal experience and opinion on how to improve a project can be invaluable. 
**Write Some Documentation**
This is an example of a no code contribution that does not require a technical background. Contributions to documentation can revolve around providing editing help to an existing doc or authoring new pages within the documentation. 
**Writing**
You can also use your skills to write or edit blogs, tutorials, guides (for developers, users, newcomers) and other relevant collaterals.
**Designing**
You contribute by adding missing elements, designing a brand style guide, icons, logos, improving the UI/UX of the website 
**Hosting events** 
You can host talk shows and invite engineers from the project to talk about the project or even talk or learn about the project yourselves. For example, to hold a contributor workshop with Apache APISIX, email [keer@api7.ai](mailto:keer@api7.ai)
**Translating**
This is a no code contribution but very important. You can start by translating your favorite blogs to your own languages so that they can be accessible by anyone in your region and easier to read for them
**Videos and Tutorials**
You can contribute by making YouTube videos or tutorials, creating blog video walkthroughs which help with content creation and advocacy of the project

## Terms you should know
GitHub: GitHub is a web-based version-control and collaboration platform for software developers.

Git: Git is free and open source software for distributed version control.

Public Repository: A public repository can be viewed by anyone, including people who aren’t GitHub users.

README: A text file containing information about the project in a repository — with instructions, help, or details about the patches or updates.

Documentation: A set of information that describes a product to its users, including what it is, how it operates, and how to use it.

Clone: A clone is a copy of a repository that lives on your computer instead of on a website’s server somewhere, or the act of making that copy.

Fork: A fork is a personal copy of another user’s repository that lives on your account — helping you freely make changes to a project without affecting the original upstream repository.

Issue: Issues are suggested improvements, tasks or questions related to the repository. They can be created by anyone (for public repos)

Label: A tag on an issue or pull request. Repositories come with a handful of default labels, but you can create custom labels.

Merge: Merging takes the changes from one branch (in the same repository or from a fork), and applies them to another.

Branch: A branch is a parallel version of a repository. It is contained within the repository, but doesn’t affect the primary or main branch, so that you can work freely without disrupting the “live” version.

Pull request: Pull requests are proposed changes to a repository submitted by a user and accepted or rejected by a repository’s collaborators.

Commit: A commit, or “revision”, is an individual change to a file (or set of files). They usually contain a message which is a brief description of what changes were made.

Read more: [https://docs.github.com/en/get-started/quickstart/github-glossary](https://docs.github.com/en/get-started/quickstart/github-glossary)

## Programs to participate in 
There are many open-source coding programs that you can participate in.
- [Google Summer of Code](https://summerofcode.withgoogle.com/) (GSoC)
GSoC is a global program focused on encouraging more student developers to do open source software development.
Students work with one of the selected open-source organizations for 3 months and get a handsome stipend on completing the project. Students need to propose changes that they want to work on to get selected.
- [MLH Fellowship](https://fellowship.mlh.io/)
The MLH Fellowship is an internship alternative for software engineers. Selected candidates contribute to Open Source projects that are used by companies around the world and are paid a competitive stipend during this tenure.
- [Outreachy](https://www.outreachy.org/)
Outreachy (previously the Free and Open Source Software Outreach Program for Women) is a program that organizes three-month paid internships with free and open-source software projects.
- [HacktoberFest](https://hacktoberfest.digitalocean.com/)
HacktoberFest is a month-long celebration of open source software carried out in October. You can sign up anytime between October 1 and October 31.
- [Rails Girl Summer of Code](https://railsgirlssummerofcode.org/)
Rails Girls Summer of Code is a global fellowship program aimed at bringing more diversity into Open Source. Successful applicants are paid a monthly stipend, from July-September, to work on Open Source projects of their choice.

## Recommended projects to contribute to
**Apache APISIX**
Apache APISIX is an open source, dynamic, real-time, high-performance cloud native API gateway. APISIX provides rich traffic management features such as load balancing, dynamic upstream, canary release, circuit breaking, authentication, observability, and more.
Official website
https://apisix.apache.org/
GitHub projects
APISIX (the core): https://github.com/apache/apisix
[GitHub - apache/apisix: The Cloud-Native API Gateway](https://github.com/apache/apisix)
[GitHub - apache/apisix-dashboard: Dashboard for Apache APISIX](https://github.com/apache/apisix-dashboard)
[GitHub - apache/apisix-website: Apache APISIX Website](https://github.com/apache/apisix-website)
[GitHub - apache/apisix-docker: the docker for Apache APISIX](https://github.com/apache/apisix-docker)
[GitHub - apache/apisix-go-plugin-runner: Go Plugin Runner for APISIX](https://github.com/apache/apisix-go-plugin-runner)
[GitHub - apache/apisix-java-plugin-runner: APISIX Plugin Runner in Java](https://github.com/apache/apisix-java-plugin-runner)
[GitHub - apache/apisix-python-plugin-runner: Apache APISIX Python plugin runner](https://github.com/apache/apisix-python-plugin-runner)
[GitHub - apache/apisix-helm-chart: Apache APISIX Helm Chart](https://github.com/apache/apisix-helm-chart)
[GitHub - apache/apisix-ingress-controller: ingress controller for K8s](https://github.com/apache/apisix-ingress-controller)

**NebulaGraph**
NebulaGraph is a popular open-source graph database that can handle large volumes of data with milliseconds of latency, scale up quickly, and have the ability to perform fast graph analytics. 
Official website
https://www.nebula-graph.io/
GitHub projects
https://github.com/orgs/vesoft-inc/repositories
https://github.com/vesoft-inc/nebula

**Apache SeaTunnel (Incubating)**
SeaTunnel is a very easy-to-use ultra-high-performance distributed data integration platform that supports real-time synchronization of massive data. It can synchronize tens of billions of data stably and efficiently every day, and has been used in the production of nearly 100 companies.
Official website
https://seatunnel.apache.org/
GitHub projects
https://github.com/apache/incubator-seatunnel

## Wrap Up
If you are a first-time contributor to a project, you might consider finding a mentor or an experienced project member who can review your work and provide you with some feedback as you prepare your first couple of contributions.
Personally, I would recommend these amazing mentors.
- [Keer](https://twitter.com/liu_keer)
- [Navendu](https://twitter.com/sudo_navendu)
- [Bobur](https://twitter.com/BoburUmurzokov)
- [Zhiyuan](https://twitter.com/jjzhiyuan)

After you are ready to get started with open source, check out [Apache APISIX](https://github.com/apache/apisix) to make your [first contribution](https://github.com/apache/apisix).