0.23 (Q1 2026) (principia-softwarica.org website, iwp9, switch to goken, resume APE and network, libimg, Widgets/Machines/Profilers/Kernel/Window/Libcore v1)
- new principia-softwarica.org domain linked to github pages
- live website! took lots of text from iwp9 submission and slides, ls-journey.html, literate.html, getting-started.html, big tables current state, motivations, etc.
- another email from Knuth! principia linked from his literate programming page!
- Widgets v1: explanations, ASCII diagrams, full pass
- Machine v1: explanations, ASCII diagrams, full pass
- Profilers v1: LPization prof.c, tprof.c, time.c, LP split, and basic explanations
- Kernel v1: explanations, ASCII diagrams (especially memory layout), full pass
- Window v2: almost full explanations, more ASCII diagrams
- Libcore v1: LPization libflate, libregexp, libbio, libstring, libthread and basic explanations
- Editor v1: explanations
- lots of lineage.txt refinements
- All:
- conclusion with summary, patterns and techniques, other books relationships, and beyond plan9
- resume syncweb_indexer with semgrep-pfff-langs
- submit full paper to IWP9 (also submitted WIP on goken and xix) and cleaned Dockerfile and dosdisk.img extraction and use dosfstools so more portable
- resume networking, run ipconfig, dns -r, and cs (important) in boot.rc and works in QEMU!
- resume browsers and abaco works in QEMU! run plumber, webcookies, and webfs in boot.rc
- switch to goken9cc in Dockerfile so can build for both amd64 and arm64 (and deprecated use of fork-kencc).
- resume compilation of APE (needed to compile ocaml-light/otherlibs/unix which itself is needed for rio in ocaml)
- add libimg (was called cmd/jpg in plan9), useful for abaco/mothra
- add also paint.c from 9front
- LPization ed.c in Principia.nw
- compile principia also with goken
- first Lpized version of Utilities.nw (that also compiles in goken)
- resume build principia and dosdisk.img and 9qemu for pc/386 thx to kencc (and 9-cc from david colombier). It builds and run again via Qemu! Last time was in 2018 according to the date of 9qemu. Rio is also working (not sure why I was worried it was not working anymore).
- resume build principia and dosdisk.img and 9pi for pi/arm. It builds and run again on my (real) Rasperry Pi 1. Last time was in 2018 according to the date of 9pi. Rio is also working.
- Dockerfile and docker.yml Github Actions CI
- LP split Widgets.nw
- mk pdf, mk all, mk sync for everything! can build everything, including all the books from scratch, with up-to-date code indexing
- big code reorganization and changes to mkfiles to (cross)compile also under Linux and Cygwin (in additon to macOS)
#(got a surface book 2 so opportunity to experiment with different OSes)
- simplifiy mkfiles, remove need for symlinks, remove need for /386 and /arm by using instead $TOP and $ROOT variables in mkfiles, so again easier to cross compile from Linux or Cygwin
- simplified the core mkfiles too (mkone, mklib, etc.)
- can now cross-compile from Linux
- remove need for certain utilities or command-line options (e.g, ls -p) so need less commands from kencc/
- no need for plan9port anymore
(thx to a bigger fork-kencc)
- can now cross-compile from Windows (via cygwin)
- can build pc and pi targets from Linux/macOS/Cygwin hosts
#extra: reMarkable and knowledge-books library! #extra: surface book 2
- intro+overview Shell.pdf
- lots of lineage.txt
- lots of chunknames refactoring
- syncweb: added -to_tex, with automatic code indexing (very nice)
- core-ds/main/… VCS.pdf
- LP split diff_myers, basic edit distance, sha1, unzip
(git in ocaml v2: diff3 in ocaml, ???? zip in ocaml? merge? packing? network?)
#extra: got reMarkable tablet!
- LP split of dulwich for VCS.nw
- LP split of ocaml port of dulwich
- intro+overview VCS.pdf
#(git in ocaml v1)
- LP split more Kernel.nw
#(kernel in ocaml, until scheduler, but no real process, no files, basic memory)
- LP split more Graphics.nw
#(draw in ocaml, just userspace side (libdraw/))
- LP split more Windows.nw
#(rio in ocaml, and lib_system with 9P protocol)
- integrate Richard Miller’s port of 9 to the Raspberry Pi (bcm/).
- adapt the kernel code to pad’s style in Kernel.nw
- switch to ARM for Kernel.nw
!!it works under my Raspberry Pi!! Principia on Raspberry Pi!!
- finish Make.pdf v1
- first lpized version of Libcore.nw
- deeper understanding of Compiler.nw, better LP split
#(5c typechecker and basic code generation in ocaml)
- Assembler.pdf v2, major revisions, finish Todos, more figures, better english
- started contact publishers
- intro+overview Make.pdf
- deeper understanding of Make.nw, better LP split
#(mk in ocaml)
- deeper understanding of Shell.nw, better LP split
#(rc in ocaml)
#(cpp in ocaml) #(5c parser in ocaml)
- intro+overview Windows.pdf
- intro+overview Graphics.pdf
- reorg code draw, rio
- deeper understanding of Graphics.nw, better LP split
- deeper understanding of Windows.nw, better LP split
- reorg code 5l, 5a, better tabular
#(5l in ocaml)
- finish Assembler.pdf v1 (explanations for most chapters, figures)
#(5a in ocaml)
- finish Linker.pdf v1 (explanations for most chapters, figures)
- Meeting Knuth! got emails from Knuth!
- Principia.nw, the meta book! pretty good Principia.pdf
- started explaining the code and produce readable books:
- Assembler.nw: intro + overview chapters finished
- Machine.nw: intro chapter finished
- first lpized versions for:
- Soldat (cruel hessian)
- !!Finished first lpized versions for almost all principia components!! except for Libc/Profiler/Utilities.nw.
- Added a few other though (Efuns, OCaml, Mmm).
- first lpized versions for
- Lex/yacc Generator (actually ocamllex and my own ocamlyacc)
- Network
- Debugger (very partial)
- OCaml, continue extensions (backtrace) and port to plan9!
- Efuns, continue extensions (minimap, position history, etc), and port to plan9!
- switch to ARM for Compiler.nw
- continue work on
- Linker.nw, Machine.nw, Assembler.nw
- switch to OCaml for Editor.nw, better than C candidates, and also for Browser.nw (and later for Generators.nw too)
- first lpized versions for a few ocaml programs:
- Efuns (and ported it to mac, extended it, eshell, dircolors, etc)
- Ocaml (light) (and simplified the code, removed objects, functors, etc)
- Browser mmm
- first lpized versions of many components:
- Machine, Assembler, Linker, Compiler,
- Graphics, Window, Shell,
- Make, with each time a similar procedure summarized in Template.nw
- switched to ARM, starting with Machine.nw, and then Assembler.nw, Linker.nw
- spent time on datalog and graph_code_c to answer questions I had while looking at the kernel, such as who calls that, what constants can flow in this integer field
- pfff -lpize which not only split in files but also split entities (thx to better pfff -parse_c), so quicker to get a first workable literate document
- change code to get codegraph -lang c to work on, and also introduced many globals.c to remove some backward dependencies.
- codegraph now works (conservatively) on the whole plan9
- syncweb: pfff -lpize finer-grained split
- started Window.nw, Make.nw, etc.
- made a first version of the literate program for the kernel, good TOC, Kernel.nw
- almost full LPization, 20 chapters!!, aspectize, lp split, reorg again, try to understand almost every parts of the code, simplified the code many times (e.g. for virtual memory), removed dead code, renamed important structures (e.g. Mach -> Cpu, m->cpus, externup removal), added arch/, get rid of edf.c, aspectized advanced virtual memory (MAXKPA), rename Pte to pagetable, more consistent pte, pt, pde, pd, mmupxxx
- 4 or 5 bugs reported on 9fans!
- syncweb: -lpize initial, M-x pad-literate-split refresh
- got kencc working on my mac (but had to backport features from pLan9 labs 8c such as ELF support, and later some fixes related to unicode)
- forked kencc, cg/cm on kencc
- was able to cross compile from macOS
- the kernel, and then
- all the utilities,
- libraries
(xv6 was actually hard to cross compile on macOS, binutils sucked)
- forked plan9 with the idea of making a xix based on plan9. I simplified the code, removed support for some architectures, device drivers, etc I reorganized also a lot the code (and use xmv and symlinks to be compatible)
- was able to get to work on my own plan9 fork and my own plan9 distribution:
- the kernel (via qemu -kernel),
- mini shell,
- full shell,
- dossrv
- rio
- the network
very quick iterative loop!
- simplified a lot the kernel, removed many syscalls, lots of dead code, reorg in different directories. Used codemap/codegraph on .clang/.clang2 and introduced hook to remove some backward deps, split portdat.h, dat.h, etc, used scheck on plan9 code, annotated code with @scheck for false positives
- read balestero’s notes on plan9 kernel
- got Plan9 working on Virtual Box and then QEMU (was not that easy, QEMU had some bugs and Plan9-labs was not very QEMU friendly),
- played with rio! (30 dec 2013, just before new year :) )