KVM Stable Guest ABI Design Notes

See Features/KVM Stable Guest ABI. This page offers some historical background on the solutions considered.

= Solution 1 :: Don't Change the ABI =

An obvious solution to the problem is to not change the default ABI in QEMU. New features could be added to QEMU, but they would have to be explicitly requested.

Pros:


 * 1) Simple for QEMU and libvirt
 * 2) Possible to implement for Fedora 12

Cons:


 * 1) Makes it more difficult for new guests to benefit from QEMU improvements

= Solution 2 :: ABI Version Number =

The idea here is that when a guest is run for the first time, it uses the latest available ABI and libvirt should take not of the ABI version number for future use.

Various options for specifying the ABI version have been suggested (e.g.,   or an item in a config file). How libvirt would query for the latest ABI version would probably depend on what option for selecting a version is settled on, but it could be as simple as a  symlink.

Pros:


 * 1) Simple, both for QEMU and libvirt
 * 2) Possible to implement for Fedora 12

Cons:


 * 1) Makes back-porting of ABI changes to older versions more difficult

= Solution 3 :: Device Versions in a Config File =

Similar to solution 2, except each device has a version number which can be specified in a config file.

See also solution 3 in Features/KVM Stable PCI Addresses for how libvirt would need to be able to merge guest configuration changes into a qemu config file.

Pros:


 * 1) Also solves the stable PCI addresses issue

Cons:


 * 1) Significant work still required in QEMU
 * 2) Very complex solution for libvirt
 * 3) Highly unlikely to be in place for Fedora 12

= Solution 4 :: Device Versions in a Compat Hints File =

Similar again, except a monitor command would be used to dump the device versions to an opaque file format. This would mean libvirt would not need to modify a configuration file.

See also solution 4 in Features/KVM Stable PCI Addresses.

Pros:


 * 1) Also solves the stable PCI addresses issue
 * 2) Straightforward solution for libvirt

Cons:


 * 1) Upstream not keen on adding both compat hints and machine description formats
 * 2) Quite unlikely to be ready for Fedora 12