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) esvn+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.