Open source software (OSS) is software that’s source code is available to the public for anyone to view, modify, or redistribute. In contrast, Closed Source Software is software that is hidden from the public, and typically comes at a cost. The open source code is usually stored in a repository like Github. Github storage facilitates open collaboration among developers, allowing individuals or organizations to customize and make changes to fit their needs.
The history of open source software began in the 1960s with the free distribution of IBM’s computer, software, and source code. At the time, researchers developing new technologies relied on open source collaboration. This eventually led to the Free Software Movement in the 1980s, which was launched by Richard Stallman when he developed the GNU operating system.
By the 1990s open source software continued to be developed, leading to various other open source projects emerging, such as Linux. Today, many open source projects have emerged under open source licenses, and are crucial to advancing technologies in different industries all over the world.
How Does Open Source Software (OSS) Work?
As previously mentioned, open source software is oftentimes stored in a Github repository. The repository will typically contain a license. This license will include terms that define how a user can modify the code or redistribute the software. There are many popular open source licenses used by individuals and organizations. Here are a few examples:
Why Contribute to Open Source Software?
Contributing to open source software is a rewarding way to learn new skills, teach others, and gain valuable experience in any skill. Below are some additional, more in-depth reasons:
Improve existing skills
Contributing to open source projects does not always include coding. Sometimes there are other parts of the project that need updating; for example, there could be errors in the documentation of the project and tutorials, or lack of detailed documentation. Whether you are wanting to improve your existing skills in coding, UI design, or writing, there are problems for you to solve in an open source project.
Improve software used daily
Many open source contributors have used the software they’ve contributed to. When an issue is found in software, you may want to look at the source code to see if it is something that you can update by yourself. This helps prevent any future users from having the same issues, and benefits everyone that uses the software on the next update.
Meet people, find mentors, and teach others
Many people form friendships through collaborating on open source. Open source projects with engaging communities keep people coming back for years, and can lead to long-lasting professional and personal connections. Collaborating with others on open source projects means you will have to ask questions, answer questions, learn from documentation and collaborators, and teach others. The act of learning from and teaching others will be valuable to everyone involved in the project.
Practice people skills
Open source projects offer you opportunities to practice leadership skills by resolving conflicts or organizing and managing teams.
Gain experience, or a career
All open source projects are publicly available. This means the work you do on an open source project translates to examples of work that demonstrate your technical capabilities. This work can be added to a portfolio that you can then show to potential employers when trying to land a job.
How to Contribute to Open Source Software
Contributing to open source projects does not mean you always have to code. There are many different ways you can contribute to an open source software project, depending on your strengths, skills, or interests.
Are you a writer?
Below are some ways you can contribute to an open source project if you enjoy writing:
- Add descriptions of the project or a guide on how to use the project to the project repository. Descriptions and guides are typically posted on the repository’s README. The README is a great way to inform users of the software about what the project is, why it is useful, and how someone can use it. (More information on README can be found in the Elements of an Open Source Project section further down in the article.)
- Fix typos in the documentation
- Develop tutorials on how to use the software
Do you like to organize?
Below are some ways you can contribute to an open source project if you are a stickler for organization:
- Organize the project’s file structure
- Organize conferences for the project
- Offer to mentor others on using the software
Do you enjoy solving problems?
If problem solving is your thing, here are some ways you can help out on an open source project:
- Answer user questions about the project on Stack Overflow or Reddit
- Find bugs and raise issues on the project (Read GitHub’s documentation on creating an issue)
Roles in Open Source Projects
Every open source software has different communities, and many have their own rules and guidelines on how to contribute. Many also have a variety of roles to fill. Some common roles you will find in an open source project include:
Author
The author is the owner of the product. They assist with the development and maintenance of the product, and can assign roles to members of the community.
Owner
The owner can also be the author. The owner possesses ownership of the project’s repository.
Maintainer
The maintainers are responsible for improving the product.
Contributor
Contributors add to the project’s source code or documentation. As mentioned earlier, each open source project is different; for example, each project can have its own requirements on contributing to the project or styling the project. The contributors are responsible for following the guidelines that are put in place.
Community member
The community is anyone who uses the product. They are highly valuable members because they can provide feedback and report bugs.
Elements of Open Source Projects
Each open source project is different, but there are some common elements in each one. A few examples include:
![An image displaying the Flask Pallets Project Repository](https://flatironschool.com/wp-content/uploads/2024/04/flask-1024x591.jpg)
License
Every open source software will have a license. You can usually find the license on the GitHub repository. If the product does not have a license then it is not open source. The license protects the contributors and users of the software.
README
The README tells users and contributors how to get started with the software and how to use the software. The README will often contain example output of the software, or have a guide on how to contribute to the software. (Read GitHub’s documentation to learn more about writing a README, or check out this README template from Make a README.)
Code of Conduct
The code of conduct document establishes expectations for how contributors treat one another and participate in the development of the software. This document aids in creating open source communities that are positive and welcoming environments. (Read the Open Source Guide on creating your code of conduct.)
Contribution Guidelines
The contributor guidelines document contains the requirements on how contributors can contribute to a project and what is expected of them. To learn more about how to contribute to an open source project check out this template for creating open source contributor guidelines.
Open Source Project Tools
Open source communities are all about collaboration, growing skills, sharing ideas, and solving problems. Below are some tools that help open source communities with all of the open source project elements listed above.
Issue tracker
![Image displaying the issue tracker for the Flask project](https://flatironschool.com/wp-content/uploads/2024/04/issuetracker-1024x268.png)
The issue tracker is where contributors can keep track of bugs on GitHub, and it also shows how problems are solved during development. Contributors can create an issue on GitHub and other developers can then collaborate and choose to try and fix the problem. This typically requires the contributor to fork the repository (make a copy), find and fix the bug, and then link a pull request to the original repository. Once the problem is solved, the issue is then closed by either the author, owners, or maintainers with access to push changes.
Pull request
Creating a pull request lets other developers know about changes to the repository; primarily, the main branch. Here’s the common workflow:
- Fork the original repository: This creates a copy of the original repository in your Github account.
- Make changes in your fork: Create a new branch in your forked repository and make changes there.
- Create a pull request: Once the pull request is opened, maintainers can then review and discuss the changes before it is merged to the main repository.
(Check out this Atlassian article on branch best practices to learn more.)
Chat Software
Many open source software will have chat rooms available to continue collaboration. Contributors can use these rooms to ask questions about the software or hold conversations about improvements. Some common chat applications are Stack Overflow, Reddit, and Discord.
How to Choose an Open Source Project
Now that you know what an open source project is and what it contains, let’s start thinking about ways to find open source projects to contribute to.
There are several ways to find a project. Think of a website or application that has an issue you wished could be fixed, or a typo in documentation. Instead of submitting an issue, with websites or applications that are open source you can fix that problem yourself.
Many open source projects will have a document called a contributing.md, or a page with path /contribute; for example:
https://github.com/pallets/flask/blob/main/CONTRIBUTING.rst
This is where you can find open source software contributing guidelines. Alternative ways to find open source software to contribute to are:
- Codetriage
- Github Explore
- First Contributions (A Githubrepo that walks you through how to complete your first contribution)
- Goodfirstissue
How to make a contribution
Once you have found the project that you would like to contribute to, there are some elements to look for to ensure that it is an open source project. The following criteria will help you find an open source project:
- Does the project contain a license?
- When was the last commit?
- Are there any active issues?
- How long does it take for maintainers to respond to questions?
- When was the last issue closed?
- How many contributors does the project have?
- Is there a contributing file, or documentation for the process of contributing?
If some of these elements are present, then it is a good open source project to contribute to. Next we will learn more about collaborating and contributing to an open source project via a pull request.
Pull Requests
Let’s talk about pull requests again. A pull request happens when a contributor makes changes to the open source project. In our case this will be software. As long as the project is public, this allows anyone, with any level of experience, to collaborate and find issues in the product or fix typos in documentation.
Pull request steps
Step 1
Fork the repository. On every public repository there will be a fork button, like in the example below from the flask pallets open source project. As a contributor you will need to create a GitHub account, then select the fork button, and create the fork. This will make a copy of the original repository for you to make changes.
![An image demonstrating a GitHub repository for the pallets project](https://flatironschool.com/wp-content/uploads/2024/04/flaskfork-1024x156.png)
Step 2
Having created your fork, you can download a copy (clone) of the project onto your device. You can use your device’s terminal, or an IDE like VS Code. You will need Git installed on your device in order to clone the project. Read Git Docs to learn more. For instance, let’s look into cloning the Flask project. Here’s how to proceed:
- Look for a button labeled “Code.”
- Select the code button, and a pop-up window will appear with an HTTPS URL. Copy the URL.
![An image displaying the HTTPS URL for a repository](https://flatironschool.com/wp-content/uploads/2024/04/htttps.png)
Step 3
Next, you will need to clone the project to your device using the following command:
![An image displaying the git clone command with a URL](https://flatironschool.com/wp-content/uploads/2024/04/clone.png)
Now that you have the project on your local machine, you can make your contributions, whether they be changes in the code or documentation, or the addition of tutorials. When you are ready to submit your changes, complete the following steps.
Step 4
You will need to be on the same path as your project to complete these steps. You can change your paths in the terminal using the cd command. For example, I cloned the flask project to my desktop, and now to make a contribution I will need to change my directory to the flask repository. The following image demonstrates these steps:
![An image displaying the change directory command](https://flatironschool.com/wp-content/uploads/2024/04/cd.png)
Step 5
It is best practice to make a branch with your changes. You can accomplish this by using the following command:
![An image displaying the git branch command that creates a new branch](https://flatironschool.com/wp-content/uploads/2024/04/branch-1024x64.png)
Step 6
Next, you will need to switch branches to your newly created branch using the following command:
![This image demonstrates switching branches using the checkout command](https://flatironschool.com/wp-content/uploads/2024/04/checkout-1024x55.png)
Step 7
You can either make your changes from the main branch or the new branch. When ready to submit your changes, you will need to first add all your changes using the following command:
![This image demonstrates saving all changes using the git add command](https://flatironschool.com/wp-content/uploads/2024/05/add.png)
Step 8
Next you will need to commit your changes and add a message, like so:
![This image shows the changes being saved and adds a message to the commit](https://flatironschool.com/wp-content/uploads/2024/04/commit-1024x58.png)
Step 9
Now that all changes have been added and committed, you can push the changes up to GitHub using the following command:
![This image demonstrates pushing changes to any origin on Github](https://flatironschool.com/wp-content/uploads/2024/04/push-1024x65.png)
Step 10
In my case it would look like this:
![This image demonstrates pushing changes to my branch](https://flatironschool.com/wp-content/uploads/2024/04/push2-1024x46.png)
Finally, you can now make a pull request that describes the changes you have made. You can then link your forked repository to the pull request, and a maintainer of the software can then approve or deny the changes. If it is approved the maintainer will then merge the changes into the main branch. If the pull request is denied the maintainers may need some changes from you. This is the common process you will see when it comes to collaborating in open source software.
Ready to reap the rewards of contributing? Now that you’ve explored open source software and understand how you can get involved, let’s summarize the benefits.
- Sharpen your skills, no matter your level. Open source contributions empower you to refine existing skills and explore new ones.
- Find a project that fits you. The beauty of open source is its variety. There are projects for everyone, even if coding isn’t your forte.
- Build your career. Contributions to open source projects showcase your talent, helping you forge connections, friendships, and a strong reputation within the developer community.
Learn to Code at Flatiron School
Ready to turn tech inspiration into action? Our Software Engineering Bootcamp equips you with in-demand skills for a career in a field with a projected 25% national growth in roles through 2031. Download the syllabus to explore the curriculum or book a call with our Admissions team to learn more. See for yourself why Flatiron is your launchpad to a rewarding future in tech.