1 Punkte von GN⁺ 1 시간 전 | 1 Kommentare | Auf WhatsApp teilen
  • Principia Softwarica ist eine Reihe, die den Quellcode von Kernel, Shell, Window-System, Compiler, Linker, Editor, Browser und Debugger aus Plan 9 from Bell Labs in Buchform aufbereitet, um das Verständnis der inneren Funktionsweise von Computern zu fördern
  • Jedes Buch entsteht aus einem literate program, das Quellcode und Dokumentation gemeinsam enthält; der eigentliche Code und das Buch werden automatisch aus demselben Dokument erzeugt
  • Die gesamte Reihe umfasst 205.081 LOC, 82.014 LOE und 6.312 Seiten; das Ziel ist, ein Verhältnis von LOE/LOC 1,0 zu erreichen, also für jede Codezeile eine Erläuterungszeile bereitzustellen
  • Plan 9 ist mit insgesamt 183K LOC ein kleines Gesamtsystem und wendet Ideen wie „alles ist eine Datei“, prozessbezogene Namespaces und Netzwerktranzparenz in einem einheitlichen C-Stil konsistent an, wodurch das gesamte Betriebssystem als erklärbares Objekt fassbar wird
  • Der Projektquellcode ist unter github.com/aryx/principia-softwarica öffentlich verfügbar, und Getting Started zeigt, wie sich Plan 9 mit Docker oder aus dem Quellcode bauen und ausführen lässt

Projektüberblick

  • Principia Softwarica ist eine Buchreihe, die den vollständigen Quellcode zentraler Systemprogramme, die Programmierer verwenden, detailliert erläutert, um das Verständnis der inneren Funktionsweise von Computern zu fördern
  • Alle Programme stammen aus Plan 9 from Bell Labs, einem als Nachfolger von Unix entworfenen Betriebssystem, wobei die zentrale Annahme ist, dass der Code klein und elegant ist
  • Zu den behandelten Programmen gehören Kernel, Shell, Window-System, Compiler, Linker, Editor, Webbrowser und Debugger; jedes Programm bildet ein eigenes Buch
  • Die Bücher sind Dokumente, die die Implementierung erläutern, und zugleich die Implementierung selbst
    • Jedes Programm geht aus einem literate program hervor, das Quellcode und Dokumentation gemeinsam enthält; sowohl der eigentliche Code als auch das Buch werden automatisch aus diesem Dokument erzeugt
    • Eine gesonderte Erklärung zu literate programming gibt es unter more about literate programming
  • Der Projektquellcode ist unter github.com/aryx/principia-softwarica öffentlich verfügbar

Warum es nötig ist

  • Lücke in der Ausbildung

    • Wenn man im Terminalfenster ls eingibt, führt die Antwort auf die Frage, was dabei geschieht, durch Shell, C-Bibliothek, Kernel, Grafik-Stack und Window-System
    • Keith Adams war ein Kollege bei Facebook und wurde später Chief Architect bei Slack; er nutzte diese Frage als Interviewfrage. Die vollständige Nachverfolgung steht in The Journey of ls
    • „Full-Stack“ bedeutet heute meist React, Node und Cloud, doch im eigentlichen Unterbau liegen Compiler, Linker, Kernel und Systemaufrufe
    • Es gibt hervorragende Lehrbücher, die die Konzepte von Systemprogrammen erklären, aber kaum Material, das echten Quellcode zeigt; Principia Softwarica will diese Lücke schließen
  • Bedeutung im Zeitalter von AI

    • AI-Coding-Tools führen Programme wie grep, sed, diff, awk, gcc und ld, die Principia Softwarica erklärt, täglich Hunderte Male aus
    • Wenn bei der Programmierarbeit 20 % auf das Schreiben von Code und 80 % auf das Verstehen entfallen, dann wird mit jedem Anteil der 20 %, den AI übernimmt, jener 80-%-Teil noch wichtiger: zu verstehen, was der Code tatsächlich tut, bis hinunter zur Hardware
    • Dahinter steht das Bewusstsein, dass Menschen ebenso tief lernen müssen, wie Maschinen durch Deep Learning gegangen sind

Bücher und Umfang

Warum Plan 9 gewählt wurde

  • Plan 9 ist klein genug, um das gesamte Betriebssystem realistisch verstehen zu können, ist in einem konsistenten C-Stil geschrieben und wendet einige starke Ideen einheitlich an
    • Alles ist eine Datei
    • Es verwendet prozessbezogene Namespaces
    • Es bietet Netzwerktransparenz
  • Es ist nicht so glamourös wie macOS oder Windows, bietet aber im Wesentlichen dieselben Kerndienste
    • ein Kernel, der Prozesse und Speicher verwaltet
    • ein Fenstersystem
    • eine Shell
    • ein Compiler
    • Networking
    • grafische Anwendungen
  • Das gesamte Plan-9-System umfasst einschließlich Kernel, Compiler, Shell, Fenstersystem usw. 183K LOC und ist damit fast 2-mal kleiner als vim 350K LOC
  • Wenn man davon ausgeht, dass ein 400-seitiges Buch etwa 12K LOC behandelt, kann Principia Softwarica das gesamte Plan 9 in ungefähr 15 Bänden behandeln
    • Ein einzelnes Programm wie gdb würde 10-mal so viele Bücher benötigen
    • gcc würde 100-mal so viele Bücher benötigen
  • Wayland ist ein moderner Ersatz für X11 und Clang ein moderner Ersatz für GCC, aber ein „sauberer Rewrite“ allein macht Programme nicht kleiner
  • Der von Anfang an auf Einfachheit ausgelegte Plan-9-Ansatz macht es möglich, jede Zeile in Buchform zu erklären

Wie das Gelernte auf andere Systeme angewendet wird

  • Man muss Plan 9 nicht direkt verwenden; wenn man ein kleines, elegantes Betriebssystem versteht, gewinnt man Intuition für Linux, macOS und Windows
  • Kernel, Compiler, Linker, Shell, Editor, Debugger, GUI-Toolkit und Netzwerk-Stack lösen alle dieselben grundlegenden Probleme; ob der Code 5.000 oder 500.000 Zeilen hat, das Wesen des Problems ist dasselbe
  • Wer den C-Compiler von Plan 9 liest, erwirbt das Vokabular, das man braucht, um sich in GCC zurechtzufinden
  • Wenn man den Linker von Plan 9 auf einmal versteht, wird die Relocation-Verarbeitung von LLD nicht überwältigend, sondern zu etwas, das man lesen kann
  • Wenn man sieht, wie acid die Symboltabelle liest und den Stack durchläuft, lernt man, worauf man in GDB achten muss
  • Kleine Implementierungen liefern ein Arbeitsmodell, um in großen Codebasen zwischen wesentlicher Komplexität und zufälliger Komplexität zu unterscheiden
  • Die Ideen von Plan 9 sind bereits weit verbreitet
    • UTF-8 wurde von Thompson und Pike für Plan 9 geschaffen
    • /proc stammt aus Plan 9
    • Linux-Namespaces, die Grundlage von Docker und Containern, stammen aus Plan 9
    • Go wurde von Pike und Thompson entwickelt, und Goroutines sind von Plan 9s libthread inspiriert
    • Das 9P-Protokoll wird in WSL2 verwendet
  • grep, sed, awk, diff, cc, ld, die Principia Softwarica erklärt, sind Werkzeuge, die Programmierer täglich benutzen, und dieselben Konzepte sind in Plan 9 deutlich klarer ausgedrückt
  • plan9port bringt die Plan-9-Userland-Programme grep, sed und awk nach Linux und macOS
  • goken9cc ermöglicht es, die Plan-9-C-Toolchain unter Linux, macOS und Windows zu verwenden, um native Binärdateien für die jeweilige Plattform zu erzeugen

Quellcode und Ausführung

  • github.com/aryx/principia-softwarica — der in Principia Softwarica verwendete Plan-9-Code und die Literate-Programme
  • Getting Started — wie man Plan 9 mit Docker oder aus dem Quellcode baut und ausführt
  • The Journey of ls — eine Verfolgung, wie ein einfacher Befehl die einzelnen Schichten des Systems durchläuft, und wie die Bücher miteinander verbunden sind

OCaml-Port und Hilfswerkzeuge

  • Nach dem Schreiben mehrerer Bände wurden einige Programme nach OCaml, einer statisch typisierten funktionalen Sprache, portiert
  • Die ursprüngliche Motivation war, den C-Code besser zu verstehen
    • Wenn man ein Programm in eine andere Sprache überträgt, zeigt sich, was wesentlich ist und was nur Beiwerk
    • Fehler im Port legen subtile Stellen offen, die im Original verborgen waren
  • Der OCaml-Port entwickelte sich zu einem separaten Projekt, XIX, mit eigener Website und einer Reihe von Büchern zum Literate Programming für die Werkzeuge der OCaml-Version
  • syncweb — das Literate-Programming-Werkzeug, das zum Erstellen aller Bücher verwendet wird, und ein Nachfahre von Noweb
  • goken9cc — ein C-Cross-Compiler zum Bauen von Plan 9 unter Linux, macOS und Windows, und ein Nachfahre von Kencc

Verwandte Arbeiten und Unterschiede

  • Project Oberon steht Principia Softwarica geistig am nächsten, weil es ein vollständiges Betriebssystem zusammen mit dem gesamten Quellcode einschließlich Compiler und Fenstersystem präsentiert
    • Oberon kann nur Oberon-Programme ausführen und ist damit wie Smalltalk eine schöne, aber isolierte, in sich geschlossene Welt
    • Plan 9 und Unix sind universelle Systeme, die Programme kompilieren und ausführen können, die in beliebigen Sprachen geschrieben sind
    • Oberon hat kein Networking und läuft auf spezieller Hardware
    • Principia Softwarica behandelt ein breiteres Spektrum, von Compiler, Linker, Shell und Debugger bis hin zu Grafik und Networking auf einem realen Betriebssystem
  • The Elements of Computing Systems ist auch als Nand2Tetris bekannt und baut einen Computer von NAND-Gattern bis zu Tetris
    • Didaktisch ist es hervorragend, aber Hardware und Software sind eine für den Unterricht geschaffene Spielzeug-CPU, ein Spielzeug-OS und eine Spielzeug-Sprache
    • Principia Softwarica verfolgt den entgegengesetzten Ansatz und erklärt echten Code und ein echtes Betriebssystem, die auf realer Hardware laufen
  • Computer Systems: A Programmer's Perspective ist als CS:APP bekannt und ein hervorragendes Lehrbuch, das Konzepte des Systemprogrammierens wie Speicherlayout, Linking, virtuellen Speicher und Nebenläufigkeit erklärt
    • CS:APP bleibt bei den Konzepten stehen und zeigt nicht den Quellcode eines echten Kernels, echten Linkers oder echten Compilers
    • Principia Softwarica ergänzt CS:APP, indem es diesen Quellcode Zeile für Zeile erklärt

Verlauf und Autor

  • Im März 2026 wurde die Principia-Softwarica-Website veröffentlicht
  • 2025 wurde die Arbeit wieder aufgenommen, sodass das System erneut unter QEMU und auf dem Raspberry Pi gebaut und ausgeführt werden konnte; außerdem wurden Dockerfile und CI hinzugefügt
  • Von 2019 bis 2024 gab es eine Unterbrechung wegen der Arbeit an Semgrep
  • 2017 wurde der Kernel auf den Raspberry Pi portiert, und die Arbeit an den Büchern zu Shell und Grafik wurde vorangetrieben
  • 2016 wurde das Buch zum Build-System fertiggestellt, und die ersten Literate-Programme für Libcore und Compiler wurden erstellt
  • 2015 wurden die Bücher zu Assembler und Linker fertiggestellt, und es kam zu einer Begegnung mit Knuth
  • 2014 begann das Projekt mit einem Fork von Plan 9, Cross-Kompilierung auf macOS und der Erstellung der ersten Literate-Programme
  • Principia Softwarica wurde von Yoann Padioleau geschrieben, und der Code enthält Beiträge von Ken Thompson, Rob Pike, Dave Presotto, Phil Winterbottom, Tom Duff, Andrew Hume und Russ Cox
  • So wie Principia Mathematica die Grundlagen der Mathematik behandelt, ist das Ziel von Principia Softwarica, grundlegende Systemprogramme zu behandeln

1 Kommentare

 
GN⁺ 1 시간 전
Lobste.rs-Kommentare
  • Der Titel bezieht sich eindeutig auf Principia Mathematica, aber „softwarica“ ist kein Latein.
    Es wirkt wie ein C-Funktionsaufruf, der so aussehen soll, als wäre er Latein, aber kaputt ist wie foo(bar; baz]; ein besserer Titel wäre vielleicht „Principia Programmatum“ (Prinzipien der Programme) oder „Principia Artis Programmatoriae“ (Prinzipien der Programmierkunst).

    • Streng genommen existiert auch „Programmatum“ nicht, und das nächstliegende „Programmum“ bedeutet eher „Bekanntmachung, Erlass“ und nicht Programm.
      Im Lateinischen gibt es keine Wörter für Software oder Programmierung, also ist es auch in Ordnung, neue Wörter zu bilden.
      Dass „Programmum/Programmatum“ plausibler klingt, liegt daran, dass das englische „program“ aus dem französischen „programme“ stammt, das wiederum auf das lateinische „programmum“ zurückgeht.
      Wenn man direkter vom französischen logiciel ausgeht, ergibt sich „logique“ (Logik) + „iel“ (ein Suffix aus matériel); das ließe sich mit dem lateinischen „logica“ und „materialis/materia“ verknüpfen, sodass man „program“ als „logicia“ und „programs“ als „logicium“ wiedergeben könnte.
      Ich hatte allerdings nur zwei Jahre Latein in der Schule, bin mir also nicht sicher.
    • „Principia Programmatica“ scheint auch möglich zu sein.
    • Ich dachte, der Punkt sei gerade, das Latein absichtlich kaputtzumachen.
      Es ist ohnehin eine tote Sprache, und da der Titel auf ein bekanntes gescheitertes Projekt anspielt, wäre es schon leicht lächerlich, einem heutigen englischen Buch einen korrekt lateinischen Titel zu geben.
      Das sage ich auch als jemand, der früher ziemlich flüssig Latein lesen konnte.
  • Beim ersten Plan 9-Verweis habe ich kurz gestutzt, aber mir gefiel die ausführliche Erklärung des Autors, warum er Plan 9 gewählt hat.
    Kurz gesagt: weil es klein ist, und diese Erklärung liest sich selbst schon wie ein hervorragender Werbetext für das Buch.

    • Mich würde interessieren, warum du beim Plan-9-Verweis gestutzt hast.
  • Mir gefiel, dass der Autor nach dem Port von OCaml auf Plan 9 große Teile des Userspace in OCaml neu geschrieben hat, um besser zu verstehen, was in C eigentlich passiert.
    Dabei wurde der Code überraschenderweise sogar unter Windows lauffähig, und ich frage mich, wer diese Arbeit finanziert.

  • Das ist wirklich eine absurd große Arbeit.
    17 Bände, über 6.000 Seiten, und alles sieht so aus, als wäre es letzte Woche veröffentlicht worden.
    Mich würde interessieren, ob jemand zusätzlichen Kontext oder Hintergrund zum Autor kennt.

    • Schau dir diesen 9fans-Thread an.
      https://www.mail-archive.com/9fans@9fans.net/msg45156.html
      Kurzfassung: angefangen hat es 2014, und der Autor wird die Arbeit morgen um 13:45 Ortszeit auf der IWP9 vorstellen.
      http://iwp9.org/#prg
    • Ich kann den Gedanken nicht ganz abschütteln, dass für Leser ein paar kürzere Bücher nützlicher gewesen wären.
      Natürlich hat der Autor in diesem Prozess vermutlich enorm viel gelernt.
  • Principia Softwarica ist eine Buchreihe, die die innere Funktionsweise von Computern erklärt, indem sie den vollständigen Quellcode der von Programmierern verwendeten Kernprogramme detailliert erläutert.
    Kernel, Shell, Fenstersystem, Compiler, Linker, Editor, Debugger usw. werden jeweils in eigenen Bänden behandelt, und das Zielbetriebssystem scheint Plan 9 zu sein.

    • „Das Zielbetriebssystem scheint Plan 9 zu sein“ ist eine sehr ungenaue Zusammenfassung.
      Auf der Seite steht Learn Here, Apply Everywhere, und dort wird erklärt, dass man Plan 9 gar nicht verwenden muss.
      Die Idee ist, dass man durch das Verständnis eines kleinen, eleganten Betriebssystems auch tiefe Intuitionen für Linux, macOS und sogar Windows gewinnen kann.
  • Ich verstehe, worauf der Autor hinauswill, aber „Oberon kann nur Oberon-Programme ausführen“ würde ich nicht als Einschränkung des Oberon-Systems sehen.
    Grundsätzlich kann jede Programmiersprache auf diese Architektur und Laufzeitumgebung abzielen.

  • Ich verstehe, dass es von Plan 9 abgespalten wurde, aber mich würde interessieren, was besser ist: Plan 9 oder Inferno.

  • Das wirkt wie ein sehr ehrgeiziges Projekt.
    Ich glaube, dass man ein besserer Programmierer wird, wenn man guten Code liest, besonders Code mit Erläuterungen zu den Designentscheidungen.
    Das gilt umso mehr, wenn es sich um Code aus einem Bereich handelt, der leicht außerhalb des eigenen Fachgebiets liegt, und das hier könnte ein hervorragendes Lernwerkzeug sein.