Principia Softwarica
(principia-softwarica.org)- Principia Softwarica adalah seri yang menguraikan source code kernel, shell, sistem window, compiler, linker, editor, browser, dan debugger dari Plan 9 from Bell Labs ke dalam bentuk buku untuk membantu memahami cara kerja internal komputer
- Setiap buku dibuat dari literate program yang memuat source code dan dokumentasi sekaligus, sehingga kode nyata dan bukunya dihasilkan otomatis dari dokumen yang sama
- Seluruh seri ini mencakup 205.081 LOC, 82.014 LOE, dan 6.312 halaman, dengan target mencapai LOE/LOC 1.0, yakni satu baris penjelasan untuk setiap baris kode
- Plan 9 berukuran kecil dengan total sistem hanya 183K LOC, dan menerapkan secara konsisten gaya C yang seragam serta gagasan seperti “everything is a file”, namespace per-proses, dan transparansi jaringan, sehingga seluruh sistem operasi menjadi sesuatu yang bisa dijelaskan secara menyeluruh
- Source proyek tersedia secara terbuka di github.com/aryx/principia-softwarica, dan Getting Started menyediakan cara membangun dan menjalankan Plan 9 lewat Docker atau dari source
Gambaran proyek
- Principia Softwarica adalah seri buku yang membantu programmer memahami cara kerja internal komputer dengan menguraikan secara rinci seluruh source code program sistem inti yang mereka gunakan
- Semua program diambil dari Plan 9 from Bell Labs, sistem operasi yang dirancang sebagai penerus Unix, dengan asumsi utama bahwa kodenya kecil dan elegan
- Program yang dibahas mencakup kernel, shell, sistem window, compiler, linker, editor, browser web, dan debugger, dan setiap program disusun sebagai buku terpisah
- Buku ini merupakan dokumen yang menjelaskan implementasi sekaligus implementasi itu sendiri
- Setiap program berasal dari literate program yang memuat source code dan dokumentasi sekaligus, dan baik kode nyata maupun bukunya sama-sama dihasilkan otomatis dari dokumen ini
- Penjelasan terpisah tentang literate programming tersedia di more about literate programming
- Source proyek tersedia secara terbuka di github.com/aryx/principia-softwarica
Mengapa ini diperlukan
-
Celah dalam pendidikan
- Saat mengetik
lsdi jendela terminal, jawaban atas apa yang sebenarnya terjadi akan melewati shell, pustaka C, kernel, stack grafis, dan sistem window - Keith Adams adalah rekan kerja di Facebook dan kemudian menjadi Chief Architect Slack, dan ia menggunakan pertanyaan ini sebagai pertanyaan wawancara. Pelacakan lengkapnya ada di The Journey of
ls - Saat ini, “full-stack” biasanya berarti React, Node, dan cloud, tetapi stack lapisan bawah yang sesungguhnya mencakup compiler, linker, kernel, dan system call
- Ada buku teks yang sangat baik untuk menjelaskan konsep program sistem, tetapi hampir tidak ada materi yang menunjukkan source code nyata, dan Principia Softwarica berupaya mengisi celah ini
- Saat mengetik
-
Pentingnya di era AI
- Alat coding AI menjalankan program seperti
grep,sed,diff,awk,gcc, danldyang dijelaskan Principia Softwarica ratusan kali per hari - Jika dalam pekerjaan coding penulisan kode adalah 20% dan pemahaman adalah 80%, maka semakin AI mengambil alih 20% itu, semakin penting pula 80% untuk memahami apa yang sebenarnya dilakukan kode hingga ke level hardware
- Ada kesadaran masalah bahwa jika mesin telah belajar mendalam lewat deep learning, manusia juga harus belajar secara mendalam
- Alat coding AI menjalankan program seperti
Buku dan cakupan
-
Seluruh seri ini mencakup 205.081 LOC, 82.014 LOE, dan 6.312 halaman, dengan rasio LOE/LOC keseluruhan 0,40
-
LOC berarti jumlah baris kode, LOE berarti jumlah baris penjelasan, dan Pages berarti jumlah halaman hasil tata letak
-
Tujuannya adalah mencapai LOE/LOC 1,0 di semua buku sehingga setiap satu baris kode memiliki satu baris penjelasan yang berpasangan
- Hijau berarti 0,75 ke atas dan mendekati target
- Kuning berarti 0,50 ke atas dan masih dalam proses
- Oranye berarti 0,25 ke atas dan masih ada cukup banyak penulisan yang tersisa
- Merah berarti di bawah 0,25, sehingga sebagian besar masih berupa kode dan penjelasannya masih sedikit
-
Sistem inti
-
Toolchain pengembangan
-
Alat pengembang
-
Grafis
- Graphics stack: libdraw, libmemdraw, libmemlayer, libimg, 18.528 LOC, 5.753 LOE, 562 halaman
- Windowing system: rio, libframe, libcomplete, libplumb, 8.825 LOC, 7.696 LOE, 362 halaman
- GUI toolkit: libpanel, 3.749 LOC, 2.986 LOE, 170 halaman
-
Jaringan dan program lainnya
- Network stack: libip, lib9p, 19.769 LOC, 3.884 LOE, 578 halaman
-
Web browser: mothra, webfs, hget webcookies uhtml resize, tcs, 12.949 LOC, 4.482 LOE, 384 halaman
Alasan memilih Plan 9
- Plan 9 cukup kecil untuk dipahami seluruh sistem operasinya secara realistis, ditulis dengan gaya C yang konsisten, dan menerapkan beberapa ide kuat secara seragam
- semuanya adalah file
- menggunakan namespace per proses
- menyediakan transparansi jaringan
- Meski tidak semewah macOS atau Windows, secara esensial ia menyediakan layanan inti yang sama
- kernel yang mengelola proses dan memori
- sistem jendela
- shell
- compiler
- jaringan
- aplikasi grafis
- Seluruh sistem Plan 9, termasuk kernel, compiler, shell, sistem jendela, dan lainnya, berjumlah 183K LOC, hampir 2 kali lebih kecil daripada vim 350K LOC
- Jika satu buku setebal 400 halaman membahas sekitar 12K LOC, maka Principia Softwarica bisa membahas seluruh Plan 9 dalam sekitar 15 buku
- program tunggal seperti
gdbmemerlukan 10 kali lebih banyak buku gccmemerlukan 100 kali lebih banyak buku
- program tunggal seperti
- Wayland adalah pengganti modern untuk X11 dan Clang adalah pengganti modern untuk GCC, tetapi “penulisan ulang yang bersih” saja tidak otomatis membuat program menjadi lebih kecil
- Pendekatan Plan 9 yang dirancang sejak awal dengan sasaran kesederhanaan memungkinkan setiap baris dijelaskan dalam bentuk buku
Cara menerapkan yang dipelajari ke sistem lain
- Tidak perlu menggunakan Plan 9 secara langsung; dengan memahami satu sistem operasi yang kecil dan elegan, kita bisa memperoleh intuisi tentang Linux, macOS, dan Windows
- Kernel, compiler, linker, shell, editor, debugger, GUI toolkit, dan network stack semuanya menyelesaikan masalah dasar yang sama, dan esensi masalahnya tetap sama apakah kodenya 5 ribu baris atau 500 ribu baris
- Membaca compiler C Plan 9 memberi kosakata yang dibutuhkan saat menjelajahi GCC
- Jika linker Plan 9 bisa dipahami sekaligus, penanganan relokasi di LLD tidak lagi terasa melelahkan dan menjadi sesuatu yang bisa dibaca
- Dengan melihat bagaimana
acidmembaca symbol table dan menelusuri stack, kita bisa belajar apa yang harus dicari di GDB - Implementasi kecil menyediakan model kerja untuk membedakan kompleksitas esensial dari kompleksitas insidental dalam codebase besar
- Ide-ide Plan 9 sudah tersebar luas
- UTF-8 dibuat oleh Thompson dan Pike untuk Plan 9
/procberasal dari Plan 9- Linux namespaces, fondasi Docker dan container, berasal dari Plan 9
- Go dibuat oleh Pike dan Thompson, dan goroutine terinspirasi dari libthread di Plan 9
- protokol 9P digunakan di WSL2
grep,sed,awk,diff,cc,ldyang dijelaskan oleh Principia Softwarica adalah alat yang dipakai programmer setiap hari, dan konsep yang sama diekspresikan jauh lebih jelas di Plan 9- plan9port membawa
grep,sed,awkdari user space Plan 9 ke Linux dan macOS - goken9cc memungkinkan penggunaan toolchain C Plan 9 di Linux, macOS, dan Windows untuk membuat binary native bagi platform tersebut
Kode sumber dan menjalankan
- github.com/aryx/principia-softwarica — kode Plan 9 dan program literate yang digunakan di Principia Softwarica
- Getting Started — cara membangun dan menjalankan Plan 9 lewat Docker atau dari source
- The Journey of
ls— penelusuran bagaimana perintah sederhana melewati tiap lapisan sistem dan bagaimana buku-buku itu saling terhubung
Port OCaml dan alat pendukung
- Setelah menulis beberapa buku, sebagian program di-port ke OCaml, bahasa fungsional bertipe statis
- Motivasi awalnya adalah untuk memahami kode C dengan lebih baik
- memindahkan program ke bahasa lain mengungkap bagian mana yang esensial dan mana yang sampingan
- bug pada port mengungkap bagian-bagian halus yang tersembunyi di sumber aslinya
- Port OCaml berkembang menjadi proyek terpisah, XIX, yang memiliki situs web sendiri dan seri buku literate programming untuk membahas versi alat dalam OCaml
- syncweb — alat literate programming yang digunakan untuk membuat semua buku, dan merupakan keturunan Noweb
- goken9cc — compiler silang C untuk membangun Plan 9 di Linux, macOS, dan Windows, serta merupakan keturunan Kencc
Pekerjaan terkait dan perbedaannya
- Project Oberon adalah yang paling dekat secara semangat dengan Principia Softwarica karena sama-sama menyajikan seluruh sistem operasi beserta seluruh source code-nya, termasuk compiler dan sistem jendela
- Oberon hanya dapat menjalankan program Oberon, sehingga seperti Smalltalk: indah tetapi merupakan dunia mandiri yang terisolasi
- Plan 9 dan Unix adalah sistem serbaguna yang dapat mengompilasi dan menjalankan program yang ditulis dalam bahasa apa pun
- Oberon tidak memiliki jaringan dan berjalan di perangkat keras kustom
- Principia Softwarica mencakup cakupan yang lebih luas di atas sistem operasi nyata, dari compiler, linker, shell, debugger, grafis, hingga jaringan
- The Elements of Computing Systems juga dikenal sebagai Nand2Tetris, dan membangun komputer dari gerbang NAND hingga Tetris
- secara edukatif sangat bagus, tetapi perangkat keras dan perangkat lunaknya adalah CPU mainan, OS mainan, dan bahasa mainan yang dibuat untuk perkuliahan
- Principia Softwarica mengambil pendekatan sebaliknya: menjelaskan kode nyata dan sistem operasi nyata yang berjalan di perangkat keras nyata
- Computer Systems: A Programmer's Perspective dikenal sebagai CS:APP, dan merupakan buku teks yang sangat baik untuk menjelaskan konsep pemrograman sistem seperti tata letak memori, linking, memori virtual, dan konkurensi
- CS:APP berhenti pada konsep dan tidak menunjukkan source code dari kernel nyata, linker nyata, atau compiler nyata
- Principia Softwarica melengkapi CS:APP dengan menjelaskan source code tersebut baris demi baris
Riwayat perkembangan dan penulis
- Pada Maret 2026, situs web Principia Softwarica dipublikasikan
- Pada 2025, proyek ini dilanjutkan agar bisa dibangun dan dijalankan lagi di QEMU dan Raspberry Pi, serta ditambahkan Dockerfile dan CI
- Dari 2019 hingga 2024, ada masa jeda karena pekerjaan di Semgrep
- Pada 2017, kernel di-port ke Raspberry Pi dan pekerjaan pada buku Shell dan Graphics berlangsung
- Pada 2016, buku Build System selesai dan program literate pertama untuk Libcore dan Compiler dibuat
- Pada 2015, buku Assembler dan Linker selesai dan bertemu Knuth
- Pada 2014, proyek dimulai dengan melakukan fork pada Plan 9, cross-compile di macOS, dan membuat program literate pertama
- Principia Softwarica ditulis oleh Yoann Padioleau, dan kodenya mencakup karya dari Ken Thompson, Rob Pike, Dave Presotto, Phil Winterbottom, Tom Duff, Andrew Hume, dan Russ Cox
- Seperti Principia Mathematica membahas fondasi matematika, tujuan Principia Softwarica adalah membahas program sistem dasar
1 komentar
Opini Lobste.rs
Judulnya jelas merujuk ke Principia Mathematica, tetapi “softwarica” bukan bahasa Latin
Rasanya seperti pemanggilan fungsi C yang ditulis agar terlihat seperti Latin tetapi rusak seperti
foo(bar; baz], dan judul yang lebih baik mungkin “Principia Programmatum” (prinsip-prinsip program) atau “Principia Artis Programmatoriae” (prinsip-prinsip seni pemrograman)Dalam bahasa Latin tidak ada kata untuk software atau pemrograman, jadi membuat kata baru juga tidak masalah
“Programmum/Programmatum” terdengar lebih masuk akal karena kata Inggris “program” berasal dari bahasa Prancis “programme”, yang kemudian berasal dari bahasa Latin “programmum”
Kalau diambil lebih langsung dari bahasa Prancis logiciel, itu terdiri dari “logique” (logika) + “iel” (akhiran dari matériel), dan ini bisa dihubungkan ke bahasa Latin “logica”, “materialis/materia” sehingga “program” bisa dipindahkan menjadi “logicia” dan “programs” menjadi “logicium”
Namun, saya hanya belajar bahasa Latin selama dua tahun di SMA, jadi tidak terlalu yakin
Ini bahasa yang sudah mati, dan karena judulnya merujuk pada proyek yang gagal yang sudah terkenal, memberi judul Latin yang benar pada buku berbahasa Inggris masa kini justru terasa agak menggelikan
Bahkan sebagai orang yang dulu cukup lancar membaca bahasa Latin, saya merasa begitu
Awalnya saya sempat berhenti di penyebutan Plan 9, tetapi saya suka penjelasan rinci penulis tentang kenapa memilih Plan 9
Singkatnya karena sistemnya kecil, dan penjelasan itu sendiri terbaca seperti tulisan promosi yang sangat bagus untuk bukunya
Saya suka bahwa setelah penulis mem-porting OCaml ke Plan 9, ia menulis ulang sebagian besar user space dalam OCaml untuk lebih memahami apa yang sebenarnya terjadi di C
Dalam proses itu, kodenya ternyata juga bisa berjalan di Windows, dan saya jadi penasaran siapa yang mendanai pekerjaan ini
https://aryx.github.io/xix/#about
Ini pekerjaan yang benar-benar luar biasa besar
17 volume, lebih dari 6.000 halaman, dan semuanya tampak seperti baru dirilis minggu lalu
Penasaran apakah ada yang tahu konteks atau latar belakang tambahan tentang penulisnya
https://www.mail-archive.com/9fans@9fans.net/msg45156.html
Singkatnya, proyek ini dimulai pada 2014, dan penulis dijadwalkan mempresentasikan karyanya di IWP9 besok pukul 13:45 waktu setempat
http://iwp9.org/#prg
Tentu saja, penulisnya tampaknya belajar sangat banyak selama proses ini
Principia Softwarica adalah seri buku yang menjelaskan cara kerja internal komputer dengan mengupas seluruh source code dari program-program inti yang dipakai programmer secara rinci
Kernel, shell, window system, compiler, linker, editor, debugger, dan lain-lain masing-masing dibahas dalam buku terpisah, dan sistem operasi yang dituju tampaknya Plan 9
Di halamannya tertulis Learn Here, Apply Everywhere, dan dijelaskan bahwa Anda tidak perlu memakai Plan 9
Maksudnya, jika Anda memahami satu sistem operasi kecil yang elegan, Anda bisa memperoleh intuisi yang dalam juga tentang Linux, macOS, bahkan Windows
Saya paham maksud penulisnya, tetapi mengatakan bahwa “Oberon hanya bisa menjalankan program Oberon” rasanya bukan batasan dari sistem Oberon
Secara prinsip, bahasa pemrograman apa pun bisa menargetkan arsitektur dan runtime itu
Saya paham ini bercabang dari Plan 9, tetapi saya penasaran, antara Plan 9 dan Inferno, mana yang lebih baik
Ini tampak seperti proyek yang sangat ambisius
Saya percaya membaca kode yang bagus, terutama kode yang disertai penjelasan tentang pilihan desain, membuat kita menjadi programmer yang lebih baik
Apalagi jika itu kode dari area yang sedikit di luar bidang kita sendiri, dan ini bisa menjadi alat belajar yang hebat