written by Antonio Murdaca, (@runc0m)
I’ve always struggled with finding the free time to give back some of what I take from open source on a daily basis. This is by far the most obvious reason people find it difficult to start their open source “career” and turn contributing into a regular hobby. Unless you’re being paid for it, the time you spend contributing to open source is time you could have spent having a beer with friends.
And many times, discussions with colleagues about doing feature “X” for open source project “Y” ends with someone saying, “Who cares if I fix a typo or refactor something?”. You might not find the time to contribute because you actually don’t care, you feel your contributions aren’t valuable, or you simply prefer to do other things.
But as a user of open source technologies, these projects can be a god send. They help you with things you wouldn’t or couldn’t normally do in your office or free time, and give anyone, anywhere the opportunity to learn something. Don’t you find this really amazing? That’s why I’ve always thanked everyone who’s released their project on GitHub, even before I eventually got over the challenges and became a contributor myself.
What started with just a fraction of my free time invested in contributing eventually became all of it. And today, I work on contributing to open source (and the Docker project in particular) as part of my full-time job. Looking back on it, I think I made an amazing choice. Here’s my story!
In love with Golang
I’d always wanted to make contributions to open source projects, but my job at the time didn’t allow me to contribute on a daily basis, nor was I excited to contribute to the PHP projects that would have been relevant to my work. But then one day, I heard about this programming language everybody was talking about called Golang.
I started learning Go after reading lots about this new language and found it appealing because it somehow reminded me of the C programming language. I instantly felt in love with it. I eventually managed to get some tiny Go projects up at the company I worked at, and this helped me grasp the basics. But I wanted to do even more with my newfound language of choice and I told myself, jokingly, “I’ll master it!”.
Knowing I couldn’t reach the next level without daily, hands-on experience, I went to GitHub and looked for some Golang projects I could study to become more proficient. I had already been working with Docker at work where my team did a really good job of moving all of our development environment on Docker Compose, so I wasn’t a total newcomer to this project. I was really amazed to find it on GitHub and, guess what, it was (almost) entirely coded in Golang. What an amazing opportunity!
Learning through doing
Now I had the chance to continue improving my Go knowledge while also studying Docker internals in-depth. (I always asked myself how these containers were actually working.) Eventually, I read most of the codebase and started understanding how the program was working. That itself showed me even more parts of Go to learn and practice!
And then came the hard part: how could I start doing something on this Docker project? How could I be helpful to the team managing the repository? How could I improve this tool I was using every day? Did I say this was the hard part? Turns out the issues were labeled by difficulty level, or how proficient you felt you were with the technology. Lucky for me, there were plenty of beginner issues in the queue and I soon started making pull requests.
One by one those PRs were being merged, and the code reviews with the maintainers helped me better understand where I was making mistakes with both Go and programming in general. As I improved I moved on to tackle more difficult issues. The maintainers and people around the project could not have been more helpful as I went along, and eventually I went on to help others myself.
I loved helping people figure out why Docker had problems running on their systems. I started taking care of many issues and proposing fixes for them. But what I really enjoyed was cleaning up code and refactoring. This kind of work allowed me to improve slowly and safely with the project, and I now feel more confident when playing around with a new feature, bug fix or code review.
Just a few months after my first pull request, I was hoping to find even more time to help with the project. That’s around the time I became an official Docker maintainer, something that I could never have predicted when I first stumbled across the Docker project on GitHub. To everyone I got in touch with during those first months: I couldn’t thank you more!
Finding a community
Believe me, I’ve never been as excited about open source as I now am with Docker and Golang! Contributing to open source isn’t just an opportunity to learn something new. What’s really amazing and rewarding is to be part of the community around the project you are contributing to.
You make new friends, and why not, new colleagues. You share ideas and knowledge. You have a chance to make the project better, even if it’s just fixing some typos in the documentation. And the Docker project in particular is one with a big and vibrant community.
So what are you waiting for? Why are you still reading this footer and not checking out the issue page on GitHub? Oh, and you might want to bookmark this link. 🙂
Learn More about Docker
• New to Docker? Try our 10 min online tutorial
• Sign up for a free 30 day trial of Docker
• Share images, automate builds, and more with a free Docker Hub account
• Read the Docker 1.8 Release Notes
• Subscribe to Docker Weekly
• Register for upcoming Docker Online Meetups
• Attend upcoming Docker Meetups
• Register for DockerCon Europe 2015
• Start contributing to Docker