Contributing to an open source project can be a rewarding way to learn, share, and build experience within an active, healthy community. Even if writing code isn’t your thing, you can support the community in a non-code capacity. For example, opening an issue to record a bug, helping triage issues, writing docs, updating the website, or organizing meetings are all considered worthy contributions.
Ready to get your feet wet in open source software but don’t know where to start?
Beginning new projects with new technologies and programming languages within a community can be intimidating. When I first started contributing to EdgeX Foundry – a highly scalable open source software framework that facilitates interoperability between devices and applications at the IoT Edge – I didn’t know anything about its associated technologies (Docker, Go, and numerous IoT protocols). So to get acclimated, I read the documentation and blog posts, and enrolled in courses on Pluralsight, an on-demand Development and IT Training site.
So, let’s figure out how you can get you going in the right direction with OSS!
Become Acquainted with Git and GitHub
First of all, GitHub is a provider of Internet hosting for software development and version control using Git software. Nearly every open source project is managed on GitHub. It offers the distributed source-code and version control management functionality of Git, plus its own features. It includes access control and several collaboration features such as bug tracking, feature requests, task management, continuous integration, and wikis for every project. You can find out more about Git and GitHub on the freeCodeCamp website, and by viewing and following discussions via the GitHub Support Community.
Get Involved with a Project You’re Passionate About
You’ll want to find a project that’s licensed by the Open Source Initiative (evidenced in a license file). Projects published under an open source license can encourage adoption of a standard, bringing a massive influx of outside contributors, enabling the project and its ecosystem to evolve more rapidly. A community with lots of recent activity between its maintainers and contributors is also a requisite, as a strong, vibrant, and diverse community is crucial to a project’s success.
The checklist below is a good way to ascertain — by your lonesome or with a knowledgeable colleague by your side — the “health” of the project and whether it has a community-first priority:
- How many contributors does the project have?
- How many commits have been made and what’s the date of the last one?
- How many open pull requests are pending and when were the latest pull requests merged?
- Does the project have any open issues and is there active discussion on any given issue?
- Are the community values the keystone to the ongoing success of the project?
- Are there mentoring programs and resources available?
Once you’ve vetted the project in this way, you’re ready to take the next steps to engage with the project.
Develop an Understanding of a Project’s Governance and Standards
Open source projects follow similar organizational structures, while processes for communication, contribution, members’ election, and decision-making vary. Here are some of the steps I follow to become familiar with how the project is managed:
- Sign up to the project’s IRC/Slack channel and mailing list (found on its website or the project’s GitHub pages) and begin attending weekly/monthly meetings. Communication is the heart of a healthy community. This helps me stay in tune and informed.
- Read the documentation, if provided. This helps me understand the project’s objectives. (Incidentally, opening issues about unclear, wrong, or out-of-date documentation is a good place to begin contributing for non-coders. Up-to-date documentation greatly simplifies the integration process for new users and contributors.)
- Check out the examples and tutorials. Seeing an example of how the software works always hastens my understanding of the project.
- Follow the project guidelines. Reading the Code of Conduct, README and OWNERS files and the contributor’s guide. In my work, by way of an example, I’m presently focused on Kubeflow—a machine learning workflow framework based on Kubernetes. I navigated to Kubeflow’s Community to better understand the platform and read the documentation for getting started with contributing code and continued my education journey from there.
- Familiarize yourself with the organizational hierarchy and technical roles. Different people usually maintain different parts of the project (per approvals permissions). Knowing about the various roles — author/owner, maintainer, contributors, reviewers, approvers and associated permission approvals — helps to orient me with the community and form an understanding of the permissions I’ll eventually wish to obtain within the project.
- Learn the procedure to follow in the event a vulnerability problem is identified. The project’s Security Incident Response Policy (found in a security.md file or the project’s website), describes the process for reporting a problem to a dedicated group of maintainers or security experts. Security issues are announced publicly once they are fixed.
Be Willing to Be a Beginner
Understanding how a community “ticks,” will get you started on the right foot and help integrate you into the community smoothly. Give yourself time to digest the documentation, grasp the project’s objective and its underlying technologies. Start with beginner-level tasks and gradually progress to more complex ones. Know, too, that once you’re part of an open source project and interacting with other contributors and/or maintainers, you can seek out a mentor who has worked in the areas you’d like to learn more about.
To find out more about making your first beginner-level code contribution, stay tuned for the second blog of this series, where we’ll discuss finding “a good first issue,” good practices to follow when submitting a change, and how making your early contributions will boost your confidence and provide an understanding of the project’s workflow.