- No retesting needed - certified and tested towards the operating system:
Applications that use a standard API only, like Java or standard library functions that don't need and exploit the visibility of the underlying (virtualized) hardware. - Retesting recommended - certified and tested towards the operating system:
Applications that do interact with virtualized hardware to a certain extend e.g. accessing raw devices. - Retesting and some coding needed - certified and tested towards the operating system and the virtualization layer:
Applications that actively interact with the hypervisor, e.g. by vmcp commands under z/VM. They then needs an equivalent implementation of that kind of functionality for every type of virtualization. Other examles are the use of zLinux hypfs (hypervisor file system) or using the hypervisor details surfaced in /proc/sysinfo. - Retesting and additional code for the hypervisor needed - certified and tested towards the operating system and the virtualization layer:
Applications that need hooks and special interfaces into the hypervisor e.g. for monitoring or systems management. Every new hypervisor will require new code as e.g. the reported performance metrics and systems management interfaces are different
KVM has the concept of new virtual devices with new device names, so some products from #1 are going to slip into category #2.
(updated 4/15/2015)