Sunday, March 22, 2015

The first patch I received

People often speak about contributing to an open source project and how that allows you to grow as a developer. Rarely if at all anyone speaks on the impact that patch has on the person receiving it. In this post I'll go over a patch I received 7.5 years ago and the reasons why I still remember it up to this day.

On the 17th of October 2006 I started a project with a friend. Movie-Get (mget for short) was a simple ruby script that was able to download videos from popular hosting sites back in the day. If you look around in the same area today you could compare it to JDownloader or youtube-dl in the provided functionality. It was a fun project for both me and my friend. It was also a nice way to learn ruby while doing something meaningful that both of us used on a daily basis.

We both were quite serious about it and mostly because it was our first 'solid' project where we tried to cover everything:
  • release management
  • issue tracking
  • version control
  • software architecture
  • licensing
Looking at the project today, it was a bigger success than we both expected while still treating it as a hobby. The first set of big surprises was finding that our software is being packaged for some popular Linux distributions: Arch, PLD, Debian/Ubuntu - far more than we expected.

Over time the project grew in features, being able to download from more sites & more formats. We spun up a Ruby on Rails interface for it on movie-get.org (don't go there, the domain is defunct for a long-long time). The download counter for the Windows NSIS installer went into thousands it was really encouraging for a bunch of kids working on software for fun.

All of the above is nothing compared to the email I found in my inbox on one Wednesday morning:

Delivered-To: netprobe@gmail.com
Date: Wed, 5 Sep 2007 11:01:48 +0200
From: "Marcin Babnis" <marcin.babnis@gmail.com>
To: netprobe@gmail.com, defc0n@da-mail.net
Subject: mget module for ceskatelevize
MIME-Version: 1.0
Content-Type: multipart/mixed;
    boundary="----=_Part_4905_22064612.1188982908989"

------=_Part_4905_22064612.1188982908989
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Can download videos from http://www.ceskatelevize.cz/ in wmv and ra format



Regards

Marcin Babnis

------=_Part_4905_22064612.1188982908989
Content-Type: application/octet-stream; name=czechtv.patch
Content-Transfer-Encoding: base64
X-Attachment-Id: f_f67lm95u
Content-Disposition: attachment; filename="czechtv.patch"
The attachment was this patch:


It's hard to describe how I felt on that day. That single email and some code validated the whole project to me. Not only someone found value in the utility itself but also took the time to learn the code base enough to provide a meaningful contribution and actually sent it back to us. I was also forced to learn how the patch(1) tool works but that's a different story :P

So how it all went from there? Small email exchange:

Hi there,

On 05/09/07, Marcin Babnis <marcin.babnis@gmail.com> wrote:
> Can download videos from http://www.ceskatelevize.cz/ in wmv and ra format
>
>
>
> Regards
>
> Marcin Babnis
>
>
Thanks for the patch, it will go into the next mget release, but
before we do that, please specify on what licencse are You releasing
your code. Of course all credit will go to You directly.
If You want to track the progress, here is a link for the issue
related to Your patch
http://code.google.com/p/mget/issues/detail?id=31
Please feel free to continue contributing patches, all help is appreciated.
If you want to talk about the project or the possibility to join the
development team, then you can reach me on jabber id:
mulander@uaznia.net
and the contributors reply

On 9/5/07, Mulander <netprobe@gmail.com> wrote:
> Hi there,
> Thanks for the patch, it will go into the next mget release, but
> before we do that, please specify on what licencse are You releasing
> your code. Of course all credit will go to You directly.
Software should be free! Keeping same licence as rest (GNU) is a good option.

> Please feel free to continue contributing patches, all help is appreciated.
> If you want to talk about the project or the possibility to join the
> development team, then you can reach me on jabber id:
> mulander@uaznia.net

I only wanted to download some shows from czechtv so I wrote a module :-)

Marcin Babnis
That's it. The code went in and was shipped to users. The thing that you might not realise is that little interaction really shaped me as a developer I am today. That's the difference between saying 'whatever' while hitting a bug and taking the time to sit down, debug & fix it. Marcin if you're reading this - I owe you a beer :) feel free to claim it. For everyone else - don't over-think stuff, you are perfectly able to contribute to a small open-source project and someone might benefit from it in a more meaningful way then you might ever expect.


One final note. It's really sad that Google code is closing down. The mget project was migrated to github but the repository history feels really 'pruned'. The information I wanted to look up for this post wasn't really accessible on github or I was not able to find it. This commit for example is not as easy to track compared to the old interface. I think a lot of stories like this one will be lost along with Google shutting down the service.