Reference development profile¶
Status: measured planning data
Purpose and limits¶
This page records the capabilities of the reference development machine and what each roadmap milestone can therefore verify locally. It exists because a milestone that needs hardware is not blocked when the hardware is on the developer's desk.
A check that passes on this profile is development evidence. It does not qualify
hardware, does not close a blocked gate and is not release evidence. Hardware
qualification needs more than one machine and the acceptance recorded in the
milestone itself. The machine-readable record is
planning/hardware-profile.json, validated by verify_hardware_profile()
inside make verify-all; every capability there carries the command that
evidences it.
Capabilities¶
| Capability | Present | Note |
|---|---|---|
kvm |
yes | |
tpm2 |
yes | discrete TPM 2.0; swtpm also installed for virtual machines; re-read 2026-09-28: the developer account is in group tss and an unprivileged tpm2_pcrread sha256:7 exits 0, where on 2026-09-13 it ran privileged |
iommu |
yes | AMD-Vi (ivhd0); VFIO is available as a module |
rapl_energy_counters |
yes | package counters exist; /sys/class/powercap/intel-rapl:0/energy_uj is mode 0400 and root-readable only, so P13 telemetry needs a privileged daemon or a root test |
sched_ext |
yes | the host kernel runs a sched_ext scheduler at probe time; scx_cake, the scheduler P07 proposes, is installed as a distribution package alongside scx_rusty, scx_bpfland and scx_lavd |
bpf_lsm |
yes | bpf appears in the active LSM list |
btf |
yes | CO-RE eBPF programs can be compiled against the host kernel |
pci_p2pdma |
yes | kernel support is compiled in; device-level support still needs proving per device |
erofs_dm_verity |
yes | both available as modules |
realtime_kernel |
no | the running kernel is PREEMPT_DYNAMIC, but the distribution ships linux-rt 7.2.8.rt3.arch1-1 (7.2.5.rt3.arch1-1 on 2026-09-13); this is an operator action, not a missing capability |
secure_boot_enrolment |
no | disabled in the running firmware and not enrolled on the host; re-read 2026-09-28: the firmware is in setup mode (SetupMode 1) with no PK, KEK, db or dbx, which the maintainer reports clearing before a firmware update (no exact date given), where on 2026-09-13 it carried vendor keys with SetupMode 0; guest enrolment is proven with a virt-fw-vars variable store and OVMF_CODE.secboot (D62); host enrolment is an operator action, not a missing capability |
resizable_bar |
yes | already enabled in firmware: 32 GiB BAR1 on the discrete NVIDIA card and an 8 GiB prefetchable region on the Intel card, which is the firmware prerequisite for peer DMA |
gpu_dma_buf_and_peer_memory |
yes | NVIDIA 615.71.09 open kernel modules (Dual MIT/GPL) with nvidia_drm modeset and the nvidia_peermem peer-memory module installed, CUDA 13.4.2 present (13.3.1 on 2026-09-13); the Intel and AMD cards provide DMA-BUF through their in-tree drivers |
vaapi_decode |
yes | recorded 2026-09-28: with LIBVA_DRIVER_NAME=iHD, vainfo on the Arc A380 (renderD129) reports iHD 26.2.4 with VLD for MPEG-2, JPEG, H.264, HEVC, VP9 and AV1; the session sets LIBVA_DRIVER_NAME=nvidia, and with that session value the same call on renderD129 loads the NVIDIA driver (with the variable unset, libva selects iHD), so every run pins the driver; no committed gate has decoded a frame yet (M27) |
wayland_layer_shell |
yes | recorded 2026-09-28: the host session's KDE KWin 6.7.5 advertises zwlr_layer_shell_v1 version 5; it is not P04, so a run against it is the client half only (D79) |
compositor_dmabuf_import |
yes | recorded 2026-09-28: KWin advertises zwp_linux_dmabuf_v1 version 5 with main device renderD129 (the Arc A380) and NV12 and P010, each with LINEAR, INTEL_X_TILED, INTEL_4_TILED and DRM_FORMAT_MOD_INVALID (implicit modifier), and neither with INTEL_4_TILED_DG2_RC_CCS or INTEL_4_TILED_DG2_RC_CCS_CC; no committed gate exercises it yet (M27 will) |
The two capabilities recorded as absent are operator actions, not missing hardware: host Secure Boot needs keys enrolled in the firmware and the setting enabled, and the distribution ships a realtime kernel package. Both are listed under operator actions in the machine-readable record together with the packages that the remaining milestones need.
What each milestone can verify here¶
| Milestone | Local support | What becomes possible | What still cannot be shown |
|---|---|---|---|
| M09 | partial | A positive, a negative (rejected payload with correlated error) and a boundary (empty requirement list rejected explicitly) result can all be produced against the two local checkou | Acceptance is recorded only when each producer consumes the payload |
| M10 | partial | The mechanics are fully local: booting an arbitrary kernel under QEMU/KVM with a minimal initramfs and repeating the three verifier loads needs nothing this machine lacks. Since 2026-09-29 the kernel under test exists, and since 2026-10-11 the pinned one is Nucleus release v7.2.8-realtime-lusoris2: it boots here in a guest, make verify-nucleus-kernel records it, and all eighteen cases pass, the BPF LSM attach included (revision 1 failed that one, D107) |
A Nucleus kernel booted on the machine itself: every M10 reading is from a QEMU/KVM guest, and no Nucleus kernel was installed or booted on this hardware |
| M11 | partial | Everything except the signature half | Firmware-verified Secure Boot of the UKI |
| M12 | partial | Two of the three paths become local work | The P2PDMA path, honestly and completely |
| M13 | partial | The cheapest_exit half is local and read-only: record hosted ruleset and label readback for the existing origin, keep the release workflow inactive | Release evidence |
| M19 | full | ANSWER TO Q1 AND Q2: yes to both | Two honest limits |
| M20 | partial | Once an M11 image exists, the full slice runs here: a real swtpm PCR quote signing one M14 audit record, and /var unsealing under an enrolled PCR policy | Attestation rooted in a firmware-verified boot chain, for the PCR 7 reason above |
| M21 | full | Measured RAPL energy deltas can replace the simulated wattage in the M05 engine today, and an AF_VSOCK candidate evaluation can round-trip | ACCURACY CAVEAT, and it is a real one |
| M25 | partial | DMA-BUF sharing across all three vendor drivers without privilege: aegis-vulcan-gpu share exports a sealed memfd through /dev/udmabuf, and renderD128 (nvidia), renderD129 (xe) and renderD130 (amdgpu) each import it with DRM_IOCTL_PRIME_FD_TO_HANDLE and re-export the same dma-buf (same inode); xe also imports nvidia's re-export. Run on 2026-10-18 at one page and at the 64 MiB udmabuf limit: every case passed, the 64 MiB pattern read back with a matching sha256 at 2637305038 bytes/s, and a zero, an unaligned and an over-limit size and a mismatched modifier were refused before any syscall |
The read-back is a CPU read through the dma-buf mapping, not a GPU read, and udmabuf, not a GPU allocator, is the exporter. VFIO BAR mapping (E25-1) needs a GPU bound to vfio-pci, which is an operator act not yet taken, so its positive case is deferred |
| M27 | full | VA-API decode on the Arc A380, the DMA-BUF passed over SCM_RIGHTS, and the host compositor importing and presenting it on a layer surface | That P04 serves either protocol: the compositor is KDE KWin, so a pass is the client half only (D79) |
| M28 | full | A gpui layer surface on the host compositor, which advertises zwlr_layer_shell_v1 version 5; its AccessKit tree read back over AT-SPI on a private session bus (at-spi2-core 2.60.7 is installed, read 2026-09-29); and the 1,000-node frame and tree-update times measured on this GPU and driver | That P04 serves layer shell, since the compositor is KDE KWin and a pass is the client half only (D79), or any frame-time figure for another GPU, driver or compositor |
| M29 | full | A pinned distribution guest booted under QEMU with KVM, running the M28 shell with a portal, an at-spi2 registry and a StatusNotifierWatcher on its session bus | That the Aegis image or P04 serves that session: the guest is neither |
Milestones not listed need nothing from the profile: they are Rust, schema or documentation work that runs on any developer machine.
Toolchain gaps¶
The tools the roadmap needs are installed on the reference profile as of 2026-09-13: mkosi 27, Firecracker 1.17.0 with its jailer, sbsigntools 0.9.5, tpm2-tools 5.8, erofs-utils 1.9.4, ukify 261 and virt-firmware 26.9, beside the QEMU 11.1.1, swtpm 0.10.2, clang, bpftool, Rust 1.98.1, Node, pnpm and cosign that were already present. Each is still admitted through the template matrix with a pinned version before the gate that uses it runs; installation is not admission.
Two remain deliberately absent, and a third changed: rustup 1.29.1 replaced
the distribution Rust package on 2026-09-13 and materialises the pinned
toolchain (D61).
sbctlis an alternative to virt-firmware for the OVMF variable store, which is already installed.nvidia-fswould not make GPUDirect Storage demonstrable, because that path is gated to datacentre cards.
Re-read on 2026-09-28: systemctl, systemd-repart, bootctl and ukify
report 262 (262-1-arch). systemd 262 installs systemd-sysupdate only at
/usr/lib/systemd/systemd-sysupdate, off PATH, which is where
make verify-systemd now finds it. Node reads v26.10.0 and CUDA 13.4.2. A
second cosign, the distribution package 3.1.3 at /usr/bin/cosign, was
installed on 2026-09-16 beside the user-local v2.6.3; a bare cosign runs
v2.6.3 only because ~/go/bin comes first on the developer account's PATH.
planning/hardware-profile.json records each beside the value it replaced.
Component requirements against the profile¶
| Component | Requirement | Status | Evidence |
|---|---|---|---|
| P01 | TPM2 chip (or swtpm emulator for CI) | satisfied | cat /sys/class/tpm/tpm0/tpm_version_major -> 2; swtpm --version -> 0.10.2; swtpm_setup pre |
| P01 | UEFI Secure Boot firmware (PK/KEK/db/MOK hierarchy) | partial | re-read 2026-09-28: efivars list no PK, KEK, db or dbx, only the firmware's PKDefault, KEKDefault, dbDefault and dbxDefault; od SecureBoot-* -> 0 (disabled) and SetupMode-* -> 1 (setup mode; the maintainer reports clearing the keys before a firmware update, no exact date); on 2026-09-13 PK, KEK, db and dbx were enrolled and SetupMode-* read 0 |
| P01 | x86-64 CPU with KVM virtualization support for headless QEMU/OVMF boot | satisfied | ls -la /dev/kvm; lsmod grep kvm_amd (loaded); /sys/module/kvm_amd/parameters/nested -> 1 |
| P01 | erofs/btrfs/dm-verity-capable Linux kernel/storage stack for root-a (e | satisfied | zgrep /proc/config.gz -> CONFIG_EROFS_FS=m, CONFIG_BTRFS_FS=y, CONFIG_DM_VERITY=m (+FEC, R |
| P02 | TPM2 security chip | satisfied | /sys/class/tpm/tpm0 present, version 2, pcr-sha256 banks populated; CONFIG_TCG_TPM=y, CONF |
| P02 | UEFI Secure Boot chain | partial | bootctl status -> 'Secure Boot: disabled (setup)', 'Measured UKI: no', 'Measured OS: no' (2026-09-28); SetupMode-* -> 1 with no PK, KEK, db or dbx enrolled |
| P02 | Hardware watchdog timer | partial | ls /sys/class/watchdog -> empty and no /dev/watchdog; /proc/cmdline contains 'nowatchdog'; |
| P02 | NVRAM variable support for A/B slot priority swap | satisfied | grep efivarfs /proc/mounts -> mounted rw; bootctl reports UEFI 2.90 firmware; BootOrder/Lo |
| P03 | IOMMU (Intel VT-d / AMD-Vi) enabling VFIO group isolation and IOMMU do | satisfied | ls /sys/kernel/iommu_groups wc -l -> 38; AMD-Vi ivhd0; modinfo vfio_pci/vfio_iommu_type1 |
| P03 | NVMe PCIe SSD controller as DMA source | partial | NVMe controllers present, so ordinary DMA is fine, but |
| P03 | GPU (NVIDIA/AMD) with P2P DMA / CUDA GPUDirect support as DMA target | missing | ls -d /sys/bus/pci/devices/*/p2pdma -> no matches (no p2pmem provider anywhere despite CON |
| P03 | PCIe BAR mapping, page-aligned; Resizable BAR / SmartAccess Memory for | satisfied | sudo lspci -d 10de: -vv -> 'Physical Resizable BAR', BAR1 current size 32GB (supported 64M |
| P03 | TPM2 | satisfied | /sys/class/tpm/tpm0 version 2 |
| P04 | GPU (NVIDIA or AMD) for the wlroots rendering backend | satisfied | 3 DRM cards: i915 card0, nvidia card1, amdgpu card2 (lspci -nnk). Note D08/ADR-0001 supers |
| P04 | cgroups v2 system.slice + Seccomp BPF isolation for the compositor pro | satisfied | stat -fc %T /sys/fs/cgroup -> cgroup2fs; cgroup.controllers -> cpuset cpu io memory hugetl |
| P04 | systemd sandboxing directives requiring a populated /run and /var tree | satisfied | systemctl --version -> systemd 262 (262-1-arch) running as PID 1 (261.3-1-arch on 2026-09-13); capsh --print shows th |
| P04 | TPM2 chip | satisfied | /sys/class/tpm/tpm0 version 2 |
| P05 | cgroups v2 kernel support for the app.slice hierarchy enforcing the 20 | partial | cgroup v2 hierarchy and controllers confirmed (cgroup2fs, memory+cpu+cpuset present), so s |
| P05 | Linux namespace/seccomp support for Bubblewrap sandboxing | satisfied | command -v bwrap -> /usr/bin/bwrap; CONFIG_USER_NS=y; CONFIG_SECCOMP=y |
| P06 | TPM2 security chip (hardware or swtpm emulator for dev/QEMU) | satisfied | Both available: /sys/class/tpm/tpm0 version 2 and swtpm 0.10.2 |
| P06 | Linux kernel with eBPF LSM support (lsm/bprm_check_security attach poi | satisfied | zgrep -> CONFIG_BPF_LSM=y; cat /sys/kernel/security/lsm -> capability,landlock,lockdown,ya |
| P07 | PREEMPT_RT-capable kernel (CONFIG_PREEMPT_RT, CONFIG_HZ_1000) for dete | partial | zgrep -> CONFIG_HZ_1000=y and CONFIG_HZ=1000 satisfied, but '# CONFIG_PREEMPT_RT is not se |
| P07 | x86-64-v3/v4 CPU compilation target | satisfied | /lib64/ld-linux-x86-64.so.2 --help -> 'x86-64-v4 (supported)'; /proc/cpuinfo has avx512f, |
| P07 | isolcpus-pinnable physical cores for Wayland/Compositor threads | partial | nproc -> 32, but /proc/cmdline has no isolcpus= parameter, so isolation would need a boot- |
| P07 | GPU with Linux 7.2+ DRM scheduler (DRM_SCHED_PRIORITY_HIGH/NORMAL/LOW) | partial | Kernel is 7.2.4-1-cachyos and amdgpu/i915/xe all use drm_sched (radeonsi reports DRM 3.64) |
| P07 | cgroups v2 controller for resource+risk brokerage | satisfied | cgroup2fs with cpuset cpu io memory hugetlb pids rdma misc dmem |
| P08 | Real-time-capable CPU scheduling class support (RLIMIT_RTPRIO=95, CPUS | satisfied | ulimit -r -> 99 (above the required 95); sysctl kernel.sched_rt_runtime_us=1000000 with ke |
| P08 | GPU with NVENC (or equivalent hardware video encode) implied by 'Produ | satisfied | libnvidia-encode.so.1 present and nvidia-smi reports encoder session counters on the RTX 4 |
| P08 | Memory locking capability (RLIMIT_MEMLOCK = infinity) so real-time aud | partial | ulimit -l -> 8192 (KB) for the current session. The capability exists (CAP_IPC_LOCK is in |
| P09 | GPU with PCIe P2PDMA / CUDA GPUDirect support | missing | Same evidence as P03: no /sys/bus/pci/devices/*/p2pdma entries, nvidia_fs module not found |
| P09 | NVMe PCIe SSD | satisfied | ls /sys/class/nvme -> nvme0/1/2 (Samsung 990 PRO 2TB, 960 EVO 1TB, 980 PRO 1TB) |
| P09 | Sufficient VRAM/host-pinned DRAM to hold swapped SLM expert weights | satisfied | nvidia-smi -> 24564 MiB on the RTX 4090, plus host RAM recorded in the private profile; BAR1 resized to 32 GB e |
| P09 | Power-metering capability to enforce/observe the 20.0W BIOMIMETIC_WATT | partial | RAPL package-0 and core zones are live (delta 241073516 uJ over 2 s), but scope is socket- |
| P10 | KVM virtualization extensions on the host CPU for Firecracker microVMs | satisfied | /dev/kvm present mode 0666, kvm_amd loaded, nested=1. Firecracker itself is absent but is |
| P10 | GPU/NPU accelerator when is_gpu_enabled is set on a MicroVmInstance | partial | Three GPUs present with clean IOMMU groups (17, 20, 31) and vfio-pci available, so passthr |
| P10 | AF_VSOCK-capable kernel/hypervisor transport for inter-VM and P09<->P1 | satisfied | zgrep -> CONFIG_VSOCKETS=m, CONFIG_VSOCKETS_LOOPBACK=m, CONFIG_VHOST_VSOCK=m; ls -la /dev/ |
| P11 | TPM2 security chip: PCR-sealed credentials and hash-linked, TPM2-signe | satisfied | /sys/class/tpm/tpm0 version 2 with pcr-sha256 banks; swtpm 0.10.2 for the VM path. tpm2-to |
| P11 | FIDO2-capable authenticator | missing | lsusb grep -iE 'yubi fido solo token nitro' -> no match; no security-key device enumerat |
| P11 | GPU with DMA-BUF / zero-copy export support (SPA_DATA_DmaBuf) | satisfied | CONFIG_DMA_SHARED_BUFFER=y, CONFIG_UDMABUF=y with /dev/udmabuf, CONFIG_DMABUF_HEAPS=y with |
| P12 | (no hardware_requirements entries; needs_hardware false) | satisfied | jq '.components[] select(.id=="P12") .hardware_requirements' -> empty; Node v26.10.0 (v26.8.2 on 2026-09-13), p |
| P13 | Intel RAPL (Running Average Power Limit) MSR/sysfs counters for real ( | partial | Package and core ARE real and live: sudo cat energy_uj twice 2 s apart gave 3489923310 -> |
| P13 | ACPI power interfaces as a fallback/alternative to RAPL | missing | No ACPI power_meter (ACPI000D) device; hwmon names are amdgpu, asus, asusec, enp15s0, i915 |
| P13 | cgroups v2 kernel support for per-slice attribution (system.slice/app. | satisfied | stat -fc %T /sys/fs/cgroup -> cgroup2fs; controllers include cpu, cpuset, memory, io for a |
| P14 | (no hardware_requirements entries; needs_hardware false) | satisfied | jq '.components[] select(.id=="P14") .hardware_requirements' -> empty; z3 is present a |
| P15 | NVMe SSD with PCIe BAR / memory-mapped DMA path (P03 Vulcan dependency | partial | NVMe controllers present and BAR resources readable via /sys/bus/pci/devices/*/resource, |
| P15 | GPU with VA-API or NVDEC hardware decode support for the zero-copy vid | satisfied | Verified by running vainfo per render node: Intel iHD 26.2.4 on renderD129 with VLD for MP |
| P15 | Wayland compositor with wlr-layer-shell protocol support for pinned Pi | satisfied (host compositor, D79) | wayland-info -i zwlr_layer_shell_v1 -> version 5 from the host session's KDE KWin 6.7.5 (2026-09-28); development evidence only, and P04 serves no Wayland protocol |
| P15 | GPU scheduler exposing drm_sched priority tiers so Lictor can guarantee | partial | Kernel 7.2.4 with amdgpu/i915/xe on drm_sched (DRM 3.64 reported by radeonsi) satisfies th |
| P15 | Btrfs-capable block storage for the @pglite subvolume snapshot/rollbac | satisfied | findmnt -no FSTYPE,SOURCE / -> btrfs /dev/nvme0n1p2[/@] (already a subvolume layout); CONF |
| P16 | (no hardware_requirements entries; needs_hardware false) | satisfied | jq '.components[] select(.id=="P16") .hardware_requirements' -> empty; pure Rust logic |
| P17 | a GPU whose VA-API driver decodes and exports DMA-BUF on the DRM device the compositor names as its main device | partial | LIBVA_DRIVER_NAME=iHD vainfo on renderD129 -> iHD 26.2.4 with MPEG-2, JPEG, H.264, HEVC, VP9 and AV1 VLD; KWin's zwp_linux_dmabuf_v1 main device 0xE281 is renderD129; decode advertised, export not yet exercised by a committed gate (M27) |
| P17 | a Wayland compositor exposing zwlr_layer_shell_v1 and zwp_linux_dmabuf_v1 version 4 or later, which refuses a format and modifier pair it did not advertise | partial (host compositor, D79) | wayland-info -> zwlr_layer_shell_v1 version 5 and zwp_linux_dmabuf_v1 version 5 advertised by KDE KWin 6.7.5; refusal of an unadvertised pair not exercised by a committed gate (M27 asserts the client-side refusal only) |
| P17 | a kernel with DMA-BUF support and AF_UNIX SCM_RIGHTS | satisfied | zgrep /proc/config.gz -> CONFIG_DMA_SHARED_BUFFER=y, CONFIG_UNIX=y, CONFIG_SYNC_FILE=y (7.2.8-1-cachyos, 2026-09-28) |