Repo

huikang edited this page Dec 3, 2016 · 24 revisions
Clone this wiki locally

Wiki pages of repositories:

The Big Picture

As you can see from above, repo.rumpkernel.org hosts many repositories. The remainder of this page is a high-level overview of the functionality offered by the various repositories, and how they play together.

The goal of rump kernels is to provide drivers which integrate into any system via a clean, defined interface: the rump kernel hypercall interface. These drivers come from the src-netbsd repository. While the concept of rump kernels is not in any way tied to NetBSD, currently NetBSD is the only operating system kernel which is an anykernel, i.e. NetBSD supports forming rump kernels out of its drivers. In the future, we may offer src-otheros backends as well; the rest of this document assumes only src-netbsd.

To use the drivers, one needs to build the drivers. Building src-netbsd natively on NetBSD is easy, but we do not wish to limit development to NetBSD hosts. To address that, buildrump.sh provides portable versions of the necessary tools. For historical reasons, buildrump.sh also enables running rump kernels on POSIX-y hosts. No matter how you use rump kernels, you will always need src-netbsd and buildrump.sh.

In addition to drivers coming from src-netbsd, there are some special case drivers which are not included in NetBSD. One such example is the DPDK network interface driver. These specialty drivers are provided by various drv repos, e.g. drv-netif-dpdk and can be linked into rump kernels to provide access to additional features.

The Rumprun repository provides our unikernel platform. What makes it different from just the rump kernels provided by buildrump.sh? The rump kernel is just a kernel, and while it will work for in-kernel workloads such as routing, and also for applications written against the system call interfaces, a generic libc-using application will not work. Rumprun adds the libc layer along with a toolchain for compiling applications into runnable unikernels. Since rump kernels provide a near-complete POSIX-y system call interface, you can run a great deal of existing, unmodified application software using the Rumprun unikernel suite.

The relationship between the anykernel (src-netbsd), rump kernels (which are built using buildrump.sh) and the unikernel (Rumprun) is visualized by the following picture:

anyunirumpkernel

The fs-utils repo provides a tool suite for accessing file system images, e.g. ls, cp, rm etc. If you are familiar with mtools, fs-utils provides essentially the same functionality, except that it work with all file system driver backend supported by rump kernels and provides the same usage as the regular Unix tools (e.g. the 20-or-so flags of ls are available). One could call the fs-utils tools unikernels and implement them using Rumprun. The reason for the standalone implementation is historical: fs-utils were created originally in 2008 when the Rumprun unikernel did not exist. Currently, fs-utils is not broken so we have not had a dire need to fix it.

TODO: rumpctrl