16 Punkte von GN⁺ 2023-08-13 | 2 Kommentare | Auf WhatsApp teilen
  • Der Linux-Kernel ist heute ein riesiges Open-Source-Projekt mit 36 Millionen Zeilen, aber die erste Version umfasste nur 10.239 Zeilen (ohne Kommentare/Leerzeilen 8.670)
  • Linux v0.01 ist aufgrund dieser Schlichtheit ein guter Ausgangspunkt, um das Innenleben eines Unix-artigen OS-Kernels zu lernen
  • v0.01 besitzt nur 66 System-Calls
    • Erstellen, Löschen und Schreiben von Dateien/Verzeichnissen
    • chmod, chown, pipe, fork, execve
    • Das Socket-Konzept war noch nicht eingeführt, daher keine Netzwerkunterstützung
    • mount ist noch nicht implementiert
  • Es ist auf die Intel-386-Architektur hart codiert (der MINIX-Autor kritisierte das)
    • strcpy ist in Assembler unter Verwendung von i386-Instruktionen geschrieben
  • Unterstützt werden nur PC/AT-Geräte
    • CMOS, PIT (Programmable Interval Timer), ATA (PIO), VGA (Textmodus), Intel 8042 PS2-Tastatur (Assembler)
    • Es gibt noch nicht einmal einen drivers-Ordner, alles ist in die Subsysteme hart codiert
  • Im Makefile gibt es einen Kommentar mit dem ursprünglich von Linus vergebenen Namen: "FREAX" Kernel
  • Das Dateisystem unterstützt nur MINIX (ext wurde von MINIX inspiriert)
  • Im Scheduler-Code gibt es einen Kommentar: "Dieser Teil ist ziemlich guter Code, der in jeder Umgebung funktioniert, daher wird es wohl keinen Grund geben, ihn zu ändern!"
    • Natürlich wurde das inzwischen durch verschiedene Verbesserungen und Algorithmen geändert, daher war diese Vorhersage falsch
  • Die Implementierung des Kernel Panic besteht aus nur 5 Zeilen: Sie gibt "Kernel panic: Ursache" aus und stoppt das System mit for(;;)
  • Es gibt eine Stelle, an der fork(2) im Kernel-Space aufgerufen wird
    • Es sieht so aus, aber tatsächlich ist das davor stehende move_to_user_mode() der Trick
  • Linus hatte kein Gerät mit mehr als 8 MB RAM (er konnte es selbst nicht testen und meinte sinngemäß, wer so ein Gerät hat, solle es einfach ausprobieren)
  • Mit modernen Toolchains ist es schwer zu kompilieren
    • GCC ist zwar abwärtskompatibel, aber nicht ausreichend
    • Linus hatte seine eigene GCC-Version mit der Option -mstring-insns (vermutlich eine Option zur Unterstützung von x86-String-Instruktionen)

2 Kommentare

 
arfwene 2023-10-31

Interessant.

 
GN⁺ 2023-08-13
Hacker-News-Kommentare
  • Diskussion über die Komplexität des heutigen Linux und die Frage, ob eine 4500-mal höhere Komplexität als bei Linux v0.01 gemessen an den Codezeilen wirklich nötig ist.
  • Leser würden gern eine grafische Analyse der für jedes große Softwaremodul von Linux verwendeten Codezeilen und Funktionen sehen.
  • Es wird vorgeschlagen, klassische Codebasen wie Linux, SQLite und vim zu lesen, da sie größtenteils von einer Person geschrieben wurden und entweder sehr erfolgreich oder einflussreich waren.
  • Erklärung zur Funktionsweise des Linux-counter: Es wird behauptet, dass er exponentiell bis auf das Doppelte der Priorität sinkt, wenn eine Aufgabe nicht lauffähig ist.
  • Bericht, dass Redhat beim IPO den Aktionären ein Poster mit dem 0.01-Quellcode geschickt habe; Leser finden es interessant, darin gelegentlich zu lesen.
  • Diskussion über die Abwärtskompatibilität von GCC (GNU Compiler Collection), einschließlich eines Kommentars, dass GCC lange Zeit seine eigenen älteren Versionen nicht kompilieren konnte.
  • Leser werden zu stark kommentiertem Linux-Kernel-Quellcode geführt, um tieferes Verständnis zu gewinnen und weiterzulesen.
  • Vorschlag, dass das Lesen der ersten lauffähigen Version eines sehr erfolgreichen Projekts wie Linux ein guter Weg zum Verständnis ist, da sie gewöhnlich nur die wichtigsten Kernfunktionen ohne viele Abstraktionen oder Verallgemeinerungen enthält.
  • Einige Leser bemerkten, dass im Quellcode Leerzeichen statt Tabs verwendet wurden, und vermuten, dass Torvalds später vielleicht zum Verfechter von Tabs wurde.
  • Die Tiefe und Häufigkeit der Kommentare im Code werden gewürdigt, da sie den Lesern Zugänglichkeit bieten, und es besteht Neugier, ob es jemandem gelungen ist, ihn zu kompilieren.