Modern operating systems (OSs) are the foundation of our software stacks. Most OS code consists of device drivers -- code that controls devices like keyboards and disks -- yet drivers are complex, stagnant, poorly written, and are responsible for most OS crashes and bugs. Worse, driver frameworks haven't been re-examined for decades, holding back OS innovation.
We are building "driverless OSs," in which drivers are completely removed from the OS. We are replacing complex, low-level device interconnects (like PCI) with commodity, high-speed networks (like USB or Ethernet). With this, drivers become high-level, simple services that act as an RPC layer between OS frameworks and the devices themselves.
We are prototyping two driverless OSs. Our first, called ND, is retrofitted into Linux and is our vehicle for exploring the relationship between the driverless approach and modern multicore hardware. The only part of ND that needs conventional interrupt-driven code is the network driver; as a result, we can eliminate complexity like interrupt-context code and synchronization.
Our second, called browserOS, treats drivers and frameworks as untrusted Web programs. "Web drivers" are written in JavaScript or compiled Native Client code, and are downloaded and executed on-demand by the browser. Web services push Web drivers to clients to interact safely with client-side devices in an OS-agnostic manner.
The expected impact of our work is (a) to make OSs simpler, safer, and more robust, (b) to accelerate the convergence of Web browsers and OSs, and (c) to facilitate new architectural innovations in operating systems.