Known limitations — honest current state
Updated continuously; last update: 2026-09-02 (session 1, kernel foundation verified).
- QEMU is the only supported execution environment. Physical hardware boot is intentionally out of scope for V0.1 (plan §27) and untested.
- Scheduling is cooperative (explicit
yield); the PIT timer accounts ticks but does not preempt yet. Timer-driven preemption is future work. - Input is polled serial only — the verified automation path. PS/2
keyboard support is tracked separately (
input-keyboard: planned). - Userspace (V0.3): concurrent Ring 3 processes, each in its own address space (per-process page tables, cross-process isolation MMU-verified). Scheduling is cooperative — the PIT ticks at CPL=3 but does not preempt user code, so a process that never yields monopolizes the CPU. Preemptive user scheduling (full trap-frame save/restore in the timer ISR) is V0.4.
- Process model: spawn/wait/exit and a single blocking waiter per child; no fork/exec-with-args, no process groups, no signals yet.
- IPC: bounded kernel message channels (4 channels, ≤256 B, ≤8 queued), non-blocking, addressed by integer id (a future capability handle). No shared-memory or synchronous-rendezvous IPC yet.
- Storage: read-only block I/O. NVMe driver is polled (no MSI-X), single I/O queue, single namespace, read path only — no writes, no persistent filesystem. AHCI/virtio-blk not implemented. The block layer reads 512 B logical blocks. QEMU attaches only a generated disposable disk; no host disk is ever touched.
- Syscalls run with interrupts masked; SMEP/SMAP are not enabled (absent on the QEMU CPU model); the user stack has an unmapped hole below it rather than a hardened guard region; CR3 switches do a full TLB flush (no PCID/ASID tagging).
- The filesystem is a read-only in-memory initramfs; no persistent storage, no writes.
- No networking, no graphics output beyond the bootloader-provided framebuffer (present but unused), no USB/audio/Wi-Fi.
- Single CPU only; no SMP. Synchronization assumes one core; spinlocks are interrupt-safe by masking, not SMP-safe.
- Physical memory above 4 GiB is ignored by the frame allocator (counted
and reported as
ignored_high_frames); QEMU test configuration is 256 MiB. - The PIC/PIT (legacy) interrupt path is the V0.1 baseline; APIC/HPET are future work. Only IRQ0 (timer) is unmasked.
- The kernel heap is a fixed 1 MiB range; no growth, no guard pages on task stacks or the double-fault IST stack yet.
- The toolchain is pinned to nightly-2026-08-01 because newer nightlies break the bootloader crate’s UEFI stage (rust-osdev/bootloader#579); the pin can move forward once upstream fixes land.
- Host tooling scripts are Windows-specific (
scripts/*.ps1); CI provides the Linux path. - Website deployment state is tracked in
docs/REQUIREMENTS.md(CF-001).