According to Google Analytics, one of the most heavily trafficked posts on my blog is the one I wrote years ago, the Risks of Distributed Version Control. It’s full of a lot of semi-angry comments about how wrong I am. I thought I would follow up to that post with some newer thoughts and news.
I have to say, after using Mercurial for a bit, I think distributed version control is pretty neat stuff. As Subversion tests a final release candidate for 1.5 (which features limited merge-tracking abilities), there’s a bit of angst going on in the Subversion developer community about what exactly the future of Subversion is. Mercurial and Git are everywhere, getting more popular all the time (certainly among the 20% trailblazers). What role does Subversion — a “best of breed” centralized version control system — have in a world where everyone is slowly moving to decentralized systems? Subversion has clearly accomplished the mission we established back in 2000 (“to replace CVS”). But you can’t hold still. If Subversion doesn’t have a clear mission going into the future, it will be replaced by something shinier. It might be Mercurial or Git, or maybe something else. Ideally, Subversion would replace itself. If we were to design Subversion 2.0, how would we do it?
Last week one of our developers wrote an elegant email that summarizes a potential new mission statement very well. You should really read the whole thing here. Here’s a nice excerpt:
I'm pretty confident that, for a new open source project of non-huge size, I would not choose Subversion to host it [...] So does that mean Subversion is dead? That we should all jump ship and just write a new front-end for git and make sure it runs on windows? Nah. Centralized version control is still good for some things: * Working on huge projects where putting all of the *current* source code on everyone's machine is infeasible, let alone complete history (but where atomic commits across arbitrary pieces of the project are required). * Read authorization! A client/server model is pretty key if you just plain aren't allowed to give everyone all the data. (Sure, there are theoretical ways to do read authorization in distributed systems, but they aren't that easy.) My opinion? The Subversion project shouldn't spend any more time trying to make Subversion a better version control tool for non-huge open source projects. Subversion is already decent for that task, and other tools have greater potential than it. We need to focus on making Subversion the best tool for organizations whose users need to interact with repositories in complex ways[...]
I’ve chatted with other developers, and we’ve all come to some similar private conclusions about Subversion’s future. First, we think that this will probably be the “final” centralized system that gets written in the open source world — it represents the end-of-the-line for this model of code collaboration. It will continue to be used for many years, but specifically it will gain huge mindshare in the corporate world, while (eventually) losing mindshare to distributed systems in the open-source arena. Those of us living in the open source universe really have a skewed view of reality. From where we stand, it may seem like “everyone’s switching to git”, but then when you look at a graph like the one below (which shows all public (not private!) Apache Subversion servers discoverable on the internet), you can see that Subversion isn’t anywhere near “fading away”. Quite the opposite: its adoption is still growing quadratically in the corporate world, with no sign of slowing down. This is happening independently of open source trailblazers losing interest in it. It may end up becoming a mainly “corporate” open source project (that is, all development funded by corporations that depend on it), but that’s a fine way for a piece of mature software to settle down.