Saw a fun talk at the Eurosys conference today on Otherworld, a facility that allows applications to recover after an OS crash. It included a demo of an editor running over Linux running over a virtual machine. Fault injected into Linux, which crashes, reboots, and restores the editor to its previous state. Nifty. The authors point out how nice this would be for a very stateful app — say mysql running on in-memory files. (Fast and easy, right? Though clearly not a good idea relative to a real main memory db with smart logging, e.g. TimesTen, in terms of performance or reliability.)
But this got me thinking about the datacenter software stack we’re starting to take for granted, and I no longer see why we need an operating system at all.
Consider the stack:
- the virtual machine monitor (vmm) isolates and manages the hardware in a minimalist fashion, exposing the x86 interface as a programming model
- the OS “manages” the virtualized hardware, and provides a unix-like programming model for low-level development, including process models, memory models, and system libraries.
- for a large class of applications, a language runtime (jvm, ruby interpreter, etc) bridges the os programming model to a higher-level model for programmers, including threading models, garbage collection, and system library wrappers
- app code in a high-level language (java, ruby, python) captures the intent of the application programmer
Pretty thick software stack. And it’s clear which piece of it should be disintermediated: the OS, which no longer “operates” anything real, it just provides unix and libc as a programming model for developers of language runtimes. That’s fine, but there are only a handful of those runtimes and they could be ported to run on the vmm (is that any harder than embedded java vms?). Once that’s done, who needs an os? If unix/libc has any use left at all, its to play the role of a “cvm” for people who want to run legacy C code.
Now this is a bit reductive and it’s easy to quibble about ways that it ignores certain aspects of current practice. Still, projecting forward 5 or 10 years, it seems doubtful to me that such stuff matters. If we’re still running Linux in the cloud by then, it will be a vestigial burden that nobody really wants or needs. My guess is that language runtime engineers will do away with it — or much of it. (And maybe Intel and the vm folks can get rid of the more baroque parts of the x86 interface too…)
I’ve been discussing this in the Linux world, but it seems even more urgent for Microsoft, and I’m sure the vmware/emc/cisco cabal makes them very nervous. Not to mention google app engine.
What do you think? Is the next evolutionary step a vmware-native jvm, and is that easy? Should we build our Bloom interpreter to run natively on xen?