Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Phase 300 — deferred kernel ownership contract

ItemValue
Commandmake phase 300
Underlying make targetvm/phase3/Makefile, target kernel-deferred
Mutates disk/image?No
Boots QEMU?No
Main proofThe project explicitly reserves kernel ownership for later instead of mixing it into Phase 4.

What this phase means

Phase 300 is a deliberate pause.

It records that ONIX currently boots with a borrowed Alpine virt kernel payload, and that this is a temporary bootstrap choice.

The borrowed files are:

vm/state/vmlinuz-virt
vm/state/initramfs-virt

Phase 214 extracts the matching module tree from that initramfs so the booted system has:

/usr/lib/modules/<borrowed-kernel-release>

This is internally consistent. That is why it works.

But it is not ONIX-owned yet.

Why not build the kernel immediately?

Because kernel work has a different risk profile from userspace work.

Userspace phases can usually be changed incrementally:

add file
boot
inspect log
fix service
boot again

Kernel ownership has tighter coupling:

kernel config
  must match modules
  must match initramfs
  must match root filesystem drivers
  must match bootloader entries

If any part is wrong, the failure may happen before systemd starts, before SSH starts, and sometimes before the logs are pleasant to read.

So Phase 3 gets its own lane.

What the eventual Phase 3 should answer

Later Phase 3 should answer:

  1. Which kernel source and version does ONIX track?
  2. How is the kernel configured?
  3. How are modules packaged?
  4. How is the initramfs generated?
  5. Which files are written to /boot?
  6. How are old kernel generations retained or pruned?
  7. How does a moss rollback relate to a kernel rollback?
  8. How do we prove kernel, initramfs, and modules are from the same generation?

Until those answers exist, the Alpine payload is a useful bootstrapping tool.

What success looks like right now

Run:

make phase 300

Expected output:

Phase 3 is intentionally reserved for ONIX-owned kernel/initramfs/modules.
...
For now, continue with Phase 4: booted ONIX base userspace.

That is all this phase should do today.

What comes next

Continue with:

make phase 400

Phase 400 starts the booted-base lane. It assumes the Phase 2 image can boot with the temporary borrowed kernel payload.