Phase 300 — deferred kernel ownership contract
| Item | Value |
|---|---|
| Command | make phase 300 |
| Underlying make target | vm/phase3/Makefile, target kernel-deferred |
| Mutates disk/image? | No |
| Boots QEMU? | No |
| Main proof | The 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:
- Which kernel source and version does ONIX track?
- How is the kernel configured?
- How are modules packaged?
- How is the initramfs generated?
- Which files are written to
/boot? - How are old kernel generations retained or pruned?
- How does a moss rollback relate to a kernel rollback?
- 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.