Manjusaka

Manjusaka

The Open Source Community I Love

Today is a great day. Initially, @yuchanns, who I introduced to the nerdctl community, was recommended by the project's main maintainer @AkihiroSuda to become a maintainer of the project, as seen in nerdctl#PR1540. I was also nominated as a committer in this project, as seen in nerdctl#1539.

With so many discussions about open source in the public interest group today, I want to write an article to record my own experiences, hoping to help more people love and embrace open source.

Why I Participate in Open Source#

The first open source project I participated in can be traced back to 2016 when I was still in my undergraduate years. At that time, I joined the Gold Miner Translation Plan (which claims to be the best English technical information translation project, and I think it's not an exaggeration). In this project, I first encountered Git Workflow and fully experienced GitHub, the world's largest same-sex friendship community (although I have made great friends through this project). My first contribution to a code project can be traced back to March 2017 when I added a code example to the Sanic project, as seen in Sanic#PR558.

Since then, I have been continuously participating in open source communities. So far, I have contributed to many open source projects, including CPython, Docker/Moby, Taichi, Logseq, Kubernetes, Dubbo, TiDB, nerdctl, and more. I have also been continuously learning the working methods, culture, and technology of open source communities. (The last sentence was automatically completed by GitHub Copilot) (XD)

So, why do I participate in open source communities? Or, to put it more pragmatically, what benefits has the open source community brought to me?

Simply put, it has contributed to my comprehensive growth.

First and foremost, participating in open source communities has been an excellent process of improvement for me. You can learn a lot of things here:

  1. How to effectively persuade others.
  2. How to write good unit tests.
  3. How to polish code style.
  4. How to help other newcomers.

Let's not discuss the earlier links for now. You can see my contributions to the nerdctl project in 2022 nerdctl#ZheaoLi. It is evident that the quality and style of my pull requests have improved significantly from the beginning to the end. This is actually the most tangible growth that the open source community has brought to me. I am grateful to have excellent Community Mentors who never hold back on my pull requests and provide strict reviews, which have prompted my continuous growth.

At the same time, it has given me the opportunity to express my own ideas, initiate proposals (such as nerdctl#Issue1387), learn to be an owner, and help more newcomers get involved.

In a sense, this is a special experience that daily work cannot provide. The relatively fewer conflicts of interest in open source communities make mutually beneficial behaviors more pure and natural, leading to greater personal benefits. Here, I quote a statement from @yuchanns tonight:

I think everyone has encountered this dilemma when learning programming: after learning, you don't know what to do and feel like you haven't learned anything, so you look for various practical tutorials to deepen your understanding.
This phenomenon quickly disappears when you start working because you have practical application scenarios.
But when you become interested in other areas, you will encounter this confusion again, which is not often encountered in work. Unless you change jobs, you can't get rid of the dilemma through work experience.
This is where participating in an open community is great. The needs generated by other people's work provide you with practical scenarios.
You don't need to get involved in specific work one by one, as long as you solve the needs that arise from them, you can have the opportunity to apply what you have learned.

Of course, from a pragmatic perspective, actively participating in open source communities allows you to meet interesting people, which can make your career smoother.

How to Participate in Open Source Communities#

Participating in open source communities can be done in two ways:

  1. Establish your own project's open source community.
  2. Join an existing open source community.

I will mainly discuss the latter.

Many people give the three questions of open source: "I want to participate in open source communities, but I don't know how," "I want to participate in open source communities, but I don't know how to find a project," "I want to participate in open source communities, but I'm not skilled enough, what should I do?"

In fact, these problems are not as difficult to solve as you might think. It may just require a little action and curiosity.

In fact, the open source community has become extremely large over time. No matter what your technical stack is, you can find a suitable project to participate in. Moreover, the entry barrier for participating in open source communities is getting lower and lower. You don't need to understand the entire project's code; you only need to understand the project's issues and solve them to participate in the open source community. So, how to find a project to contribute to?

I have two approaches:

  1. Use the Explore page on GitHub to find new projects and see if they address my pain points.
  2. Promotions on social media.

The source of the nerdctl project actually came from my friend @Junnplus's promotion on Twitter.

Screenshot at the time

Then I looked at the positioning of this project and found that it actually addressed my pain points, so I started using this project in my environment.

In fact, finding a project that interests you is not difficult at all; it may just require a little curiosity.

So, once I find a project, how do I participate?

This is where a little action is required. Here's what I usually do:

  1. Scan the issue section and subscribe to the project. The issues of a project can give me an idea of its development direction.
  2. Continuously use the project and turn any problems I encounter into issues, which can then be turned into pull requests.
  3. Use my existing knowledge to migrate and try to discover potential issues.

Taking nerdctl as an example, there are occasional appearances of Good First Issue in the issue section. At such times, you can actively claim the corresponding issue and contribute to it (from my perspective, the level of attention given to Good First Issue by project maintainers determines the long-term development of a project). @yuchanns's first pull request nerdctl#PR1331 actually came from a Good First Issue I raised nerdctl#1330. Of course, for a project that already has a certain scale, waiting for Good First Issues may require some luck. So, what can you do? The answer lies in points two and three.

My first contribution to nerdctl was PR nerdctl#PR790, which originated from the issue I raised nerdctl#Issue775. This issue was a bug I discovered while using the project, specifically related to authentication under a private image repository. I turned the issue into a corresponding pull request. My other contributions to this project were also aimed at fixing problems I encountered.

Another method is to use my existing knowledge to migrate and try to discover potential issues. The PR I submitted to Affine (a fantastic note-taking project) Affine#PR403 was based on my reading of their Dockerfile when I was building Affine locally (as an SRE, I am sensitive to this aspect). I found that they were not efficiently utilizing caching, so I submitted a PR to speed up the build process. This actually allows you to see a project from a different perspective, crossing domains and contributing to the project.

So, what about the last question of the three questions of open source, "I want to participate in open source communities, but I'm not skilled enough, what should I do?"

First of all, it should be said that the essence of open source communities lies in learning and growing while doing. For example, when @yuchanns was writing nerdctl#PR1407 (which mainly added an option to bind MacAddress to containers), he was not very familiar with CNI at the time. However, he learned while doing, and we discussed the solution several times in the group. The PR was eventually merged smoothly. In a sense, this is also one of the joys and charms of open source communities.

But if you say that you currently lack background knowledge and want to learn more before writing code, can you still contribute? Yes, you can. As @tison famously said, "A community's activities are definitely diverse." For example, when I reported a bug to bytebase, I found that their ticket template was not user-friendly, so I submitted Bytebase#PR3050 to refactor their issue template. They further improved it based on my work. Therefore, issues, documentation improvements, and helping refine use cases are all great ways to participate in open source communities.

Of course, newcomers may have concerns about what to do if their contributions are rejected. Rejection is quite common. For example, my issue lima#Issue1087 for lima was rejected quite badly. But being rejected is also a form of learning, allowing me to review my incomplete thinking during the discussion.

So, as you can see, participating in open source communities is not as difficult as you might think. All you really need is a little action and a little curiosity.

Conclusion#

From the birth of the Internet to the present, the open source movement, with its idealistic nature, has truly changed the world. People from all over the world, under the banner of open source, freely express their creativity and make progressive changes to the world. Sometimes, when I think about the opportunity I have to participate in such a great activity, I can't help but tremble. I am fortunate to have joined this great cause early in my career, and I hope that more and more people around me will participate, sweating together, and finding their own promised land in this messed up yet beautiful world.

Long Live the Open Source!

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.