This page records constraints and unproved behavior. A historical success applies to its captured revision and conditions. Read PROGRESS for current verification.
- A chroot changes paths. It does not provide process or network isolation.
- The namespace path provides mount behavior only.
- A userland entry retains the host root and shared host resources.
- A static payload on a host that denies chroot refuses at 125, because
its absolute paths would resolve on the host (T-1648). Under
--unsafe-host-pathsit runs from a staged memfd with the host root. It then reads its own exe as the staged memfd path, so a self-locating runtime cannot resolve itself there. - A userland grandchild that execs a dynamic ELF or a
#!script enters through the image's own loader or interpreter, resolved inside the rootfs (T-1646).fexecve,execveatwith flags, a non-x86_64 ELF, andsystem()orpopen()(which spawn inside libc) are not routed. - A raw call through libc's
syscall()takes the path table, so libuv'sstatxresolves inside the rootfs (T-1697). A raw call with a path that the table cannot map, andio_uring_setup, answerENOSYS. A program that issues thesyscallinstruction itself (a static program, Go, liburing) passes the interposer (T-1652). - A volume (
-v HOST:GUEST) on a host that denies chroot is a path rewrite of the userland loader family, not a mount (T-1653). A write lands in HOST. A static program or a rawsyscallinstruction sees the image path, and/proc/mountsdoes not list the volume. podvm refuses a volume on the chroot rung, the memfd family and the machine tier,:rountil T-1655, and a working directory or a first program inside a volume. - Interposition covers cooperative library calls, without a security boundary.
- The embedded interposer pair is x86_64. Other payload architectures need another execution path.
- A foreign architecture needs the host interpreter support required by the selected path.
- A pidfd addresses a direct child. It does not contain all descendants.
- A denied terminal operation produces a named refusal.
- Host CA completion changes payload trust data and can be disabled.
Forced FUSE mode enters through a rung-complete read-only server; its live
entry arm and the permitted-tmpfs entry arm prove automatically where a
host grants the device and the mount, and refuse naming them where it
does not. The embedded-rootfs format is the save OCI-layout tarball,
verified per blob on load.
⛔ Live FUSE and tmpfs entry are a limit of this host, not pending work.
The prover exists: experiments/358-ladder-rungs.sh drives both entry arms
and asserts payload word, bytes, and cleanup wherever the host grants
/dev/fuse and mount(2). This host grants neither, measured at the node,
at mount(2), and inside a user namespace. No task clears it, so none owns
it. T-1003 in packaging stays done: everything it
claimed to deliver is delivered and its Prove exits 0.
The source build produces separate node, operator, proxy, and shell executables.
The remote CLI needs compatible helpers beside podvm or on PATH.
The standalone beta.9 assets contain podvm only.
That gap closed at beta.10, where every release target carries the helper
archive, and T-1405 in podssh is done.
The relay legs carry 10 s DNS and write deadlines; a stalled peer ends
the operation loud instead of wedging the loop. Node redial pairing is
proven on the loopback fake relay; pairing against the live relay is the
one remaining clause of T-1406, which is partial and owns both the
bounds and the reconnect evidence. The earlier T-1403 acceptance proves
concurrent sessions under its tested conditions.
The passwd shim compiles from retained source on a glibc-dynamic lane and serves the restricted host to exit 42; no workspace or release build links it. T-1401 owns that build input and live acceptance.
The server session does not provide a real pty. It supplies its own line discipline under ForceCommand. The server configuration controls exec and subsystem requests.
The Windows guest has no network in the current driver. The operator supplies a licensed disk image. The runtime does not publish or redistribute that image. T-1112 records the TCG, KVM, and DOS proofs separately. The fresh 2026-09-30 KVM runs failed at setup or command shutdown. An earlier KVM success does not establish current reliability. ReactOS remains unproved in that entry.
Nested KVM in the Windows base can stop the Windows host. On 2026-09-30 a
KVM proof left an emulator that SIGKILL did not remove, and the host then
failed. The operator permitted an unattended run on 2026-10-02, on this
host only, conditional on a watchdog outside the guest. That watchdog has
landed: --unattended starts the proof detached and holds a T-1609
watchdog on its session, and refuses unless the watchdog answers a probe
first. The driver also still requires --accept-host-risk, and refuses
beside another emulator or below 6144 MiB available.
/dev/kvm in this base is crw-rw---- root kvm, set by hand because the
node shipped as crw------- root root and the guest account is uid 1000.
That mode is per boot: the base's own
/usr/lib/tmpfiles.d/static-nodes-permissions.conf replays
z /dev/kvm 0666 - kvm - on every boot. After a reboot, reapply the mode
or run the guest as root.
A Windows base probe can report usable without cgroup delegation.
On the recorded host, engine memory and CPU limits are accepted but not enforced.
Read the current base status --probe result before a resource-limit claim.
Keep other base instances and host distributions unchanged.
⛔ This is a limit of the base, not pending work, and no task owns it because
no task can clear it. The delegation is absent from the host's WSL
configuration and the toolkit does not install it. base ensure --repair
reports the condition and declines to repair it; the same reading is recorded
under T-1610, which installed everything the KVM proof needs and left this
unchanged. It clears if and only if the base gains cgroup delegation, which is a
change to the host rather than to this tree, so an entry here would be a row
with no implementable clause.
⚠ podvm does not depend on it and does not enforce it either way. The CLI
refuses --memory and --cpus on its own parity table
(cli T-0804, resource limits need a cgroup this runtime does not grant), so a caller gets exit 125 and a named reason instead of an accepted
flag that does nothing. The hazard is the engine underneath podvm, which
accepts those limits silently; RULES section 8 says an
option accepted by an engine does not prove enforcement.