Principia Softwarica
(principia-softwarica.org)- Principia Softwarica est une série qui met en livre le code source du noyau, du shell, du système de fenêtrage, du compilateur, de l’éditeur de liens, de l’éditeur, du navigateur et du débogueur de Plan 9 from Bell Labs afin d’aider à comprendre le fonctionnement interne d’un ordinateur
- Chaque livre est produit à partir d’un programme lettré (literate program) qui réunit code source et documentation, le code réel et le livre étant générés automatiquement à partir d’un même document
- L’ensemble de la série représente 205,081 LOC, 82,014 LOE et 6,312 pages, avec pour objectif d’atteindre un ratio LOE/LOC de 1.0, soit une ligne d’explication pour chaque ligne de code
- Plan 9 reste compact avec 183K LOC pour l’ensemble du système, et applique de manière uniforme un style C cohérent ainsi que des idées comme « tout est fichier », les espaces de noms par processus et la transparence réseau, ce qui en fait un système d’exploitation entièrement explicable
- Le code source du projet est publié sur github.com/aryx/principia-softwarica, et Getting Started explique comment compiler et exécuter Plan 9 avec Docker ou depuis les sources
Vue d’ensemble du projet
- Principia Softwarica est une série de livres qui aide à comprendre le fonctionnement interne des ordinateurs en expliquant en détail l’intégralité du code source des programmes système essentiels utilisés par les programmeurs
- Tous les programmes proviennent de Plan 9 from Bell Labs, un système d’exploitation conçu comme successeur d’Unix, avec comme postulat central un code compact et élégant
- Les programmes couverts comprennent le noyau, le shell, le système de fenêtrage, le compilateur, l’éditeur de liens, l’éditeur, le navigateur web et le débogueur, chacun faisant l’objet d’un livre distinct
- Le livre est à la fois un document qui explique l’implémentation et l’implémentation elle-même
- Chaque programme provient d’un programme lettré (literate program) réunissant code source et documentation, et le code réel comme le livre sont générés automatiquement à partir de ce document
- Une explication séparée sur la programmation lettrée est disponible dans more about literate programming
- Le code source du projet est publié sur github.com/aryx/principia-softwarica
Pourquoi c’est nécessaire
-
Les lacunes de l’enseignement
- Quand on tape
lsdans une fenêtre de terminal, la réponse à la question de savoir ce qui se passe implique le shell, la bibliothèque C, le noyau, la pile graphique et le système de fenêtrage - Keith Adams, ancien collègue chez Facebook puis Chief Architect de Slack, utilisait cette question comme question d’entretien. Le parcours complet est détaillé dans The Journey of
ls - Aujourd’hui, « full-stack » désigne généralement React, Node et le cloud, mais la pile sous-jacente réelle comprend le compilateur, l’éditeur de liens, le noyau et les appels système
- Il existe d’excellents manuels qui expliquent les concepts des programmes système, mais presque aucune ressource ne montre le code source réel, et Principia Softwarica cherche à combler cet écart
- Quand on tape
-
L’importance à l’ère de l’IA
- Les outils de codage IA exécutent des programmes comme
grep,sed,diff,awk,gccetld, ceux que Principia Softwarica explique, des centaines de fois par jour - Si, dans le travail de développement, l’écriture du code représente 20 % et sa compréhension 80 %, alors à mesure que l’IA prend en charge les 20 %, les 80 % consistant à comprendre ce que fait réellement le code, jusqu’au matériel, deviennent encore plus importants
- L’idée sous-jacente est que si les machines sont passées par l’apprentissage profond, les humains doivent eux aussi apprendre en profondeur
- Les outils de codage IA exécutent des programmes comme
Livres et périmètre
-
L’ensemble de la série représente 205 081 LOC, 82 014 LOE et 6 312 pages, avec un ratio global LOE/LOC de 0,40
-
LOC désigne le nombre de lignes de code, LOE le nombre de lignes d’explication, et Pages le nombre de pages mises en page
-
L’objectif est d’atteindre 1,0 LOE/LOC dans tous les livres afin d’associer une ligne d’explication à chaque ligne de code
- Le vert correspond à 0,75 ou plus, donc proche de l’objectif
- Le jaune correspond à 0,50 ou plus, donc en bonne progression
- L’orange correspond à 0,25 ou plus, donc avec encore une part importante de rédaction à faire
- Le rouge correspond à moins de 0,25, donc encore majoritairement du code avec peu d’explications
-
Systèmes centraux
-
Chaîne d’outils de développement
-
Outils pour développeurs
-
Graphisme
- Graphics stack : libdraw, libmemdraw, libmemlayer, libimg, 18 528 LOC, 5 753 LOE, 562 pages
- Windowing system : rio, libframe, libcomplete, libplumb, 8 825 LOC, 7 696 LOE, 362 pages
- GUI toolkit : libpanel, 3 749 LOC, 2 986 LOE, 170 pages
-
Réseau et autres programmes
- Network stack : libip, lib9p, 19 769 LOC, 3 884 LOE, 578 pages
-
Navigateur web : mothra, webfs, hget webcookies uhtml resize, tcs, 12 949 LOC, 4 482 LOE, 384 pages
Pourquoi avoir choisi Plan 9
- Plan 9 est assez petit pour qu’on puisse comprendre de façon réaliste l’ensemble du système d’exploitation, écrit dans un style C cohérent et appliquant uniformément quelques idées puissantes
- tout est un fichier
- utilisation d’espaces de noms par processus
- transparence réseau
- Ce n’est pas aussi sophistiqué visuellement que macOS ou Windows, mais il fournit fondamentalement les mêmes services de base
- un noyau qui gère les processus et la mémoire
- un système de fenêtres
- un shell
- un compilateur
- le réseau
- des applications graphiques
- Le système Plan 9 complet, en incluant le noyau, le compilateur, le shell, le système de fenêtres, etc., représente 183 KLOC, soit presque deux fois moins que vim avec 350 KLOC
- Si l’on considère qu’un livre de 400 pages couvre environ 12 KLOC, Principia Softwarica peut traiter l’ensemble de Plan 9 en environ 15 volumes
- un programme unique comme
gdbdemanderait 10 fois plus de livres gccen demanderait 100 fois plus
- un programme unique comme
- Wayland est un remplaçant moderne de X11 et Clang un remplaçant moderne de GCC, mais une « réécriture propre » ne suffit pas à rendre un programme plus petit
- L’approche de Plan 9, conçue dès le départ avec la simplicité comme objectif, permet d’expliquer chaque ligne sous forme de livre
Comment appliquer ce qu’on apprend à d’autres systèmes
- Il n’est pas nécessaire d’utiliser directement Plan 9 : comprendre un système d’exploitation petit et élégant permet d’acquérir une intuition pour Linux, macOS et Windows
- Le noyau, le compilateur, l’éditeur de liens, le shell, l’éditeur, le débogueur, la boîte à outils GUI et la pile réseau résolvent tous les mêmes problèmes fondamentaux, et que le code fasse 5 000 lignes ou 500 000, la nature du problème reste la même
- Lire le compilateur C de Plan 9 donne le vocabulaire nécessaire pour explorer GCC
- Si l’on comprend l’éditeur de liens de Plan 9 d’un seul tenant, le traitement des relocalisations dans LLD cesse d’être écrasant et devient lisible
- Voir comment
acidlit la table des symboles et parcourt la pile permet d’apprendre quoi regarder dans GDB - Une petite implémentation fournit un modèle de travail pour distinguer la complexité essentielle de la complexité accidentelle dans de grandes bases de code
- Les idées de Plan 9 sont déjà largement diffusées
- UTF-8 a été créé par Thompson et Pike pour Plan 9
/procvient de Plan 9- les Linux namespaces, à la base de Docker et des conteneurs, viennent de Plan 9
- Go a été créé par Pike et Thompson, et les goroutines sont inspirées de
libthreadde Plan 9 - le protocole 9P est utilisé dans WSL2
- Les
grep,sed,awk,diff,cc,ldexpliqués par Principia Softwarica sont des outils que les programmeurs utilisent chaque jour, et les mêmes concepts s’expriment de manière bien plus claire dans Plan 9 - plan9port apporte les
grep,sedetawkde l’espace utilisateur de Plan 9 à Linux et macOS - goken9cc permet d’utiliser la toolchain C de Plan 9 sur Linux, macOS et Windows pour produire des binaires natifs pour ces plateformes
Code source et exécution
- github.com/aryx/principia-softwarica — code Plan 9 et programmes lettrés utilisés dans Principia Softwarica
- Getting Started — comment compiler et exécuter Plan 9 avec Docker ou depuis les sources
- The Journey of
ls— parcours d’une commande simple à travers chaque couche du système et manière dont les livres s’articulent entre eux
Port OCaml et outils annexes
- Après l’écriture de plusieurs volumes, certains programmes ont été portés en OCaml, un langage fonctionnel statiquement typé
- La motivation initiale était de mieux comprendre le code C
- porter un programme dans un autre langage révèle ce qui est essentiel et ce qui est accessoire
- les bugs du port font apparaître des subtilités cachées dans l’original
- Le port OCaml a évolué en un projet distinct, XIX, avec son propre site web et une série de livres de programmation lettrée consacrés aux outils en version OCaml
- syncweb — outil de programmation lettrée utilisé pour produire tous les livres, héritier de Noweb
- goken9cc — compilateur C croisé pour compiler Plan 9 sur Linux, macOS et Windows, héritier de Kencc
Travaux liés et différences
- Project Oberon est ce qui se rapproche le plus de Principia Softwarica dans son esprit, en ce qu’il présente un système d’exploitation complet avec l’ensemble de son code source, y compris le compilateur et le système de fenêtres
- Oberon ne peut exécuter que des programmes Oberon ; c’est, comme Smalltalk, un monde autonome magnifique mais isolé
- Plan 9 et Unix sont des systèmes généralistes capables de compiler et d’exécuter des programmes écrits dans n’importe quel langage
- Oberon n’a pas de réseau et fonctionne sur un matériel personnalisé
- Principia Softwarica couvre un champ plus large, allant jusqu’au compilateur, à l’éditeur de liens, au shell, au débogueur, au graphique et au réseau sur un véritable système d’exploitation
- The Elements of Computing Systems est aussi connu sous le nom de Nand2Tetris et construit un ordinateur depuis les portes NAND jusqu’à Tetris
- c’est excellent sur le plan pédagogique, mais le matériel et le logiciel sont un CPU jouet, un OS jouet et un langage jouet conçus pour le cours
- Principia Softwarica adopte l’approche inverse en expliquant du code réel et un vrai système d’exploitation fonctionnant sur du matériel réel
- Computer Systems: A Programmer's Perspective est connu sous le nom de CS:APP et constitue un excellent manuel pour expliquer des concepts de programmation système comme l’agencement mémoire, l’édition de liens, la mémoire virtuelle et la concurrence
- CS:APP s’arrête aux concepts et ne montre pas le code source d’un vrai noyau, d’un vrai éditeur de liens ou d’un vrai compilateur
- Principia Softwarica le complète en expliquant ce code source ligne par ligne
Historique et auteur
- Le site web de Principia Softwarica a été lancé en mars 2026
- En 2025, le projet a repris pour permettre à nouveau la compilation et l’exécution sur QEMU et Raspberry Pi, avec ajout d’un Dockerfile et de la CI
- De 2019 à 2024, il y a eu une période d’interruption due au travail sur Semgrep
- En 2017, le noyau a été porté sur Raspberry Pi et le travail sur les livres Shell et Graphics a avancé
- En 2016, le livre Build System a été terminé et les premiers programmes lettrés Libcore et Compiler ont été créés
- En 2015, les livres Assembler et Linker ont été terminés et Knuth a été rencontré
- En 2014, le projet a commencé avec un fork de Plan 9, une compilation croisée sur macOS et la création des premiers programmes lettrés
- Principia Softwarica est écrit par Yoann Padioleau, et le code inclut des contributions de Ken Thompson, Rob Pike, Dave Presotto, Phil Winterbottom, Tom Duff, Andrew Hume et Russ Cox
- De même que Principia Mathematica traite des fondements des mathématiques, Principia Softwarica vise à traiter les programmes systèmes fondamentaux
1 commentaires
Commentaires sur Lobste.rs
Le titre fait clairement référence à Principia Mathematica, mais « softwarica » n’est pas du latin.
Ça donne l’impression d’un appel de fonction C écrit pour ressembler au latin mais cassé comme
foo(bar; baz], et de meilleurs titres pourraient être « Principia Programmatum » (principes des programmes) ou « Principia Artis Programmatoriae » (principes de l’art de programmer).Le latin n’a pas de mot pour logiciel ou programmation, donc forger un mot nouveau est acceptable.
Si « Programmum/Programmatum » semble plus plausible, c’est parce que l’anglais « program » vient du français « programme », lui-même issu du latin « programmum ».
En partant plus directement du français logiciel, on a « logique » + « iel » (suffixe issu de matériel), et en le reliant au latin « logica », « materialis/materia », on pourrait rendre « program » par « logicia » et « programs » par « logicium ».
Cela dit, je n’ai fait que deux ans de latin au lycée, donc sans grande certitude.
C’est déjà une langue morte, et comme le titre fait référence à un projet raté bien connu, donner aujourd’hui un titre en latin correct à un livre en anglais a déjà quelque chose d’un peu ridicule.
C’est aussi l’impression que ça m’a donnée, même en ayant autrefois lu le latin assez couramment.
J’ai d’abord tiqué à la mention de Plan 9, mais j’ai apprécié l’explication détaillée de pourquoi l’auteur a choisi Plan 9.
En résumé, parce que c’est petit, et cette explication se lit presque comme un excellent texte promotionnel pour le livre.
J’aime le fait qu’après avoir porté OCaml sur Plan 9, l’auteur ait réécrit une grande partie de l’espace utilisateur en OCaml pour mieux comprendre ce qui se passe en C.
Au passage, le code s’est trouvé fonctionner aussi sous Windows de manière assez surprenante, et je me demande qui finance ce travail.
https://aryx.github.io/xix/#about
C’est vraiment un travail démesuré.
17 volumes, plus de 6 000 pages, et tout semble avoir été publié la semaine dernière.
Je me demande si quelqu’un a plus de contexte ou d’informations sur l’auteur.
https://www.mail-archive.com/9fans@9fans.net/msg45156.html
En résumé, ça a commencé en 2014, et l’auteur doit présenter ce travail demain à 13:45 heure locale à l’IWP9.
http://iwp9.org/#prg
Cela dit, l’auteur a probablement énormément appris au cours du processus.
Principia Softwarica est une série de livres qui explique le fonctionnement interne des ordinateurs en détaillant l’intégralité du code source des programmes essentiels utilisés par les programmeurs.
Le kernel, le shell, le système de fenêtrage, le compilateur, l’éditeur de liens, l’éditeur de texte, le débogueur, etc. sont chacun traités dans un volume séparé, et le système d’exploitation visé semble être Plan 9.
La page dit Learn Here, Apply Everywhere, et explique qu’il n’est pas nécessaire d’utiliser Plan 9.
L’idée est que comprendre un système d’exploitation petit et élégant permet d’acquérir une intuition profonde de Linux, macOS et même Windows.
Je comprends ce que l’auteur veut dire, mais affirmer que « Oberon ne peut exécuter que des programmes Oberon » ne me semble pas vraiment être une limitation du système Oberon.
En principe, n’importe quel langage de programmation peut cibler cette architecture et son runtime.
Je vois bien que c’est dérivé de Plan 9, mais je me demande lequel de Plan 9 et Inferno est le meilleur.
Ça a l’air d’un projet extrêmement ambitieux.
Je suis convaincu que lire du bon code, surtout quand il est accompagné d’explications sur les choix de conception, aide à devenir un meilleur développeur.
C’est encore plus vrai quand il s’agit de code un peu en dehors de son domaine habituel, et ça pourrait être un excellent outil d’apprentissage.