Unikraft: Building Powerful Unikernels Has Never Been Easier!

By February 21, 2020February 24th, 2020Announcements, Technical

Two years ago, the Xen Project introduced Unikraft (http://unikraft.org) as an incubation project. Over the past two years, the Unikraft project has seen some great momentum. Since the last release, the community has grown about 20% and contributions have diversified a great deal. Contributions from outside the project founders (NEC) now make up 63% of all contributions, up from about 25% this time last year! In addition, a total of 56,739 lines were added since the last release (0.3).

As a quick primer, Unikraft provides an easier way to build unikernels, compiling source code into a lean operating system that includes functionality specifically tailored to the needs of the application logic. Unikernels, being ultra-lightweight and small,  are ideal for not just cloud applications (Unikraft supports deployment on AWS, GCP and Digital Ocean) but also for fields where resources may be constrained or safety is critical. In fact, Unikraft is not only able to produce extremely efficient virtual machines, but in ongoing work also specialized OCI/Docker containers and even bare metal ARM64 images ideally suited for IoT and embedded devices. On a Raspberry Pi 3 B+, for example, Unikraft is able to boot in under 10 milliseconds.

Over the past two years, the Unikraft team has made great progress in simplifying the process of building unikernels through a unified and customizable code base. Unikraft has seen a major increase in features and functionality since the last release. Some of the notable additions for this release (0.4 Rhea) are:

  • Cloud-based deployments (GCP, AWS, Digital Ocean)
  • Native support for many programming languages and language environments: C++, Python/Micropython, Go, Lua, Web Assembly (WAMR), JavaScript (Duktape), Ruby
  • Improvements to the ARM64 platform, including virtio and multi-thread support
  • Basic musl support
  • pthread and TLS support
  • Trace point sub-system
  • Filesystem support (9pfs, devfs, ramfs)
  • Applications: Click, SQLite, nginx, redis
  • Support for external platforms, and in particular solo5 
  • Additional lib ports: uuid, http-parser, intel-intrinsics, openssl, boost, protobuf, etc.
  • Lots of other features and bug fixes

In addition, with this release we’re introducing the kraft tool which greatly simplifies the process of building and running Unikraft-built unikernels; check it out at https://github.com/unikraft/kraft (a special thank you goes to Alex Jung and Mujahid Ali for creating this tool).

As with every release, we are extremely grateful to those who contributed and continue to contribute to this project; below are the contributors (based on Signed-off-by tags):

Costin Lupu                     270 (22.0%)

Vlad-Andrei BĂDOIU (78692)      155 (12.7%)

Simon Kuenzer                   127 (10.4%)

Felipe Huici                     98 (8.0%)

Yuri Volchkov                    75 (6.1%)

Sharan Santhanam                 74 (6.0%)

Florian Schmidt                  69 (5.6%)

Jia He                           60 (4.9%)

Wei Chen                         45 (3.7%)

Mihai Pogonaru                   37 (3.0%)

Gaulthier Gain                   36 (2.9%)

Cristian Banu                    31 (2.5%)

Charalampos Mainas               29 (2.4%)

Roxana Nicolescu                 28 (2.3%)

Jianyong Wu                      15 (1.2%)

Andrei Gogonea                   12 (1.0%)

Hugo Lefeuvre                    11 (0.9%)

Bogdan Lascu                     10 (0.8%)

Teodora Serbanescu                8 (0.7%)

Stefan Teodorescu                 8 (0.7%)

Santiago Pagani                   8 (0.7%)

Alexander Jung                    7 (0.6%)

Haibo Xu                          7 (0.6%)

In addition, we would like to thank all of the reviewers who spent significant amounts of time upstreaming code to Unikraft:

Felipe Huici                    356 (33.3%)

Costin Lupu                     189 (17.7%)

Simon Kuenzer                   158 (14.8%)

Sharan Santhanam                 90 (8.4%)

Vlad-Andrei BĂDOIU (78692)       61 (5.7%)

Florian Schmidt                  56 (5.2%)

Stefan Teodorescu                39 (3.6%)

Roxana Nicolescu                 27 (2.5%)

Gaulthier Gain                   24 (2.2%)

Santiago Pagani                  19 (1.8%)

Charalampos Mainas               17 (1.6%)

Yuri Volchkov                    13 (1.2%)

Jia He                           11 (1.0%)

Mihai Pogonaru                    5 (0.5%)

Alexander Jung                    3 (0.3%)

Julien Grall                      1 (0.1%)

Beyond the features of this 0.4 Rhea release, we are excited to give you a sneak peek into the features that are likely to make it into the next release:

  • Additional external platform support (e.g., Amazon Firecracker)
  • Bare metal support (ARM64/Raspberry Pi and others)
  • OCI/Docker support: have Unikraft generate extremely specialized containers
  • Binary compatibility: run unmodified Linux ELFs directly on Unikraft

Finally, the Unikraft team’s Simon Kuenzer recently gave a talk at FOSDEM titled “Unikraft: A Unikernel Toolkit”. Simon, a senior systems researcher at NEC Labs and the lead maintainer of Unikraft, spoke all about Unikraft and provided a comprehensive overview of the project, where it’s been and what’s in store. 

Want to learn more about Unikraft and connect with the Xen community at large? Registration for the annual Xen Project Developer and Design Summit is open now! Check out information on sponsorships, speaking opportunities and more here.