The libvirt public API delegates its implementation to one or more internal drivers, depending on the connection URI passed when initializing the library. There is always a hypervisor driver active, and if the libvirt daemon is available there will usually be a network and storage driver active.