KVM provides device abstraction but no processor emulation. It exposes the /dev/kvm interface, which a user mode host can then use to:
Set up the guest VM's address space. The host must also supply a firmware image (usually a custom BIOS when emulating PCs) that the guest can use to bootstrap into its main OS.
Feed the guest simulated I/O.
Map the guest's video display back onto the system host.
Originally, a forked version of QEMU was provided to launch guests and deal with hardware emulation that isn't handled by the kernel. That support was eventually merged into the upstream project. There are now numerous Virtual Machine Monitors (VMMs) which can utilise the KVM interface including kvmtool, crosvm and Firecracker and numerous specialised VMMs build with frameworks such as rust-vmm.
Internally, KVM uses SeaBIOS as an open source implementation of a 16-bit x86 BIOS.[24]
Features
KVM has had support for hot swappable vCPUs,[25] dynamic memory management,[26] and Live Migration since February 2007.[27][28] It also reduces the impact that memory write-intensive workloads have on the migration process.[29]
Emulated hardware
KVM itself emulates very little hardware, instead deferring to a higher level client application such as QEMU, crosvm, or Firecracker for device emulation.
Kimchi– web-based virtualization management tool for KVM
Virtual Machine Manager– supports creating, editing, starting, and stopping KVM-based virtual machines, as well as live or cold drag-and-drop migration of VMs between hosts.
Proxmox Virtual Environment– an open-source virtualization management package including KVM and LXC. It has a bare-metal installer, a web-based remote management GUI, a HA cluster stack, unified storage, flexible network, and optional commercial support.
OpenQRM– management platform for managing heterogeneous data center infrastructures
GNOME Boxes– Gnome interface for managing libvirt guests on Linux
oVirt– open-source virtualization management tool for KVM built on top of libvirt