Tyrannical SCM selection

Sun, 22 Oct 2006 20:44:23 -0700

Ok, so one thing I haven't blogged about is how the X.org SCM selection was made. Some of you may know the story, but it may surprise others to learn that there was no democratic process involved. Usually, X.org leans heavily on concensus or at least voting when making global choices about the direction of the project; I've been subjected to some of them and accept the consequences when things don't go my way.

However, when selecting and SCM, I decided (already the tyrant) that it really couldn't involve even a substantial minority of the project developers. Learning enough about the available SCMs takes a lot of time; I spent about a year looking at options and trying things out. During that time, I downloaded SCM source code, built repositories, converted bits of the X.org tree and looked at the results.

Finally, last January, I was fortunate to be at LCA along with key developers for Bzr, Mercurial and Git. Taking advantage of the situation, I sat down with each of them and talked about their system architecture and overall goals. After the week was over, it was clear to me that the right choice for X.org was Git. I'd say the chances of getting a dozen key X.org developers to spend that kind of time doing this research are slim, I happened to enjoy significant latitude in my activities between OLS and LCA in 2005 as I moved from HP to Intel.

Any choice which involves forcing dozens or hundreds of people to study abstruse details about a system which they have no fundamental interest is doomed to failure—most of the group will just not bother, and will end up choosing essentially randomly, with a slight bias to whatever is most familiar, assuming that familiar choices will be less likely to be really bad.

Hence Subversion; it sounds safe because it's advertised as 'just like CVS, except fixed a bit'. After only a few months, it was clear that SVN would be a really poor fit for X.org, and X.org developers were already rumbling about moving to SVN as the obvious upgrade from CVS. Clearly democracy was going to fail here.

So, I took matters in my own hands and pre-emptively switched a significant, if fairly stable, piece of the X.org infrastructure from CVS to Git. Perhaps not handled in the most politic fashion, the result was a reasonably animated discussion about the results. Suddenly the discussion ended; people discovered that Git wasn't that frightening and that I was reasonably serious about keeping at least the pieces I owned under Git control. Discussions about how to complete the migration from CVS to Git ensued shortly thereafter with a complete migration plan created that spanned a few months.

Yes, the developers were forced to come up to speed on a new SCM if they wanted to contribute. But, making the switch without a lot of sturm und drang meant we could focus more resources on helping those users figure out how to use the new system and fixing the various problems uncovered by the migration. I'm happy to say that now the transition is complete and development is proceeding apace. And, we've even gained contributions from some users who were already used to Git (thanks, Greg K-H) but refused to use CVS.