🖌 The Virtualization Stack
"Which of these actually virtualizes anything?" is the question this diagram answers. Seven layers, and every arrow reads "uses / runs on top of" — no arrow ever stays inside a layer, so a box's whole story is read straight down:
- Cloud & datacenter platforms — each box is the component that actually
creates the VM, not the product umbrella:
nova-compute's libvirt driver, the CloudStack agent, the OpenNebula node driver, oVirt's VDSM,ganeti-noded. The APIs and web UIs above them are out of frame. - Container & CI orchestration — VMs as an isolation unit for something
else: KubeVirt, Kata Containers, Vagrant, Apple's Containerization, and the
containerised runners (
qemus/qemu,dockur/*). - Desktop & developer tooling — one machine, one developer: virt-manager, QuickEmu, UTM, Lima, Tart, vetu, vfkit, krunkit, vm-bhyve.
- Management API / daemon — libvirt: domain XML, storage pools, virtual networks. Note who skips it — Proxmox and Ganeti drive QEMU (and Xen) directly.
- VMM / emulator — a user-space process that builds the machine: memory
map, vCPU threads, virtual devices. Apple's
Virtualization.frameworklives here, not below: it is a VMM, and it calls down intoHypervisor.frameworkfor the privileged half. - Hypervisor / kernel API — the privileged half that owns the CPU
extensions and lends them to user space (
/dev/kvm,hv_vcpu_run,libnvmm). Xen is the odd one out: a true type-1 that boots before Linux. - CPU extensions — the silicon that makes a guest ring-0 possible at all.
Hover a box to isolate its whole chain, click to pin it. The canvas pans by dragging and zooms with ⌘/Ctrl + wheel or the toolbar (Fit scales it to the page width, 1:1 returns to full size, ⛶ goes fullscreen).