Principia Softwarica
(principia-softwarica.org)- Principia Softwarica é uma série que transforma em livros o código-fonte do kernel, shell, sistema de janelas, compilador, linker, editor, navegador e depurador do Plan 9 from Bell Labs, ajudando a entender o funcionamento interno do computador
- Cada livro é criado a partir de um programa literário (literate program) que reúne código-fonte e documentação, e tanto o código real quanto o livro são gerados automaticamente a partir do mesmo documento
- A série inteira tem 205.081 LOC, 82.014 LOE e 6.312 páginas, e o objetivo é alcançar LOE/LOC 1,0, correspondendo uma linha de explicação para cada linha de código
- O Plan 9 é pequeno, com 183K LOC no sistema inteiro, e aplica de forma uniforme ideias como estilo C consistente, “tudo é arquivo”, namespaces por processo e transparência de rede, tornando todo o sistema operacional algo que pode ser explicado
- O código-fonte do projeto está disponível em github.com/aryx/principia-softwarica, e Getting Started mostra como compilar e executar o Plan 9 com Docker ou a partir do código-fonte
Visão geral do projeto
- Principia Softwarica é uma série de livros que ajuda a entender o funcionamento interno do computador ao explicar em detalhe todo o código-fonte dos principais programas de sistema usados por programadores
- Todos os programas foram extraídos do Plan 9 from Bell Labs, um sistema operacional projetado como sucessor do Unix, partindo do princípio central de que o código é pequeno e elegante
- Os programas abordados incluem kernel, shell, sistema de janelas, compilador, linker, editor, navegador web e depurador, com cada programa organizado como um livro separado
- O livro é tanto um documento que explica a implementação quanto a própria implementação
- Cada programa vem de um programa literário (literate program) que reúne código-fonte e documentação, e tanto o código real quanto o livro são gerados automaticamente a partir desse documento
- Há uma explicação separada sobre programação literária em more about literate programming
- O código-fonte do projeto está disponível em github.com/aryx/principia-softwarica
Por que isso é necessário
-
Lacuna na educação
- Quando você digita
lsem uma janela de terminal, a resposta sobre o que acontece passa por shell, biblioteca C, kernel, stack gráfica e sistema de janelas - Keith Adams foi colega no Facebook e depois se tornou Chief Architect da Slack, e usava essa pergunta em entrevistas. O rastreamento completo está em The Journey of
ls - Hoje, “full stack” normalmente significa React, Node e nuvem, mas a stack real de baixo nível inclui compilador, linker, kernel e chamadas de sistema
- Existem ótimos livros didáticos que explicam os conceitos de programas de sistema, mas quase não há material que mostre o código-fonte real, e o Principia Softwarica busca preencher essa lacuna
- Quando você digita
-
Importância na era da IA
- Ferramentas de IA para programação executam centenas de vezes por dia programas como
grep,sed,diff,awk,gcceld, que o Principia Softwarica explica - Se no trabalho de programação escrever código é 20% e entender é 80%, então, quanto mais a IA assume os 20%, mais importante se torna os 80% de entender o que o código realmente faz, descendo até o hardware
- A ideia de fundo é que, se as máquinas passaram por deep learning, os humanos também precisam aprender em profundidade
- Ferramentas de IA para programação executam centenas de vezes por dia programas como
Livros e escopo
-
A série inteira tem 205.081 LOC, 82.014 LOE e 6.312 páginas, com uma proporção total de LOE/LOC de 0,40
-
LOC significa linhas de código, LOE significa linhas de explicação, e Pages significa número de páginas diagramadas
-
O objetivo é alcançar LOE/LOC 1,0 em todos os livros, fazendo corresponder uma linha de explicação para cada linha de código
- Verde é 0,75 ou mais, próximo da meta
- Amarelo é 0,50 ou mais, em andamento
- Laranja é 0,25 ou mais, ainda com bastante texto a ser escrito
- Vermelho é menos de 0,25, ainda majoritariamente código e com pouca explicação
-
Sistemas centrais
-
Toolchain de desenvolvimento
-
Ferramentas para desenvolvedores
-
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 e outros 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 que escolher o Plan 9
- O Plan 9 é pequeno o suficiente para permitir uma compreensão realista do sistema operacional inteiro, foi escrito em um estilo C consistente e aplica de forma uniforme algumas ideias poderosas
- tudo é arquivo
- usa namespaces por processo
- oferece transparência de rede
- Não é tão chamativo quanto o macOS ou o Windows, mas essencialmente oferece os mesmos serviços centrais
- kernel que gerencia processos e memória
- sistema de janelas
- shell
- compilador
- rede
- aplicações gráficas
- O sistema Plan 9 completo, incluindo kernel, compilador, shell, sistema de janelas etc., tem 183K LOC, quase 2 vezes menor que o vim com 350K LOC
- Se considerarmos que um livro de 400 páginas cobre cerca de 12K LOC, o Principia Softwarica consegue cobrir o Plan 9 inteiro em cerca de 15 volumes
- um programa único como o
gdbexigiria 10 vezes mais livros - o
gccexigiria 100 vezes mais livros
- um programa único como o
- Wayland é o substituto moderno do X11 e Clang é o substituto moderno do GCC, mas uma “reescrita limpa” por si só não torna um programa menor
- A abordagem do Plan 9, projetada desde o início com a simplicidade como meta, permite explicar cada linha em forma de livro
Como aplicar o que foi aprendido a outros sistemas
- Não é necessário usar o Plan 9 diretamente; entender um sistema operacional pequeno e elegante pode dar intuição sobre Linux, macOS e Windows
- Kernel, compilador, linker, shell, editor, depurador, toolkit de GUI e stack de rede resolvem os mesmos problemas fundamentais, e a essência do problema é a mesma quer o código tenha 5 mil linhas ou 500 mil
- Ler o compilador C do Plan 9 dá o vocabulário necessário para explorar o GCC
- Entender o linker do Plan 9 de uma vez faz com que o tratamento de relocations do LLD deixe de ser intimidador e passe a ser algo legível
- Ver como o
acidlê a tabela de símbolos e percorre a stack ensina o que observar no GDB - Uma implementação pequena fornece um modelo de trabalho para distinguir complexidade essencial de complexidade acidental em codebases grandes
- As ideias do Plan 9 já se espalharam amplamente
- UTF-8 foi criado por Thompson e Pike para o Plan 9
/procveio do Plan 9- os namespaces do Linux, base do Docker e dos containers, vieram do Plan 9
- Go foi criado por Pike e Thompson, e as goroutines foram inspiradas na libthread do Plan 9
- o protocolo 9P é usado no WSL2
grep,sed,awk,diff,cc,ld, explicados pelo Principia Softwarica, são ferramentas que programadores usam todos os dias, e os mesmos conceitos são expressos com muito mais clareza no Plan 9- plan9port leva os utilitários de espaço de usuário do Plan 9, como
grep,sedeawk, para Linux e macOS - goken9cc permite usar a toolchain C do Plan 9 em Linux, macOS e Windows para gerar binários nativos dessas plataformas
Código-fonte e execução
- github.com/aryx/principia-softwarica — código do Plan 9 e programas literate usados no Principia Softwarica
- Getting Started — como compilar e executar o Plan 9 com Docker ou a partir do código-fonte
- The Journey of
ls— rastreamento de como um comando simples atravessa cada camada do sistema e de como os livros se conectam entre si
Port para OCaml e ferramentas auxiliares
- Depois de escrever vários volumes, alguns programas foram portados para OCaml, uma linguagem funcional estaticamente tipada
- A motivação original era entender melhor o código em C
- mover um programa para outra linguagem revela quais partes são essenciais e quais são incidentais
- bugs no port revelam partes sutis que estavam escondidas no original
- O port para OCaml evoluiu para um projeto separado, XIX, com seu próprio site e uma série de livros de programação literate para lidar com as ferramentas na versão OCaml
- syncweb — ferramenta de programação literate usada para criar todos os livros, descendente do Noweb
- goken9cc — compilador cruzado C para compilar o Plan 9 em Linux, macOS e Windows, descendente do Kencc
Trabalhos relacionados e diferenças
- Project Oberon é o trabalho mais próximo do Principia Softwarica em espírito, por apresentar um sistema operacional completo junto com todo o código-fonte, incluindo compilador e sistema de janelas
- Oberon só pode executar programas Oberon, sendo um mundo autocontido belo, mas isolado, como Smalltalk
- Plan 9 e Unix são sistemas de uso geral capazes de compilar e executar programas escritos em qualquer linguagem
- Oberon não tem rede e roda em hardware personalizado
- Principia Softwarica cobre um escopo mais amplo, de compilador, linker, shell, depurador, gráficos e rede em cima de um sistema operacional real
- The Elements of Computing Systems também é conhecido como Nand2Tetris e constrói um computador do portão NAND até o Tetris
- É excelente do ponto de vista educacional, mas o hardware e o software são uma CPU de brinquedo, um SO de brinquedo e uma linguagem de brinquedo criados para o curso
- Principia Softwarica adota a abordagem oposta: explicar código real e um sistema operacional real que roda em hardware real
- Computer Systems: A Programmer's Perspective é conhecido como CS:APP e é um excelente livro-texto que explica conceitos de programação de sistemas como layout de memória, linking, memória virtual e concorrência
- CS:APP para nos conceitos e não mostra o código-fonte de um kernel real, de um linker real ou de um compilador real
- Principia Softwarica complementa o CS:APP ao explicar esse código-fonte linha por linha
Histórico e autor
- Em março de 2026, o site do Principia Softwarica foi lançado
- Em 2025, o projeto foi retomado para voltar a compilar e rodar em QEMU e Raspberry Pi, com adição de Dockerfile e CI
- De 2019 a 2024, houve uma pausa por causa do trabalho em Semgrep
- Em 2017, o kernel foi portado para Raspberry Pi e o trabalho avançou nos livros de Shell e Graphics
- Em 2016, o livro Build System foi concluído e os primeiros programas literate de Libcore e Compiler foram criados
- Em 2015, os livros Assembler e Linker foram concluídos e houve um encontro com Knuth
- Em 2014, o projeto começou com um fork do Plan 9, compilação cruzada no macOS e a criação dos primeiros programas literate
- Principia Softwarica foi escrito por Yoann Padioleau, e o código inclui contribuições de Ken Thompson, Rob Pike, Dave Presotto, Phil Winterbottom, Tom Duff, Andrew Hume e Russ Cox
- Assim como Principia Mathematica trata dos fundamentos da matemática, o objetivo de Principia Softwarica é tratar de programas de sistemas fundamentais
1 comentários
Comentários do Lobste.rs
O título claramente faz referência a Principia Mathematica, mas “softwarica” não é latim
Parece uma chamada de função em C escrita para soar como latim, mas quebrada como
foo(bar; baz]; um título melhor poderia ser “Principia Programmatum” (princípios dos programas) ou “Principia Artis Programmatoriae” (princípios da arte da programação)Como o latim não tem palavras para software ou programação, tudo bem criar termos novos
“Programmum/Programmatum” soa mais plausível porque o inglês “program” veio do francês “programme”, que por sua vez veio do latim “programmum”
Se fosse pegar mais diretamente do francês logiciel, seria “logique” (lógica) + “iel” (sufixo vindo de matériel), e daí daria para ligar isso ao latim “logica”, “materialis/materia” e traduzir “program” como “logicia” e “programs” como “logicium”
Dito isso, só estudei latim por dois anos no ensino médio, então não tenho certeza
É uma língua morta, e o título faz referência a um projeto fracassado bem conhecido, então colocar um título em latim correto num livro em inglês hoje em dia já seria algo meio risível
Digo isso como alguém que já leu latim com bastante fluência no passado
No começo hesitei ao ver a menção a Plan 9, mas gostei da explicação detalhada de por que o autor escolheu o Plan 9
Em resumo, por ele ser pequeno, e a própria explicação soa como um ótimo texto de divulgação do livro
Gostei de que, depois de portar o OCaml para o Plan 9, o autor tenha reescrito uma boa parte do espaço do usuário em OCaml para entender melhor o que acontece em C
Nesse processo, o código surpreendentemente também passou a rodar no Windows, e fiquei curioso para saber quem está financiando esse trabalho
https://aryx.github.io/xix/#about
É um trabalho realmente absurdo de tão grande
17 volumes, mais de 6 mil páginas, e tudo parece ter sido publicado na semana passada
Queria saber se alguém conhece mais contexto ou histórico sobre o autor
https://www.mail-archive.com/9fans@9fans.net/msg45156.html
Resumindo: começou em 2014, e o autor vai apresentar o trabalho amanhã às 13:45 no horário local, na IWP9
http://iwp9.org/#prg
Claro que o autor provavelmente aprendeu uma quantidade enorme nesse processo
Principia Softwarica é uma série de livros que explica o funcionamento interno do computador por meio de uma explicação detalhada do código-fonte completo dos programas centrais usados por programadores
Kernel, shell, sistema de janelas, compilador, linker, editor, depurador etc. são tratados em livros separados, e o sistema operacional-alvo parece ser o Plan 9
A página diz Learn Here, Apply Everywhere, e explica que não é necessário usar Plan 9
A ideia é que, ao entender um sistema operacional pequeno e elegante, você ganha uma intuição profunda sobre Linux, macOS e até Windows
Entendo o que o autor quer dizer, mas afirmar que “Oberon só consegue executar programas Oberon” não me parece uma limitação do sistema Oberon
Em princípio, qualquer linguagem de programação poderia ter como alvo aquela arquitetura e runtime
Entendi que isso foi derivado do Plan 9, mas fiquei curioso sobre qual dos dois é melhor, Plan 9 ou Inferno
Parece um projeto extremamente ambicioso
Acredito que ler bom código, especialmente código acompanhado de explicações sobre as escolhas de design, ajuda a se tornar um programador melhor
Isso vale ainda mais quando é código de uma área um pouco fora da sua especialidade, e isso pode ser uma ótima ferramenta de aprendizado