ArX
Distributed Version Control
http://www.nongnu.org/arx
Walter Landry
wlandry@ucsd.edu

What is ArX?

ArX is a version control system

Version control systems record changes to files and directories, so that you can always go back to an earlier version of a file.

This turns out to be incredibly useful in a number of different situations, such as when you make an ill-considered
change. Or
even to make
spiffy graphs.

Why ArX?

The standard for networked version control involving multiple developers is CVS

CVS is a free, portable, reasonably fast
version control system with a plethora of supporting projects (GUI, viewcvs, etc.).

But CVS has many problems

CVS Problems

No atomic commits or retrievals

Does not support renames

Inefficient with binaries

Interacts badly with backup software

Tends to leave stale locks

Development has stagnated

What does ArX offer?

Atomic changesets

Renames

Cheap branching and tagging

Smart merging

Efficient handling of binaries

Fast for most common local operations

Strong cryptographic checksums and signatures

Internationalized (though not localized)

What does ArX offer?

Runs on Unix, Mac and Windows (Cygwin)

Easy backup and mirroring

Generate GNU style changelogs from checkin comments

Easy to pick and choose patches

Simple server requirements (plain ftp or http server)

Distributed

Many version control systems require everyone to commit their changes to a central server.

This does not work so well if you are in a plane or on a mountain.

ArX lets you make a local repository which you periodically merge with a central repository. If the network is unavailable, then you can continue making commits and using version control until it becomes available.

Distributed

It also allows people to make first class branches with read-only access. So strangers can contribute to a project without the main developers having to give them write access.

Centralized development still available through a patch queue.

How does ArX suck?

Still in beta

Large dependencies (gnome-vfs)

Not so good right now over high latency networks

No annotate or viewcvs

Quiet mailing list

No logo

The Competition

There has been a great deal of work done lately on free distributed version control systems

tla (aka GNU Arch)

monotone

darcs

svk

codeville

Tla (aka GNU Arch)

Tla and ArX both descend from a
common ancestor, the original shell script version control system written by Tom Lord.

The Good

Large, active community

Mature

Reasonably fast

Many additional projects have built upon tla (ViewARCH, GUI, etc.)

Few dependencies, so easy to install

The Bad

Works on Unix, Windows is so-so

Unnecessarily complex

Tommi Virtanen on monotone list: "arch was sort of baroque with {lotsof} =silly behaviours-that--annoy-me--0.1"

Uses inode signatures to detect file modifications, which is both unreliable and sometimes causes false alarms (e.g. copying a tree).

The Ugly

Confused Crypto

Uses MD5, which has not been recommended since 1996 and has recently been completely broken

Signatures only sign patches, not complete revisions. This requires a complete chain of trust, which tla does not enforce.

Development tends to stall. For example, there have been patches to use SHA-1 for over a year, but they have not been integrated into an official release.

The Good

Crypto integrated throughout the design

Crypto hashes are identifiers, making some risky development practices in ArX or tla completely safe.

Nifty graph tool

Reasonably fast

Somewhat active mailing
community

Works on Unix, Mac,
and Windows

The Bad

Beta

Crypto hashes are sometimes hard to use and remember

Given revision N, what is N+1 and N-1?

Given revision X, has patch Y included?

Requires crypto, and it is not something people already use such as GPG

No easy way to pick and choose patches.

Networking is a custom protocol that requires a special server.

The Ugly

The main developer just announced that he is going on a multi-month vacation. We will see how the community carries on.

The Good

Very easy to use

Works on Unix, Mac, and Windows

Fairly large, active community

Mature

Has a nice “send” command

Also uses hashes to uniquify patches

The Bad

Written in Haskell, which sometimes causes problems with installation.

No crypto checksum on the tree, and no crypto signatures except on the transport

Uses timestamps to detect file modifications (though can be turned off with a flag)

Patches can be commuted, making it difficult to get the exact state of a tree at a particular time unless you know that you will need it in the future.

The Ugly

Can be unbearably slow when merging conflicts

SVK

The Good

Reasonably fast

Comprehensive (91% coverage) test suite

Nice integration
with external
merge tools

SVK

The Bad

Uses Subversion as a backend, which solves a lot of problems, but introduces a big dependency

Uses timestamps+size+inode to detect file modifications. More reliable, but can still be fooled.

Mailing list is quiet

Written in Perl, so gets no respect

Codeville

Alpha

Not available as a deb, so difficult to install ;)

No mailing list

Requires a smart server.

Meaningless Graphs

These graphs were made for the following versions

ArX-2.2.0

tla-1.3-1

monotone 0.16

darcs 1.0.1

svk 0.26

codeville 0.1.10

Performance Graphs

I converted the first 1100 changesets of the 2.4 linux kernel into the different systems.

The tree grows from 118 MB to 176 MB

All tests were done on a 1.7 GHz Pentium M laptop with 512 MB RAM, running Debian testing with the 2.6.8 kernel and the XFS filesystem.

The Future

Better CVS integration

A true three-way merge

Better integration with merge tools

Web interface

graph output for ancestry

Improved configuration and tagging

Annotate

Localized Messages

Demo

2005-02-10T22:37:07