Skip to content

Research & roadmap

This page is separate from shipped features. The work here is designed, in progress, or proven as a mechanism, not a capability claim. Items move to capabilities & limits only when a probe proves them live.

fork() on V8 isolates — mechanism proven live

Section titled “fork() on V8 isolates — mechanism proven live”

Workers has no fork() primitive, so Nimbus built the mechanism and proved it live on 2026-07-16, using a dedicated probe on production Cloudflare infrastructure that was deleted afterward. Asyncify unwinds the running WASM program. A sibling instance of the same module starts at request time; that is legal because workerd blocks only raw-byte compilation. The parent’s linear memory is copied, every exported global including __stack_pointer is restored, and both sides rewind. The parent resumes with the child pid. The child resumes with 0.

Depth-4 call stacks and grandchild forks stayed byte-identical to the local model across 2,000 forks in one facet. The negative control skips the stack-pointer restore and breaks address-space identity deterministically. Copying a 16 MiB image on the memory-reuse path takes ~0.5 ms. Full instantiate+copy is GC-dominated, so the design reuses instances. A facet-budget overrun is a catchable error, which maps to fork() returning ENOMEM. M2 is proven live too: fork + exec of a different wasm image + a real waitpid exit status, vfork and posix_spawn fast paths, and cross-facet placement (fork+exec+wait ~1.9 ms at 16 MiB).

The mechanism now carries a real program: GNU bash 5.2.37 and BusyBox 1.37.0 coreutils run in a dedicated facet on this fork/pipe/setjmp scheduler (the process fabric). The remaining work is making it the default process model rather than an installable program.

The S2 design shipped in July 2026. uid, gid, and mode are durable inode columns; one credential passes through a single VFS seam; denials are real EACCES/EPERM through every runtime, with a root bypass and durable chmod/chown. Security documents the model and proves a denial in a live sandbox. What remains open is maturity, not mechanism: enforcement coverage is weeks old, and some subsystems (package installation, runtime staging) run as a system credential.

Work State
One POSIX FD layer (FdTable → OpenFileDescription → backing object) design — prerequisite for byte-true pipes, WASM stdin, fork’s inherited fds
WASI + long-running Python/Ruby on the live fs bridge specced, in progress
Inbound sockets for WASM (sock_accept + extension) designed, not shipped
opencode TUI serve half solid; attach renders frames on a thin memory margin, still hardening
Index-pack CPU headroom (75k+ objects) continuation-slicing the indexer
Full POSIX PTY parity raw/cooked modes, signals, replay — roadmap
Broader Pyodide/gem artifact catalogs, fuller pip/Bundler parity ongoing
Per-session egress policy (deny-by-default outbound) recognized gap, designed as embedder option
Upstream workerd availability issue — some user-space activity can crash the shared process and reset sessions; disks survive, availability only reproduced, reported, escalating with Cloudflare