Back in 2017, Unikraft started as a research project at NEC Laboratories Europe GmbH (NLE) in Heidelberg, Germany. The initial trigger was our strong fascination with unikernels and their fantastic performance benefits: tiny memory footprints (hundreds of KBs or a few MBs), boot times comparable to those of processes or throughput in the range of 10-40 Gb/s, among many other attributes.
However, even though the potential of unikernels was (and is) great, there hadn’t (and hasn’t) been a massive adoption of unikernels. Why? Development time!
For example, developing Minipython, a MicroPython unikernel, took the better part of three months to put together and test. ClickOS, a unikernel for NFV, was the result of a couple of years of work.
What’s particularly bad about this development model, besides the considerable time spent, is each unikernel was (and for the most part still is) basically a throwaway: every time developers wanted to create a new unikernel targeting a different application, they’d have to start from scratch. Essentially, there was (and is) a lack of shared research and development when it comes to building unikernels.
And that’s how it all started! We wanted to change this, so we started to re-use the work and created a separate repo consisting of a toolstack hat would contain functionality useful to multiple unikernels — mostly platform-independent versions of newlib and lwip (a C library and network stack intended for embedded systems).
This got us thinking that we should take our work to a much bigger level.
We asked the question: Wouldn’t it be great to be able to very quickly choose, perhaps from a menu, the bits of functionality that we want for a unikernel, and to have a system automatically build all of these pieces together into a working image? It would also be great if we could choose multiple platforms (e.g., Xen, KVM, bare metal) without having to do additional work for each of them.
The result of that thought process is Unikraft. Unikraft decomposes operating systems into elementary pieces called libraries (e.g., schedulers, memory allocators, drivers, filesystems, network stacks, etc.) that users can then pick and choose from, using a menu to quickly build images tailored to the needs of specific applications.
Since 2017 we have already come a long way. Unikraft has become a vibrant Open Source community on GitHub, we are supported by Xen project and The Linux Foundation and we’re continuing to make the technology even better every day.
Can’t wait to see what’s coming next! Will you be a part of it?