Beyond CVS
On 23 February 2004 Subversion 1.0 was released, a centralised version control system developed by CollabNet from 2000 with the explicit goal of replacing CVS — the dominant tool of the previous two decades, increasingly seen as inadequate on several architectural grounds. The original team — Karl Fogel, Ben Collins-Sussman, C. Michael Pilato, Brian Behlendorf — had set the philosophy from the start as “CVS done right”: preserve CVS’s conceptual model (central server, local working copy, checkout/commit) while correcting its most serious flaws.
What changes with 1.0
Substantive novelties over CVS:
- Atomic commits — a commit operation that touches multiple files is a transaction; it either succeeds as a whole or has no effect. In CVS an interrupted commit could leave the repository in inconsistent state
- Directory versioning — CVS does not version directory structure; Subversion does, allowing tracked renames of files and folders
- Versionable metadata — arbitrary attributes (properties) associated with files and directories, themselves versioned. Handles
svn:ignore,svn:executable,svn:mime-type,svn:eol-style - Branching and tagging as cheap copies — a branch is a copy of the directory in the repository; copies implemented as logical hard-links (O(1) cost regardless of size)
- Binary file support — native binary file handling with binary diff (xdelta)
- WebDAV/DeltaV transport over HTTP(S) — Subversion uses mod_dav_svn on Apache HTTP Server, reusing web server authentication/authorisation infrastructure
- Alternative transport
svn://(svnserve) andsvn+ssh://for scenarios that do not require Apache
Repository backends
At the 1.0 release Subversion supports two storage backends:
- Berkeley DB — original backend, mature but with operational constraints (crash sensitivity, periodic maintenance)
- FSFS (filesystem-based) — alternative backend introduced in 1.1 (2004), simpler and more robust, destined to become the standard in the following years
The client and the protocol
The svn command covers the full use cycle: checkout, update, commit, add, delete, copy, move, diff, log, status, revert, merge, switch, export, blame, propset, proplist. Syntax is deliberately similar to CVS to ease migration of existing users.
Using WebDAV as network transport is a significant engineering choice: the protocol is standard (RFC 4918 for WebDAV, RFC 3253 for DeltaV), enables reuse of existing infrastructure (proxies, balancers, logs) and permits read-only repository access via browser.
Licence and distribution
Subversion is originally distributed under a CollabNet Apache-style licence, evolving toward full Apache License 2.0 in the subsequent donation path to the Apache Software Foundation (a process completing in 2009-2010). Code is hosted by CollabNet and an active community.
The TortoiseSVN GUI client — Windows Explorer integration started in 2002 — brings Subversion into the daily practice of teams unaccustomed to the command line.
The version control landscape
As of February 2004 the version control landscape is in transition:
- CVS — dominant but progressively replaced for new projects
- BitKeeper — distributed, commercial, used by the Linux kernel since 2002; use will end abruptly in April 2005
- Perforce — commercial, widespread in enterprise contexts
- GNU Arch and Monotone — experiments on distributed models, limited use
- darcs — functional alternative with patch theory, niche
Mass distributed (DVCS) systems — Git and Mercurial — will both arrive in April 2005, filling the gap left by BitKeeper’s abandonment in the Linux kernel community. Subversion does not anticipate that model but robustly consolidates the centralised paradigm, which will remain the standard choice for most enterprise teams throughout the decade.
Italian adoption
Subversion spreads rapidly in Italian development teams between 2004 and 2005, in software companies and in public administration teams with in-house IT. Compatibility with Apache and integration with issue tracking systems (Trac, which includes a Subversion browser, released at 0.8 in 2005) contribute to the widespread Apache + Subversion + Trac operational pattern as a minimal open source development stack.
What stays
Subversion’s contribution to development practice is durable: it has trained teams used to CVS to treat commits as transactions, rename as a tracked operation, branches as cheap copies. These insights have settled into development discipline and continue to influence subsequent systems. When Git and Mercurial arrive with their distributed models, the conceptual jump will be less abrupt for those coming from Subversion than for those arriving straight from CVS.
References: Subversion 1.0, CollabNet (subversion.apache.org after the 2009-2010 migration). Karl Fogel, Ben Collins-Sussman, C. Michael Pilato, “Version Control with Subversion” (O’Reilly). Apache Software Foundation. WebDAV RFC 4918, DeltaV RFC 3253.
