GitHub rocks!
I know you have heard this before (and probably already believe it), but I just had to say it. GitHub has truly, IMO, changed the way open source projects can be started and developed. Let me tell you a little story in form of a timeline:
- December 9 2008 – While hanging out in #cucumber, on freenode, agib (Aaron Gibralter) asked about testing emails in a rails app. I had some old RSpec Story Runner steps for such the thing so I quickly extracted them into a plugin and modified them to work in Cucumber. I pushed it to GitHub and email-spec was born.
- December 11 – Aaron sent me a pull request with some additional functionality he had added.
- December 17 7:46pm – Mischa Fierer sent an email to the rspec-users mailing list telling about the new plugin and some cool additions he made in his own fork (which he had forked off of Aaron’s.) He also added a cucumber feature example in the README on how to use the steps.
- December 17 9:37pm – I see Mischa’s email and pull in his changes. I then created a sample rails app to illustrate how to use the plugin and ended up implementing the feature Mischa listed in the README. I also did this so we could verify that the plugin still worked after we made further changes. In one of my comments I alluded to making it more accessible to other web frameworks.
- December 18 8:00am – I woke up and found two GitHub pull requests. Shortly after I had pushed the sample app to GitHub Mischa had taken it, extended it and then used it to improve the error messaging in the plugin. Then he converted the plugin into a gem (making it more accessible to other web frameworks), rolled the sample app into it with a handy rake task to test it, and improved the documentation! I merged in his changes and then made some minor tweaks.
So in less than 10 days code that was sitting around in one of my projects had been extracted, forked twice, and turned into a gem. Pretty cool, huh? This is why I believe GitHub has changed the way open source projects are started and developed. Yes, I could have released my code on RubyForge, or SourceForge, etc.. but the fact is that I never would have. It takes so much longer, and is more intimidating to start a project on *Forge that I simply never would have done it. The code I was sharing was small, had some rough edges and just wasn’t “official” looking enough to warrant spending the time to do that.
When someone asks for code on a mailing list or in an IRC room you used to have two options: copy and paste the code into the email/room or use a site like pastie and send the link. With how easy it is to create repos on GitHub you can now simply “throw it on GitHub” (yes. you could also do a gist.) Since forking and sending pull requests is just as easy you will likely see more patches and contributors with it on GitHub than you would otherwise. GitHub also spreads the word of your code/project a lot faster too since it starts showing up in people’s activity feeds. I had originally put the code on GitHub for Aaron to look at and other people seemed to just stumble upon it. In short, the combination of git and GitHub’s collaboration tools makes one awesome platform to develop open source software on.