StarryNixOS Stage-2 设计
StarryNixOS 是一个显式选择、仅支持 x86_64 的 StarryOS 应用。它让 StarryOS 内核启动由锁定 NixOS 声明生成的用户态闭包,并通过 NixOS stage 2 启动 systemd。这个边界用于验证真实发行版工作负载,但不代表 StarryOS 已完整兼容 NixOS。
构建命令位于 apps/starry/nixos/README.md,当前兼容性例外和运行证据位于 apps/starry/nixos/compatibility.md。
独立的 StarryOS-backed nixosTest 路径统一通过 cargo xtask starry app qemu -t nixos 使用:默认运行 boot,--list-cases 只发现用例,--case <name> 运行单个用例,--all-cases 运行全部用例。它使用当前 checkout 构建的 Starry UEFI 内核和 app-owned stage-2 rootfs。该路径不属于 test-suit/starryos 的 TOML 用例。
该测试框架的边界是单机 x86_64、串口证据和生命周期检查。nixosTest driver、QEMU 和 OVMF 来自独立锁定的 Nix 输入;TCG 是正确性基线,不要求 /dev/kvm 或主机单独安装 QEMU/OVMF。每次运行使用新的 qcow2 rootfs overlay、OVMF vars 副本和 ESP,终端证据与全局 driver 等待上限均为 300 秒。boot 只有完整的 pid1 → activation → systemd → marker → STARRY_NIXOS_SYSTEM_PASSED 序列、无既有失败模式、guest 正常关机且 QEMU 返回零才算通过。
P4 把闭集四名字改成 nixos-tests/starryos/cases/*.nix 文件发现。作者增加一个 case 记录及其 extra module 即可被 --list / -c 选中,不必改 clap 或 xtask 名表。guest 命令仍是测试所有的 systemd oneshot;machine.succeed 仍是显式不支持。extra module 不得重新启用 udev、dbus、nscd、logind、getty、DHCP 或 Nix daemon。树外 flake、多机和上游未改 NixOS 测试仍不在范围内。使用、诊断和保留兼容性命令见 nixos-tests/starryos/README.md。
目标与非目标
该设计需要同时满足以下目标:
- 从锁定的 NixOS 声明生成可识别、可校验的 x86_64 ext4 系统镜像;
- 让生成的 NixOS stage-2 初始化程序成为 PID 1,并由它启动 systemd;
- 证明运行中的系统来自该声明,而不是 Alpine 覆盖层或临时启动脚本;
- 让现有 StarryOS 应用继续使用原有 rootfs 准备方式和 shell PID-1 路径;
- 把不兼容行为定位为可复现的最小 Linux 语义差异,避免用宽泛屏蔽制造假阳性。
初始边界不包括 NixOS 内核、initrd、bootloader、安装器、guest 内构建、generation 切换或回滚、桌面环境、完整设备管理和服务栈,也不包括 aarch64。新增这些能力前 必须独立设计和验证。