Unikernels: library operating systems for the cloud

We present unikernels, a new approach to deploying cloud services via applications written in high-level source code. Unikernels are single-purpose appliances that are compile-time specialised into standalone kernels, and sealed against modification when deployed to a cloud platform. In return they offer significant reduction in image sizes, improved efficiency and security, and should reduce operational costs. Our Mirage prototype compiles OCaml code into unikernels that run on commodity clouds and offer an order of magnitude reduction in code size without significant performance penalty. The architecture combines static type-safety with a single address-space layout that can be made immutable via a hypervisor extension. Mirage contributes a suite of type-safe protocol libraries, and our results demonstrate that the hypervisor is a platform that overcomes the hardware compatibility issues that have made past library operating systems impractical to deploy in the real-world.

[1]  Chuck Silvers,et al.  UBC: An Efficient Unified I/O and Memory Caching Subsystem for NetBSD , 2000, USENIX Annual Technical Conference, FREENIX Track.

[2]  Andrew Warfield,et al.  Safe Hardware Access with the Xen Virtual Machine Monitor , 2007 .

[3]  Reynald Affeldt,et al.  Formal network packet processing with minimal fuss: invertible syntax descriptions at work , 2012, PLPV '12.

[4]  Yuan Yu,et al.  Dryad: distributed data-parallel programs from sequential building blocks , 2007, EuroSys '07.

[5]  Sanjay Ghemawat,et al.  MapReduce: Simplified Data Processing on Large Clusters , 2004, OSDI.

[6]  Thomas Gazagnaire,et al.  OXenstored: an efficient hierarchical and transactional database using functional programming with reference cell comparisons , 2009, ICFP.

[7]  Edoardo Biagioni A structured TCP in standard ML. , 1994, SIGCOMM 1994.

[8]  Jun Zhu,et al.  Breaking up is hard to do: security and functionality in a commodity hypervisor , 2011, SOSP.

[9]  George C. Necula,et al.  CCured: type-safe retrofitting of legacy code , 2002, SIGP.

[10]  Robin Fairbairns,et al.  The Design and Implementation of an Operating System to Support Distributed Multimedia Applications , 1996, IEEE J. Sel. Areas Commun..

[11]  Hovav Shacham,et al.  On the effectiveness of address-space randomization , 2004, CCS '04.

[12]  James R. Larus,et al.  Sealing OS processes to improve dependability and safety , 2007, EuroSys '07.

[13]  Emmanuel Chailloux,et al.  Les microcontrôleurs PIC programmés en Objective Caml , 2011 .

[14]  Mark P. Jones,et al.  A principled approach to operating system construction in Haskell , 2005, ICFP '05.

[15]  Steven Hand,et al.  Improving Xen security through disaggregation , 2008, VEE '08.

[16]  Jay Lepreau,et al.  The Flux OSKit: a substrate for kernel and language research , 1997, SOSP.

[17]  Rob Sherwood,et al.  OFLOPS: An Open Framework for OpenFlow Switch Evaluation , 2012, PAM.

[18]  Jérôme Vouillon,et al.  Lwt: a cooperative thread library , 2008, ML '08.

[19]  Donald E. Porter,et al.  Rethinking the library OS from the top down , 2011, ASPLOS XVI.

[20]  Adrian Schüpbach,et al.  The multikernel: a new OS architecture for scalable multicore systems , 2009, SOSP '09.

[21]  Alan L. Cox,et al.  Maestro: A System for Scalable OpenFlow Control , 2010 .

[22]  David J. Scott,et al.  Melange: creating a "functional" internet , 2007, EuroSys '07.

[23]  Andres Löh,et al.  NixOS: A purely functional Linux distribution , 2010, J. Funct. Program..

[24]  Niels Provos,et al.  Preventing Privilege Escalation , 2003, USENIX Security Symposium.

[25]  Dilma Da Silva,et al.  Libra: a library operating system for a jvm in a virtualized execution environment , 2007, VEE '07.

[26]  Bill Childers Build your own cloud with Eucalyptus , 2010 .

[27]  Michael Norrish,et al.  seL4: formal verification of an OS kernel , 2009, SOSP '09.

[28]  Robert Grimm,et al.  Application performance and flexibility on exokernel systems , 1997, SOSP.

[29]  Xavier Leroy,et al.  Formal certification of a compiler back-end or: programming a compiler with a proof assistant , 2006, POPL '06.

[30]  Martín Casado,et al.  NOX: towards an operating system for networks , 2008, CCRV.

[31]  Richard Sharp,et al.  Using functional programming within an industrial product group: perspectives and perceptions , 2010, ICFP '10.

[32]  Brian N. Bershad,et al.  Extensibility safety and performance in the SPIN operating system , 1995, SOSP.

[33]  Steven M. Hand,et al.  Self-paging in the Nemesis operating system , 1999, OSDI '99.

[34]  Nicolas Oury,et al.  Observational Equivalence and Program Extraction in the Coq Proof Assistant , 2003, TLCA.

[35]  Jeff Lewis Cryptol: specification, implementation and verification of high-grade cryptographic applications , 2007, FMSE '07.

[36]  James R. Larus,et al.  Singularity: rethinking the software stack , 2007, OPSR.

[37]  Jon Crowcroft,et al.  Turning Down the LAMP: Software Specialisation for the Cloud , 2010, HotCloud.

[38]  Larry L. Peterson,et al.  Making paths explicit in the Scout operating system , 1996, OSDI '96.

[39]  Vitaly Shmatikov,et al.  The most dangerous code in the world: validating SSL certificates in non-browser software , 2012, CCS.

[40]  Dawson R. Engler,et al.  Exokernel: an operating system architecture for application-level resource management , 1995, SOSP.

[41]  George C. Necula,et al.  CIL: Intermediate Language and Tools for Analysis and Transformation of C Programs , 2002, CC.

[42]  Andrew Warfield,et al.  Facilitating the Development of Soft Devices , 2005, USENIX Annual Technical Conference, General Track.