# Phase 14.2: validated an explicit native FreeBSD runtime slice Date: 2026-04-03 ## Goal Phase 14.1 proved that Fruix could boot without host-copied `/boot` material by sourcing boot assets from the existing native world output. Phase 14.2 removed the remaining model ambiguity on the runtime side: - the guest should now boot and reach ready state using an explicit native runtime output - not by reusing the broader native world artifact for both boot and runtime roles ## Changes Added a new native package: - `freebsd-native-runtime` This package is built from `/usr/src` via the existing native world build path and prunes at least: - `boot` - `usr/include` - `usr/share/doc` - `usr/share/examples` - `usr/share/info` - `usr/share/man` - `usr/share/mk` - `usr/tests` The validated Phase 14.2 operating-system template now uses: - `#:kernel freebsd-native-kernel` - `#:bootloader freebsd-native-world` - `#:base-packages (list freebsd-native-runtime)` That means the model is now explicit: - native world provides boot assets - native runtime provides the guest runtime slice - host base stores are no longer part of the validated path ## Practical sizing finding This Phase 14.2 layout still duplicates some native world/runtime content in the closure because the boot assets still come from the broader native world output. As a result, the Phase 13 image sizes were no longer large enough. Working values were: - local QEMU: - `DISK_CAPACITY=12g` - `ROOT_SIZE=10g` - real XCP-ng: - `ROOT_SIZE=10g` - disk capacity still matched to the fixed 30 GiB VDI The wrappers were updated to use those larger defaults. This is acceptable for Phase 14.2 because the next subphase is specifically about cleaning up the runtime/development/boot boundary further. ## New files Added: - `tests/system/phase14-native-runtime-pid1-operating-system.scm.in` - `tests/system/run-phase14-native-runtime-qemu.sh` - `tests/system/run-phase14-native-runtime-xcpng.sh` These wrappers assert: - `host_base_store_count=0` - native kernel present - native world present as the current boot-source artifact - native runtime present - runtime store still contains the files needed for boot-to-ready - runtime store no longer contains `/boot` - runtime store no longer contains `/usr/include` ## Validation ### Local QEMU / UEFI / TCG Passing run: - `PASS phase14-native-runtime-qemu` - workdir: `/tmp/phase14-2-qemu2-1775189802` Confirmed: ```text disk_capacity=12g root_size=10g runtime_store=/frx/store/684a82aeed2c9a353e3a09d2cbf5358274d758005e0bfa9b1025d101bc166f79-freebsd-native-runtime-15.0-STABLE native_base_store_count=3 host_base_store_count=0 shepherd_pid=1 sshd_status=running native_runtime_ready=ok ``` ### Real XCP-ng VM Passing run: - `PASS phase14-native-runtime-xcpng` - workdir: `/tmp/phase14-2-xcpng-1775190184` Confirmed: ```text vm_id=90490f2e-e8fc-4b7a-388e-5c26f0157289 vdi_id=0f1f90d3-48ca-4fa2-91d8-fc6339b95743 guest_ip=192.168.213.62 root_size=10g runtime_store=/frx/store/684a82aeed2c9a353e3a09d2cbf5358274d758005e0bfa9b1025d101bc166f79-freebsd-native-runtime-15.0-STABLE native_base_store_count=3 host_base_store_count=0 shepherd_pid=1 sshd_status=running compat_prefix_shims=absent guile_module_smoke=ok native_runtime_ready=ok ``` ## Result Phase 14.2 is complete. The validated Fruix guest now reaches ready state using an explicit native runtime artifact: - native kernel - native world for boot assets - native runtime for the guest runtime slice - no host-staged FreeBSD base stores in the validated path ## Next step Phase 14.3 should clean up the remaining redundancy by defining clearer runtime vs. development boundaries and, ideally, replacing the temporary use of the broad native world artifact as the boot-source package with a narrower native boot asset package.