Linus Torvalds put the cat-among-the-pigeons after his rather clumsy attack on Subversion, CVS, Perforce and anything else that was specifically not a disconnected repository in a presentation to Google employees last year. Linus is of course obsessed with the Linux project to the extent that he thinks every company developing software should operate like the Linux project. His comments included:
- Subversion has been the most pointless project ever started.
- Subversion used to say CVS done right: with that slogan there is nowhere you can go. There is no way to do CVS right.
- If you like using CVS, you should be in some kind of mental institution or somewhere else.
- Bitkeeper is the only commercially available distributed SCM solution.
The trouble is of course that not all commercial companies operate like the Linux project, in fact very few do. The idea that software developers operate from within a remote cave, rather like a hermit in the middle ages, is more than a little far-fetched.
Git, BitKeeper, Mercurial and Bazaar are collectively referred to as ‘Distributed Version Control Systems’ or DVCS for short. But are they really distributed? In a sense, yes they are. The distribution comes from the fact that they work offline and everyone can have a copy of the entire source tree on their local machine. This is a really cool feature if you happen to be working in a loose-knit environment where working in a prolonged disconnected mode is a positive advantage, for example exploring multiple implementations without disturbing the master repository.
The problem is that, at any one moment in time, there is no ‘golden-copy’ of the source code assets, except via unenforceable convention. This presents quite a large problem to most software companies who undertake continuous builds. Working in a prolonged disconnected mode is fine but what happens if your laptop is stolen at the airport? Not only have you lost your work but you also run the risk of someone having access to the entire source code repository.
This pretty much means that companies, much to Linus’s disgust, must adopt some sort of centralized source code repository or do they?
So I’m pretty biased. Actually, no, I’m very biased but I think WANdisco really is a distributed source code management system (for Subversion and CVS) I don’t think that having a centralized repository with distributed developers solves the problems of distribution either.
In the case of WANdisco every replica is a golden copy of the source code repository. The assumption WANdisco makes is that development teams are working collaboratively even across global teams, with continuous integration of their efforts. Here you get the best-of-both-worlds: performance of a local repository for the entire global team, with the manageability and continuous integration associated with central repositories.
Bottom line: Git, Bitkeeper, Bazaar and Mercurial should not be referred to a Distributed Version Control Systems – they are Disconnected Repository Systems and Subversion / CVS users do not belong in ‘some sort of mental institution’ but I would recommend that Linus get’s out of his virtual reality bubble before it completely seals.