MicroVM
- title
- MicroVM
- type
- concept
- summary
- A virtual machine pared down to the minimum needed to run a single workload β small VMM, few emulated devices, fast boot, hardware-isolated kernel
- tags
- virtualization, sandboxing, infrastructure
- sources
- qemu-microvm-docs
- created
- 2026-05-03
- updated
- 2026-07-22
A microVM is a hardware-virtualized VM stripped to the parts a single workload needs: a small VMM (typically 80-110K lines of Rust instead of QEMU's 1.7M lines of C), 4-5 emulated devices instead of dozens, and a guest kernel chosen for boot speed instead of generality. The result is a VM that boots in ~125 ms with <5 MiB of memory overhead but still gets the full hardware boundary KVM provides.
The category got a name and a working reference implementation when AWS open-sourced Firecracker in 2018, having built it for Lambda. By 2026 it's the substrate underneath most serious AI-agent sandboxing β see microvm-2026 for the industry readout, matryoshka-isolation for how microVMs nest with containers.
What "micro" means
A microVM is "micro" along five axes:
- VMM size. Firecracker is ~83K lines of Rust; Cloud Hypervisor is ~106K. Both are dramatically smaller than QEMU and have correspondingly smaller attack surfaces.
- Emulated device count. Firecracker emulates ~5 devices (virtio-net, virtio-block, virtio-vsock, serial, KVM clock). No legacy PCI, no USB, no audio, no graphics. The principle: every device is attack surface, so don't ship the ones you don't need.
- Boot time. ~125 ms cold for Firecracker, ~28 ms with snapshot-restore, <20 ms for FreeBSD-tuned setups (Colin Percival), ~200 ms for a minimal Linux 6.18 boot. Compare 30-60 s for a traditional VM, 3-15 s for a Kubernetes pod schedule.
- Memory overhead. <5 MiB per VM, which makes "VM per request" or "VM per agent session" viable rather than absurd.
- Featureset. No nested virtualization, no GPU passthrough, no CPU hotplug, no Windows guest support β at least not in the canonical Firecracker. Cloud Hypervisor adds these back at the cost of size and slightly slower boot, occupying the "Swiss Army knife" position.
Why hardware isolation matters
Containers (namespaces + cgroups + seccomp) share the host kernel. The Linux kernel is ~40M LOC of C with 450+ syscalls β a continuously-updated attack surface. Container escape CVEs land regularly (CVE-2024-21626 Leaky Vessels, CVE-2025-9074 Docker Desktop, CVE-2025-23266 NVIDIAScape, several runc CVEs in 2025; the microvm-2026 table catalogues them).
A microVM replaces the shared kernel boundary with a hardware boundary. The guest kernel is isolated; an exploit inside has to break out of the VM via a hypervisor CVE, which is rare enough that working hypervisor exploits sell for $250K-$500K bounties. The trade is real engineering complexity for a much smaller and slower-moving attack surface.
The Firecracker / Cloud Hypervisor split
The two reference VMMs in 2026:
- Firecracker (AWS) β "scalpel." Built for Lambda. Five devices, no GPU, no nested virt, no hotplug, no Windows guest. ~83K LOC Rust. Best for short-lived single-purpose workloads.
- Cloud Hypervisor (Intel-led, multi-vendor) β "Swiss Army knife." Nested KVM (since Dec 2025), VFIO device passthrough, CPU/memory hotplug, Windows guests. ~106K LOC Rust. Slightly slower boot, slightly bigger attack surface.
Decision criteria from microvm-2026: pick Cloud Hypervisor if you need /dev/kvm inside the VM (Docker-in-Docker, Android emulators), Windows, or complex hotplug. Otherwise Firecracker.
Both share the rust-vmm crate ecosystem β improvements to vm-memory or virtio-queue benefit both, plus libkrun, Dragonball, crosvm, and others.
Where microVMs are running in 2026
- AWS Lambda β every function invocation since 2018 runs inside Firecracker
- Fly.io Machines β Firecracker since 2020
- Kata Containers β drop-in OCI runtime that puts a microVM behind every Kubernetes pod (QEMU/Cloud Hypervisor/Firecracker backends)
- Spindle β Tangled's self-hostable CI runner: one QEMU microVM per workflow, NixOS configured from the workflow YAML, a Rust vsock guest agent
- AI-agent sandboxes β Fly.io Sprites, E2B, Vercel Sandbox, AWS Bedrock AgentCore, Microsandbox, Docker Sandboxes (Desktop 4.58, Jan 2026), and ~10 more (see microvm-2026)
- Chrome OS β crosvm runs Linux (Crostini) and Android VMs on Chromebooks
- Lima (CNCF Incubating) β macOS Linux-VM tooling, 20Kβ , expanded into agent sandboxing in 2026
Adjacent things microVMs aren't
- Application kernel sandboxes (gVisor, when its page exists). Userspace Linux kernel reimplementation in Go. ~50 ms startup, smaller memory footprint, GPU compatibility via nvproxy. No hypervisor, no guest kernel β different point on the isolation/compatibility spectrum.
- V8 isolates (Cloudflare Workers). Sub-ms startup but JS-only, no Linux interface. Different category.
- Container-only (runc, namespaces, cgroups). Different security model β see microvm-2026 for the head-to-head.
Operational reality
The honest cost of microVMs isn't performance overhead (single-digit %) β it's operations. You manage:
- A guest kernel (build, sign, ship, patch)
- A rootfs image (build, version, distribute)
- A VMM (deploy, monitor, sandbox itself)
- Networking (TAP devices or virtio-net + bridge), unless you're using libkrun's transparent socket impersonation
- Storage (virtio-block + a backing format)
This is genuine engineering work. The article's framing: it's worth it when you run untrusted code, when you need multi-tenant isolation, or when you operate at a scale where a single container escape costs more than the VMM operational burden.
Notable VMMs and their roles
- rust-vmm β shared crate ecosystem; nearly all modern microVMs are downstream of it
- Firecracker β AWS, the canonical "small Lambda VMM"
- Cloud Hypervisor β multi-vendor; the larger-featureset general-purpose option
- libkrun (Red Hat) β library-based VMM, sub-200 ms startup, transparent socket impersonation, paravirtualized GPU on macOS; powers Microsandbox and crun
- crosvm (Google) β Chrome OS VMM, rust-vmm proof point
- QEMU microvm β QEMU's stripped-down option (
-M microvm): no PCI, no ACPI, virtio-mmio only, qboot firmware, direct kernel boot, triple-fault shutdown; older and larger than the Rust VMMs but matures features Firecracker won't add and serves as the C-vintage reference implementation of the same architecture
See also
- microvm-2026 β BeganoviΔ's industry readout, the canonical reference
- qemu-microvm β QEMU's microvm machine type, the C-vintage reference implementation
- matryoshka-isolation β containers-inside-VMs pattern that's emerging as the dominant architecture
- rust-vmm β the shared infrastructure under all of these
- sandboxing-ai-agents β broader sandboxing taxonomy
- virtual-machines-versatile-platforms β Smith and Nair's taxonomy, the background reading for why "VM" means both a JVM and a Firecracker guest; predates KVM but the ISA-level vs OS-level vs application-level split is what makes the microVM/gVisor/V8-isolate comparison above line up
- superhq β agent orchestrator using microVMs as Layer 1
- pve-microvm β the same architecture packaged for a homelab Proxmox node: host-provided kernel, kernel-agnostic OCI rootfs, sub-300ms boot
- Virtual Machines: Versatile Platforms for Systems and Processes
- kanbots
- pve-microvm
- tilde-run
- Building a Consumer-Parts Homelab Server
- emirb.github.io
- Matryoshka Isolation (Containers Inside VMs)
- Your Container Is Not a Sandbox β MicroVM Isolation in 2026
- Planned Pages
- QEMU microvm machine type
- We Reverse-Engineered Docker Sandbox's Undocumented MicroVM API
- rust-vmm
- Sandboxing AI Agents
- Spindle β QEMU microVM CI engine for Tangled
- Tangled