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 inconsistente
- 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 originariamente sotto una licenza in stile Apache di CollabNet, evolvendo verso la piena Apache License 2.0 nel percorso successivo di donazione del progetto alla Apache Software Foundation (processo che si completerà negli anni 2009-2010). Il codice è ospitato da CollabNet e da una comunità attiva.
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; l’uso terminerà bruscamente nell’aprile 2005
- Perforce — commerciale, diffuso nei contesti enterprise
- GNU Arch e Monotone — sperimentazioni su modelli distribuiti, uso limitato
- darcs — alternativa funzionale con teoria delle patch, nicchia
I sistemi distribuiti (DVCS) di massa — Git e Mercurial — arriveranno entrambi nell’aprile 2005, rispondendo al vuoto lasciato dall’abbandono di BitKeeper nella comunità kernel Linux. Subversion non anticipa quel modello ma consolida in modo robusto il paradigma centralizzato, che rimarrà la scelta standard per la maggior parte dei team aziendali per l’intero decennio.
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: ha abituato team abituati a CVS a considerare i commit come transazioni, il rename come operazione tracciata, le branch come cheap copies. Queste intuizioni si sono consolidate nella disciplina di sviluppo e continueranno a influenzare i sistemi successivi. Quando arriveranno Git e Mercurial con i loro modelli distribuiti, il salto concettuale sarà meno brusco per chi ha usato Subversion rispetto a chi arriva direttamente da CVS.
Riferimenti: Subversion 1.0, CollabNet (subversion.apache.org dopo la migrazione 2009-2010). Karl Fogel, Ben Collins-Sussman, C. Michael Pilato, “Version Control with Subversion” (O’Reilly). Apache Software Foundation. WebDAV RFC 4918, DeltaV RFC 3253.
