The Joy of Forking

The thing I love the most about distributed version control systems is not my ability to work on a plane, even though that is an oft-cited reason to use a DVCS. I am not often on planes, and when I am, I try to sleep through the experience. The joy of forking is what I most love about any of the DVCS systems in use today. Developers are expected to own and operate their own branch of any given code base if they want to contribute back to the project, and both forking and merging are made easy to support this notion.

This is especially helpful in the open source community because it reduces one of the major risks of small open source projects: maintainer abandonment. Many small projects have a bus factor of one, and if that one maintainer has better things to do, the project is guaranteed to stall if the source code is locked away in a traditional version control system.

Another nice side effect of easy branching and merging is increased collaboration. I saw a great example of this when I inquired about writing a state scraper for the Fifty States Project: a developer was able to give me a jump start by pushing incomplete code up to GitHub. This allowed me to pull his code, and no one using the canonical repository was impacted. It was a heck of a lot easier than emailing patch files, and it saved me a ton of work.