Vor langer Zeit, als die "sozialen Netzwerke" noch "Mailboxnetze" hießen, war ich Mitglied in mehreren solcher Netze.
Die Technik damals war im Vergleich zu heute gar nicht so viel anders. Das heutige Internet ähnelt zwar dem Entwurf des DARPA-Netzes auch nicht mehr so, aber das Grundprinzip ist immer noch sichtbar: ein dezentrales Netzwerk mit store-and-forward-Prinzip an den Relaispunkten.
Die Mailboxnetze von damals gab es in mehreren Kategorien, wenn man die Software betrachtet. Auf der einen Seite gab es die Netze mit Fido-Technik, daneben gab es das Maus-Netz, und ein paar wackere Kämpen hatten damals schon Zugang zum Usenet mit Unixtechniken wie UUCP und kleinere Netze mit noch eigener Software wie Zerberus usw.
Wir reden hier vom Zeitraum von ungefähr 1988 bis 2000. Damals kostete das Telefonieren noch richtig viel Geld, und das Internet gab es nur für große Firmen und Unis als "Standleitung" für mehrere Hundert DM Gebühren pro Monat. Die Uni Gießen hatte damals eine 2-MBit/s-Anbindung, und es war ein unglaublicher Fortschritt, als ca. 1995 die 34 MBit/s.-Leitung geschaltet wurde; aber ich schweife ab. Privatleute verwendeten ein sogenanntes Telefonmodem, und die gab es damals mit und ohne Segen der Deutschen Bundespost und heftigen Strafandrohungen, falls man denn erwischt werden würde. Aus heutiger Sicht betrachtet vollkommen lächerlich, aber so selbstherrlich gebärdete sich damals die staatliche Bundespost.
Die Entscheidung für oder gegen die Teilnahme an einem Mailboxnetz wurde hauptsächlich durch die Erreichbarkeit der Partner und damit die Telefonkosten bestimmt. Die Verbindung zum "Uplink", also dem Lieferanten, wurde mit Hilfe von Telefonmodems gehalten, die üblicherweise Geschwindigkeiten von 2.400 bis 14.400 Bit/s. hatten (da sind wirklich keine Vorsilben vor der Maßeinheit!).
Bei den schnelleren Modems gab es zwei Standards, weil die Standardisierung nur bis 9.600 gekommen war, die Norm hieß damals V.32.
Bei der Weiterentwicklung auf 14.400 Bit/s gab es zwei Konkurrenten: US Robotics mit einem proprietären Standard, und die wurden später von ZyXEL ziemlich heftig vom Markt gefegt, soweit ich mich noch erinnere. ZyXEL und später andere Hersteller lieferten Modems mit V.32bis-Standard für 14.400 Bit/s., und obwohl ZyXEL eigentlich aus der Geschichte mit dem proprietären US-Robotics-Protokoll hätte lernen können, machten sie es dann genauso: für die "normalen" ZyXEL-Modems wurde mit einem ROM-Update eine mit keinem anderen Hersteller kompatible Geschwindigkeit von 16.800 Bit/s. geliefert (damals musste man die EPROMs noch mit einem Spezialgerät brennen, Typ 27512). Im FidoNet gab es dann unglaublich hitzige Diskussionen, ob man in der Nodeliste diese Angabe einpflegen soll und unter welcher Kennung. Wenn man sonst keine Probleme hat ...
ZyXEL hat dann das Plus-Modell mit mehr Speicher und etwas schnellerem Prozessor gebaut, das dann ebenfalls proprietäre 19.200 Bit/s. beherrschte. So ein Modell werkelt bei uns in der Praxis immer noch, aber wird nur noch als reine Faxmaschine mißbraucht. Außerdem habe ich bei ebay billig noch ein Ersatzgerät gekauft, falls das erste kaputt geht (Cold standby).
Nebenbei gab es noch eine proprietäre Technik, nämlich das Telebit Trailblazer, die damals schon 19.200 Bit/s. beherrschten, und davon gab es auch eine postzugelassene Variante in Deutschland zu kaufen oder von der Post zu mieten (!). Ich kann mich aber nicht mehr an Preise erinnern.
Diese Modems haben in der Größenordnung 500 bis 800 DM gekostet, eine ganz schöne Stange Geld (inflationsbereinigt würde ich sagen, das ist heute dasselbe in Euro). Der Höhepunkt der analogen Telefonmodems waren die Geräte mit standardisierten 28.800 und 56.000 Bit/s, die aber nicht mehr allzuviel Verbreitung fanden, weil viele Betreiber neben dem analogen auch einen digitalen ISDN-Zugang anboten (ich übrigens auch - meine TeX-Box hatte zwischendurch 2x analog und 2x ISDN für bis zu vier gleichzeitige Anrufer).
Nun ja, wie auch immer - ich hatte im Ortsbereich einen Lieferanten für Fido in Lich, das war für mich als Schüler bzw. angehender Student gerade noch bezahlbar. Die eigene Telefonleitung war schon Luxus, nur das Umstecken von Telefon zu Modem war ziemlich schnell ziemlich lästig. Kurze Zeit später hatte ich also eine separate Telefonleitung für das Modem, und von da zum Mailboxbetreiber statt nur -nutzer war es nur noch ein kleiner Schritt ;-), aber bis zur TeX-Box war es zeitlich noch ein ganz schöner Weg. Wer noch alte c't-Hefte aufgehoben hat: dort war ich ziemlich lang mit der "TeX-Box" in der Mailboxliste enthalten; eines der Netze, an denen ich teilnahm, war das GerNet mit der Zonennummer 21:, das vom Heise-Verlag betrieben wurde und kurz vor der Jahrtausendwende abgeschaltet wurde, weil deren Software nicht y2k-tauglich war (soweit ich mich noch erinnere).
Zunächst hatte ich also ein relativ preisgünstiges Modem als interne Steckkarte für den PC mit 2.400 Bit/s. Übrigens haben damals ziemlich viele Leute die Maßeinheiten Baud und Bit ziemlich konfus durcheinander verwendet, obwohl sie ganz unterschiedliche technische Sachverhalte beschreiben. "Baud" misst, wieviele "Symbole" pro Sekunde übertragen werden. Mit einem "Symbol" können aber je nach Kodierung mehrere Bits übertragen werden. Bis 2.400 war Baud und Bit noch dasselbe, aber mit zunehmender Geschwindigkeit konnten pro Baud immer mehr Bit übertragen werden, mit Kodierungen wie Trellis, QAM usw.
Die richtigen Profis hatten einen eigenen PC, der nur für die Verwaltung des bzw. der Modems zuständig war, und haben auf einem anderen PC die Mails gelesen. Soweit war ich noch lange nicht, bei mir lief alles auf einem PC, und dazu gab es damals (vor Windows-Zeiten) Programme, mit denen auf einem 286 oder 386 schon richtig gutes Multitasking möglich war. Die Software, die ich zunächst verwendete, damit die Mailbox funktionierte, hieß QEMM-386 und war im großen und ganzen der Vorläufer der heutigen Betriebssysteme, die mehrere Dinge (fast) gleichzeitig tun konnten.
Nach kurzer Zeit war ich damit aber eher unzufrieden, und weil ich schon länger in Fachzeitschriften wie mc und c't von "großen" Betriebssystemen gelesen hatte, wollte ich unbedingt OS/2 ausprobieren. Damals war die Version 2.0 im Entstehen, und für kleines Geld gab es die ersten Beta-Versionen zum Testen zu kaufen, geliefert auf ca. 50 Disketten (mit C-Compiler, Druckertreibern, Bildschirmtreibern und zahllosen anderen Dingen wie 3270, die ich damals überhaupt nicht verstand).
OS/2 war richtig klasse und ich bin mit fliegenden Fahnen von MS-Dos weg hin zu OS/2 gewechselt und bis zu einem doofen Festplattendefekt Mitte 2000 war ich ein begeisterter Anhänger. Als IBM 2005 dann den Tod von OS/2 bekanntgab, war ich ziemlich niedergeschmettert; obwohl ich privat schon lang kein OS/2 mehr verwendete, sondern beruflich bedingt Linux und Windows, finde ich bis heute, dass OS/2 ein trauriges und unrühmliches Ende nahm. Es wird bis heute als "eComStation" weiter von einer Drittfirma vermarktet und gepflegt, aber eigentlich ist das nur für Firmenkunden interessant; für Privatleute hingegen überhaupt nicht.
Leider gab es für OS/2 relativ wenig gute Software, insbesondere für die Fido-Technik, und die Dos-Emulation ließ am Anfang doch arg zu wünschen übrig. Also fing ich an, selbst Fido-Software zu programmieren. Dabei half mir Open Source ganz gewaltig: es gab nämlich den genialen gcc-Compiler in einer speziellen OS/2-Variante, die den größten Teil der richtig guten Features nutzen konnte, auch ohne von IBM das Software Development Kit zu kaufen. Das einzige, was ich nie hinbekommen habe, war, wie man in einem 32-Bit-C-Programm eine Callback-Funktion definiert, die von einer 16-Bit-DLL aufgerufen werden kann. Das hätte ich für die Benutzung der OS/2-ISDN-CAPI brauchen können, die gab es nämlich nur als 16-Bit-DLL.
Nach einiger Zeit hatte ich eine komplette Suite von Programmen und Hilfsprogrammen, um eine Mailbox mit allen Features zu betreiben. Nachdem das letzte Dos-Programm also einen Ersatz gefunden hatte, konnte ich feierlich in der config.sys von OS/2 die Umstellung auf "ProtectOnly=Yes" durchführen und nach dem nächsten Booten hatte ich 1 MB Speicher mehr, weil es keine Dos-Emulation mehr gab.
Einer meiner Bekannten berichtete dann bei einem Treffen davon, dass er jetzt auch Zugang zum Usenet hat, und rein zufällig war sein Lieferant auch für mich über Ortsnetz erreichbar, also halbwegs preisgünstig. Flugs den C-Compiler geschwungen und mir selbst ein Gateway zwischen UUCP und Fidonetz gebastelt, für Mail (mit batch-smtp) und News. Auch im Usenet war ich dann unter texbox erreichbar, zuerst unter der Domain cpr.sub.org, und als die dann eingestellt wurde, war ich noch eine Zeitlang Mitglied bei lahn.de. Der Verein hatte durch gewisse Kontakte die Möglichkeit erhalten, einen eigenen Rechner im Rechenzentrum der Uni Gießen aufzustellen, und bot damit über Modems die Möglichkeit, ebenfalls Mail und News zu beziehen. Mit der zunehmenden Verbreitung von Zugangsmöglichkeiten über die normalen Telefonanbieter wie Telekom ist das alles dann irgendwie entschlafen, und heute habe ich über TGnet eine 50-MBit/s-Anbindung. Wahnsinn ;)
Das Windows in OS/2 habe ich übrigens nie verwendet (in OS/2 2.0 war Windows 3.0 enthalten und in Warp 3 aus dem Jahr 1994 war es dann Windows 3.1). IBM konnte das mitliefern, weil Microsoft und IBM noch gute Partner waren, bevor sie sich beim Streit über Windows NT gegen OS/2 2.x entzweiten. OS/2 3.0 "Warp" gab es dann in zwei Varianten, eine "rote" Edition ohne Windows für deutlich weniger Geld, und ein "blaues" Warp 3, bei dem schon Windows 3.1 enthalten war. Und selbst beim "roten" OS/2 konnte man nachträglich mit den eigenen Windows-Disketten die Emulation installieren. Windows 95 als 32-Bit-Aufsatz auf einen Dos-Unterbau ließ sich unter OS/2 nicht zum Laufen bringen, das wäre mit dem Protected Mode kollidiert. Es gab aber die abgespeckte win32s-Variante, aber das weiß ich nur aus Zeitungsartikeln, ich lebte da schon länger "ProtectOnly". Das Spiel "FreeCell" gibt es heute noch in Windows. Damals war es ein erster Lackmus-Test, ob win32s korrekt installiert wurde und funktioniert; dieses Spiel war das erste, das die neue 32-Bit-API von Windows benutzte, und win32s war eine Erweiterung für die älteren Windows-Versionen, um wenigstens einen Teil der 32-Bit-API in die alte Welt zu bringen.
Zuerst hieß der Artikel noch "Jugendsünden" - ich wollte nämlich darüber schreiben, wie ich in einem meiner Fido-Programme einen ganz dämlichen Fehler eingebaut hatte und ihn monatelang nicht finden konnte. Eines der Blogs, das ich ganz gern lese, hat gelegentlich auch Artikel über Fehler beim Programmieren. Aber irgendwie hat sich der Artikel dann ganz anders entwickelt, als ich dachte. Trotzdem will ich diese Anekdote noch aufschreiben, nach diesen ganzen Abschweifungen und historischen Andeutungen.
Eines der Programme, an dem ich ziemlich lang und ziemlich intensiv gearbeitet hatte (es hatte am Ende knapp 150.000 Zeilen Code), war eines, mit dem man Dateien in einem Mailboxnetzwerk an Abonnenten verteilen konnte. Dieses Programm konnte auch Mails erzeugen, um die Interessenten zu benachrichtigen. Das Aussehen der Mails war mit Textschablonen ziemlich frei konfigurierbar. Und im Programmcode für das Erzeugen der Mails war ein ziemlich dummer Fehler drin.
Üblicherweise deklariert man in C-Funktionen die Variablen, die man benötigt. Als Anfänger habe ich zuerst alle meine Strings als statische char-Arrays definiert. Irgendwann in meiner Lernphase dachte ich dann, ich müsste den Speicher effizienter ausnutzen und statt char origin[66] besser char *origin=malloc(length(irgendwas)) schreiben. Heute lacht man natürlich darüber, ob es sich lohnt, den Code zum zweiten Mal anzufassen, um 60 Byte für einen String einzusparen. Naja.
Dummerweise hatte ich an einer ganz anderen Stelle im Code (das ist der erste blöde Fehler) ein Sicherheitsnetz einbauen wollen, damit die von mir erzeugten Mails einen bestimmten Fido-Standard nicht verletzen, und deshalb beim Abspeichern der Mail origin[65]='\0' verwendet, um eine maximale Länge nicht zu überschreiten. Das waren dann gleich zwei blöde Fehler: (1) ein hartkodierter Wert 65, der (2) weit entfernt von der Deklaration der Variablen origin verwendet wird.
Das ist so eine Programmiertechnik, die meistens funktioniert. Außer, wenn der Parameter, der beim weit entfernten malloc einfließt, kleiner als 65 wird. Der String ist dann natürlich kürzer als 65 Byte, und in diesem Fall schieße ich mir irgendwo in den Speicher in eine ganz andere Variable ein Nullbyte hinein, das da nicht hingehört.
Ich habe ungelogen Monate gebraucht, bis mir der Zusammenhang klar war und ich eines meiner ersten Kopf->Tisch-Erlebnisse hatte. Natürlich ist das nie bei mir passiert, weil ich ausgerechnet so eine Situation bei mir nie hatte, aber ich habe die von mir programmierte OS/2-Software auch an andere OS/2-Mailboxbetreiber weiter gegeben, und von denen kamen dann ab und zu Meldungen über unerklärliche Abstürze oder abgeschnittene Texte in Mails. Das wurde mir dann klar: ein Nullbyte an der falschen Stelle kann viel Schaden anrichten.
Gefunden habe ich den Fehler dann, indem ich nahezu einen gesamten Programmdurchlauf im Debugger im Single-Step-Modus ausgeführt habe, während ich ein paar der "verdächtigen" Variablen mit einem dauerhaften Watch-Ausdruck beobachtete. Ich wusste gar nicht mehr, dass ich an einer weit entfernten Stelle im Code dieses "Sicherheitsnetz" eingebaut hatte, das war schon Monate her. Aber in dem Moment, als der Debugger mir die Zeile Code anzeigte und wie oben schon erwähnt eine ganz andere Variable plötzlich auf die Hälfte gekürzt wurde, war ich total begeistert. Und einen Moment später kam dann auch das schon erwähnte Kopf->Tisch-Erlebnis ;-)
Keine Kommentare:
Kommentar veröffentlichen