Quick Reference Guide to Free Software Decentralized Revision Control Systems

Quick Reference Guide to Free Software Decentralized Revision Control Systems version 5.1.0 2008-02-26

This is a quick summary of Free Software revision control systems, focusing on those which are suitable for decentralized development and which are under active development.

This page is only as comprehensive, accurate, and up-to-date as I can make it with limited expenditure of my time, and with the help of people who contribute corrections and updates. See Disclaimers, Other Resources, and Acknowledgements sections below.

Comparison of Key Features

name and URL status platforms decentralized notes last checked
Subversion mature unix, w32 no same idea as CVS 2008-02-25
Aegis mature unix yes continuous integration, enforced testing, auditing 2008-02-25
Vesta mature unix no filesystem interface; guaranteed repeatable builds 2008-02-25
monotone mature unix, w32 yes secure, decentralized, carefully engineered 2008-02-25
svk mature unix, w32 yes built on top of Subversion; written in Perl 2008-02-25
Mercurial mature unix, w32 yes good performance and portability 2008-02-25
bazaar-ng mature unix, w32 yes supported by Canonical/Ubuntu/Launchpad 2008-02-25
git mature unix yes used by Linux kernel hackers 2008-02-25
darcs nearing maturity unix, w32 yes uniquely flexible branching, merging, and cherry-picking 2008-02-25
Codeville nearing maturity unix, w32 yes sophisticated merge algorithm 2008-02-25

Explanation of Columns

status -- How mature is this project: "old", "mature", "nearing maturity", or "not yet mature".

decentralized -- Whether the tool facilitates code-sharing among developers who are independent and who are cooperating only loosely or even not at all. Note that although there are many different tools which are marked "yes" in this column, they differ widely from one another in the kinds of workflow that they support. Further explication would not fit in the margins of this web page.

platforms -- which platforms the tool works on; There are only two platforms: "unix" and "w32". A working, supported cygwin port counts for "w32" support.

notes -- whatever it occurred to me to write at the time that I was writing that field

last checked -- the date on which I last examined the project's web pages and mailing list archives and updated its entry in this file

Other Resources

John Goerzen has written a detailed and useful comparison of many tools. It is slightly out of date -- circa August 2006. He correctly predicted that GNU arch and bazaar v1 would soon be abandoned in favor of tools with better preservation of history across merges.

A web page I wrote explaining why darcs's merge algorithm is fundamentally more powerful and safer: because it uses more of the information that is available.

In addition to these resources, each tool has documentation on its web page.

Disclaimers

I may have made errors of fact or inappropriate insertions of opinion -- caveat lector. Please send corrections to <zooko@zooko.com>. To compress descriptions of these complex tools into one small table necessarily loses information. For more complete information, you'll have to read each tool's documentation, or the more detailed comparison documents cited in the Other Resources section.

Note the "last checked" field, which tells you how long ago I looked at that project's home page and updated that project's entry in this file. Many of these are quickly evolving projects and the description in this file may be out of date. If you have a particular interest in any of these projects, please send me an e-mail and tell me about it -- have you compared it to others? Is it stable enough that you actually use it in your development process? Are developers currently working on improvements to it?

Emotional Disclosure

I have several personal or emotional attachments to these topics. I am far from a disinterested observer. Why would a disinterested observer go to all of the trouble to maintain this document, anyway?

My favorite decentralized revision control tool is darcs. It has some deep bugs still (which is why I don't mark it as "mature") but it is very easy to use, and very easy to manage branches in a way that I've never been able to do before.

I had some small part in the forming the original concept of Codeville in coffeeshop conversations with my friend and the original author of Codeville, Bram Cohen.

I am a personal acquaintance of Graydon Hoare, the founder of monotone. I respect his software engineering acumen.

I love the simplicity and efficiency of C, the programming language used to write SVN, and git. I appreciate the power and performance of C++, the programming language used to write Vesta and monotone. I admire the sophistication of Haskell, the programming language used to write darcs. I love the beauty and balance of Python, the language used to write Mercurial, Codeville and bazaar-ng.

Acknowledgements

Thanks to Glen Starrett , drl , Chia-liang Kao , David Phillips , Rob Weir , Tommi Virtanen, Walter Landry, Ross Cohen, Martijn van Beers, Thomas Arendsen Hein, Stefano Spinucci, and David "ddaa" Allouche for contributions of facts or of text for this document.


Zooko
Last modified: 2008-02-25