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
- 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(kindisincus-system-container,incus-oci-containerorincus-vm, plus its images), which also travels in documents that embed custom classes (catalog.classes); and a module'sliveMigration, which becomes Incus'smigration.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. - 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. - Provider facts live in one table:
PLATFORM_INFOinpackages/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. - Status is honest.
supportedmeans a first-class target;plannedmeans the design is portable but there is no adapter, and validation says so (platform-planned). - Guardrails are design hints, not host limits. Real limits come from hosts once the backend reports them.
Adding a provider
- Add its id to
PLATFORMSinconstants.ts. - Add an entry to
PLATFORM_INFO. - Run
npm run schemaand add a test next to the existing platform tests. - 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.