Here’s a detailed comparison of Incus and libvirt, focusing on their architecture, use cases, feature sets, and management models:
1. Overview
Incus
- A system container and virtual machine manager, forked from LXD in 2023 by the community after Canonical changed LXD’s governance.
- Developed under the Linux Containers project (same group behind LXC).
- Provides unified management for system containers (via LXC) and virtual machines (via QEMU) using a consistent API and CLI.
- Designed for ease of use, with integrated image management, networking, storage pools, clustering, and role-based remote management.
libvirt
- A virtualization API library and daemon that provides a common management layer over multiple hypervisors (QEMU/KVM, Xen, VMware, Hyper-V, etc.).
- It’s a middleware used by tools like
virsh, virt-manager, and OpenStack’s Nova.
- Does not itself provide containers — it’s focused on virtual machines.
- Provides a consistent interface (XML-based) for VM lifecycle management, networks, and storage.
2. Architecture and Layers
| Aspect |
Incus |
libvirt |
| Core type |
System management daemon (incusd) with REST API |
Library (libvirt.so) + daemon (libvirtd) |
| Hypervisors / backends |
LXC for containers, QEMU for VMs |
Multiple: QEMU/KVM, Xen, VirtualBox, VMware ESXi, etc. |
| Control interface |
incus CLI / REST API / UI tools |
virsh CLI / Libvirt API / virt-manager / higher-level tools |
| Management granularity |
Manages full container and VM lifecycle, plus networking & storage as first-class concepts |
Manages VMs and their devices; other tools (e.g., libvirt-network, storage pools) are available but less integrated |
3. Functionality Scope
| Area |
Incus |
libvirt |
| Abstraction level |
High-level integrated system manager |
Low-level hypervisor abstraction layer |
| Containers |
Yes (system containers via LXC) |
No |
| Virtual Machines |
Yes (QEMU/KVM) |
Yes (QEMU/KVM, Xen, etc.) |
| Networking |
Built-in bridge management, OVN integration, profiles |
Virtual networks and bridges (XML definitions) |
| Storage |
Built-in storage pools (ZFS, Btrfs, LVM, Ceph, etc.) |
Storage pools and volumes defined and managed separately |
| Clustering |
Native clustering across nodes |
Not inherent; needs external orchestration (e.g., oVirt, OpenStack, etc.) |
| Image management |
Integrated image servers, simplified deployment of OS images |
You manage disk images manually or via higher-level tools |
| REST API |
Yes (fully featured, versioned, well-structured) |
No native REST (though libvirt-daemon-rest exists as add-on) |
4. Typical Use Cases
| Use Case |
Recommended tool |
| Lightweight system containers (like virtual machines but faster) |
Incus |
| Unified management of both containers and VMs on the same host |
Incus |
| Simple developer/testing environments |
Incus |
| Integration into orchestration platforms (OpenStack, custom tools) |
libvirt |
| Managing VMs across different hypervisors (KVM, Xen, VMware, etc.) |
libvirt |
| Building your own VM management tool via API bindings |
libvirt |
| High-level, ready-to-use virtualization environment |
Incus |
5. Performance and Complexity
- Incus aims for ease of use and integration. It hides much of the complexity of setting up storage, networks, and images.
- libvirt gives you fine-grained control but at a lower level — you often configure XML directly or rely on higher tools like virt-manager.
- For single-host or small-cluster setups, Incus is faster to get running.
- For large-scale environments, libvirt is often integrated into higher-level systems (e.g., OpenStack, oVirt).
6. Comparison Summary
| Feature |
Incus |
libvirt |
| Container support |
✔️ |
❌ |
| VM support |
✔️ (QEMU/KVM) |
✔️ (many backends) |
| API |
REST-based |
C API / bindings |
| CLI tools |
incus |
virsh, virt-manager, etc. |
| Clustering |
Built-in |
Requires orchestration layer |
| Ease of setup |
Very easy |
Moderate to advanced |
| Target user |
Sysadmins/devs wanting simple virtualization |
Developers/integrators building virtualization platforms |
7. Integration Perspective
- libvirt is the foundation layer — many tools (like Incus’s VM management via QEMU) could still use libvirt internally, though Incus uses QEMU directly.
- Incus is more of a turnkey, batteries-included system that provides the full stack.
In Short
| Use Incus if you want… |
Use libvirt if you want… |
| A unified, easy-to-use system for containers and VMs |
A flexible API to manage VMs across many hypervisors |
| A single command-line and REST API for everything |
To integrate with existing tools (virt-manager, OpenStack) |
| Built-in image, network, and storage management |
Low-level control or custom orchestration |
In one sentence:
- Incus = a full-featured, high-level system manager for containers and VMs.
- libvirt = a foundational virtualization API used by other management tools.