Context
In the dissolved (library-OS) BYO-OS mode, verified components + scheduler + app link into one native ELF in a single address space. Memory safety of the verified core is by construction (Verus/Kani: no OOB/over/underflow). But that is "no bugs in verified code," not containment of (a) the unverified seam-TCB or (b) a co-located untrusted/unverified component (e.g. a 3rd-party driver). synth does not provide inter-component isolation here:
--native-pointer-abi (used by the pointer-passing modules / gust) deliberately uses real native pointers — no linmem sandbox.
--safety-bounds {software,mpu} exists but is a no-op on the optimized codegen path today — blocked by synth#377.
So today's gust is safe only because it's a single verified failsafe task. The moment multiple mutually-distrusting components are dissolved together, isolation is an explicit, unbuilt design item.
Proposal (OPT-IN)
Make per-component memory isolation an option, layered on top of verification (which stays the primary line), enabled where the use-case/hardware warrants:
- Native MPU/PMP-program-on-switch TCB (C-free): a thin Rust TCB that programs ARM MPU / RV32 PMP regions per task/partition and reprograms on context switch. gale already verifies the partition arithmetic + non-overlap (
src/mem_domain.rs, src/mpu.rs, MpuRegion.lean); the Zephyr drop-in lets C do the register writes — the BYO-OS path needs this in the native TCB.
- (Optional) software bounds as belt-and-suspenders — gated on synth#377 (so
--safety-bounds software actually emits checks on the optimized path).
Default vs option
- Default: verification-only (smallest TCB, zero isolation overhead) — correct when all co-located components are verified.
- Option:
+mpu per-switch partitions for containing the seam-TCB and/or unverified components — pay the MPU-reprogram cost only when you need the boundary.
Kill-criterion
"A dissolved component can read/write another partition's memory after a context switch with +mpu enabled" → isolation broken.
Tracks under gale#74 (BYO-OS). Depends on: synth#377 (for the software-bounds option).
Context
In the dissolved (library-OS) BYO-OS mode, verified components + scheduler + app link into one native ELF in a single address space. Memory safety of the verified core is by construction (Verus/Kani: no OOB/over/underflow). But that is "no bugs in verified code," not containment of (a) the unverified seam-TCB or (b) a co-located untrusted/unverified component (e.g. a 3rd-party driver). synth does not provide inter-component isolation here:
--native-pointer-abi(used by the pointer-passing modules / gust) deliberately uses real native pointers — no linmem sandbox.--safety-bounds {software,mpu}exists but is a no-op on the optimized codegen path today — blocked by synth#377.So today's
gustis safe only because it's a single verified failsafe task. The moment multiple mutually-distrusting components are dissolved together, isolation is an explicit, unbuilt design item.Proposal (OPT-IN)
Make per-component memory isolation an option, layered on top of verification (which stays the primary line), enabled where the use-case/hardware warrants:
src/mem_domain.rs,src/mpu.rs,MpuRegion.lean); the Zephyr drop-in lets C do the register writes — the BYO-OS path needs this in the native TCB.--safety-bounds softwareactually emits checks on the optimized path).Default vs option
+mpuper-switch partitions for containing the seam-TCB and/or unverified components — pay the MPU-reprogram cost only when you need the boundary.Kill-criterion
"A dissolved component can read/write another partition's memory after a context switch with
+mpuenabled" → isolation broken.Tracks under gale#74 (BYO-OS). Depends on: synth#377 (for the software-bounds option).