On Genode, each device driver is a normal program communicating with its client
via inter-process communication. Apart from the benefits regarding fault
isolation, this allows for having multiple implementations of the same
device-driver interface. For an application using such an interface, the
implementation of the interface is completely transparent. As an example, we can
provide a custom block device driver to the Linux kernel. But our driver does not
access any real block device but instead fetches data via HTTP from a
web server.
This enables us to stream a boot image of a complete Linux distribution on demand
via the internet. Of course the boot time depends on the speed of the internet
connection and on the performance of the web server providing the image.