The holy war of the open-source era

Dis­trib­uted ver­sion con­trol sys­tems (DVCS) are all the range right now in the geek com­mu­nity. It has been just over 5 years since Matt Mack­all announced Mer­cu­r­ial to the world, and about the same since Linus Tor­valds announced Git. In the inter­veen­ing years, both have sprung up to be wor­thy com­peti­tors to one another, and more impor­tantly, viable replace­ments for the his­tor­i­cal cen­tral­ized ver­sion con­trol sys­tems, and really, any­thing that quick­ens the death of ClearCase and CVSgets my vote.

What wor­ries me is that there’s so many “flame wars” between the oppos­ing camps. At PyCon 2010, there was a great talk by Scott Cha­con of GitHub enti­tled “Hg and Git : Can’t we all just get along?”. The sum­mary mir­rors my views:

There is a fair amount of unnec­es­sary ani­mos­ity between devel­op­ers about ver­sion con­trol sys­tems, espe­cially between Mer­cu­r­ial and Git users. In real­ity, these two sys­tems are very sim­i­lar and can actu­ally coop­er­ate pretty well.

Git and Mer­cu­r­ial are more alike than dif­fer­ent. Rather than argue about the nuances of DVCS, let’s focus our energy on destroy — once and for all time — CVS and ClearCase. Sub­ver­sion is at least func­tional, but it too could go. Before we can do this, though, there’s one thing that has to be solved some­how, although I’m afraid it is a philo­soph­i­cal prob­lem with DVCS: large file sup­port. While there’s some effort to fix the prob­lem in both Git and in Mer­cu­r­ial, the real­ity is the prob­lem is a dif­fi­cult one when one of the core foun­da­tions of DVCS is that your “check­out” is really a “clone” of the entire repos­i­tory. This is how it is able to make a lot of things pos­si­ble, or at least fast enough to be use­ful. So, how do you deal with the ver­sion con­trol of large (> 10MB) files. These are more com­mon than you think. One project I work on has, quite lit­er­ally, hun­dreds of these files with extracts of other sys­tems that are expen­sive to per­form, but which form a depen­dency that needs to be tracked. For now, we keep those in Sub­ver­sion and the rest in Mercurial.

Finally, I think the real com­pe­ti­tion between Git and Mer­cu­r­ial is bet­ter viewed as the dif­fer­ence between GitHub and Bit­bucket. The real story is how these two sites have changed the inter­ac­tion model among devel­op­ers in open source projects. While GitHub cur­rently “leads” in adop­tion, with over 833,000 repos­i­to­ries (ver­sus who knows how many on Bit­bucket), the com­pe­ti­tion is excep­tion­ally impor­tant to drive fur­ther advances. These sites, and oth­ers like them, are where the rub­ber hits the road on chang­ing devel­op­men­tal processes. So whether you use Mer­cu­r­ial or Git, or even Bzr, remem­ber that col­lab­o­ra­tion is where the real inno­va­tion is hap­pen­ing. The change in orga­ni­za­tional inter­ac­tions is what really brings the ben­e­fit, the rest are just tools.

No Trackbacks

2 Comments

  1. Andrew Shebanow

    I must have missed some­thing: where are all these git/hg holy wars hap­pen­ing? Cause I’m miss­ing out! I know there has been some trash talk­ing here and there, but I don’t see any giant war going on, at least not at the “holy” level of emacs vs. vi, or linux vs minix.

    Posted 13 May 2010 at 4:00 pm | Permalink
  2. Per­haps it’s not an all-out “war” in the vein of vi v. emacs (emacs is, of course, the win­ner), but instead a holy kerfuffle.

    Posted 13 May 2010 at 5:58 pm | Permalink