Git Intern Week Three: OpenSource - Where Learning Meets Contribution
One of my contributions to Open Source was working on Docker containers and creating a Dockerfile at the Open Science Initiative for Perfusion Imaging (OSIPI). Although I had some knowledge about Docker, it was not sufficient to complete the task at the time. To be able to finish the task, I had to deeply learn about Docker and creating Dockerfiles. After completing my learning, I approached the task and submitted a PR for it. After multiple reviews by one of the OSIPI maintainers, Eric Peterson my PR was merged into the OSIPI codebase.
A similar story occurred while I was working on a PR at systemd that involved using more complex C macros. I had to improve my knowledge of C macros before submitting the PR, which was reviewed by the systemd maintainers. Similarly, when I wrote documentation for the official Python documentation, I had to learn how to use tools like Sphinx. In fact, all the open source projects I have contributed to required me to learn new skills or improve my existing knowledge.
Apart from learning to solve an issue or complete a task, I also learned a lot during reviews by these project maintainers. One instance I vividly remember was a PR I submitted to systemd that was reviewed by Lennart Poettering. His explanation helped me fully understand typecasting in C.
In my last blog, I mentioned that I was going to work on a new configuration option, osversion.command
. During my discussion with my mentor Christian Couder, he asked me to look into the capture_command()
function in the Git codebase, which is used to execute commands in Git. To fully understand what the function does, I had to revise and research topics like processes
, fork
, wait
, and signals
. One resource that helped me was the YouTube playlist Unix Processes in C.
Learning is one of the most valuable aspects of contributing to and participating in Open Source. You get to explore new technologies and, importantly, learn directly from those who created them. A common concern I hear from people about contributing to Open Source is that they feel like beginners. This should not stop anyone from getting involved. Start with what you know—volunteer to write documentation (this is how many of us started), learn along the way, and then contribute more. In fact, no matter how much of an expert you think you are or could become in a tool or technology, you are likely still a beginner compared to the maintainers of Open Source projects who created those tools or technologies.
My Update from Last Week
I learned a lot about Unix processes in C, reiterating on my previous commits, specifically regarding the transfer.advertiseOSVersion
configuration option, based on my mentor’s comments. I also submitted my first implementation of the osversion.command
configuration option, which I described in my last blog. One important update: my mentor’s reviews will now be on GitLab, and you can find my Git fork on GitLab here. I will also continue to push updates to my GitHub here.
Next Week
Next week, my main focus will be on reiterating and improving my osversion.command
configuration option. If I have additional time, I plan to start working on the osversion.format
configuration option, which specializes the string exchanged between clients and servers using the new OS version capability, according to the format specified by this option.
I’ll provide more technical details about the implementation of osversion.command
next week. See you then, and enjoy!
Thank you.