Server computers often utilize device drivers to communicate with different devices. Generally, a device driver executes from an operating system running on a host device in the server computer. In most instances, the device driver is specific to the device. For example, in a non-virtualized environment, the operating system running on the server computer may execute a specific network device driver to communicate with a network interface card (NIC) from a particular vendor. Generally, the device driver may include proprietary or device specific code for different operating system vendors for each device type. In most operating systems the device drivers execute at the same privilege level as the kernel of the operating system or at least at a very high privilege level within the operating system. Therefore, the stability of the operating system is dependent on the stability and maturity of the device drivers running as part of the operating system.
As new devices are introduced in the market place, supporting the vast number of device drivers in the operating systems becomes a challenging task, adversely affecting the ability for device vendors to rapidly introduce products. The vendor for the device driver faces the challenge of developing and providing a stable device driver for each operating system vendor and influencing their ecosystem to include the vendor's device driver. For example, the device drivers executing from the Linux® operating system or the Windows® operating system for communicating with the same NIC may be different. This problem is further exacerbated in a virtualized environment, where multiple operating systems may execute on the same server system and interact with multiple I/O devices.