Brussels / 4 & 5 February 2023


Evolution of OSv: Towards Greater Modularity and Composability

By design, OSv has always been a "fat" unikernel and by default has provided a large subset of glibc functionality and has included full standard C++ library (libstdc++), the ZFS implementation, drivers for many devices, and has supported many hypervisors. On one hand, it makes running arbitrary applications on any hypervisor very easy using a single universal kernel. On another hand, such universality comes with the price of the bloated kernel with many symbols and drivers and possibly ZFS unused, thus causing inefficient memory usage, longer boot time, and potential security vulnerabilities. In addition, the C++ applications linked against a version of libstdc++ different than the version the kernel was linked against, may simply not work.

In this presentation, I will talk about enhancements in the new release 0.57 to address these issues. More specifically, I will focus on a new experimental build mode to hide the non-glibc symbols and libstdc++ and extract ZFS code out of the kernel in form of a dynamically linked library. I will also explain another new build option to tailor the kernel to a set of specific device drivers - 'driver profiles', and another new mechanism to allow building a version of the kernel with a subset of glibc symbols needed to support a specific application.

Finally, I will also cover other interesting improvements and optimizations like "lazy" stack, minimal netlink support, and novel ways to build and run ZFS images.


Waldemar Kozaczuk