[cross-repo coordination — synth maintainer side; not a meld bug] gale's BYO-OS work (gale#86, gale#404) is choosing the inter-component memory-isolation model for the dissolved library-OS, and the fusion-structure half of that decision is meld's — so meld should be in the loop before gale commits.
The fork
- Single shared memory + MPU-carve —
meld fuse --memory shared → one linear memory; the embedder/TCB carves MPU sub-regions per component by hand. This is meld's current direction (meld#172 closed in favor of shared; meld#298 / meld#299 actively enabling --memory shared).
- Multi-memory → one native region per wasm memory — meld preserves each component's memory; synth places each at a distinct native base so the memory boundary is the MPU/PMP region boundary (protection coincides with semantic boundaries — a component can't even form a pointer into a neighbor; under model 1 a miscomputed address lands in a neighbor's sub-range and only the MPU catches it).
synth's stance (synth#404)
synth lowers whichever structure meld emits; it will not be the blocker for model 2 — concretely: carry memidx through the IR instead of dropping it, place each wasm memory at a distinct native base, emit cross-memory ops explicitly (closing synth#369), and expose per-memory base/size so the embedder programs one MPU/PMP region per memory. Today synth is single-memory, so model 1 is what's lowerable now; model 2 is forward-looking on the synth side too.
The question for meld
Is --memory shared the committed dissolved-MCU path (isolation = embedder MPU-carve on one region), or does meld intend to support a fuse mode that preserves component memories as distinct regions for structural isolation? gale#86's isolation design forks on this. Note the MPU/PMP region cap (~8 on ARMv7-M, PMP similar) bounds the component count N either way — so it's not a differentiator between the models.
Refs: gale#86, gale#404, synth#404, synth#369, meld#298, meld#299.
[cross-repo coordination — synth maintainer side; not a meld bug] gale's BYO-OS work (gale#86, gale#404) is choosing the inter-component memory-isolation model for the dissolved library-OS, and the fusion-structure half of that decision is meld's — so meld should be in the loop before gale commits.
The fork
meld fuse --memory shared→ one linear memory; the embedder/TCB carves MPU sub-regions per component by hand. This is meld's current direction (meld#172 closed in favor of shared; meld#298 / meld#299 actively enabling--memory shared).synth's stance (synth#404)
synth lowers whichever structure meld emits; it will not be the blocker for model 2 — concretely: carry
memidxthrough the IR instead of dropping it, place each wasm memory at a distinct native base, emit cross-memory ops explicitly (closing synth#369), and expose per-memory base/size so the embedder programs one MPU/PMP region per memory. Today synth is single-memory, so model 1 is what's lowerable now; model 2 is forward-looking on the synth side too.The question for meld
Is
--memory sharedthe committed dissolved-MCU path (isolation = embedder MPU-carve on one region), or does meld intend to support a fuse mode that preserves component memories as distinct regions for structural isolation? gale#86's isolation design forks on this. Note the MPU/PMP region cap (~8 on ARMv7-M, PMP similar) bounds the component count N either way — so it's not a differentiator between the models.Refs: gale#86, gale#404, synth#404, synth#369, meld#298, meld#299.