I noticed when using virsh that VMs are referred to as "domains". Why are they called domains instead of Virtual Machines?

$ virsh

virsh # help
 Domain Monitoring (help keyword 'monitor'):
    domblkerror                    Show errors on block devices
    domblkinfo                     domain block device size information
    domblklist                     list all domain blocks
    domblkstat                     get device block stats for a domain
    domcontrol                     domain control interface state
    domif-getlink                  get link state of a virtual interface
    domifaddr                      Get network interfaces' addresses for a running domain
    domiflist                      list all domain virtual interfaces
    domifstat                      get network interface stats for a domain
    dominfo                        domain information
    dommemstat                     get memory statistics for a domain
    domstate                       domain state
    domstats                       get statistics about one or multiple domains
    domtime                        domain time
    list                           list domains

virsh # list --all
 Id    Name                           State
 -     centos_vagrant_test_test_vm    shut off
 -     collectd01                     shut off
 -     grafana01                      shut off
 -     influxdb01                     shut off
 -     JobDBWin7_Stable               shut off
 -     OpenWRT_Red                    shut off
  • 1
    Not an answer, but "virtual machine" itself is ambiguous as well. Dec 2, 2017 at 0:02
  • 5
    qemu doesn't call them domain. libvirt does. virsh is the CLI to libvirt, a management interface to a number of hypervisors including qemu/kvm, xen or virtualbox. Jan 9, 2019 at 19:59

5 Answers 5


They're not kvm exclusive terminology (xen also refers to machines as domains). A hypervisor is a rough equivalent to domain zero, or dom0, which is the first system initialized on the kernel and has special privileges. Other domains started later are called domU and are the equivalent to a guest system or virtual machine.

The reason is probably that both are very similar as they are executed on the kernel that handles them.

  • When I run list --all (which is listed in help under DOMAINS, see above) I get a list of all of my virtual machines.
    – leeand00
    Dec 2, 2017 at 1:31
  • Yes, because the dom0 is where you're running that command from. It won't be considered a VM...
    – Zip
    Dec 2, 2017 at 2:05

To reiterate as others have, it's virsh/libvirt that calls virtual machines domains--not QEMU/KVM.

The fact that Xen originally called virtual machines domains gives a great historical perspective, but it still begs the question--why?

I think the answer follows logically from the definition of domain.

Original definition of domain: "an area of territory owned or controlled by a particular ruler or government."

In computer networking, a domain name "defines a realm of administrative autonomy, authority or control within the Internet"

So a domain is just a subset within a larger space. In computer networking, it is a subset of an address space.

And in computer virtualization, a domain (virtual machine) is a subset of hardware resource space.

To put it another way, a host is just a server containing a pool of resources (CPU processing power, memory, storage, etc.). A virtual machine is a subset of that pool of resources, dedicated to running an operating system or application.

enter image description here


According to Xen wiki (https://wiki.xen.org/wiki/Domain),

A domain is one of the virtual machines that run on the system. Domain0 is the first domain started by the Xen hypervisor at boot, and will be running a Linux OS.

The Xen project has greatly influenced the developers of virtualization tools. This name certainly comes from there.

  • 6
    libvirt (which the OP confuses with qemu/kvm) was initially for xen. Support for qemu was added later, which is why libvirt's naming convention follows xen's Jan 9, 2019 at 21:13

I don't think they're called that in KVM or QEMU.

The QEMU manual does mention "domains" in the context of Unix domain sockets, DNS domains and Xen domains, but that terminology isn't related to QEMU itself. The manual seems to call the program itself a "system emulator", and refers to the virtual machines as just "guests" on multiple occasions.

The KVM website then mentions "running virtual machines". Virtual machines and guests are also mentioned in the original announcement. I can't see any mention of domains.


This article has great explanation for the terminology. In short:

  • Domain is a set of hardware resources.
  • Guest is a virtualized OS running within the domain.
  • Virtual Machine is the Guest OS plus some application software.

These terms mean almost the same thing, so they are used interchangeably. Libvirt is probably more focused on assigning resources, not what software will run inside, so it calls them domains.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .