Open Source 101 For Beginners
Tags: opensource, programming, webdev, beginners
Published: 2023-01-02 13:33:21

Imagine a delicious meal being cooked in a kitchen by many chefs, and this meal is being supervised by a Head Chef. Anyone is allowed to modify the meal by adding more ingredients or food, rectifying any bad taste, and even suggesting better ideas for cooking the meal.

In this setting, anyone can contribute to the meal by first taking an exact sample of the meal, making modifications to it and submitting their sample to the supervising chefs so it can potentially be added to the real meal.
However, any samples that will be included in the meal must be approved by the Head Chef and perhaps a few additional supervising chefs.

The above illustration defines the concept of **Open Source** in software development. 
- The meal represents the **product** or **software** that is being built or maintained
- The Head Chef represents the **owner** or **author** of the project
- The supervising chefs are the **maintainers** of the project
- The contributors can be anyone, including you and me

Now we have a comparable real-life illustration, but what really is an open-source project?

## What is an Open Source Project?
In simple terms, we can define an open-source project as software with source code that is made available to the public, making it possible for anyone to inspect, use, modify and even distribute it.

Great! We now understand what open source is all about, let us look at the terminologies utilized in the open source environment and what they mean.
## Terms in Open Source
At this point, let us look into the roles assigned, and subsequently, the terminologies used in a typical open-source project.
#### Roles in an Open Source Project
1. **Author:** This is the creator of the project. The project is set up and overseen by the author. They have the power to perform operations such as assigning new roles to other contributors to help maintain the project.

2. **Maintainers:** They are responsible for leading the project and ensuring that the goal or vision of the project is achieved.
They usually have the powers to review, approve/reject pull requests, assign issues, maintain the project's code of conduct, lead discussions on potential improvements, etcetera.

3. **Contributors:**  These are people who add features or fix bugs, open issues and discussions in an open source project. They follow laid down guidelines in carrying out these tasks. 

4. **Community Members:** These are the number of persons who use and maintain an open source project. They give valuable feedback, report bugs, and suggest features to a project. A community is what drives an open-source project, they consist of both technical and non-technical persons. 

#### Terminologies in Open Source
- **ReadMe file:** This is a text file that introduces and describes an open-source project. The readme file contains things like the guidelines on how to contribute to the project, the project's code of conduct, the list of contributors so far, the license of the project and so on.
A good example of an open source readme file is [ReactPlay's readme](https://github.com/reactplay/react-play#readme).

- **Contribution Guidelines:** This involves a step-by-step walkthrough on how to contribute to the said project, including setting up the development environment, installing the necessary dependencies, how to make a pull request and much more. It is important to check out the contribution guidelines of a project if you want to get started on contributing to it.

- **Code of Conduct:** A typical open-source project contains a code of conduct, this is best described as a document that establishes the rules, regulations and expected behaviour amongst participants in a project. Enforcing a code of conduct helps foster an inclusive community within the project.

- **Issue:** An issue is a ticket that is opened to suggest a feature, report a bug, and even host discussions. Typically, before a contributor begins work, they must first open an issue (or check existing ones) which describes the problem, then the maintainer usually assigns the issue to a contributor.
In addition, an issue can come with labels which explains its difficulty level, progress status and availabilty.

- **Pull Request:** A pull request is an action that allows you tell others about the changes you have made that needs to be reviewed. Therefore, when a pull request is opened by a contributor, the maintainers and even other contributor review and discuss the proposed changes, discuss corrections if any, and once it is satisfactory, the pull request would be merged into the main source code.

- **License:** Every open-source project needs a license, without an open source license, the source code is unusable by others, even if it has been publicly posted on GitHub.
The license describes what can and cannot be done with the software. Examples of popular open-source licenses include [MIT](https://en.wikipedia.org/wiki/MIT_License), [Apache License](https://en.wikipedia.org/wiki/Apache_License), [Mozilla Public License](https://www.mozilla.org/en-US/MPL/) and so much more.


## How to Get Started in Open Source
Firstly, I would love to note that open-source contribution is not limited to those with coding skills alone. In fact, the majority of open-source projects need documentation writing, typo fixes, UI/UX design, and even language translations.



When searching for a new open-source project to contribute to there are certain actions to look out for:
- check for the license. If the project has a permissible license such as MIT, then it means you can freely modify its source code and contribute. 
- check out what technology stack is being used in the project. For example, if you only use Python, then you would want to contribute to open-source Python projects, a project based on Swift or C# wouldn't be the right fit.
- observe how inclusive and friendly the project community is. There are some open-source project that are not welcoming to new contributors, let alone novice ones. Such projects are best avoided when searching for your first open source contributions.
- check whether the project has a good readme file and contribution guideline
- check the number of activity on the repository, when was the last commit made? how often are discussions carried out? 
- check how long the maintainers responds to any issue or pull request opened. Projects where the maintainers take too long to respond might not be a good fit to get started with.

Majority of active open-source projects have a Discord or Slack channel where project discussions, community calls take place in detail. Joining the channel and introducing yourself as a new contributor is a great step to getting involved in the project especially for the non-coding contributors. 

An active Discord/Slack channel is a good indication that such project is welcoming and inclusive. For non-coding contributors such as designers, technical writers, project managers, the channel is the best way to get involved, share and communicate your contributions.
 
### How to Find an Open Source Project to Contribute to
These are sites to help you find your first open source project to contribute to:

* [Up For Grabs](https://github.com/up-for-grabs/up-for-grabs.net)
* [First Timers Only](https://www.firsttimersonly.com/)
* [24 Pull Requests](https://24pullrequests.com/)
* [Open Source Friday](https://opensourcefriday.com/)
* [Hacktoberfest](https://hacktoberfest.com/)
* [Good First Issues](https://github.com/topics/good-first-issue)

## Best Practices in Open Source
Getting your hands dirty in open source is a great step but knowing how to do things in a much better way would make you a valuable contributor to any project. A few best practices to note include:
- have good people skills and communication
- check the existing open issues for a similar problem before you open a new issue
- create an issue (if none exists) for a problem and wait for the assignment before you start work and submit a pull request
- all issues should have labels to indicate its complexity or difficulty level.
- as soon as an issue is assigned to you, start working on it in the quickest time possible and submit a pull request
- always follow the contribution guidelines set by the project maintainers
- avoid working on an issue that is already assigned to another contributor
- always take on issues you are confident enough to work on
- resolve every conflict before submitting a pull request
- write descriptive commit messages
- focus on just a few open source projects, preferably between 1 to 3 projects at a time.

## Popular Open Source Projects
Many of the popular open-source projects on Github can be found on [this link](https://github.com/topics/open-source-project).

## Conclusion
Open source is for everyone, regardless of technical background or skill level. In addition, open source provides lots of benefits such as improving your technical skills, giving you needed experience, improving your teamwork and collaboration skills, growing your network and even potentially helping you land jobs.

That wraps it up! Please follow me on [Twitter](https://twitter.com/eo_eboh) and also connect with me on [GitHub](https://github.com/EOEboh). 

Happy Contributing!