Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Gaps to host apps — and no containers

Do not say “you can run host apps on ctos.” A host app here means a program you already run on Linux or macOS: a shell, Python, a browser, a Docker/OCI container, a glibc ELF you exec. Today’s guest can run the probed samples only. Closing the gap is Planned in pieces, not a product claim.

./scripts/docker-smoke.sh is a host harness (build the kernel inside a Linux container, then QEMU). It is not a guest container runtime. ctos is not a container host.

Hub: overview.md. Porting: building-or-porting.md. Filesystem: filesystem.md.

Site source of truth: Hosting apps / containers. Product “hosting done” claim: Verified under ADR-048 / ADR-052 (freestanding slots; containers remain non-goal). This page is extra stance. HTTPS at https://ctos.artof.link is Verified (2026-09-11 after #30).

What a host app needs vs what exists

Need (typical host app)On ctos todayStatus
A process you execStanding EL0 + A1 ABI + A2 libctos + A3 PT_LOAD + A4 standing task + A9 FAT /hello first cutPlanned as Linux exec. Stance: ADR-035. A9 is two artifacts + a FAT load path, not a process table.
POSIX / glibc / muslCustom aarch64-ctos.json, os: none, no libcNot easy, not started.
Files (open / a disk)Thin VFS: memfs + FAT16 (read + write depth, ADR-050)memfs + FAT miles (A6/A7 + ADR-050). Not POSIX.
Sockets / HTTPNo virtio-net, no stackPlanned at best; not a Now mile
Shell / TTY / PythonOne injected UART byte; no interpreterNo until ABI + FS + line discipline
Isolated userspaceStanding miles + identity tears incl. leftover RAM (ADR-049); PAN enabled on a76 (ADR-080); _start staysUmbrella “EL0 isolated” Verified only as the accepted ADR-091 sentence (one core, TCG; limits there)
Preemption / SMPCooperative EL1, one vCPUNo on this horizon
Containers (OCI / Docker / k8s as the guest)NothingNon-goal. See below.

The easiest thing you can add today is still an in-tree no_std coop EL1 task — not a host binary.

Containers: non-goal

ctos will not run containers as a guest feature. This is a non-goal, not “later on this horizon.” ADR-029. Site SoT: hosting-apps.md.

  • No OCI image pull, no runc, no cgroups, no Linux namespaces, no overlay FS, no containerd/CRI.
  • A Linux Docker/Podman host that builds this kernel is unrelated. That smoke does not make QEMU virt a container host.
  • “Run Alpine on ctos” / “k8s node” is the same class of claim as “POSIX port is easy.” It is not.

Do not write a container roadmap. Track A gaps (ABI, FS, isolation) are not a path to OCI. Do not mint a new FR ID for containers. Reopen only with a new GitHub epic plus a new ADR.

Honesty

ClaimProbeStatus
Guest is not a container hostSource: no OCI/runc/cgroup/namespace code in src/Verified (absence)
Host docker-smoke.sh builds the kernelLedger Docker rows (sponsor / GHA)Separate claim — host harness only
A host app (Linux ELF, shell, Python) runs in the guestNo such serial markerPlanned
Guest is a container hostNo OCI/runc/cgroup codeVerified absence; non-goal (ADR-029; not a later Planned feature)
Linux-compat goals documented (Track B B1)Read ADR-031Documented frame. Not Linux userspace. B6 stays Planned research.
Linux AArch64 vs ctos SVC gap (Track B B2)Read linux-aarch64-syscall-gap.mdDocumented inspection map. No Linux numbers in src/. Not a Linux ABI.
Process model vs standing EL0 (Track B B3)Read ADR-035Documented stance. Standing EL0 stays the ctos model. Not fork/execve/wait.
Linux ELF / auxv / PT_INTERP vs freestanding loader (Track B B4)Read ADR-033Documented gap ADR. Track A loader stays reusable. Does not accept PT_INTERP. Not dynamic Linux ELF.
Linux VFS vs thin ctos VFS (Track B B5)Read ADR-034Documented concept compare. No POSIX flags / dentries in src/. Not a Linux filesystem.

File presence of this note is not an app runtime. See the honesty ledger.