Jörg Schilling Source Code Control System (SCCS) Geschichte und aktuelle Ziele Fokus Fraunhofer
Anfänge, SCCS als erste Versionsverwaltung Im Jahre 1972 schreibt Marc Rochkind SCCS in Snobol für eine IBM 370. Das Dateiformat ist binär. Später wurde es von ihm in C neu geschrieben um es auf einer PDP 11 unter UNIX laufen zu lassen Am 18. Februar 1977 wurde SCCSv4 freigegeben, das History Dateien vollständig als Text Dateien verwaltet Danach gab es nur wenige Neuerungen in SCCS: Mai 1980 Eric Allman schreibt sccs(1) 1988 mit SunOS 4.0 binäre Inhalte durch uuencode 1999 SCCS wird Y2k clean
Das SCCS Konzept Versionsverwaltung von Einzeldateien Checksumme zur Sicherung der Integrität Atomare Updates der Einzeldateien Platzsparende Speicherung durch Interleaved deltas (alle Zeilen aus allen Versionen nebeneinander) Kein Extra Aufwand für das Anlegen von Branches Kein Extra Aufwand für das Mischen von Branches Gleichzeitige Nutzung durch mehrere Nutzer Verwaltung von Nutzer Zugriffslisten
Die Programme von SCCSv4 get Holt eine Version aus einem Historyfile delta Baut neue Versionen in ein Historyfile ein admin Legt neue Historyfiles an oder ändert Parameter cdc Ändert einen Deltakommentar (Versionskommentar) comb Beseitigt delta Bereiche (z.b. alles vor 1.9) help Gibt Erklärungen für Fehlermeldungen prs Gibt Metadaten von Historyfiles aus rmdel Beseitigt ein Delta am Ende eines Branches sact Listet Edit Aktivitäten auf
Die Programme von SCCSv4 Fortsetzung sccsdiff Listet Unterschiede zwischen Versionen unget Beseitigt die Effekte von get -e val Validiert SCCS Historyfiles auf Defekte what Sucht SCCS Marker @(#) in Dateien sccs SCCS Frontend mit zusätzlichen Meta Kommandos wie: sccs create Überführen von Files ins SCCS sccs diffs Vergleicht Edit Version gegen ältere sccs edit Checkt editierbare Version aus sccs unedit Beseitigt editierte Dateien
Das SCCS Historyfile Format SCCS Magic auf erster Zeile ^Ahnnnnn Alle Steuerzeilen in SCCS beginnen mit ^A h als Marker für hash nnnnn die untersten 16 Bits der signed Checksumme Eine Folge von SCCS Delta Tabelleneinträgen Statistik Zeile (inserted/deleted/unchanged) Delta Zeile (Version, Datum, Autor, Vorgängerversion) I/X/G Zeilen (include/exclude/ignore) für Branch Merge MR Nummern (Modification Request) Delta Kommentar (beliebig viel Text)
Das SCCS Historyfile Format Fortsetzung Usernamen bzw. GruppenIDs für Zugriffsrechte SCCS Flags SCCS Beschreibungsfile Body mit dem interleaved Delta (Weave)
Das SCCS Historyfile Format Beispiel ^Ah41388 ^As 00001/00001/00013 ^Ad D 1.2 07/01/27 15:05:05 joerg 2 1 ^Ac man neu ^Ae ^As 00014/00000/00000 ^Ad D 1.1 06/12/20 23:46:27 joerg 1 0 ^Ac date and time created 06/12/20 23:46:27 by joerg ^Ae ^Au ^AU ^Af e 0 ^At ^AT ^AI 1...
Interleaved Deltas Beispiel ^AI 1 zeile 1 ^AD 2 zeile a ^AE 2 ^AI 2 zeile 2 ^AE 2 ^AE1
Vorteile des SCCS Historyfile Formats Einfach zu Parsieren Checksumme schützt vor versehentlicher Beschädigung Interleaved Deltas: Schneller Zugriff auf beliebige Versionen Annotierter Text ohne zusätzlichen Aufwand Autor, Zeit, Version für jede Zeile ist in den Datenstrukturen Merge von Branches ohne Überlappung ohne zusätzlichen Aufwand Keine bekannten Probleme seit mehr als 25 Jahren
Weitere Vorteile von SCCS SCCS ist Bestandteil des POSIX Standards make hat bereits Unterstützung für SCCS Die Web GUI opengrok unterstützt SCCS bereits SCCS ist extrem schnell (typisch ca. 5x schneller als andere Systeme)
Grundlagen zur Nutzung von SCCS File editieren mit $EDITOR sccs create filename bringt File unter SCCS Kontrolle sccs edit filename checkt File zum Editieren aus sccs diffs filename zeigt Unterschiede sccs delget filename erzeugt neue Version sccs help für Übersichtshilfe sccs help sccs für Optionen von sccs(1) sccs help sccs_subcmds für Liste von Sub Kommandos sccs help cm3 für Hilfe zum Fehler cm3
Sonstige Entwicklungen 1982: Walter Tichy schreibt RCS, ein SCCS Nachbau Keine Checksummen, daher damals 20% schneller Umgekehrte Deltas, langsam für alte Versionen Dateiformat aufwendiger zu parsieren Insgesamt keine Vorteile zu SCCS 1986 Sun veröffentlicht NSE November 1990 CVS als Nachfolger von RCS 1990 Sun TeamWare als SCCS Frontend 1997 BitKeeper SCCS von Larry McVoy
Projekt-orientierte Systeme 1986 NSE von Sun auf Basis von SCCS 1990 CVS auf Basis von RCS 1990 TeamWare von Sun auf Basis von SCCS 1997 BitKeeper SCCS (Neuentwicklung v. Larry McVoy) 2004 Subversion, gedacht als Nachfolger zu CVS 2005 GIT 2005 Mercurial
Verwandtschaften Alle verteilten OSS Versionsverwaltungen basieren letztlich auf den Ideen von BitKeeper SCCS BitKeeper SCCS basiert auf den Ideen von TeamWare TeamWare basiert auf den Ideen von NSE Damit bauen alle modernen Systeme letztlich auf SCCS auf
Warum ist SCCS nicht dominierend? 1985 waren SCCS und RCS Closed Source SCCS war kostenlos auf allen Systemen RCS kostete sogar Geld Das unterlegene RCS wurde zum richtigen Zeitpunkt OSS Der richtige Zeitpunkt war das Aufkommen von FreeBSD SCCS wurde zu spät OpenSource
Entwicklung von SCCS nach 1977 1986 NSE Erweiterungen von Sun 1988 Unterstützung von Binärfiles ab SunOS 4.0 Nach 1990 Unterstützung für beliebig lange Text Zeilen 2000 2001Diskusionen mit SCO über OSS 2004 2006 Diskussionen mit Sun über OSS 20. Dezember 2006 Sun gibt SCCS unter der CDDL frei 21. Dezember 2006 Schily SCCS kompiliert auf Solaris 7. Januar 2007 Schily SCCS 0.3 läuft auf Solaris, Linux, FreeBSD, Mac OS X, Cygwin
Schily-SCCS seit Dezember 2006 26. Dezember 2006 SCCS 0.1 erste publizierte Version 11.Februar 2007, SCCS 1.0 läuft auf nahezu allen Plattformen 11.Juli 2011, SCCS 5.01 bringt viele Neuigkeiten, wie z.b. Rekursive Bearbeitung in Directory Bäumen Aktuelle Entwicklung geht zu SCCS 6.0 als verteiltes System mit Unterstützung für Changesets in Projekten Projekte statt Einzeldateien Netzwerkunterstützung
Neue Features in SCCS 4,7x weniger CPU Zeit Bedarf seit Dezember 2006 Unterstützung bis zum Jahr 9999 (64 Bit Versionen) 4 stellige Jahreszahlen auch in Keywords Rekursives Arbeiten mit sccs -R command Schnelle Massenübernahme in SCCS, Solaris mit 46000 Files und 500 MB benötigt nur 8 Sekunden Erheblich verbesserte Fehlererkennung durch val(1) Bessere man Pages und besseres sccs help Automatische Regressionstests zur Qualitätssicherung
Neue Features in SCCS ^A am Anfang von Zeilen und Dateien ohne \n am Ende sind nun Textfiles (zur Kompatibilität nur aktiv mit v6) Neues erweiterbares SCCSv6 Historyfile Format Neue versionsspezifische Checksummen (ähnlich BK) sccslog Kommando neu rcs2sccs Kommando neu sccs istext neu sccs editor neu
Ausblicke zum verteilten SCCS Einführung einer Directory.sccs im Project Set Home Einführung einer ChangeSet Datei zur Beschreibung von Projekten sccs init Initialisiert ein neues leeres Projekt (schaltet um in den Projekt Modus) sccs clone Kopiert ein Projekt sccs export Erzeugt ein Changeset diff File sccs import Importiert ein Changeset diff File (wird hg export Files unterstützen)
Ausblicke zum verteilten SCCS sccs pull und sccs push zum Update gegen andere Repositories sccs outgoing und sccs incoming zur Anzeige was dabei transportiert würde sccs add, sccs remove, sccs rename, sccs revert zum Modifizieren von Projekten sccs commit Erzeugt eine neue Projekt Release sccs tag zum Hinzufügen eines Versionstags
Ausblicke zum verteilten SCCS sccs smoosh um zwei unterschiedliche Kopien in eine Version mit Branch zu wandeln Netzwerkunterstützung Merge Tools für nicht triviale Konflikte
Skalierbarkeit OpenSolaris hatte in 5 Jahren 13150 Changesets (ca. 46000 Files) ca. 168000 modifizierte Dateien ca. 12,8 modifizierte Dateien pro Changeset ca. 8,3 Changesets pro Tag Linux hat ähnliche Änderungsfrequenzen wie OpenSolaris (aber nur 11000 Files) Solaris hatte in 25 Jahren ca. 190000 Changesets ca. 465000 modifizierte Dateien ca. 2,4 modifizierte Dateien pro Changeset ca. 21 Changesets pro Tag BSD UNIX hatte in 15 Jahren ca. 48000 Changesets (ca. 13000 Files) ca. 108000 modifizierte Dateien ca. 2,2 modifizierte Dateien pro Changeset ca. 19.8 Changesets pro Tag
Randbedingungen für ein Projekt 50 Jahre ca. 350000 Changesets bei Arbeiten wie an UNIX d.h. 350000 Änderungen an der Changeset Datei ca. 132000 Changesets bei Arbeiten wie an OS/Linux Mindestens 1000 Änderungen an einer normalen Datei
Skalierbarkeit von SCCS Keine Abhängigkeit von der Anzahl der Dateien Zeit für das initiale Einchecken von OpenSolaris GIT: 1:40 300 MB Repository SCCS (erwartet) 0:20 120 MB Repository Zeit für das Bearbeiten eines Commits für OpenSolaris mit SCCS nach 50 Jahren Entwicklung: Geschätzt unter einer Sekunde mit HW von vor 5 Jahren Zur Zeit läuft ein Dauertest mit SCCS, 2 Millionen Deltas Platzbedarf mit SCCS ca. 300 MB (komprimiert 160 MB) Platzbedarf mit GIT geschätzt: ca. 15 TB
Hilfe wird benötigt Diskussionspartner zum Besprechen der Konzepte Definitiv Autoren für eine GUI zu SCCS Aber auch für alle anderen Bereiche: Regressionstests schreiben Testkompilationen und Tests auf diversen Systemen Importskripte für andere Versionsverwaltungen Doku schreiben Bug Reports...
ftp://ftp.berlios.de/pub/sccs/ SCCS Download
SCCS Dokumentation http://sccs.berlios.de http://sccs.berlios.de/man/index.html http://sccs.berlios.de/man/sccs.1.html http://sccs.berlios.de/man/sccsfile.4.html
Weiterführende Literatur http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sccs.html http://basepath.com/aup/talks/sccs Slideshow.pdf http://minnie.tuhs.org/cgi bin/utree.pl?file=pwb1/usr/news/pibs http://download.oracle.com/docs/cd/e19504 01/802 5880/6i9k05dhp/index.html http://www.catb.org/~esr/writings/version control/version control.html http://hub.opensolaris.org/bin/view/project+opengrok/webhome
Dieser Vortrag liegt online unter http://cdrecord.berlios.de/files/sccs.pdf
Danke