The Communications of the ACM have just published an article that Dave Scott and I wrote providing a broader background on the concept of Unikernels that we’ve been working on since about 2003, when we started building Melange and the Xen toolstack. You can read either the print article (requires an ACM subscription) or the open access version on the ACM Queue. There’s been some interesting discussion about it already online:
On Reddit, a number of queries about how it fits into the space of containers, microkernels and other experimental operating systems.
Two of the most interesting bits of feedback for me personally came from Butler Lampson (via Jon Crowcroft) and Robert Harper, two computer scientists who have made key contributions to operating systems and programming languages and provided some broader perspective.
Butler Lampson points out (edited for the web):
I found the Mirage work quite interesting: a 21st century version of things that we did at Xerox in the 1970s. Of course the application domain is quite different, and so is the whole-program optimization. And we couldn’t afford garbage collection, so freeing storage was not type-safe. But there are lots of interesting parallels.
The “OS as libraries” idea was what made it possible to fit big applications into the Alto’s 128k bytes of memory:
Lampson and Sproull, An open operating system for a single-user machine, ACM Operating Systems Rev. 11, 5 (Dec. 1979), pp 98-105. ACM.
The use of strong type-checking and interfaces for an OS was pioneered in [Mesa](http://en.wikipedia.org/wiki/Mesa(programming_language%29) and [Pilot](http://en.wikipedia.org/wiki/Pilot(operating_system%29):
Lauer and Satterthwaite, The impact of Mesa on system design, Proc. 4th ICSE, Munich, Sep. 1979, pp 174-182.
Redell et al, Pilot: An Operating System for a Personal Computer, Comm. ACM 23, 2 (Feb 1980), pp 81-92 (from 7th SOSP, 1979). ACM
Robert Harper correctly points out some related work that was missing from our CACM article:
FoxNet is an implementation of the standard TCP/IP networking protocol stack using the Standard ML (SML) language. It was part of a wide-reaching project at CMU in the 1990s that made seminal contributions in proof-carrying code and typed intermediate languages, among many other things. The FoxNet stack was actually one of my big inspirations for wanting to build Mirage, since the elegance of using functors as a form of dependency injection into a system as complex as an OS and application stack is very desirable, and the reason we chose to build Mirage in ML instead of another, less modular, language.
Ensemble (website now offline but here’s a SOSP 1999 paper) is a group communication system written in OCaml, developed at Cornell and the Hebrew University. For an application builder, Ensemble provides a library of protocols that can be used for quickly building complex distributed applications For a distributed systems researcher, Ensemble is a highly modular and reconfigurable toolkit: the high-level protocols provided to applications are really stacks of tiny protocol “layers”, each of whose can be modified or rebuilt to experiment.
Both Ensemble and FoxNet made strong echoes throughout the design of Mirage (and its precursor software such as Melange in 2007). The Mirage command-line tool uses staged-computation to build a concrete application out of functors, and we are making this even more programmable via a new combinator-based functor types library that Thomas Gazagnaire built, and also experimenting with higher kinded polymorphic abstractions.
My thanks to Butler Lampson and Robert Harper for making me go re-read their papers again, and I’d like to leave you with Malte Schwarzkopf’s OS Reading Group papers for other essential reading in this space. Many more citations immediately relevant to Mirage can also be found in our ASPLOS 2013 paper.