Dinge, die einst jeder Hacker wusste (2017)
(catb.org)- Wissen über die ASCII-Bitstruktur, RS-232, Hardware-Terminals und Modems, das für Hacker einst selbstverständlich war, wird durch den Wandel von Geräten und Netzwerkumgebungen nicht mehr im Einstieg vermittelt
- Ausdrücke wie
tty,SIGHUP,core dump,READMEundCtrl-Dsind Überreste verschwundener Werkzeuge; wer ihren Ursprung kennt, versteht modernes Unix und heutige Entwicklungspraktiken besser - ASCII, 36-Bit-Maschinen, Oktalzahlen, RS-232-Einstellungen, MIME, termios, curses und ANSI-Terminalsteuerung zeigen Schichten historischer Kompatibilität, die in heutigen Systemen fortbestehen
- Vor dem Masseninternet übernahmen UUCP, USENET, BBS, FidoNet, FTP, Gopher, kommerzielles Timesharing und akademische WANs jeweils Dateiübertragung, Mail, Foren und Zusammenarbeit
- Entwicklung auf Basis öffentlicher Repositories entstand über DECUS-Bänder, FTP und E-Mail, USENET-Source-Gruppen,
patch(1), SCCS/RCS/CVS, SourceForge und Subversion bis hin zu Git im Jahr 2005
Unix-Spuren verschwundener Hardware
- Dass junge Hacker die Bitstruktur von ASCII und ungewöhnliche Steuerzeichen nicht mehr kennen, ist kein individuelles Problem, sondern eine Folge davon, dass Hardware-Terminals und RS-232 aus dem Alltag verschwunden sind
- Frühe Terminals waren keine Softwarefenster, sondern Video Display Terminals (VDT), die an einen Zentralrechner angeschlossen waren; davor nutzte man Geräte aus der Teletype-Familie, die auf Papier ausgaben
- Das Unix-
ttystammt als Abkürzung von teletype, daslpin/dev/lpsteht für line printer, und/dev/drumin einigen BSD-Unix-Systemen geht auf frühe rotierende Trommelspeicher zurück \rCarriage Return bezeichnet die Bewegung des Druckkopfs an den linken Rand der Zeile; Unix behandelte das Zeilenende mit nur\n, während andere Betriebssysteme weiter\r\nverwendeten- Die Reihenfolge
\r\nentstand, weil auf früher Hardware das carriage return länger als die Übertragungszeit eines Zeichens dauerte und daher zuerst ausgeführt werden musste
- Die Reihenfolge
- Die Betriebsweise, bei der mehrere Nutzer sich die CPU eines zentralen Computers teilten, wurde Timesharing genannt; ihre Spuren finden sich noch heute in der Struktur mehrerer virtueller Terminals unter modernem Unix
RS-232, Modems und AT-Befehle
- RS-232 ist ein Hardware-Protokoll, das Anfang der 1960er für die Kommunikation zwischen Fernschreibern und Modems entwickelt wurde; vor USB meinte eine „serielle“ Verbindung meist RS-232
- Ein Modem war ein Gerät, das digitale Signale über Telefonleitungen übertragen konnte, und Hacker nutzten häufig externe Modems als separate Kästen
- Interne Modems waren anfälliger für HF-Störungen im Gehäuseinneren, und die LEDs externer Modems waren für die Fehlersuche nützlich
- Ob eine Verbindung erfolgreich aufgebaut wurde oder die Synchronisation scheiterte, ließ sich bis zu einem gewissen Grad am Piepen und Rauschen des Modems unterscheiden
- Das
HUPin Unix-SIGHUPsteht für Hang Up und bezeichnete ursprünglich den Fall, dass die Modemverbindung getrennt wurde und damit das steuernde Terminal verschwand - Die Modemgeschwindigkeit stieg von 110 bps bis auf 56 kbps Ende der 1990er; in der stabilen Phase etwa von 1984 bis 1991 waren 9600 bps üblich
- Deshalb verwenden verbliebene Geräte mit seriellen Protokollen oft standardmäßig 9600 bps
- Das
AT-Präfix des Hayes Smartmodem wurde nach 1981 de facto zum Standard, und mitATDTgefolgt von einer Telefonnummer konnte man wählen- Das Bitmuster von
ATwar so beschaffen, dass es für den Empfänger auch ohne bekannte Übertragungsgeschwindigkeit leicht erkennbar war, was die automatische Synchronisation begünstigte - Noch 2017 fanden sich AT-Befehle in Steuerfunktionen für 3G/4G-Mobilfunkmodems von Smartphones; bei einem weit verbreiteten Typ diente
AT+QLINUXCMD=als Präfix, um Befehle an die Linux-Instanz in der Chip-Firmware zu übergeben
- Das Bitmuster von
„core“, 36-Bit-Maschinen und Oktalzahlen
- Von etwa 1955 bis 1975 war vor Halbleiterspeicher Core Memory aus kleinen Ferritringen und Kupferdraht die wichtigste Speicherform; daher stammen Unix-Begriffe wie
in coreundcore dump - Seit etwa 2000, als Multiprozessorsysteme auch auf Desktops verbreitet wurden, wird
corezusätzlich als Kurzform für processor core verwendet, während die alte Bedeutung im Sinn von Speicher immer weniger verstanden wird - Dass 8-Bit-Bytes und die Hierarchie aus 16-/32-/64-Bit-Wörtern praktisch universell wurden, setzte sich erst nach 1983 durch; davor war die Tradition von 36-Bit-Wort-Architekturen stark
- Typische 36-Bit-Maschinen waren der DEC PDP-10 und die Symbolics 3600 Lisp machine
- Die Einstellung des PDP-10 markierte 1983 das Ende dieser Linie, während die Symbolics 3600 noch etwa ein weiteres Jahrzehnt durchhielt
- Ein 36-Bit-Wort ließ sich natürlich in 12 Felder zu 3 Bit aufteilen, weshalb Oktaldarstellung nahelag; man meinte, man könne 32-Bit- und 36-Bit-Familien daran unterscheiden, ob in Speicherdumps Zahlen größer als 7 auftauchten
- Die Syntax in C, bei der eine führende
0ein Oktalliteral kennzeichnet, stammt aus der Geschichte von B und PDP-7/PDP-11; viele Sprachen wie Java und Python haben diese Spur geerbt, weil sie den Low-Level-Wortschatz von C übernahmen- Python 3, Perl 6 und Rust haben die riskante Oktal-Syntax mit führender Null entfernt, Go behält sie jedoch bei
- Auch beim x86-Befehlssatz verwendet man in Erklärungen meist Hexadezimalzahlen, doch große Teile lassen sich natürlicher in Oktaldarstellung verstehen, wenn man sie als 3-Bit-Felder betrachtet
RS-232-Konfigurationshölle und die 7-Bit-Welt
- TCP/IP-Verbindungen erscheinen gewöhnlich als saubere 8-Bit-Byte-Streams, doch bei RS-232-Geräten mussten beide Seiten Leitungsgeschwindigkeit, Byte-Framing, Parität und Stopbit abstimmen
- Nach 1984 war
8N1— 8 Bit, no parity, 1 stop bit — verbreitet, doch davor wurden viele Kombinationen genutzt; stimmten die Einstellungen nicht, sah man nur zufälligen 8-Bit-Müll, den man baud barf nannte - Dass die POSIX/Unix-Terminalschnittstelle
termios(3)viele komplexe Optionen enthält, deren heutiger Sinn nicht sofort erkennbar ist, liegt daran, dass man solche RS-232-Einstellungen steuern musste - Bei aktivierter Parität konnte das höchste Bit binärer 8-Bit-Daten beschädigt werden, und Netzwerke oder Software, die das High Bit
0x80nicht zerstörten, nannte man 8-bit clean- MIME-Kodierung für E-Mail und MIME64 entstanden, weil solche 7-Bit-Beschränkungen noch fortwirkten
- Vor MIME nutzte man in Unix-Umgebungen
uuencode/uudecode, um 8-Bit-Daten in 7-Bit umzuwandeln; gelegentlich begegnet man ihnen auch heute noch
- Auch bei RS-232-Steckern gab es eine Mischung aus DB-25 und DB-9, und man brauchte Geräte wie gender changer, DB-25↔DB-9-Adapter, breakout box und null modem
- Nach 2000 entstand die Falle, dass sowohl das standardisierte RS-232 über DB9/DB25 als auch TTL-Serial auf Leiterplatten mit derselben Bezeichnung RS232 versehen wurden
- TTL-Serial arbeitet mit 3,3 V oder 5 V, während standardkonformes RS-232 deutlich größere Spannungshübe nutzt; verbindet man beides ohne level shifter, können die Komponenten auf der TTL-Seite beschädigt werden
- RS-232 verschwand in den späten 1990ern aus dem allgemeinen Alltagswissen, war aber bis etwa 2010 auf Universalrechnern nicht vollständig verschwunden und lebt in POS-Geräten, Diagnosekonsolen kommerzieller Router, Embedded-Debug-Konsolen, GPS-Sensoren und IoT-Geräten weiter
WANs und Communities vor dem Internet
- Heute sind WANs fast vollständig im TCP/IP-Internet aufgegangen, aber vom späten 1970er-Jahren bis zur Mitte der 1990er existierten mehrere pre-Internet WANs nebeneinander
- UUCP steht für Unix to Unix Copy Program und bot, nachdem es 1979 außerhalb der Bell Labs verfügbar wurde, bis zur Verbreitung des Masseninternets Mitte der 1990er eine kostengünstige Vernetzung zwischen Unix-Standorten über Modems und das Telefonnetz
- Ursprünglich war es ein Store-and-Forward-System zur Verteilung von Software-Updates, doch die wichtigsten Anwendungsfälle wurden E-Mail und das 1980 gestartete USENET
- In einer Tarifstruktur mit pauschalen lokalen Gesprächen und nach Entfernung abgerechneten Ferngesprächen konnte UUCP-Traffic lange Distanzen umgehen, indem er lokale Hops aneinanderreihte
- USENET wurde aus Gruppen zum Austausch von Quellcode zu einem Keim moderner Open-Source-Praktiken, und Projekt-Metadatendateien wie
README,NEWSundINSTALLsetzten sich dort Anfang der 1980er durch- Die Great Renaming von 1987 war eine Neuordnung der Hierarchie der USENET-Gruppennamen
- Als AOL 1993 seinen Nutzern den Zugang zu USENET öffnete, begann der „September that never ended“, und der Zustrom sehr vieler neuer Nutzer erschwerte die kulturelle Eingewöhnung
- UUCP-Adressen hatten die Form von Bang Paths wie
…!bigsite!foovax!barbox!userund wurden mit der zunehmenden Internet-Anbindung Anfang der 1990er durch das Formatuser@hostnameersetzt- In der Übergangszeit gab es auch Hybridadressen mit
%, die UUCP-Routing und Internet-Routing kombinierten
- In der Übergangszeit gab es auch Hybridadressen mit
- BBS waren meist Systeme auf einem Computer mit einem einzelnen Modem, bei denen sich jeweils nur eine Person gleichzeitig einwählen konnte, um Nachrichten, Datei-Uploads und -Downloads sowie Spiele zu nutzen
- Das erste BBS wurde 1978 in Chicago betrieben; in den folgenden 18 Jahren entstanden und verschwanden mehr als 100.000 BBS
- Ab 1984 unterstützte FidoNet E-Mail zwischen BBS sowie ein USENET-ähnliches Forensystem
- XMODEM, YMODEM und ZMODEM sind fast die einzigen verbliebenen Erinnerungen an die BBS-Kultur; noch 2018 erhielten einige Cisco-Geräte Patches per XMODEM-Upload über den seriellen Port
- Daneben gab es kommerzielle Timesharing-Dienste wie AOL, CompuServe, GEnie, The Source und Prodigy sowie akademische WANs wie CSNET, BITNET, EARN und VIDYANET; das Wort
listservstammt von einem E-Mail-Reflector auf BITNET
Informationszugang vor FTP, Gopher und dem Web
- Bevor sich das World Wide Web Anfang der 1990er innerhalb weniger Jahre allgemein durchsetzte, erfolgte die Dateiübertragung zwischen Internet-Standorten seit 1971 gewöhnlich über ftp und das File Transfer Protocol
- Als Webbrowser das FTP-Protokoll direkt sprechen konnten, ging die Nutzung von ftp größtenteils im Browser auf; das URL-Präfix
ftp:zeigt an, dass mit einem FTP-Server kommuniziert werden soll - Im selben Jahr 1991, in dem Tim Berners-Lee das World Wide Web schuf, entwickelten Hacker an der University of Minnesota das menügesteuerte Hypertext-Protokoll Gopher
- Gopher konkurrierte einige Jahre lang mit dem frühen Web, doch Anfang 1993 verlangsamte sich die Verbreitung, als die Universität beschloss, Lizenzgebühren für Implementierungen zu erheben
- Frühe Webbrowser unterstützten das Gopher-Protokoll und die Anzeige von Gopher-Dokumenten, aber bis 2000 war Gopher praktisch verschwunden, und nur einige Server wurden aus Nostalgie oder Ironie weiterbetrieben
Das Erbe von Terminalemulatoren und VDTs
- Die Terminalemulatoren moderner Unix-Systeme sind der letzte nahe Verwandte früher Anzeigen, die Fernschreiber imitierten, nämlich glass TTYs und dumb terminals
- Das erste solche Gerät wurde 1969 ausgeliefert; ein besonders bekanntes Modell war das ADM-3 von 1975
- Frühe VDTs konnten wie das ASR-33 nur Großbuchstaben anzeigen, und Unix sowie auch Linux im Jahr 2018 behalten das Verhalten bei, in einen Modus zu wechseln, der alle Eingaben in Großbuchstaben umwandelt, wenn ein Login-Name mit einem Großbuchstaben beginnt
- „Smart terminals“ wie das ab 1975 erschienene ADM-3A und das DEC VT-100 von 1978 hinterließen die aus Lochkarten stammende Breite von 80 Zeichen sowie die Standard-Bildschirmgrößen 24x80 oder 25x80
- Steuerfunktionen wie cursor addressing, bold, underline und reverse-video wurden üblich; zur Abstraktion dienen in Unix die terminfo-Datenbank und die Bibliothek
curses(3) - Nach 1979 verbreiteten sich ANSI-Terminal-Steuercodes auf Basis des DEC VT-100, und Anfang der 1990er war ANSI-Kompatibilität bei VDTs nahezu universell
- Um 1992 erreichten die bitmapped color displays von Personal Computern bei Dot Pitch und scharfer Textdarstellung das Niveau monochromer VDTs, worauf der VDT-Markt im Bereich Universal Computing rasch zusammenbrach
- Die Unix-Kommandozeile stammt noch aus der Ära der printing terminals vor den VDTs, und daher spricht man beim Ausgeben bis heute von „printing“
- Zeichenbasierte zweidimensionale Oberflächen wie
vi(1),top(1)undmutt(1)waren die fortgeschrittenen visuellen Interfaces der VDT-Ära; später, als sich der Begriff GUI verbreitete, erhielten sie die Bezeichnung TUI - Screensaver begannen als Software, die das Bild auf dem Bildschirm veränderte, um phosphor burn-in bei CRTs zu verhindern; bei Flachbildschirmen entfiel dieser ursprüngliche Zweck
Frühe bitmapped displays und 8-bit-Ästhetik
- Das erste Beispiel eines produktiven Systems, das zu den heutigen pixelgenau manipulierbaren Displays führte, war 1973 der Alto von Xerox PARC
- Das Display des Alto hatte 608x808 Pixel; Erinnerungen an eine Auflösung von etwa 1024x1024 verwechseln es mit späteren Displays
- 1981 erreichte der Dandelion 1024x809, und der Versuch, dies mit dem Xerox Star zu kommerzialisieren, scheiterte
- 1982 bot der Sun-1 von Sun Microsystems 1024x800 Pixel, und Workstations der Sun-Klasse waren für viele Hacker begehrte Geräte
- Farbige Personal Computer boten ab 1975 primitive bitmapped displays, aber der Hi-Res-Modus des Apple II kam nur auf 280x192
- Hacker brauchten für das Programmieren eine gute Textdarstellung und kannten Workstation-Grafik der Klasse 1024x1024, weshalb sie TV-basierte Farbdisplays für Konsumenten oft als nahezu nutzloses Spielzeug betrachteten
- Der originale Macintosh von 1984 war die erste Verbrauchermaschine mit einem ausschließlich schwarzweißen bitmapped display von 512x342; kurz darauf boten IBM EGA und Klone 640x350 bei 16 Farben
- Erst um 1990 erreichten 1024x1024-Farbmonitore das obere Ende des Verbrauchermarkts, und als sie um 1992 allgemein verbreitet wurden, begannen PC-Hersteller Druck auf Workstation-Anbieter auszuüben
- Einige junge Hacker Mitte der 1980er versuchten, aus niedrig auflösenden Farbdisplays und früher Soundhardware das Maximum herauszuholen; die daraus entstandenen chunky graphics, pixelated sprites und chirpy/buzzy sounds dienen in Spielen des 21. Jahrhunderts als 8-bit-Nostalgie
Spielkultur vor der GUI
- Bevor bitmapped color display allgemein verbreitet waren, gab es eine starke Spieltradition, die allein mit Textschnittstellen und Zeichenzellengrafik auf VDTs funktionierte
- Die Trek-Familie geht bis 1971 zurück; der Spieler steuerte die Enterprise und kämpfte gegen Klingonen, Romulaner und andere
- Hinter einer sehr groben, für Teletypes entworfenen Oberfläche verbarg sich ein vergleichsweise ausgefeiltes Kriegsspiel, in dem initiative, tactical surprise und logistics wichtig waren
- Colossal Cave Adventure war 1977 das erste dungeon-crawling adventure game; die Zeile „You are in a maze of twisty little passages, all alike“ und
xyzzystammen aus diesem Spiel- Wegen der 6-Zeichen-Dateinamen des PDP-10 nannten frühe Nutzer dieses Spiel auch ADVENT
- Es gibt auch den modernen C-Port ADVENT
- Zork ist der direkte Nachfolger von ADVENT, den MIT-Hacker 1979 zuerst auf dem PDP-10 veröffentlichten; später wurde es ein kommerzieller Erfolg
- Aus diesem Spiel stammen Ausdrücke wie zorkmid, Great Underground Empire und grue
- Als roguelike bezeichnet man eine Spielgattung, deren Name von Rogue aus dem Jahr 1980 kommt; gespielt wurde in einem Dungeon in Form einer Top-down-Karte, in dem man gegen Monster kämpfte und Schätze suchte
- Hack erschien 1982, Nethack 1987
- Nethack war eines der frühesten Programme, deren Entwicklergruppe bewusst als verteilte Zusammenarbeit über das Internet organisiert war; diese Neuheit spiegelt sich im Projektnamen wider
- Die Nachkommen von Rogue waren die beliebtesten und erfolgreichsten TUI-Spiele; seit Mitte der 1990er sind sie aus dem allgemeinen Alltagswissen verschwunden, haben aber bis heute eine kleine, hingebungsvolle Fangemeinde
Bitstruktur von ASCII und Steuerzeichen
- ASCII entwickelte sich aus den Teletype-Zeichencodes der frühen 1960er Jahre und wird wahrscheinlich lange fortbestehen, weil die unteren 127 Codepoints von Unicode als ASCII ausgelegt wurden
- Wenn man UTF-8 kennt, dann ist jede ASCII-Datei auch eine gültige UTF-8-Datei
- Der Control-Modifier auf der Tastatur funktioniert im Grunde so, dass die oberen 3 Bits des eingegebenen Zeichens gelöscht werden, nur die unteren 5 Bits übrig bleiben und das Ergebnis auf Steuerzeichen im Bereich 0 bis 31 abgebildet wird
Ctrl-SPACE,Ctrl-@, `Ctrl-`` bedeuten alle NUL
- Sehr alte Tastaturen implementierten Shift so, dass je nach Taste 32 oder 16 Bits umgeschaltet wurden; deshalb haben die Beziehungen zwischen Klein- und Großbuchstaben sowie zwischen Zahlen und Symbolen in ASCII eine gewisse Regelmäßigkeit
- Das ursprüngliche ASCII von 1963 unterschied sich vom heute verwendeten ASCII von 1967; es gab weder Tilde noch senkrechten Strich, und
5Ewar kein Caret, sondern ein Pfeil nach oben,5Fkein Unterstrich, sondern ein Pfeil nach links - Viele der Steuerzeichen 0 bis 31 sind Überreste von Teletype-Protokollen, einige leben in Text- oder Unix-Konventionen fort, andere in Binärdatenprotokollen
NUL: String-Terminierer in CEOT/Ctrl-D: Eingabe für end of file auf Unix-TerminalsBEL/Ctrl-G: Glocke des Teletypes oder Aufmerksamkeitssignal eines VDTBS,HT,LF,FF,CR,ESC,DEL: vergleichsweise bekannte Gruppe von SteuerzeichenDC1/DC3: wurden für XON/XOFF-Software-flow-control verwendet und auch in Unix, CP/M und DOS implementiertSUB/Ctrl-Z: end-of-file-Zeichen in DOS und Windows, übernommen aus CP/M und den DEC-Minicomputer-Betriebssystemen; in Unix wird es als Taste zum Anhalten eines Prozesses verwendetESC: wird weiterhin als introducer für Steuersequenzen von VT100, ANSI-VDTs und modernen Terminalemulatoren verwendet
- Der Wert
0x7FvonDELgeht darauf zurück, dass man auf Lochstreifen mit sieben Löchern jedes ASCII-Zeichen überschreiben konnte; Tape-Reader übersprangen DEL und NUL - Die Meta- oder Alt-Taste addierte auf VDTs normalerweise 128 zum ASCII-Keycode, aber moderne Terminalemulatoren stellen modifizierte Tasten oft auch dar, indem sie ein
ESCvoranstellen - Die Bitstruktur von ASCII lässt sich mit ascii(1) betrachten; auch die ASCII-Tabellen im Artikel wurden mit diesem Werkzeug erzeugt
Die langsame Entstehung verteilter Zusammenarbeit
- Heute gelten offene verteilte Versionsverwaltung und Remote-Zusammenarbeit als selbstverständlich, doch die zugrunde liegenden Werkzeuge und Nutzungsgewohnheiten brauchten lange, um sich herauszubilden
- Einer der frühen Vorläufer war der Tape-Austausch von DECUS, der 1961 gegründeten Digital Equipment Corporation Users' Group
- DEC-Nutzer ließen Magnetbänder mit Public-Domain-Software zirkulieren, und 1976 war diese Praxis bereits etabliert
- Die
README-Konvention kam über USENET in die Unix-Welt, scheint aber ihre Spuren aus den DECUS-Tapes zu tragen
- In den 1970er Jahren gab es in der akademischen Softwareentwicklung Zusammenarbeit, bei der Quellcode per E-Mail ausgetauscht und Veröffentlichungen auf FTP-Sites abgelegt wurden
- Netzwerk-E-Mail wurde 1971 erfunden und war 1973 bereits so weit verbreitet, dass sie 75 % des ARPANET-Verkehrs ausmachte
- Donald Knuths TeX ist ein repräsentatives bis heute erhaltenes Beispiel aus dieser Zeit, begonnen 1978
- Nach 1980 wurde es schnell zur Konvention, Quellcode in speziellen USENET-Newsgroups zu veröffentlichen und Patches von externen Beitragenden per E-Mail zu erhalten
comp.sources.unixwar der alltägliche Ort, an dem Unix-Hacker nach neuem Code suchten
- Für eine vollständig dezentrale Entwicklung brauchte es version control, patching und eine forge
- SCCS entstand 1972, gelangte aber erst 1977 aus den Bell Labs heraus; proprietäre Lizenzen bremsten die Verbreitung
- RCS war eine 1982 erschienene, frei wiederverwendbare Alternative
patch(1)erschien 1984; davor war es üblich, komplette geänderte Dateien auszutauschen
- Nethack ist ein 1987 gestartetes roguelike-Spiel und ein frühes Beispiel vollständig verteilter Entwicklung, bei dem die Entwickler zuerst ganze Dateien und später Patches per E-Mail austauschten und SCCS/RCS zur Verwaltung lokaler Kopien nutzten
- CVS erschien 1990; nachdem 1993 Netzwerk-Remote-Funktionen hinzugefügt worden waren, wurde es von großen Projekten wie FreeBSD und NetBSD schnell übernommen
- Linux wurde 1991 als Ergebnis verteilter Zusammenarbeit angekündigt, doch die frühe Entwicklung lief wie bei Nethack über E-Mail-Patches, und ein öffentliches Linux-Repository gab es noch nicht
- SourceForge war 1999 die erste dedizierte software forge; anfangs unterstützte sie nur CVS, beschleunigte aber die Einführung von Subversion, das 2000 erschien
- Subversion wurde zwischen 2000 und 2005 zum allgemeinen Standardwissen, und als Linus Torvalds 2005 Git schuf, wurden die früheren Versionsverwaltungssysteme schnell obsolet
Zeitliche Abfolge, an die man sich erinnern sollte
- 1969 begann Ken Thompson mit der Arbeit, aus der Unix werden sollte, das erste kommerzielle VDT wurde ausgeliefert, und im ARPANET wurde das erste Paket ausgetauscht.
- 1970 wurde der DEC PDP-11 ausgeliefert und beeinflusste später Architektur-Familien einschließlich Intel und ARM stark.
- 1971 wurden im frühen ARPANET Netzwerk-E-Mail und die Verwendung des
@-Zeichens erfunden. - 1973 war der Xerox Alto Vorreiter einer vernetzten Personal-Computer-
workstationmit hochauflösendem Display und Maus. - 1977 wurde Unix auf Interdata portiert und damit zur ersten Version, deren Kernel größtenteils in C geschrieben war; außerdem wurde SCCS veröffentlicht und Colossal Cave Adventure ausgeliefert.
- 1980 wurden Rogue erfunden und USENET gestartet.
- 1981 wurde der IBM PC ausgeliefert, und mit der Implementierung von TCP/IP auf dem VAX-11/780 von 4.1BSD Unix begannen ARPANET und die Unix-Kultur zusammenzufinden.
- 1983 wurde der PDP-10 eingestellt, und das ARPANET wurde durch technische Veränderungen zum Internet.
- 1987 gab es das Great Renaming von USENET, die Erfindung von Perl und den Start des Nethack-Projekts.
- 1991 starteten Linux und das World Wide Web jeweils, und Python wurde erfunden.
- 1993 erhielt Linux TCP/IP-Funktionalität und entwickelte sich von einem Hobby-Spielzeug zu einem ernst zu nehmenden OS; mit der Öffnung von USENET durch AOL begann der „September That Never Ended“, und Mosaic fügte dem Web Grafik- und Bildfunktionen hinzu.
- 1994 setzte sich das Massen-Internet in den USA durch, und USB wurde angekündigt.
- 1995–1996 waren der Höhepunkt der UUCP/USENET- und BBS-Kultur und zugleich die Zeit ihres Zusammenbruchs unter dem Druck des Massen-Internets.
- 1999 startete SourceForge, und als Linux auf PCs lief, brach der Markt für proprietäre Unix-
workstations von Sun und anderen zusammen. - 2005 stellten große Hersteller die Produktion von CRTs ein und wechselten zu Flat-Panel-Displays; außerdem stellte AOL die USENET-Unterstützung ein, und Git wurde erstmals ausgeliefert.
- 2007–2008 endete mit dem 64-Bit-Übergang der Massen-PCs die 32-Bit-Ära, und iPhone und Android wurden erstmals mit Unix-basierten OS ausgeliefert.
1 Kommentare
Kommentare auf Hacker News
Interessant ist, dass die Art, wie der Artikel Bezüge zur modernen Welt herstellt, ziemlich ungenau ist. Zum Beispiel erklärt er direkt nach der Aussage, dass das Hayes-Befehlspräfix
ATnützliche Eigenschaften für die automatische Synchronisierung der Leitungsgeschwindigkeit habe, dass AT-Befehle auch 2017 noch zur Steuerung von 3G/4G-Mobilfunkmodems verwendet würden.Moderne Modems sind jedoch nicht seriell angeschlossen, und es gibt auch kein Konzept einer Leitungsgeschwindigkeit. Diese Eigenschaft ist für moderne Hardware irrelevant; viel plausibler ist die Erklärung, dass sich eine bestehende Codebasis leicht auf eine neue Umgebung ausweiten ließ.
Auch „IoT devices still speak RS-232“ ist gefährlich falsch. RS-232 verwendet für 0 eine positive und für 1 eine negative Spannung, jeweils im Bereich von 3 bis 15 V. Wenn man RS-232 direkt an die serielle Schnittstelle eines modernen IoT-Geräts anschließt, ist die Wahrscheinlichkeit groß, dass man das Gerät beschädigt. Was alte serielle Schnittstellen und die seriellen Ports moderner Geräte gemeinsam haben, liegt außerhalb des RS-232-Umfangs; etwa 8N1-Framing wird von RS-232 nicht definiert.
Auch die Aussage „Alle ASCII-Dateien sind gültiges UTF-8“ ist schwammig. ASCII ist ein Zeichensatz und definiert keine Darstellung auf dem Datenträger; eine ASCII-Datei, die Zeichen in 7 Bit gepackt speichert, ist ohne Bearbeitung kein UTF-8. Wenn man bedenkt, dass zuvor verschiedene Wortlängen und nicht 8-Bit-saubere Übertragungsformate behandelt wurden, ist das eine merkwürdige Behauptung.
Auch die Aussage, Git habe alle früheren Versionsverwaltungssysteme schnell veralten lassen, ist mit Blick auf Perforce übertrieben. Git war gegenüber CVS und SVN ein großer Fortschritt, aber zu behaupten, es habe alles Vorherige obsolet gemacht, wirkt, als kenne man große Teile der Softwareindustrie nicht.
Natürlich ist das übertriebenes Erbsenzählen, aber wenn der Ton des gesamten Artikels besserwisserisch und pedantisch ist, ist es nicht unfair, ihn am gleichen Maßstab zu kritisieren.
Auch die Aussage, moderne Modems seien nicht seriell angeschlossen, stimmt nicht. Es ist nur nicht unbedingt eine Form, die man RS-232 nennen würde; noch vor wenigen Jahren wurden üblicherweise USB-Leitungen verwendet, und USB ist ebenfalls ein serieller Bus.
AT-Befehle werden in fast allen Modems weiterhin verwendet, auch in dem Handy in deiner Tasche. So richtet ein Mobilfunkmodem Anrufe im Telefonnetz ein, und selbst das altehrwürdige
ATDTwird weiterhin zum Aufbau von Netzwerkverbindungen genutzt. Der AT-Befehlssatz diente zur Steuerung von Verbindungseigenschaften wie Verbindungsaufbau, Maximalgeschwindigkeit und erlaubten Protokollen; Autonegotiation ist ein separater Schritt auf Netzwerk-/Modemebene. Früher konnte man diesen Vorgang bei Modems über den Lautsprecher hören, heute hört man ihn nur nicht mehr.Wie solche Zeichensätze über andere Protokolle transportiert werden, liegt außerhalb des Definitionsbereichs.
Standard ist eine
115200 8n1-Leitung, die Geschwindigkeit lässt sich ändern, und es gibt auch automatische Geschwindigkeitserkennung. Nachdem das Modem über eine separate Leitung Bereitschaft signalisiert hat, sendet manATmit der gewünschten Geschwindigkeit, und meist antwortet es ungefähr beim dritten Versuch.In diesem Sinne ist Git heute faktisch das einzige Versionsverwaltungssystem für verteilte Zusammenarbeit an Quellcode.
Als Ergänzung eines alten Hasen: Bei Telefonmodems war 56K wirklich das Maximum. Das Telefonnetz übertrug intern 8-Bit-Samples 8000-mal pro Sekunde, also 64 Kbps; gelegentlich wurde das niedrigere Bit für andere Signale abgezweigt, was für Telefonkunden nicht hörbar war.
Statt zu versuchen, das Modem mit diesem geraubten Bit zu synchronisieren, war es einfacher, nur die verlässlichen 7 Bit zu verwenden; daraus wurden 56 Kbps. https://en.wikipedia.org/wiki/Robbed-bit_signaling
Die praktisch als Terminalgeschwindigkeit verwendeten 9600 bps waren eine ältere Konvention als 9600-bps-Modems. Irgendwann Mitte bis Ende der 80er waren 9600-bps-Modems beeindruckende Geräte, und für Terminalnutzer war die Geschwindigkeit ausreichend hoch, während sie für damalige Terminals noch beherrschbar war. Ein Terminal, das ich als Volker-Craig 4404 in Erinnerung habe, kam mit 9600 bps nicht mit; man musste es ungefähr auf 4800 bps herunterdrehen.
Terminal-Multiplexer von Minicomputern bündelten Übertragungen normalerweise, wenn möglich: Sie holten per DMA Zeichenblöcke aus dem Speicher, sendeten sie und schickten der CPU dann nur einen „fertig“-Interrupt. Selbst im Zeichenmodus wurde die CPU erst informiert, wenn der Empfangspuffer voll war oder ein Steuerzeichen wie ein Wagenrücklauf einging.
Deshalb verwendeten viele Mainframes und Minicomputer Blockmodus-Terminals. Anwendungen nutzten Formular-APIs, während Bearbeitung und Eingabe im Terminal verarbeitet wurden. Der Computer sendete das gesamte Formular an das Terminal, und nachdem der Nutzer Fehler korrigiert und sogar Validierungen wie numerische/alphanumerische Felder abgeschlossen hatte, wurden die Feldinhalte durch eine explizite „Fertig“-Aktion an den Computer übertragen.
Selbst bei vollständig interaktiver Nutzung bevorzugten solche Systeme einen Zeilenmodus, bei dem der aktuelle Zeileninhalt nur bei bestimmten Aktionen übertragen wurde und die Zeilenbearbeitung im Terminal stattfand. Der UNIX-artige „raw“-Modus verursachte im Verhältnis zur Zahl der Nutzer, die das System bedienen musste, viel zu viel Overhead, selbst wenn das Terminal etwas teurer war.
Traurigerweise hatte ich 1200 Baud, und mein Onkel sagte, sein erstes Modem sei 300 gewesen.
An die Einstellung 110 erinnere ich mich auch; die reicht vielleicht bis zur Berliner Luftbrücke von 1948 zurück.
Als ich zum ersten Mal AT-Befehle bei einem 4G-Modem verwendet habe, musste ich wirklich lachen. Das vertraute Gefühl funktionierte einfach weiter. Nur dass es kein Wählen und keine Modemgeräusche mehr gab, war ein bisschen schade.
Es ist erstaunlich, dass die 3G/4G-Modembranche keinen besseren Weg entwickelt hat, um mit Geräten zu sprechen. Sogar ISDN hatte eine ordentlich implementierte API, die weit verbreitet war.
Jedenfalls löst es zu gleichen Teilen Nostalgie, Ehrfurcht und Schrecken aus.
https://docs.espressif.com/projects/esp-at/en/latest/esp32/A...
Trotzdem bleibt ein virtueller Kommunikationsport für Gespräche per AT erhalten, und für manche Diagnoseaufgaben kann er weiterhin nötig sein.
Eine Datenverbindung mit QMI/MBIM aufzubauen ist viel einfacher und effizienter, als mit AT und PPP herumzuhantieren.
Statt „historische USENET-Archive findet man bei Google Groups“ würde ich archive.org empfehlen. Dort gibt es viele hervorragende Sammlungen von USENET-Gruppen als mbox-Dateien, die man herunterladen kann.
Man kann etwas wie
mboxgrepinstallieren, sie in einen Mail-Reader importieren oder sie einfach als Textdateien lesen.Ein Beispiel ist hier:
https://archive.org/details/usenet-comp
cd ..https://archive.org/details/usenethistorical
Mitte der 1980er wollte ich mich von einem Universitätscomputer in London (vermutlich dem CDC Cyber am Imperial) auf einen Computer einer anderen Universität (vermutlich Queen Mary) einloggen, um ein symbolisches Algebra-Paket zu nutzen, das es nur auf Unix-Minicomputern gab.
Allein die richtigen Terminal-Einstellungen und Konfigurationswerte der Zwischensoftware zu finden, dauerte volle zwei Stunden, und ich hatte das Gefühl, dass es besser wäre, einfach selbst zu programmieren, was auf einer 8-Bit-2-MHz-64K-Maschine möglich war.
Software hat das Problem, dass man „immer weiter oben drauf baut“. Im Bauwesen kann man bestehende Gebäude und Komponenten wiederverwenden, innen ein paar Dinge aufrüsten oder abreißen und neu bauen.
Bei Software macht man das aber nicht so. Man baut Bleirohre, CAT-3-Kabel, Rosshaar-Dämmung und Einfachverglasung unverändert in einen neuen Wolkenkratzer ein. Entweder, weil es einfacher ist, weiter auf jahrzehntealter veralteter Technik aufzubauen, statt besseres PVC, CAT-6, Sprühdämmung und Dreifachverglasung zu erfinden, oder weil man die Standards, die alte Gebäude noch verwenden, nicht veralten lassen will und die Eigentümer nicht für Upgrades zahlen möchten.
So bekommt man einen funktionierenden Wolkenkratzer, aber aus irgendeinem Grund muss man neuen Engineers Rosshaar-Dämmung beibringen.
Deshalb bleiben die meisten davon experimentelle Forschungsprojekte, und wenn man Glück hat, wandern im Lauf der Zeit nur die besten Teile schrittweise in bestehende Projekte.
Übersehen wird dabei, warum so viel dieser „alten und miesen Technik“ noch existiert. Sie hat den Test der Zeit bestanden. Moderne Technik hält diese Dinge nicht aus reiner Nostalgie am Leben. Meist sind sie weiterhin nützlich, weil sie Probleme elegant lösen, auf moderneren Systemen hilfreiche Abstraktionen bieten oder weil Kompatibilität mit bestehenden Systemen unvermeidlich ist.
Natürlich haben auch solche alten Techniken ihre Makel. In ein paar Jahrzehnten wird das mit eurem gesamten Code genauso sein.
Welcher XKCD zu Standards war das noch mal?
Als jemand, der 1997 geboren wurde und in der Softwarebranche arbeitet, habe ich eines gelernt: Software Engineering ist manchmal eher ein Verständnis der Geschichte von Systemen. Wenn ich solche Texte lese, ist es schön, wenn ein Konzept plötzlich einrastet.
Aus Sicht von jemandem, der mit Embedded Systems arbeitet, ist vieles davon noch immer relevant. RS-232 selbst, also die Spezifikation der physischen Schicht, wird weniger genutzt, aber das darunterliegende UART-Kommunikationsprotokoll ist nach wie vor quicklebendig.
Zum Beispiel können Beaglebone-Entwicklungsboards gebootet werden, indem man den Bootloader per XModem hochlädt.
Tatsächlich gab es eine ältere TTY-Schnittstelle, die der ASR-33 ursprünglich verwendete; sie stammte aus Telegrafenschaltungen und wurde Stromschleife genannt. In den 1970er-Jahren kamen Dual-Mode-ASR-33 auf, die auch RS-232 unterstützten, und schließlich ersetzte RS-232 die Stromschleife vollständig.
Der KIM-1(https://en.wikipedia.org/wiki/KIM-1) verwendete dieses Verfahren, und Stromschleifen-(https://en.wikipedia.org/wiki/Current_loop)-Schnittstellen sind im Kontext industrieller Steuerungen noch immer ziemlich verbreitet. Außerdem bilden sie die Grundlage von MIDI(https://en.wikipedia.org/wiki/MIDI#Electrical_specifications).
FF (Form Feed), also Ctrl-L, wurde von vielen Video-Display-Terminals als Befehl zum „Bildschirm löschen“ interpretiert, und Software-Terminalemulatoren tun das gelegentlich immer noch.
Das wurde im Usenet häufig zur Spoiler-Markierung verwendet, weil der Rest der Nachricht nicht angezeigt wurde, bis der Nutzer mit einer Taste wie PgDn weiterblätterte. Auf dem Bildschirm erschien es als
^L, sodass man wusste, dass noch etwas folgt; und bis^Laus dem sichtbaren Bereich gescrollt war, blieb der restliche Bildschirm gelöscht.