Runtime providers

Modules run on Incus (ADR 0001). Other runtimes, such as VMware, are possible later, so the designer stays provider-neutral: an assembly describes what runs and how it is wired; how a particular runtime runs it belongs to the module class (rule 1 names the exceptions). ADR 0001 already puts the runtime behind an adapter; this is the design-time half of that boundary.

Rules

  1. The graph stays neutral. Ports, cables, link tags, zones and component structure carry no provider concepts. Two places do carry Incus-specific data, on purpose: a module class's runtime (kind is incus-system-container, incus-oci-container or incus-vm, plus its images), which also travels in documents that embed custom classes (catalog.classes); and a module's liveMigration, which becomes Incus's migration.stateful. Another provider would add its own runtime kinds and decide what live migration means for it. Do not add further runtime-specific fields to modules.
  2. One optional field chooses the design target: spec.target.platform (incus | vmware). Absent means the default (Incus), so existing files do not change. It is stored in exports and share links.
  3. Provider facts live in one table: PLATFORM_INFO in packages/assembly-model/src/platforms.ts (name, status, guest agent, disk formats, NIC models, packaging, design guardrails). The UI reads that table and never branches on a provider name elsewhere.
  4. Status is honest. supported means a first-class target; planned means the design is portable but there is no adapter, and validation says so (platform-planned).
  5. Guardrails are design hints, not host limits. Real limits come from hosts once the backend reports them.

Adding a provider

  1. Add its id to PLATFORMS in constants.ts.
  2. Add an entry to PLATFORM_INFO.
  3. Run npm run schema and add a test next to the existing platform tests.
  4. Later, implement an adapter behind the control plane's provider traits (crates/domain). The Studio does not change.

Trademarks belong to their owners; this project is not affiliated with them.

This page is a copy of docs/architecture/HYPERVISOR-PROVIDERS.md in the repository, which is the source of truth. Suggest a change.