Skip to content

gale as composable OS components: a first-class 'build-your-own OS' mode (C-free Rust+wasm), beyond the Zephyr integration #74

Description

@avrabe

The reframe (from jess's RT1176 + gust work)

Working the Pixhawk 6X-RT bring-up, a nice realization fell out: gale isn't really "verified Zephyr primitives" — it's a library of composable, formally-verified OS components, usable two ways:

  1. Drop into an existing OS — the zephyr/*.c integration track (gale replaces Zephyr's C kernel primitives in place). Proven: 36 QEMU suites.
  2. Construct your own OS — compose gale primitives + kiln (scheduler) + an async HAL substrate + wasm driver bodies into a bespoke, purpose-built OS. gust is the first instance (bare Cortex-M3, no Zephyr).

jess wants mode (2) for the flight stack — and the payoff is that the C disappears: no Zephyr, no NuttX/PX4, no NXP SDK C drivers. The flight TCB becomes verified Rust (gale + kiln + HAL) + wasm (Kani-proven drivers + falcon) — one language discipline, one verification story end-to-end (Verus/Rocq/Lean + Kani), the smallest auditable trusted base, and the same OS at three scales: M7 (falcon) / M4 (sensor-I/O offload) / F100 (gust). (The only non-Rust residue — the i.MX boot ROM — is out of the flight path; it's touched only by the on-ground update bootloader. jess DD-016.)

The driver model (the sophisticated piece Zephyr's C otherwise gives you)

gust's driver model is trivial (a ~4-item sync native shim). The M7 needs the real thing — DMA, async completion, multiple isolated buses, redundancy. We think the clean substrate is:

  • Seam anchored on embedded-hal-async (the standard async embedded-HAL traits).
  • Native host substrate = Embassy-class async HAL (bus transport + DMA + IRQ-completion) — "drivers as host components, driven down."
  • Executor = kiln-async (which is already Embassy-inspired — its design cites embassy-executor's task-arena/waker-as-index).
  • Verifiable logic stays wasm — relay's Kani-proven protocol decode + the redundancy voting sit above the async traits.

So: verify what's verifiable (decode/voting in wasm), reuse battle-tested for the timing/DMA you can't easily prove (async HAL). This is jess DD-012/DD-015 (the relay↔jess seam) made concrete for async+DMA, the full-fat version of the gust seam.

The enabler we just found

The MIMXRT1176 CMSIS-SVD (NXP official, BSD-3-Clause, cm7 + cm4) is the keystone for both sides: svd2rust → an RT1176 PAC → the Embassy-class HAL foundation; and Renode ApplySVD → a named-register model for the hermetic HIL. One artifact unblocks the real-silicon HAL and the emulation, for M7 and M4.

The ask — get the ball rolling

Would gale treat "build-your-own OS" as a first-class mode, not just a side-effect of the standalone (plain/) track? Concretely, what we'd love to discuss:

  1. A standalone runtime/construction crate — gale core + the minimal scaffold (boot/scheduler-init/device_init hooks) to compose an OS, no Zephyr.
  2. The driver-framework backbone — are device_init / work / poll the right hooks to host the embedded-hal-async + kiln-async driver model, or should that be a thin new layer?
  3. Positioning — does the "gale = composable OS components (drop-in or build-your-own), C-free" framing fit gale's roadmap? It changes the README story from "Zephyr primitives" to "OS components."

Cross-refs: gale#63 (host substrate epic), gale#65 (gust/gale-nano), and jess's DD-006 (maximal-wasm) / DD-011 (gust) / DD-017 (M7 = gale-maximal-wasm, no Zephyr in flight). No urgency — opening this to get the conversation started.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions