Distributed version control systems (DVCS) are being adopted at a rapid pace by the open source software community. A large number of prominent open source projects are abandoning legacy management systems such as Subversion and CVS in favor of more powerful decentralized alternatives. The most popular of these are Git, Bazaar and Mercurial.

The primary factor that differentiates distributed version control systems from their centralized predecessors is that they are designed so that each individual working copy is actually a fully functional repository. This approach offers numerous advantages for open source development. With a DVCS, it is easier for developers to work independently without having to gain permission to access a centralized repository. It also boosts robustness by diminishing dependence on a single potential point of failure.

Git was originally created by Linus Torvalds to replace BitKeeper as the version control system for the Linux kernel. It has been adopted by many other high-profile projects, including Samba, Xorg, and Ruby on Rails. We also recently looked at a major Git migration that was undertaken by the Perl Foundation. Git is generally regarded as the current favorite of the open source community and could become a de facto standard. Here at Ars, our fearless web ninjas use it for several internal projects.

Bazaar, which was created by Canonical's Martin Pool, is one of the technological cornerstones of the Ubuntu software ecosystem. It supports tight integration with Launchpad, which is a project-hosting site and web-based distribution development platform that Canonical has constructed for Ubuntu. It has excellent documentation and is generally regarded as easier to learn than Git. It's primary weakness is performance, an area where it trails behind Git. Bazaar is used by a lot of projects, including MySQL, APT, and Gnash. Bazaar happens to be my current favorite and I use it for several of my own projects.

Mercurial is a highly scalable DVCS that was designed by Matt Mackall. It was originally intended to serve as a BitKeeper replacement for the Linux kernel, but it was displaced by Git. Although Mercurial wasn't adopted for Linux, it has been taken up by several extremely large projects, including Firefox, Netbeans, OpenJDK, and OpenSolaris. Mercurial offers very good performance and scalability. It also has better Windows support than Git and is easier to learn.

GNOME ponders a migration strategy



The numerous advantages of these distributed version control systems have made them powerful enablers of efficient community-driven development. The growing number of options available has, however, made it difficult for developers to choose one. Disputes over which system to use have become barriers to adoption for some projects.

This problem has taken center stage during the GNOME community's recent struggle to find a DVCS migration solution that is easy to implement and acceptable to a majority of stakeholders. The topic has been discussed by the GNOME community on several previous occasions without resolution. This time, however, consensus appears to be growing.

The GNOME developers conducted a survey in December to gauge the level of interest among project contributors. Over 1000 GNOME developers with Subversion accounts were invited to participate, and responses were received from 579. The raw data from the survey was published on Saturday and developer Elijah Newren followed up with a detailed report that includes numerous graphs and in-depth analysis of the statistics.

The study shows a very strong preference for Git and indicates that a majority of the respondents are in favor of a migration to a DVCS or don't have a strong opinion. The graphs also show that roughly 60 percent of respondents are already familiar with Git and just under 30 percent are already familiar with Bazaar. This is significant, because it reveals that many GNOME developers are also working on other projects for which distributed version control systems are being used.

Although there is clearly strong support for migration in the GNOME community, the task itself is not easy and there are some technical challenges that will have to be addressed. One approach that has been proposed is to add a Git server plugin to bzr-playground, an existing Bazaar mirror of the GNOME Subversion repositories. This approach would allow GNOME developers to seamlessly use either Git or Bzr depending on preference. John Carr, who proposed the solution, is already working on a proof-of-concept implementation.

Adopting Carr's hybrid solution would theoretically require a lot less manpower than doing a full Git migration, but some GNOME developers have expressed concerns about the maintenance problems that could arise in the future from using a non-standard hybrid solution. As a counter-proposal, a few GNOME contributors have expressed willingness to volunteer their time to manage a full migration to native Git. The matter is still being debated on the GNOME desktop developer mailing list.

Each large-scale project that migrates to a distributed version control system contributes significantly to the growing body of information we have about the challenges and rewards of undertaking further migrations. This helps other projects make an informed decision and allows them to face the prospect of a major transition with less uncertainty. As the growing trend towards DVCS adoption makes the technology ubiquitous, individual developers will have a lot more flexibility, but they will also clearly be required to gain proficiency with multiple systems.

Further reading

