Skip to content

Challenge: maximal-wasm gale-nano for tiny bare-metal nodes (few primitives + kiln async scheduler, synth-compiled, thin native register shim) #65

Description

@avrabe

Challenge: a maximal-wasm "gale-nano" for tiny bare-metal nodes (a few gale primitives + the kiln async scheduler)

The same principle as everywhere in the stack (jess DD-006): compile everything to wasm and run it through the meld → loom → synth toolchain; only the bare-minimum hardware (registers / MMIO) is native. This challenge applies that to the smallest node — where full Zephyr does not fit.

Why

jess Phase-2 (Pixhawk 6X-RT) has a tiny bare-metal node — the STM32F100 I/O MCU — running a px4io-class failsafe. It is too small for the full Zephyr RTOS, but we still want gale's verified guarantees + an async runtime there. Rather than hand-write a bespoke bare-metal failsafe, the challenge is to strip gale to a minimal subset + add the kiln async scheduler, all built maximal-wasm.

The challenge

Define a "gale-nano": the few primitives a tiny node actually needs (candidate set — sem, mutex, msgq/mbox, timeout, maybe event; not the full 39-module surface) + the kiln async scheduler, such that:

  1. It is itself wasm. gale-nano + the failsafe app are fused (meld), loom-optimized, and synth-compiled to the target — the OS is not native C; it rides the same wasm→ARM toolchain as the app.
  2. Only a bare-minimum native shim exists: the hardware registers/MMIO the node truly needs (PWM out, RC/SBUS in, the UART carrying the IPC, a tick source) behind a thin host interface — everything above that is wasm.
  3. Verified primitives carry over — the gale-nano subset keeps its Verus/Kani proofs; the async scheduler gets its own (no lost wakeups, bounded poll).

Outside parameters (the node's constraints)

  • MCU: STM32F100, Cortex-M3 (no FPU), 24 MHz, 8 KB SRAM — extreme RAM budget; the subset must fit.
  • Role: independent failsafe (px4io-class) — must stay tiny, deterministic, and independent of the FMU for its safety function.
  • IPC: receives CCSDS Space Packets wrapped by relay-sec (counter + anti-replay + Ascon-AEAD) over LPUART @ 1.5 Mbaud from the FMU (jess DD-009) — so the native shim includes that UART carrier; relay-sec/relay-ccsds are no_std and already M0+/M3-capable.
  • Integrity bar: the failsafe is on the ASIL/DAL-A path (jess DD-005), so the verified-subset property matters.

Renode information (this de-risks it — unlike the RT1176)

Renode already models the STM32F1 family: platforms/cpus/stm32f103.repl + scripts/single-node/stm32f103.resc. The STM32F100 (Value Line) shares the Cortex-M3 core + much of the F1 peripheral set, so a gale-nano can be HIL-tested in Renode today on an stm32f103-class platform (a small .repl delta to F100 memory/peripherals), and even two-machine with the FMU over a UART hub to exercise the CCSDS+relay-sec link. (Contrast the i.MX RT1176, which Renode does not model — AFD-018.)

Ask

Is a maximal-wasm gale-nano (minimal verified subset + kiln async scheduler, synth-compiled, thin native register shim) feasible / in scope as a gale track? It composes with the gale#63 host-path epic (same WIT/host-interface machinery, just a smaller footprint). jess will co-design the WIT, supply the STM32F100 parameters, and bring the Renode stm32f103-based HIL platform. Tracked jess-side as REQ-PIX-009 / DD-006.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions