By James Cooley - June 07 2007 tags: scm cvs subversion git mercurial

Linus doesn't do many talks as he doesn't have a sales-pitch vision of where Linux is going. There's an interesting talk from Linux about Source Code Management (SCM) posted on YouTube:

According to Linus people who use centralized SCM are "idiots". As someone who had to use Clearcase across the Atlantic (servers in Palo Alto, developers in London) I was that idiot. Linus is sure that any attempts to fix a centralized SCM are misguided. He says the CVS replacement Subversion "has been the most pointless project ever started". Linus likes the commercial SCM BitKeeper but stopped all Linux kernel development and spend two weeks writing his own distributed SCM over the BitKeeper license dispute. According to him his two week effort was technically far superior to existing systems - although hardly anyone could use it :) If you don't have the time to watch all of the video there is a good overview of the main points of Linus GIT talk.

Shocking stuff but Linus is an edge case for SCM and software in general:

  1. he is the release manager for the Linux kernel so making SCM merges easy is vital. If he gets it wrong it has very serious consequences for Linux.
  2. he has to trust people to know about pieces of the kernel he is not expert on (e.g. networking).
  3. Windows support isn't a big issue if you are developing a kernel for Linux
  4. Linus was prepared to loose history - the kernel only has 2 years of history. All history before GIT isn't integrated.
  5. he uses an open source model with potentially thousands of contributors - a particularly fortunate but difficult position
  6. people do as he says - super intelligent people do re-merges for him if they clash with a contribution that was merged while their contribution was waiting to be merged. Most people have to cooperate and coordinate more.
  7. it's kernel development with C (so users are performance sensitive) and comfortable with command line tools
It will be interesting to see if GIT makes it to the mainstream or will become another footnote in Linux SCM history like the short lived move to BitKeeper. The good thing is that Linux is bigger than Linus and he is prepared to back down when it makes technical sense.

Mark Shuttleworth, the founder of Ubuntu, has a distributed SCM called Bazaar that didn't get onto Linus' shortlist. Bazaar, GIT and Mercurial (acknowledged as an acceptable alternative to GIT by Linus) are all evaluated for kernel development on SCM project history at OpenSolaris.org.

Mozilla decided against GIT and opted to switch from CVS to Mercurial. They have another evaluation of Mercurial, GIT, Git, Mercurial, Bazaar, and Monotone. They didn't go with GIT as

While they've made recent progress, Git was lacking in Win32 support and it was unclear that this would ever change and if it did change, it was unclear that Git-on-Win32 would ever become something more than a second-class citizen. As good, performant Win32 (and Mac and Linux) is a hard-requirement, Git lost in early Kombat rounds. This is unfortunate because (as we would soon find out), lots of issues with the other systems did "just work" in Git.

Integration with IDEs, build systems and bug trackers will be important for mainstream adoption. Mercurial is on track with initial Eclipse, Jira, and Trac support. Any real alternative will have to provide a clean upgrade path from the heavily entrenched CVS.

Distributed SCM would seem to be the future and open source tools would seem to be well positioned to get us there. In distributed SCM everyone is a committer so it completely eliminates one form of open source project politics. Merges are also easy so we may see projects accelerate with lots of extra contributions. Committer, happier, more productive :)