Info: Comparison of rump kernels with similar technologies

burka edited this page Nov 25, 2015 · 4 revisions
Clone this wiki locally

This page compares rump kernels to other projects and products in the domain of similar or seemingly similar technologies. The intent is to help readers familiar with other projects and products better understand rump kernels.

You may also find our FAQ relevant.

General-purpose operating systems (e.g. Linux, *BSD, Windows, ...)

A general purpose operating system is the whole kitchen sink and a bit of the toolshed too: necessary drivers to support applications, resource sharing and weak isolation between application, support for multiple users, tools for most purposes, and so forth.

Rump kernels do not provide everything needed to build a general purpose operating system, only the drivers -- otherwise "rump kernels" would be known simply as "kernels". That said, a rump kernel can be used as part of a general purpose operating system kernel to provide drivers.

Hypervisors a.k.a. virtual machine monitors (Xen, KVM, Hyper-V, ...)

Hypervisors provide a virtual hardware-like platform with strong isolation and resource sharing between guests. They also provide I/O resources for the guests, either in form of pass-through or emulated hardware devices, or as virtual I/O devices.

Rump kernels are not intended to function as hypervisors.

Unikernels

Unikernels are single address space systems which bundle up an application and a selection of system components relevant for that particular application into a single image. The lightweight image can then be run on the cloud or on hardware, depending on what driver components are available for that particular unikernel system.

One approach for unikernel implementation is to use a single language such as Erlang, Haskell or OCaml and a clean-slate implementation of everything. The other approach is for the unikernel to target software which runs on current operating systems (sometimes also referred to as "legacy" software in a unikernel context).

The rump kernel project provides the Rumprun unikernel, which optionally supports a POSIX'y application interface and has been tested to run plenty of unmodified real world software such as web servers and databases (see rumprun-packages). Over 99% of the code in the Rumprun stack is used unmodified from upstream, thereby providing high confidence that things will also work.

If you want to use a unikernel, which one to use? If your application is written to work on a language-based unikernel, and additionally the unikernel supports the environment you want to deploy in, you should go for the specialized unikernel. You will get benefits which are not possible to deliver on a more general platform. On the other hand, if you want to run some arbitrary off-the-internet software as a unikernel, and do not feel like rewriting that software, you might find the software will just work on Rumprun.

Docker

Docker is a method for wrapping up an application into an easy-to-deploy bundle for the cloud. When provisioned, the application runs on a platform emulating a full OS, typically realized by using containers (a.k.a. OS namespace virtualization).

Rump kernels could be used as the technology enabling application virtualization under a Docker-like management suite. Building such a toolset has not yet been undertaken, to the best of our knowledge. See unikernels meet docker for a first approach.

Unlike Docker, application bundles constructed of rump kernels do not depend on a full OS installation, and can be shipped as self-contained megabyte-sized images. Since a rump kernel image includes less code than a full OS image, there is also less chance of shipping code with latent security vulnerabilities.

Driver kits (e.g. DDEKit, lwIP, OSKit, ...)

Driver kits provide easy-to-integrate drivers, with the set of drivers varying per driver kit. For example, lwIP provides a compact TCP/IP stack driver. In some cases, driver kits are constructed by porting and releasing a snapshot of an upstream OS kernel, and in some cases the whole kit is written from scratch.

Rump kernels essentially provide a driver kit. There are qualities which make rump kernels stand apart from other driver kits:

  • Rump kernels can provide a POSIX and libc interface for applications. There is excellent support for running existing applications which would traditionally require a full operating system.
  • Rump kernels are available under the BSD license, making them free for any use.
  • Rump kernels use the NetBSD anykernel architecture to provide unmodified NetBSD kernel drivers instead of porting a snapshot of the upstream drivers. The anykernel approach avoids porting errors and gives the user the ability to choose the vintage of the upstream drivers.