Open Source Contribution 101 🌱
How to get started?
Back-story ⏮
As a mentor at ADPList, I’m often asked about my open-source contributions as Apache committer and how to get started with Github.
Being appointed as an Apache Committer (apache/mxnet#19512) was one of my biggest achievements in the world of coding & technology. I wish to share the learnings from spending time with the open-source community. This prompted me to mentor early-career software professionals and computer science/engg university students. This article is an attempt to answer the question —
What would I do today in Nov 2022 if I were to start my journey in open source?
🙋🏽♀ What does open-source mean?
Github is the poster-child of open-source universe, having popularized the notion of repositories, pull requests & version control. Open-source is essentially about dezocratising access to the source-code. It’s about tearing down the walls pasted with non-disclosure agreements [NDAs] and restrictive copyrights & trademarks ™️. This doesn’t imply that open-source code doesn’t have licenses or copyrights. It is about providing freedom to share knowledge and information publicly with the security of proper citation and referencing. Open-source is a great leveler, in that sense. People from across the world can read, comment, write and express freely about the software being developed in the open-source world. It’s this freedom of expression, the fundamental human right, when applied to the world of software and technology, manifests in the form of “open-source”.
🙋🏼♂️What does open-source contribution entail?
Alright, now that we are on the same page as far as the term “open-source” is concerned. What activities are associated with OS contributions? 🧩
In my opinion, following sets of actions fall under the umbrella of OS contributions 📝
- Create issues, bugs & ask questions
- Raise Feature requests [through issues, jira or project tracking software]
- Ideate & make Proposals
- Comment and participate in discussions
- Answer questions
- Fix bugs
- Review code developed by other members in the community
- Add tests, improve the testing/CI/CD infrastructure
- Write new feature code
- Attend virtual/in-person events
- Evangelize the library/product/service
- Actively communicate in the discussion/chat channels/dev lists
- Vote & participate in the release process [of library/product/framework/service]
and many other things..
🏁 How should I get started?
I’d pursue 1 of the following 2 routes
- Famous project by renowned open source organizations
- Projects I’ve most context on
☝🏽 Find my first project(s) to contribute
Look up familiar projects supported by famous Open Source Organizations
- Apache Software Foundations — hadoop, hive, hbase, mxnet, cassandra
- The Document Foundation — LibreOffice [Open office] suite
- GNOME Foundation — famous GNOME desktop environment
- Linux Foundation — famous for UNIX-based operating system
- Mozilla Foundation — famous for browser
✌🏽Select from my high-context projects
An easy way to make meaningful impact to the developer community is when you already have some built-in mental model of the underlying product/framework/service. I’d channelize my energy in making those aforementioned open-source contributions by leveraging the knowledge & the context I’ve built thus far as a developer.
This could mean different projects for different developers, obviously based on the software stack they’re most used to.
I’ll list down common open-source projects based on languages:
Top 10 Javascript projects by Technical Geek
- React by Facebook/Meta
- Tensorflow.js by TF [originally by Google]
- Node.js
- Angular.js
- jQuery
- Node Package Manager [npm]
- Vue.js
- Ember.js
- Meteor.js
- Polymer
Top 10 Python projects by hackr.io
- Tensorflow — deep learning
- matplotlib — data visualization
- Flask — web dev
- Django by Django Software Foundation
- PyTorch — originally by Facebook/Meta
- MXNet by Apache Software Foundation
- Ansible — deployment, Ops & orchestration tool
- Requests — HTTP library by Python Software Foundation
- Scikit-learn — ML in python
- Pandas — data science/data analysis
Top 10 Java projects
- OpenJDK
- RXJava
- Apache Pinot — OLAP datastore
- Hazelcast — distributed computation and storage platform
- Google Java format — Google Java Style
- jOOQ — SQL for Java
- Spring Boot
- Glide — image caching and generation for Android
- Guava — core Java libraries by Google
- mockito — mock, test framework
For rest of the languages, I’d just
- search on Google with keywords “top 10 open source projects” and “language”
- Search on Github — https://github.com/search?q=java+language%3AJava&type=repositories&l=Java