Appendice A. Sistemi di Controllo di Versione Liberi

Questi sono tutti i sistemi di controllo di versione di cui ero a conoscenza alla metà del 2007. L'unico che uso regolarmente è Subversion. Ho poca o nessuna esperienza con la maggior parte di questi sistemi, tranne Subversion e CVS; le informazioni qui sono prese dai loro siti web. Vedi anche http://en.wikipedia.org/wiki/List_of_revision_control_software.

CVS è in giro da molto tempo, ed è già familiare a molti sviluppatori. Nei suoi giorni fu rivoluzionario: fu il primo sistema di controllo di versione open source con accesso da Internet per gli sviluppatori (per quanto ne so), e il primo ad offrire checkout anonimi di sola lettura, il che diede ai nuovi sviluppatori un facile modo per venire coinvolti nei progetti. CVS tiene le versioni solo dei file, non delle directory; offre la possibilità di fare branch, mettere tag, e una buona prestazione sul lato client, ma non gestisce molto bene file grandi o binari. Non supporto commit atomici.[Disclaimer: sono stato attivo nello sviluppo di CVS per circa cinque anni, prima di aiutare ad iniziare il progetto Subversion per rimpiazzarlo.]

Subversion fu scritto inizialmente e principalmente per essere un rimpiazzo per CVS—cioè, per affrontare il controllo di versione circa allo stesso modo in cui CVS lo fa, ma senza i problemi e la mancanza di feature che la maggior parte delle volte annoiavano gli utenti di CVS. Uno degli obbiettivi di CVS è far percepire indolore la transizione a Subversion alla gente già abituata a CVS. Non c'è spazio qui per andare nel dettaglio delle funzionalità di Subversion; vedi il suo sito per maggiori informazioni. [Disclaimer: sono coinvolto nello sviluppo di Subversion, ed è l'unico di questi sistemi che uso regolarmente.]

Anche se costruito basandosi su Subversion, SVK probabilmente assomiglia a qualcuno dei sistemi decentralizzati sotto più di quanto lo faccia Subversion. SVK supporta lo sviluppo distribuito, commit locali, una sofisticata fusione dei cambiamenti, e l'abilità di rispecchiare alberi da altri sisetmi di controllo di versione non-SVK. Vedi il sito per i dettagli.

Mercurial è un sistema di controllo di versione distribuito che offre, tra le altre cose, "completo cross_indexing di file e modifiche; protocolli di sincronizzazione HTTP e SSH efficienti per CPU e larghezza di banda; unione di branch arbitraria; interfaccia web stand-alone integrata; [portabilità verso] UNIX,MacOs X and Windows" e altro (la precedente lista di funzionalità è stata parafrasata dal sito web di Mercurial).

GIT è un progetto iniziato da Linus Torvalds per gestire l'albero del codice del kernel di Linux. All'inizio GIT era piuttosto strettamente focalizzato sui bisogni dello sviluppo kernel, ma si è espanso oltre ed è ora usato da progetti diversi dal kernel Linux. La sua home page dice che è ".. disegnato per gestire progetti molto vasti con velocità ed efficienza; è usato principalmente per vari progetti open source, tra cui si nota il kernel Linux. Git cade nella categoria degli strumenti di gestione distribuita del codice sorgente, simile ad esempio a GNU Arch o Monotone (o BitKeeper nel mondo proprietario). Ogni directory di lavoro di Git è un repository completo con tutte le funzionalità di tracciamento di revisione, non dipendente dall'accesso alla rete o ad un server centrale."

Bazaar è ancora in sviluppo. Sarà un'implementazione del protocollo GNU Arch, manterrà la compatibilità con il protocollo GNU Arch quando evolve, e lavora con la comunità GNU Arch per ogni cambiamento di protocollo che potrebbe essere richiesto per la facilità dell'utente.

Bazaar-NG — http://bazaar-ng.org/

Bazaar-NG (or bzr) è al momento sotto sviluppo da parte di Canonical (http://canonical.com/). Offre una scelta tra lavoro centralizzato o decentralizzato all'interno di un singolo progetto. Per esempio, quando sei in ufficio, puoi lavorare su di un branch centrale condiviso; per cambiamenti sperimentali o lavoro offline, puoi creare un branch sul tuo laptop e fare il merge più avanti.

"David's Advanced Revision Control System è l'ennesimo rimpiazzo di CVS. E' scritto in Haskell, ed è usato su Linux, MacOS X, FreeBSD, OpenBSD and Microsoft Windows. Darcs include uno script cgi, che può essere usato per vedere i contenuti del vostro repository."

GNU Arch supporta lo sviluppo sia distribuito che centralizzato. Gli sviluppatori committano le loro modifiche ad un "archivio", che può essere locale, e le modifiche possono essere mandate e prese da altri archivi quando i gestori di questi archivi vedono che vanno bene. Così come una tale metodologia implica, Arch ha un supporto ai merge più sofisticato di CVS. Arch permette anche di creare facilmente branch di archivi a cui non si ha l'accesso al commit. Questo è solo un breve riassunto; vedi le pagine web di Arch per i dettagli.

"monotone è un sistema di controllo di versione libero. fornisce un deposito di versione semplice e transazionale sul file singolo, con un protocollo di operazione completamente disconnesso e di efficiente sincronizzazione peer-to-peer. capisce i merge sensibili alla storicizzazione, branch leggeri, revisione del codice integrata e test di terze parti. usa una nominazione di versione crittografica e certificati RSA lato client. ha un buon supporto per l'internazionalizzazione, non ha dipendenze esterne, va su linux, solaris, osx e windows, ed ha la licenza GNU GPL."

Codeville — http://codeville.org/

"Perchè l'ennesimo sistema di controllo di versione? Tutti gli altri sistemi di controllo di versione richiedono che teniate con attenzione traccia delle relazioni tra i branch così da non dover ripetutamente fare il merge degli stessi conflitti. Codeville è molto più anarchico. Vi permette di aggiornare dal vostro commit ad ogni repository in ogni momento senza inutili nuovi merge."

"Codeville funziona creando un identificativo per ogni cambiamento che viene fatto, e ricordando la lista di tutti i cambiamenti che sono stati applicati ad ogni file e l'ultimo cambiamento che ha modificato ogni riga in ogni file. Quando c'è un conflitto, controlla per vedere se uno dei due è già stato applicato all'altro, e se così fa vincere l'altro automaticamente. Quando c'è un conflitto di versione non risolvibile automaticamente, Codeville si comporta praticamente nello stesso modo di CVS."

"Vesta è un sistema SCM [Software Configuration Management] portabile orientato al supporto di sviluppo di sistemi software di praticamente ogni peso, da abbastanza piccoli (meno di 10,000 righe di codice) a molto grandi (10,000,000 righe di codice)."

"Vesta è un sistema maturo. E' il risultato di oltre 10 anni di ricerca e sviluppo al Compaq/Digital Systems Research Center, ed è stato usato in produzione dal gruppo di microprocessori Compaq's Alpha per oltre due anni e mezzo. Il gruppo Alpha ha avuto oltre 150 sviluppatori attivi in due siti distanti migliaia di miglia, sulle coste est e ovest degli Stati Uniti. Il gruppo ha usato Vesta per gestire i build con 130 MB di codice, ognuno generante 1.5 GB di dati derivati. I build fatti al sito ad est in un giorno medio producevano circa 10-15 GB di dati derivati, tutti gestiti da Vesta. Anche se Vesta è stato progettato con in mente lo sviluppo software, il gruppo Alpha dimostrò la flessibilità del sistema usandolo per lo sviluppo di hardware, controllando i loro file di linguaggio di descrizione hardware nella funzionalità di controllo di codice sorgente di Vesta e costruendo simulatori e altri oggetti derivati nel builder di Vesta. I membri del vecchio gruppo Alpha, ora parte di Intel, stanno continuando ad usare Vesta oggi in un progetto di microprocessore."

"Aegis è un sistema di gestione di configurazione software basato su transazione. Fornisce un framework in cui un gruppo di sviluppatori può lavorare su molte modifiche ad un programma in maniera indipendente, ed Aegis coordina l'integrazione di questi cambiamenti nel codice principale del programma, con le minori discrepanze possibili."

CVSNT — http://cvsnt.org/

"CVSNT è un avanzato sistema di controllo di versione multipiattaforma. Compatibile con il protocollo standard industriale CSV ora supporta molte nuove funzionalità. ... CVSNT è Open Source, software libero con licenza GNU General Public License." La sua lista di funzionalità include autenticazione attraverso tutti i protocolli standard CVS, più gli specifici di Windows SSPI e Active Directory; supporto al trasporto sicuro, via sserver o SSPI criptato; cross-platform (va in ambienti Windows e Unix ); la versione NT è completamente integrata con il sistema Win32; il processamento MergePoint significa mai più tag di cui fare il merge; sotto sviluppo attivo.

"Meta-CVS è un sistema di controllo di versione costruito attorno a CVS. Anche se mantiene molte delle funzionalità di CVS, incluso l'intero supporto alla reta, è più capiente di CVS, e più facile da usare." Le funzionalità elencate sul sito web di META-CVS include: versionamento della struttura delle directory, gestione dei tipi di file migliorata, fare merge e branch in modo più facile per l'utente, supporto ai link simbolici, liste di proprietà attaccate ai dati versionati, importazione di dati di terze parti migliorata, e facile processo di upgrade da CVS.

"OpenCM è progettato come un rimpiazzamento sicuro, ad alta integrità per CVS. Una lista di funzionalità chiave può essere trovata sulla pagina delle funzionalità. Pur non essendo 'ricco di funzionalità' come CVS, supporta alcune utili cose che mancano in CVS. In breve, OpenCM fornisce un supporto di prima scelta per rinomine e configurazione, autenticazione crittografica e controllo degli accessi, e branch nativi."

"Stellation è un avanzato ed estensibile sistema di gestione di configurazione di software, originariamente sviluppato alla IBM Research. Mentre Stellation fornisce tutte le funzionalità standard disponibili in ogni sistema SCM [Source Code Management, gestione di codice sorgente, ndt], spicca per un numero di funzionalità avanzate, come la gestione del cambiamento orientato all'attività (task oriented), versionamento di progetto consistente e branch facile, inteso per facilitare lo sviluppo dei sistemi software da parte di ampi gruppi di sviluppatori scarsamente coordinati."

"PRCS, Project Revision Control System (sistema di controllo di revisione di progetto), è la facciata di un insieme di strumenti che (come CVS) forniscono un modo per gestire insiemi di file e directory come un'entità, preservando le versioni coerenti dell'intero insieme. ... Il suo proposito è simile a quello di SCCS, RCS, e CVS, ma (secondo i suoi autori perlomeno), è molto più semplice di ognuno di questi sistemi."

ArX è un sistema di controllo di versione che offre funzionalità di branche e merge, verifica crittografica dell'integrità dei dati, e la possibilità di pubblicare gli archivi facilmente su ogni server HTTP.

SourceJammer — http://sourcejammer.org/

"SourceJammer sistema di controllo del codice e versionamento scritto in Java. Consiste in una componente lato server che mantiene i file e la storia delle versioni, e tratta i check-in e i check-out, eccetera e altri comandi; e una componente lato client che fa le richieste al servere e gestisce i file sul lato client del file system."

"Un sistema 'moderno' che usa insiemi di modifiche invece delle revisioni dei file e operazioni distribuite piuttosto che controllo centralizzato. Finchè avete un account di mail potete usare FastCST. Per grandi distribuzioni avete solo bisogno di un server FTP e/o un server HTTP o usare il comando precostruito 'serve' per fornire direttamente il vostro materiale. Tutti gli insiemi di modifiche sono universalmente unici e hanno tonnellate di meta-data così potete rifiutare tutto ciò che non volete prima di provarlo. Il merge è fatto confrontando l'insieme di cambiamenti con i contenuti della directory corrente, piuttosto di provare a farne il merge con altro insieme di cambiamenti."

Superversion — http://www.superversion.org/

"Superversion è un sistema di controllo di versione distritibuito multi-utente basato su insiemi di modifiche. Vuole essere un'alternativa di robustezza industriale, open source, alle soluzioni commerciali che sia facile da usare (o anche più facile) e similmente potente. Infatti, una usabilità intuitiva ed efficiente è stata una delle principali priorità nello sviluppo di Superversion fin all'inizio."