"Contributing to open source" is one of those phrases people hear all the time and want to do but don't always know how. In the beginning, I was admittedly discouraged from contributing because I was overwhelmed by all the resources made available to me, especially when every single one had a different approach.
This blog will also be one of many ways you can get started with open source (sorry), but I'll share my honest approach to how I got involved in contributing and things I wish I had known when I started.
What is an Open Source Project?
Open source refers to a project that is designed to be openly accessible and modifiable. Often an open-source project is made available for anyone to see, change, and share (versus closed-source software (CSS) that is not publicly shared and can only be changed by the individual or organization that created it). However, even though people are usually encouraged to contribute and help improve the project, there still needs to be some "housekeeping" rules, which is where licensing comes in (I'll discuss this further in the blog).
The defining factors of open source are:
The project has publicly available source code. The project has a license that complies with the Open Source Definition (OSD).
For example, the Vonage Python SDK is open source. Here, you can see that it uses the Apache-2.0 license. This is standard across our Vonage SDKs.
What is an Open Source Contributor?
While open-source projects have criteria that define them as open source, open-source contributors don't. There are many different ways a person can contribute, such as:
Code contributions: Fix bugs, implement new features, and refactor code.
Documentation: Create or improve documentation (including README files, user guides, and API documentation), localize documents (translate them into another spoken language or write the code in another coding language), and write tutorials.
Report issues: If you notice ways that a project can be improved, suggest changes by raising the issue. You don't need to implement the change itself, though it would be highly recommended and extremely helpful if you could. However, someone else with the skillset and bandwidth could end up taking on the issue to help improve the project for everyone else.
Testing: Test on different platforms and report issues, write unit tests, and set up or improve CI/CD pipelines.
Community support: Answer questions on forums, do code reviews, and mentor new contributors. For example, if someone in the Appwrite Discord server asked for help with implementing Vonage Video on Appwrite Cloud, I could comment, pointing them to my teammate Chris Tankersley's blog.
Organize events: Host or attend meetups or workshops that promote open-source projects.
How to Find an Open Source Project to Contribute To
Let’s look at the several ways you can find open-source projects.
Apply for an Open Source Mentoring Program
Contributing to open source can be an on-and-off activity you do in your spare time, or it can be like working a full-time job. If you have the bandwidth to join a program where you'll have someone to give you responsibilities and guide you through the process, be assigned a project with deadlines, and have your work graded, I would recommend applying for a program like Google Summer of Code, which requires 40 hours a week during their program. This would have been an ideal option for me while I was still a college student without an internship.
One of my very good friends, Kunal Kushwaha, has a YouTube video walking people through this process, but here's a brief overview:
Be mindful of the deadlines for this option. The Google Summer of Code program is not available to just join at any point of the year. Applicants need to be accepted to work on their project of choice.
Go to Google Summer of Code> Organizations> Browse all organizations. Use the filters to search for an organization, technology, or topic that interests you. Click on an organization to see which projects it has available for contributors.
Read through each project and find the specific instructions on how to apply to work on that specific project. This would even be a good time to try the project out.
Here are some things you want to consider when selecting a project:
What do you want to achieve?
Why did you choose this specific project?
If you end up proposing a project of your own, how is your idea unique from a pre-existing one that you could have chosen?
What makes you suited to participate in this project?
How much time do you plan to invest in the project before/during/after the program?
3. If/when you get accepted, you'll be paired with a mentor who can guide you on becoming a great contributor!
Find 'Good First Issue' Issues
Now, let's say you can't quite dedicate that much time to contributing to open source - that's okay, I can't either. Instead, you can tackle on a good first issue that is suitable for new contributors because these typically don't require deep knowledge of the project codebase. You should choose one based on your skill set and interests.
Here are ways you can find a 'good first issue':
Search for a public Github repository that matches the Topic 'good-first-issue'. Other keywords/phrases you can search for that may give you similar results are 'contributions-welcome', 'hacktoberfest', 'beginner', 'beginner-friendly', 'help-wanted', or 'contributions-welcome'.
For example, Appwrite has issues labeled 'good-first-issue'.
Use a good first-issue finder. Eddie Jaoude built one that you can use for free.
Once you've found an issue you would like to work on, look in the comments thread to see if it has been assigned to anyone. If it hasn't, leave a comment asking the maintainers to assign it to you.
Here's an example of someone commenting and asking to work on an issue I reported.
If you have a question as you're working on the issue, don't be afraid to learn in public. Go to the issue thread on GitHub and/or whatever public platform that the community uses to chat (Discord, Slack, etc.) and publicly message them with the following context:
what you did
what you're trying to achieve
error(s) you got
ask for resources to help you get unblocked
How to Report an Issue
I used to think bringing up an issue made me the issue. As Taylor Swift says, "It's me. Hi. I'm the problem, it's me." But here's the thing - you're not the problem! You might even be the solution. Reporting issues still counts, and it is my favorite way to contribute to open source.
If no issues stood out to you when you tried to find a 'good first issue,' go to a GitHub repo that interests you and use the project. Build the project on your own system. If you come across any problems (whether in the code or documentation), report it.
Example of an Open Source Contribution (Reporting an Issue)
Let's look at my contribution to Appwrite, a company that provides an open-source Backend-as-a-Service (BaaS) platform.
How do we know it's an open-source project? Let's do our check on their repo!
It is a public repo.
It has a license.
The LICENSE.md file outlines what you are allowed to do with this project.
As I was building an application that schedules SMS using Vonage and Appwrite Messaging, I came across an issue that made me feel so dumb in the moment. I was trying to set the date and time (May 30, 2024, at 15:27:10) that I wanted a text to go out, but it kept giving me an error message. I even confirmed that the time I was trying to set was after the current time (15:25).
So, I went over to Appwrite's Discord server and sent a message to one of their channels. Yes, being vulnerable and asking for help in front of other people can be daunting, but learning in public is a big part of open-source culture.
Shortly after, I received a reply from one of their team members explaining exactly what went wrong. He even recognized it as a good issue to report because if I came across this issue, others would, too.
CONTRIBUTING.md file, which clearly instructed on what kind of help they could use and how people could get involved.
First, I did a quick search for their repo and found theirI clicked their issues tab and clicked 'New Issue.'
On this page, I selected my issue type. Since I want to suggest a change to the SMS Scheduling feature, I choose 'Enhancement'.
Next, I filled out all the required fields to submit the proposal and then hit 'Submit new issue'. For reference, I looked at a previously reported issue.
You can see my open issue here. That's it - I made an open-source contribution! 🙌🏻
Common Misconceptions about Open Source
You need to know how to code. Many people believe that contributing to open source projects requires advanced coding skills. While coding is helpful, there are other valuable ways people can contribute, such as improving documentation (rewriting, reformatting, etc.), design, testing, translation, reporting bugs, and community support. None of these require any coding.
Open source is stealing. Some people have a belief that copying open source is stealing intellectual property. Y'ALL! Remember when I said open-source projects need licensing? If the project maintainer selected a license that does allow others to use, modify, and distribute their software, it is completely legal to do so. Open source is made to be used. Say a project has the functionalities you need for your own application, why reinvent the wheel? And if you happen to find issues within that project as you're using it, you can contribute by reporting the issue or fixing it yourself. As long as you give credit where credit is due, it's all fair game. Just be mindful that not all licenses prohibit this.
For example, the Apache License has few restrictions and allows the code to be incorporated into commercial projects without requiring the entire project to be open source. That's the license the Vonage Python SDK (mentioned at the beginning of the blog) uses.
You can't make money with open source. I was initially curious about this, too, because I didn't understand how an open-source company could make money when it provides its code for free. The code is still free. However, many companies that create open-source software can monetize by offering services like paid support, custom features, or training customers on using the project itself.
For example, the CAMARA Project is an open-source project within the Linux Foundation that has subprojects related to telecommunication, such as SIM Swap and Number Verification. A large enterprise company like Ericsson can still legally use the SIM Swap API and Number Verification API to build its commercialized products.
How to Make Your Project Open Source
Choose an Open Source License: Although you don't need to go through any approval process to confirm your project is open source, it is required that you choose an approved license that aligns with your goals from a trusted source like Open Source Initiative. When choosing a license, consider the different use cases for your project, such as building a software product you would like to sell.
Prepare Your Project for Public Release: Make sure your code is well-documented and clean, and create contribution guidelines that outline how others can get involved and submit improvements to the project. Don't forget to include your chosen license in your project.
Publish Your Project on a Hosting Platform: Upload your code to your chosen platform—remember to include the license file! Public code repositories like GitHub or GitLab are popular options for hosting open-source projects.
And that's it! Your project is considered open source and readily available to others.
Share Your Open Source Projects With Us!
We're always excited to see what developers build using our open-source Vonage APIs and SDKs. If you aren't part of our Vonage developer community yet, we would love for you to join our Slack channel and follow our team on X, formerly known as Twitter, so everyone can see all the fun projects you'd like to share. If you enjoyed this blog (or didn't), feel free to let me know on X and tell me what some of your favorite open-source projects are!