Skip to content

Reference

Platform support

Current host, architecture, backend, and support-status matrix for mvm.

mvm supports local microVM workflows on native Linux with KVM, on Apple Silicon macOS, and on WSL2 with nested KVM for the libkrun-backed workload path. Native Windows is still future host work. Linux hosts without /dev/kvm can run the dev/test QEMU/TCG backend (--hypervisor qemu); there is no container fallback.

Use this page to decide where to run mvmctl, where Linux image builds happen, and which backend limitations apply.

HostArchitectureRuntime backendStatusNotes
Linux with /dev/kvmx86_64, aarch64FirecrackerSupportedStrongest local target; direct KVM microVM path.
macOS Apple Siliconaarch64HVF / libkrun-backed pathsSupportedLocal development and runtime path for M-series Macs. OCI --allow-host runs use the HVF no-guest-NIC host-vsock-proxy path when mvm-hvf-supervisor is available; otherwise the CLI fails closed before pull/boot work.
Linux without /dev/kvmx86_64, aarch64QEMU (TCG)Dev/testSoftware-emulated microVM (--hypervisor qemu); Tier 2 dev/test — slower, not for production.
Browser (Chromium/Chrome)AnyBrowserWasiDev/testBrowser-tier WASI backend (no hypervisor); runs inside browser’s own WebAssembly engine; claim-free tier for demos and browser-local development.
Windows nativex86_64, aarch64NoneFutureUse WSL2 for the supported Windows-adjacent workload path; native Windows runtime support is still tracked in mvm#428.
WSL2 with nested KVMx86_64, aarch64libkrunSupported workload pathRequires /dev/kvm, libkrun installed in the distro, and both the repo and MVM_HOME on the WSL ext4 filesystem rather than /mnt/<drive>/....
Intel macOSx86_64NoneUnsupportedUse Linux KVM or Apple Silicon macOS.

The guest image is a Linux artifact even when the host is macOS. mvmctl machine build is still a host command, but Linux-specific work belongs to the builder boundary.

HostWhere Nix/Linux image work happensUser command
Linux with KVMNative Linux path or project builder boundary, depending on command.mvmctl machine build
macOS Apple SiliconProject builder VM.mvmctl machine build
WSL2 with nested KVMSupported workload runtime path inside the distro; builder/dev flows stay separate from this slice.mvmctl machine run, mvmctl run, other workload verbs
Windows nativeFuture Linux backend/builder design.Not supported today.

You do not need host-side Nix for normal mvmctl machine build usage. The builder path owns Linux evaluation, image assembly, and artifact extraction.

Build time and runtime are separate. After an image is built:

  • Browser browsers boot through the BrowserWasi backend, running the guest workload as a WASI module inside the browser’s own WebAssembly engine.
  • Linux with KVM boots through Firecracker.
  • Apple Silicon macOS uses the supported macOS runtime backend path. OCI --image --allow-host ... uses the HVF host-vsock proxy path with no guest NIC when the helper is available, and is refused early when it is not.
  • Linux without /dev/kvm runs QEMU/TCG — a software-emulated microVM for dev/test (Tier 2), not a production isolation target.
  • WSL2 with nested KVM uses the libkrun workload backend inside the distro.
  • Windows native does not have a supported runtime backend today.

The browser-tier backend is claim-free: it cannot assert any of the numbered security claims because there is no hardware isolation boundary. It runs inside the browser’s own WebAssembly engine and has no guest kernel, no hypervisor, no vsock, and no verified boot. It is for demos, playgrounds, and browser-local development only, and it is never auto-selected.

When reporting runtime behavior, include host OS, CPU architecture, selected backend, mvmctl doctor output, and whether /dev/kvm was available.

Recovery is not interchangeable across backends. mvmctl doctor is the authoritative live matrix; its snapshot_tier and standby_pool values come from the selected backend’s VmCapabilities.

Recovery pathMeaningCurrent limitation
Live-memory snapshot/restoreResume captured guest RAM and device state.Not advertised by the selectable production runners.
Save/restore machine stateRestore a serialized VMM machine state without claiming live-memory fidelity.No selectable backend currently advertises it.
Disk-only CoW warm startRebuild from a copy-on-write disk/overlay artifact; no RAM is restored.The raw libkrun substrate has this primitive, but no selectable workload runner advertises it yet.
Prelaunched supervisor standbyPay supervisor/setup latency before a workload is claimed; this is not snapshot restore.The raw libkrun substrate has a standby primitive, but no selectable workload runner advertises the pool yet.
Cold bootBoot immutable kernel, initrd, image, and policy artifacts from scratch.The portable fallback, with no saved machine state.

Unsupported recovery requests fail closed. They must not silently change from live-memory restore to disk-only warm start or cold boot; use the actionable error to select a supported tier or request a cold boot explicitly.

Nix target strings describe the Linux guest artifact, not the host operating system:

HostCommon guest target
Apple Silicon macOSaarch64-linux
ARM Linuxaarch64-linux
Intel/AMD Linuxx86_64-linux

The OS segment is linux because the workload runs inside a Linux guest.

Backend pathSecurity posture
Firecracker on Linux/KVMPreferred local microVM isolation target.
HVF / libkrun-backed macOS pathSupported local microVM path with backend-specific feature differences. OCI --allow-host on --image is the HVF host-vsock-proxy path, not guest-NIC networking.
QEMU (TCG, no /dev/kvm)Tier 2 dev/test microVM; do not use for untrusted code or security-sensitive workloads.
WSL2 nested KVM + libkrunSupported Tier 2 workload path inside the WSL2 distro. Firecracker is intentionally not part of this Windows slice.

Security-sensitive examples should name the backend when behavior differs.