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-29
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.
pullrun publishes a different set of boot figures from one tool spanning three backends: ~500 ms cold for Firecracker against ~200 ms from a configurable warm pool, and ~160 ms for Apple Virtualization. They are the project's own benchmarks and nobody else has reproduced them, but the warm pool is the same move snapshot-restore makes β have the instance built before the request arrives, so nothing pays the cold-boot floor.
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
- pullrun
- pve-microvm
- tilde-run
- Building a Consumer-Parts Homelab Server
- emirb.github.io
- VMs Won't Contain Cyber-Capable Agents
- 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