Roadmap

Where work stands today (May 2026) and what’s queued up next. Work is tracked as two parallel streams: the slice queue below (kernel/userspace work units, each one PR) and the GitHub issue tracker (everything else). This page is the map between them.

For the chronological log of what’s already shipped, see history.

Slice queue

Kernel and userspace work, numbered as focused mergeable units — usually one PR per slice.

Slice numbers were resequenced in May 2026 so the queue runs 1..N without gaps or duplicates. CLAUDE.md’s slice queue is the source of truth; this table mirrors it.

Slice Title Status Issue
1 Reaper for dead-task user PDs ✅ shipped (fcb8771)
2 Per-task task_t plumbing ✅ shipped (3a0ef78)
3 Ring-3 lifecycle ktest ✅ shipped (f48d730)
4 100 Hz timer + SYS_WRITE_SERIAL ✅ shipped (5e40001)
5 Keyboard rewrite (layered decoder) ✅ shipped (#124)
6 Keyboard hardening ✅ shipped (#127)
7 Test-infra cleanup (ccache, fan-out CI) ✅ shipped (#125)
8 Per-task consumer migration (vtty/fd/cwd) ✅ complete
9 Linux-style signal subsystem ✅ shipped (#154) #144
10 Preemption hardening ✅ shipped (#154) #145
11 Per-TTY screen buffers + status bar + /proc ✅ shipped (#129)
12 Per-task FD table ✅ shipped (#134)
13 VFS task->cwd authoritative ✅ shipped (#135)
14 makbox multicall + SYS_GETCWD + exec race fix ✅ shipped (#137)
15 fork() + copy-on-write (15a-e) ✅ shipped (#166) rolled into #121
16 execve + wait4 + TASK_ZOMBIE (16a-b) ✅ shipped (#166) rolled into #121
17 UTF-8 terminal ⏭ deferred #148
18 ps-style task listing (covered by /proc/tasks) ⏭ deferred #147
19 VGA-text fallback per-TTY ⏭ queued #146
20 Userland shell (sh.elf, multi-PR feature, 20a-f) 🟢 20a-c shipped, 20g (POSIX A1-A3 pipes/redir/list-ops) shipped via PR #181
21 COM2 serial-input mode for ui-test runner ⏭ planned
28 SYS_PIPE + SYS_DUP2 + FD_KIND_PIPE ✅ shipped (PR #181) refcounted pipe_ring_t, 4 KiB ring, blocking via task_yield. Single-arg SYS_DUP + FILE-kind open_file_t refcount still pending.

Bash-flavoured shell scripting

Shipped in #163 (May 2026): variables (NAME=value, $VAR, $?), if/elif/else/fi, while, for ... in, [ TEST ], sh script.sh, ./script.sh, makbox dispatch restriction, datetime/date/time builtins. Not on the slice queue (was a single PR that didn’t fit the slice cadence); covered in scripting.

Active themes

Higher-level groupings that cover several slices and/or issues.

Userspace + libc

Long-term goal: a self-hosting userspace. Get a real libc on Makar, then port dash (or extend the in-kernel shell), then bring up TCC for in-place compile-run. Detailed plan in Userland libc.

TCC port progress (May 2026, v0.9): all original phases shipped, and self-hosting now extends to the kernel itself. tcc.elf cross-builds against the libc shim and lives at /apps/tcc.elf on every ISO; userspace apps (hello, calc, sh, makbox) self-rebuild in-OS; the kernel rebuilds end-to-end with ./build-kernel-tcc.sh (host) or /apps/rebuild-kernel.sh (in-OS) — see rebuilding the kernel. Earlier groundwork: Phase 1 brought writable FD_KIND_FILE, O_CREAT/O_TRUNC/O_APPEND, SYS_STAT/FSTAT, SYS_READDIR, growable buffers (SYSCALL_FILE_MAX lifted to 16 MiB). Phase 2 brought the userspace libc shim: malloc/free/ realloc/calloc over SYS_BRK, <ctype.h>, strtol/atoi/strdup/ qsort/sscanf/getenv, setjmp/longjmp, a FILE* layer with snprintf family. Coverage: filetest.elf + alloctest.elf plus test_file_fd ktest suite. Phases 3+ shipped TCC itself + the self-rebuild milestones; v1.0 stays gated on the polish phase (full-green tests, hardened harness, “10× dev experience” tooling).

Slices 15+16 closed the fork/execve/wait4 half of #121; the remaining libc/musl/dash half is still open under the same issue. Slice 20 (paused) carries the userland-shell follow-on.

Networking

NIC driver → lwIP → DHCP/DNS → simple HTTP/Telnet daemons.

Open:

Makar × Medli interop

Sharing data + binaries with the Medli project.

Open:

Background: Makar × Medli.

Kernel hardening

Things the kernel needs to be properly preemptive + signal-aware.

Shipped (PR #154):

Filesystem & devices

The on-disk FAT32 layout adopts Medli’s canonical structure (/Users/, /Apps/x86/, /System/Data|Logs|Libraries|Modules/, /Temp/ — see Medli’s Paths.cs and Makar × Medli). Alongside it, the kernel exposes Unix-style synthetic mounts so userspace tools have a uniform handle on drivers and devices.

Open:

Already shipped:

Display + terminal

Open:

Shell

Open:

(serial shell over COM1 lives under the Makar×Medli theme as #139.)

What’s already shipped

See history for the changelog. Highlights:

Tracking conventions