Skip to content

Coordinate the dissolved-library-OS inter-component isolation model (gale#86/#404, synth#404) #300

Description

@avrabe

[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

  1. Single shared memory + MPU-carvemeld 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).
  2. 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.

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