Kernel-based Virtual Machine (KVM) is afree and open-sourcevirtualization module in theLinux kernel that allows thekernel to function as ahypervisor. It was merged into themainline Linux kernel in version 2.6.20, which was released on February 5, 2007.[1] KVM requires a processor withhardware virtualization extensions, such asIntel VT orAMD-V.[2] KVM has also been ported to other operating systems such asFreeBSD[3] andillumos[4] in the form of loadable kernel modules.
KVM was originally designed forx86 processors but has since beenported toz/Architecture,[5][6]PowerPC,[5]IA-64,[5] andARM.[7][8][9] The IA-64 port was removed in 2014.[10]
KVM supportshardware-assisted virtualization for a wide variety of guest operating systems includingBSD,Solaris,Windows,Haiku,ReactOS,Plan 9,AROS,macOS, and even other Linux systems.[11][12] In addition, Android 2.2,GNU/Hurd[13] (Debian K16),Minix 3.1.2a, Solaris 10 U3 andDarwin 8.0.1, together with other operating systems and some newer versions of these listed, are known to work with certain limitations.[14]
Additionally, KVM providesparavirtualization support for Linux,OpenBSD,[15] FreeBSD,[16]NetBSD,[17] Plan 9[18] and Windows guests using the VirtIOAPI.[19] This includes a paravirtualEthernet card, disk I/O controller,[20]balloon driver, and aVGA graphics interface usingSPICE orVMware drivers.
Avi Kivity began the development of KVM in mid-2006 atQumranet, a technologystartup company[21] that was acquired byRed Hat in 2008.[22]
KVM surfaced in October 2006[23] and was merged into the Linux kernel mainline in version 2.6.20, released on 5 February 2007.[1]
KVM is maintained by Paolo Bonzini.[24]

KVM provides device abstraction but no processor emulation. It exposes the/dev/kvm interface, which a user mode host can then use to:
Originally, a forked version ofQEMU was provided to launch guests and deal with hardware emulation that is not 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 andFirecracker and numerous specialised VMMs built with frameworks such as rust-vmm.
Internally, KVM usesSeaBIOS as an open source implementation of a 16-bit x86BIOS.[26]
KVM has had support forhot swappable vCPUs,[27] dynamic memory management,[28] andLive Migration since February 2007.[29][30] It also reduces the impact that memory write-intensive workloads have on the migration process.[31]
KVM itself emulates very little hardware, instead deferring to a higher level client application such asQEMU, crosvm, orFirecracker for device emulation.
KVM provides the following emulated devices:

The kernel-mode component of KVM is a part of theLinux kernel, itself licensed underGNU General Public License, version 2.[33]