Principia Softwarica
(principia-softwarica.org)- Principia Softwarica es una serie que convierte en libros el código fuente del kernel, shell, sistema de ventanas, compilador, linker, editor, navegador y depurador de Plan 9 from Bell Labs para ayudar a entender cómo funciona una computadora por dentro
- Cada libro se crea a partir de un programa literario (literate program) que reúne código fuente y documentación, y tanto el código real como el libro se generan automáticamente desde el mismo documento
- La serie completa abarca 205,081 LOC, 82,014 LOE y 6,312 páginas, y su objetivo es alcanzar un LOE/LOC de 1.0, haciendo corresponder una línea de explicación por cada línea de código
- Plan 9 es pequeño, con todo el sistema en 183K LOC, y aplica de forma uniforme ideas como un estilo C consistente, “todo es un archivo”, namespaces por proceso y transparencia de red, lo que convierte a todo el sistema operativo en algo que se puede explicar
- El código fuente del proyecto está publicado en github.com/aryx/principia-softwarica, y Getting Started ofrece cómo compilar y ejecutar Plan 9 con Docker o desde el código fuente
Resumen del proyecto
- Principia Softwarica es una serie de libros que ayuda a los programadores a entender cómo funciona una computadora por dentro al explicar en detalle el código fuente completo de los programas de sistema fundamentales que usan
- Todos los programas fueron tomados de Plan 9 from Bell Labs, un sistema operativo diseñado como sucesor de Unix, y parte de la premisa central de que su código es pequeño y elegante
- Los programas cubiertos incluyen el kernel, shell, sistema de ventanas, compilador, linker, editor, navegador web y depurador, y cada programa está organizado como un libro independiente
- El libro es un documento que explica la implementación, pero también es la implementación misma
- Cada programa surge de un programa literario (literate program) que reúne código fuente y documentación, y tanto el código real como el libro se generan automáticamente a partir de este documento
- Hay una explicación aparte sobre programación literaria en more about literate programming
- El código fuente del proyecto está publicado en github.com/aryx/principia-softwarica
Por qué es necesario
-
Vacíos en la educación
- Responder qué pasa cuando se escribe
lsen una ventana de terminal implica pasar por el shell, la biblioteca C, el kernel, el stack gráfico y el sistema de ventanas - Keith Adams fue colega en Facebook y luego Chief Architect de Slack, y usó esta pregunta como pregunta de entrevista. El recorrido completo está en The Journey of
ls - Hoy en día, “full stack” normalmente se refiere a React, Node y la nube, pero en el stack subyacente real están el compilador, el linker, el kernel y las system calls
- Hay excelentes libros de texto que explican los conceptos de los programas de sistema, pero casi no existen materiales que muestren el código fuente real, y Principia Softwarica busca llenar esa brecha
- Responder qué pasa cuando se escribe
-
Importancia en la era de la IA
- Las herramientas de codificación con IA ejecutan cientos de veces al día programas como
grep,sed,diff,awk,gccyld, que Principia Softwarica explica - Si en el trabajo de programación escribir código es 20% y entenderlo es 80%, entonces mientras la IA se encargue de ese 20%, ese 80% de comprender qué hace realmente el código, hasta bajar al hardware, se vuelve aún más importante
- De fondo está la idea de que, así como las máquinas pasaron por deep learning, los humanos también deben aprender en profundidad
- Las herramientas de codificación con IA ejecutan cientos de veces al día programas como
Libros y alcance
-
La serie completa abarca 205,081 LOC, 82,014 LOE y 6,312 páginas, y la proporción total LOE/LOC es de 0.40
-
LOC significa líneas de código, LOE significa líneas de explicación, y Pages se refiere al número de páginas maquetadas
-
El objetivo es alcanzar LOE/LOC 1.0 en todos los libros para hacer corresponder una línea de explicación por cada línea de código
- El verde indica 0.75 o más, cerca de la meta
- El amarillo indica 0.50 o más, en progreso
- El naranja indica 0.25 o más, y todavía queda bastante por escribir
- El rojo indica menos de 0.25, por lo que sigue siendo mayormente código y con poca explicación
-
Sistemas principales
-
Cadena de herramientas de desarrollo
-
Herramientas para desarrolladores
-
Gráficos
- Graphics stack: libdraw, libmemdraw, libmemlayer, libimg, 18,528 LOC, 5,753 LOE, 562 páginas
- Windowing system: rio, libframe, libcomplete, libplumb, 8,825 LOC, 7,696 LOE, 362 páginas
- GUI toolkit: libpanel, 3,749 LOC, 2,986 LOE, 170 páginas
-
Redes y otros programas
- Network stack: libip, lib9p, 19,769 LOC, 3,884 LOE, 578 páginas
-
Navegador web: mothra, webfs, hget webcookies uhtml resize, tcs, 12,949 LOC, 4,482 LOE, 384 páginas
Por qué eligieron Plan 9
- Plan 9 es lo bastante pequeño como para entender de forma realista todo el sistema operativo, está escrito con un estilo de C consistente y aplica de manera uniforme unas cuantas ideas poderosas
- Todo es un archivo
- Usa espacios de nombres por proceso
- Ofrece transparencia de red
- No es tan vistoso como macOS o Windows, pero en esencia ofrece los mismos servicios básicos
- Un kernel que administra procesos y memoria
- Sistema de ventanas
- Shell
- Compilador
- Redes
- Aplicaciones gráficas
- Todo el sistema Plan 9, incluyendo kernel, compilador, shell, sistema de ventanas, etc., tiene 183K LOC, casi 2 veces menos que vim 350K LOC
- Si se considera que un libro de 400 páginas cubre unas 12K LOC, Principia Softwarica puede cubrir todo Plan 9 en unos 15 volúmenes
- Un programa individual como
gdbrequeriría 10 veces más libros gccrequeriría 100 veces más libros
- Un programa individual como
- Wayland es el reemplazo moderno de X11 y Clang es el reemplazo moderno de GCC, pero una “reescritura limpia” por sí sola no hace que un programa sea más pequeño
- El enfoque de Plan 9, diseñado con la simplicidad como objetivo desde el inicio, hace posible explicar cada línea en forma de libro
Cómo aplicar lo aprendido a otros sistemas
- No es necesario usar Plan 9 directamente; entender un sistema operativo pequeño y elegante puede dar intuición sobre Linux, macOS y Windows
- El kernel, el compilador, el linker, el shell, el editor, el depurador, el toolkit de GUI y la pila de red resuelven los mismos problemas fundamentales; ya sea que el código tenga 5 mil o 500 mil líneas, la esencia del problema es la misma
- Leer el compilador de C de Plan 9 da el vocabulario necesario para explorar GCC
- Si entiendes el linker de Plan 9 de una sola vez, el manejo de relocations en LLD deja de ser abrumador y se vuelve algo legible
- Ver cómo
acidlee la tabla de símbolos y recorre la pila enseña qué hay que mirar en GDB - Una implementación pequeña ofrece un modelo de trabajo para distinguir la complejidad esencial de la complejidad accidental en codebases grandes
- Las ideas de Plan 9 ya están ampliamente difundidas
- Thompson y Pike crearon UTF-8 para Plan 9
/procviene de Plan 9- Los Linux namespaces, base de Docker y los contenedores, vienen de Plan 9
- Go fue creado por Pike y Thompson, y las goroutines están inspiradas en libthread de Plan 9
- El protocolo 9P se usa en WSL2
grep,sed,awk,diff,ccyld, que Principia Softwarica explica, son herramientas que los programadores usan todos los días, y los mismos conceptos están expresados con mucha más claridad en Plan 9- plan9port lleva el espacio de usuario de Plan 9, incluyendo
grep,sedyawk, a Linux y macOS - goken9cc permite usar el toolchain de C de Plan 9 en Linux, macOS y Windows para crear binarios nativos de esas plataformas
Código fuente y ejecución
- github.com/aryx/principia-softwarica — código de Plan 9 y programas literarios usados en Principia Softwarica
- Getting Started — cómo compilar y ejecutar Plan 9 con Docker o desde el código fuente
- The Journey of
ls— seguimiento de cómo un comando simple atraviesa cada capa del sistema y de cómo se conectan los libros entre sí
Port a OCaml y herramientas auxiliares
- Después de escribir varios volúmenes, algunos programas se portaron a OCaml, un lenguaje funcional de tipado estático
- La motivación original era entender mejor el código en C
- Al mover un programa a otro lenguaje, se revela qué partes son esenciales y cuáles son incidentales
- Los bugs del port dejan ver aspectos sutiles que estaban ocultos en el original
- El port a OCaml evolucionó hasta convertirse en un proyecto separado, XIX, con su propio sitio web y una serie de libros de programación literaria dedicados a las herramientas en versión OCaml
- syncweb — herramienta de programación literaria usada para crear todos los libros, heredera de Noweb
- goken9cc — compilador cruzado de C para compilar Plan 9 en Linux, macOS y Windows, heredero de Kencc
Trabajos relacionados y diferencias
- Project Oberon es lo más cercano a Principia Softwarica en espíritu, en el sentido de que presenta un sistema operativo completo junto con todo su código fuente, incluyendo compilador y sistema de ventanas
- Oberon solo puede ejecutar programas Oberon, así que es un mundo autocontenido, hermoso pero aislado, como Smalltalk
- Plan 9 y Unix son sistemas de propósito general capaces de compilar y ejecutar programas escritos en cualquier lenguaje
- Oberon no tiene redes y corre sobre hardware personalizado
- Principia Softwarica abarca un espectro más amplio: compilador, linker, shell, depurador, gráficos y redes sobre un sistema operativo real
- The Elements of Computing Systems también es conocido como Nand2Tetris y construye una computadora desde compuertas NAND hasta Tetris
- Es excelente desde el punto de vista educativo, pero tanto el hardware como el software son una CPU de juguete, un SO de juguete y un lenguaje de juguete creados para el curso
- Principia Softwarica toma el enfoque opuesto: explicar código real y un sistema operativo real que funcionan sobre hardware real
- Computer Systems: A Programmer's Perspective es conocido como CS:APP y es un excelente libro de texto que explica conceptos de programación de sistemas como layout de memoria, linking, memoria virtual y concurrencia
- CS:APP se queda en los conceptos y no muestra el código fuente de un kernel real, un linker real o un compilador real
- Principia Softwarica complementa CS:APP explicando ese código fuente línea por línea
Historial y autor
- En marzo de 2026 se publicó el sitio web de Principia Softwarica
- En 2025 se retomó el proyecto para que pudiera volver a compilarse y ejecutarse en QEMU y Raspberry Pi, y se añadieron Dockerfile y CI
- De 2019 a 2024 hubo una pausa por el trabajo en Semgrep
- En 2017 el kernel fue portado a Raspberry Pi y avanzó el trabajo en los libros de Shell y Graphics
- En 2016 se completó el libro de Build System y se crearon los primeros programas literarios de Libcore y Compiler
- En 2015 se completaron los libros de Assembler y Linker, y conoció a Knuth
- En 2014 el proyecto comenzó al hacer un fork de Plan 9, compilarlo de forma cruzada en macOS y crear el primer programa literario
- Principia Softwarica fue escrito por Yoann Padioleau, y el código incluye trabajo de Ken Thompson, Rob Pike, Dave Presotto, Phil Winterbottom, Tom Duff, Andrew Hume y Russ Cox
- Así como Principia Mathematica trata los fundamentos de las matemáticas, Principia Softwarica tiene como objetivo tratar los programas de sistemas fundamentales
1 comentarios
Opiniones en Lobste.rs
El título claramente hace referencia a Principia Mathematica, pero “softwarica” no es latín.
Se siente como una llamada a función en C escrita para que parezca latín pero rota, como
foo(bar; baz]; un título mejor podría ser “Principia Programmatum” (principios de los programas) o “Principia Artis Programmatoriae” (principios del arte de programar).Como en latín no existe una palabra para software o programación, tampoco está mal inventar una nueva.
“Programmum/Programmatum” suena más plausible porque el inglés “program” viene del francés “programme”, y este a su vez del latín “programmum”.
Si se toma algo más directamente del francés logiciel, este viene de “logique” (lógica) + “iel” (un sufijo tomado de matériel), y conectándolo con el latín “logica”, “materialis/materia”, se podría trasladar “program” como “logicia” y “programs” como “logicium”.
Dicho eso, solo estudié latín dos años en la preparatoria, así que no estoy seguro.
Ya es una lengua muerta, y como el título hace referencia a un proyecto fallido bien conocido, ponerle a un libro en inglés actual un título en latín correcto de por sí resulta un poco ridículo.
Eso también me lo parece a mí, incluso habiendo leído latín con bastante fluidez en otro tiempo.
Al principio me detuve al ver la mención de Plan 9, pero me gustó la explicación detallada del autor sobre por qué eligió Plan 9.
En resumen, porque es pequeño, y esa explicación en sí se lee como un excelente texto promocional del libro.
Me gustó que, después de que el autor portó OCaml a Plan 9, reescribiera una gran parte del espacio de usuario en OCaml para entender mejor qué pasa en C.
En el proceso, el código terminó ejecutándose también en Windows de forma sorprendente, y me pregunto quién está financiando este trabajo.
https://aryx.github.io/xix/#about
Es un trabajo realmente descomunal.
17 volúmenes, más de 6 mil páginas, y parece que todo se publicó apenas la semana pasada.
Me pregunto si alguien conoce más contexto o antecedentes sobre el autor.
https://www.mail-archive.com/9fans@9fans.net/msg45156.html
En resumen, empezó en 2014 y el autor presentará el trabajo mañana a las 13:45 hora local en IWP9.
http://iwp9.org/#prg
Claro, el autor seguramente aprendió muchísimo durante el proceso.
Principia Softwarica es una serie de libros que explica cómo funciona una computadora por dentro mediante explicaciones detalladas del código fuente completo de los programas fundamentales que usan los programadores.
El kernel, el shell, el sistema de ventanas, el compilador, el linker, el editor, el depurador y otros temas se tratan cada uno en un libro aparte, y el sistema operativo objetivo parece ser Plan 9.
En la página dice Learn Here, Apply Everywhere, y explica que no hace falta usar Plan 9.
La idea es que, si entiendes un sistema operativo pequeño y elegante, puedes obtener intuiciones profundas sobre Linux, macOS e incluso Windows.
Entiendo lo que el autor quiere decir, pero que “Oberon solo puede ejecutar programas de Oberon” no me parece una limitación propia del sistema Oberon.
En principio, cualquier lenguaje de programación podría apuntar a esa arquitectura y runtime.
Entiendo que esto salió de un fork de Plan 9, pero me pregunto cuál es mejor entre Plan 9 e Inferno.
Parece un proyecto muy ambicioso.
Creo que leer buen código, especialmente código acompañado de explicaciones sobre las decisiones de diseño, te vuelve mejor programador.
Si además es código de un área un poco fuera de tu especialidad, todavía más, y esto podría ser una herramienta de aprendizaje excelente.