Subversion 1.0: il versionamento atomico dopo CVS

Il rilascio di Subversion 1.0 (23 febbraio 2004) di CollabNet: commit atomici, versionamento delle directory, rename tracciato, backend FSFS/Berkeley DB e trasporto WebDAV/DeltaV. Un ricambio di generazione per i sistemi di controllo versione centralizzati.

R&DOpen SourceWeb SubversionSVNCVSCollabNetVersionamentoOpen SourceFull-Stack

Oltre CVS

Il 23 febbraio 2004 è stato rilasciato Subversion 1.0, sistema di controllo versione centralizzato sviluppato da CollabNet a partire dal 2000 con l’obiettivo esplicito di sostituire CVS — lo strumento dominante nei due decenni precedenti, ormai percepito come inadeguato per diversi aspetti architetturali. Il team originario — Karl Fogel, Ben Collins-Sussman, C. Michael Pilato, Brian Behlendorf — aveva definito sin dall’inizio la filosofia come “CVS done right”: conservare il modello concettuale di CVS (server centralizzato, working copy locale, checkout/commit) ma correggerne i difetti più seri.

Cosa cambia con la 1.0

Le novità sostanziali rispetto a CVS:

  • Commit atomici — un’operazione di commit che tocca più file è una transazione; o riesce per intero o non ha effetto. In CVS una commit interrotta poteva lasciare il repository in stato incoerente
  • Versionamento delle directory — CVS non versiona la struttura di directory; Subversion sì, consentendo il rename tracciato di file e cartelle
  • Metadata versionabili — attributi arbitrari (properties) associati a file e directory, a loro volta versionati. Gestione di svn:ignore, svn:executable, svn:mime-type, svn:eol-style
  • Branching e tagging come copie leggere — una branch è una copia della directory nel repository; copie implementate come hard-link logico (costo O(1) indipendentemente dalle dimensioni)
  • Binary file support — gestione nativa dei file binari con diff binario (xdelta)
  • Trasporto via WebDAV/DeltaV su HTTP(S) — Subversion usa mod_dav_svn su Apache HTTP Server, riutilizzando l’infrastruttura di autenticazione/autorizzazione del web server
  • Trasporto alternativo svn:// (svnserve) e svn+ssh:// per scenari che non richiedono Apache

I backend del repository

Al rilascio 1.0 Subversion supporta due backend di storage:

  • Berkeley DB — backend originario, maturo ma con vincoli operativi (sensibilità a crash, necessità di manutenzione periodica)
  • FSFS (filesystem-based) — backend alternativo introdotto in 1.1 (2004), più semplice e robusto, destinato a diventare lo standard negli anni successivi

Il client e il protocollo

Il comando svn copre il ciclo completo di utilizzo: checkout, update, commit, add, delete, copy, move, diff, log, status, revert, merge, switch, export, blame, propset, proplist. La sintassi è volutamente simile a quella di CVS per favorire la migrazione degli utenti esistenti.

L’uso di WebDAV come trasporto di rete è una scelta di ingegneria importante: il protocollo è standard (RFC 4918 per WebDAV, RFC 3253 per DeltaV), consente il riuso di infrastrutture esistenti (proxy, bilanciatori, log) e permette accesso al repository anche via browser in sola lettura.

Licenza e distribuzione

Subversion è distribuito sotto una licenza in stile Apache di CollabNet, che ospita il codice insieme alla comunità.

Il client GUI TortoiseSVN — integrazione con Windows Explorer avviata nel 2002 — porta Subversion nella pratica quotidiana di team non abituati alla riga di comando.

Lo scenario dei sistemi di versionamento

Al febbraio 2004 il panorama dei sistemi di controllo versione è in transizione:

  • CVS — dominante ma progressivamente sostituito per nuovi progetti
  • BitKeeper — distribuito, commerciale, usato dal kernel Linux dal 2002
  • Perforce — commerciale, diffuso nei contesti enterprise
  • GNU Arch e Monotone — sperimentazioni su modelli distribuiti, uso limitato
  • darcs — alternativa funzionale con teoria delle patch, nicchia

Subversion consolida in modo robusto il paradigma centralizzato e si propone come ricambio naturale di CVS nei team che ne avevano già digerito il modello mentale.

Adozione italiana

Subversion si diffonde rapidamente nei team di sviluppo italiani tra 2004 e 2005, sia nelle aziende software sia nelle amministrazioni pubbliche con gruppi IT interni. La compatibilità con Apache e l’integrazione con sistemi di issue tracking (Trac, che include un browser Subversion, rilasciato in versione 0.8 nel 2005) contribuisce al pattern operativo diffuso Apache + Subversion + Trac come stack minimale di sviluppo Open Source.

Cosa resta

Il contributo di Subversion alla pratica dello sviluppo è duraturo: sta abituando team abituati a CVS a considerare i commit come transazioni, il rename come operazione tracciata, le branch come cheap copies. Queste intuizioni entreranno nella disciplina di sviluppo e influenzeranno i sistemi successivi.


Riferimenti: Subversion 1.0, CollabNet. Karl Fogel, Ben Collins-Sussman, C. Michael Pilato, “Version Control with Subversion” (O’Reilly). WebDAV RFC 4918, DeltaV RFC 3253.

Vuoi supporto? Sei sotto attacco? Stato dei servizi
Vuoi supporto? Sei sotto attacco? Stato dei servizi