← board

UMBRELLA — target-OS abstraction: FreeBSD + Windows(Wine)

Goal

Make target OS a first-class axis of the compiler — the same way target CPU already is — and land the two OSes that are ready to abstract now: FreeBSD (native, raw-syscall ELF) and Windows/amd64 (PE, Wine-tested). Everything is amd64 default; other CPUs compose later, one OS column at a time.

The load-bearing insight (from portability-axes.md): the cost of a new OS is Axis B — object format + per-OS kernel-reach config, not a new subsystem. pxx already dynamic-imports external libraries; the campaign generalizes two things — how the RTL reaches the kernel (raw syscall vs call a stable system DLL/so) and which object format it writes (ELF today, PE new).

Phases

Each phase is an independently-useful, already-filed child ticket. The abstraction is built by its first consumers, not as scaffolding-without-a-user.

Adjacent — NOT in this umbrella's active scope

Abstraction shape (summary — full form in portability-axes.md)

Two independent axes, made first-class:

axis choices pxx today
A — kernel reach raw syscall | call a stable system library both exist (raw-syscall RTL; C-lib import via PLT)
B — object format ELF | PE | Mach-O ELF only

Per-OS config = { syscall table | libc-symbol map, error convention (neg-rax / carry-flag / errno), object format, brand/interp, entry model }. --platform=<os> selects it. Raw-syscall default (Linux) stays byte-identical.

Acceptance (umbrella)

Explicit non-goals