A long time ago, I did a more than a little bit of open source work. Unfortunately, I always found the process of being a part of an open source project to be a pain.
The process usually went something like this:
- Fix a bug in the code.
- Post patches to the dev list.
- Bug people to get your patches accepted and committed.
- By the time they are accepted, someone else has committed something that breaks them.
- Wash, rinse, repeat
Once you do this enough times, you get commit rights and you don't have to deal with the process anymore.
I've never enjoyed it. Far too much overhead and bullshit.1
So for the last (more than a) couple of years I've taken to forking code when I needed to and then never bothering to give the patches that I wrote back to the maintainers.
Clearly not the best situation, but it worked for me.
GitHub changes all of that.
On GitHub, I can fork anyone's code, patch it, push my changes back, send a pull request, and then not worry about it.
I can share my code with no overhead.
Example: I fixed a bug in the merb cucumber bindings last week. I pushed my changes to GitHub and sent a pull request to the maintainer. My changes haven't been pulled into the main tree yet, but I don't really care.
One look at the GitHub merb cucumber network graph should show any prospective users of the library that development has happened on my tree beyond that of the original tree. Hopefully they'll take the time to look at it and use the most up-to-date code.
Either way, I don't have to worry about it anymore.
Also, I love that GitHub lets me share my half finished projects.
I recently posted a partially done Merb based blog called Gutenberg on GitHub.
Will I ever finish it? Who knows.
At the very least it's a simple Merb example project for people to learn from, and I already know people who have looked at it to learn more about how Merb works. That already makes it worthwhile to me.
Again, no overhead.
Just push code onto GitHub and it's live to the world.
No pain. No overhead. Just code.
- As an aside, I really like commit policies like one that Rubinius has, namely, "anyone who submits a patch for some part of the Rubinius project and has the patch accepted will be given commit rights to the mainline repository." We need more projects with commit policies like that.