The Genode project has released version 13.11 of their OS framework. This time, the focus lies on exploring new ways for bringing existing protocol stacks to the Genode world. FUSE-based file systems and the Linux TCP/IP stack have become available as user-level libraries, and the improved Qt5 port covers QML. Hardware-wise, the new version extends the support for Exynos-5, Raspberry Pi, and ARM TrustZone.
With the release cycle of version 13.11, the Genode developers took the chance to explore plenty of experimental features across the whole software stack.
At kernel-level, the custom kernel platform called base-hw explores new kernel-design ideas by using asynchronous communication for page-fault and IRQ delivery. This approach is in stark contrast to the classical (aka the L4 way) use of synchronous IPC for those purposes. The major benefit of this new design is a substantial simplification of the kernel code, which is good because a microkernel should be “micro” in the first place.
At the base-API level, the new version introduces new protocols for the dynamic balancing of resources. On traditional OSes (from Genode’s perspective, this includes Android and iOS), memory is managed by the kernel. Because the kernel has global knowledge about user-level abstractions like files, sockets, processes, and implements global caches such as the block cache, it is in a good position to balance memory resources among all processes and its caches. For example, if memory becomes scarce, the kernel can flush the block cache to regain memory, or even swap memory to disk. On Genode-based systems, there is no central component that exercises control over all processes except for the microkernel. By design, microkernels lack all the features that would be needed to transparently balance resources, i.e., disk driver, block layer, memory management, or even the notion of files. In order to accommodate dynamic workloads as good as traditional OSes, Genode needs to solve the problem via user-level protocols. The new version extends Genode’s parent-child interface with a protocol that allows children to request additional resources from their parent. Vice versa, a parent becomes able to express its intend to regain resources from their child processes. With this change in place, dynamically dimensioned caches can be implemented at the user level. At the same time, each process in the Genode system retains tight control over its own resources. One of the first example that uses the new mechanism is L4Linux, which just got extended with a Genode driver that implements memory ballooning.
At the level of protocol stacks, the most noteworthy additions are the inclusion of file systems based on FUSE and the port of the Linux TCP/IP stack. FUSE seems to be a convenient way to enable multiple file system types by providing only one interface. Because there is no central VFS in Genode, the interplay of the FUSE server with central VFS provider (such as the Linux kernel) is not needed. With ext2 and exFAT, two exemplary file systems show off the initial version of Genode’s FUSE interface implementation. Both file systems are provided as plain plugins for Genode’s C runtime. Another example for the realization of a protocol stack as library is the new TCP/IP stack ported from the Linux kernel. The so-called LXIP stack can be used as an alternative to lwIP to vastly improve the application performance with gigabit networking.
With Genode being a toolkit for creating operating systems, new device drivers are part of every release. The current release is no exception. It comes with HDMI and USB 3.0 storage drivers for the Exynos-5 SoC as well as graphics and USB HID drivers for the Raspberry Pi. Thanks to those drivers, graphical system scenarios like Genode’s interactive demo can be realized on those platforms. Furthermore, the support for ARM TrustZone has been extended to cover both Freescale’s i.MX53 and the ARM Versatile Express Coretile A9x4 platforms.
The complete story behind the new version including details about the revised nitpicker GUI server, the switch to C++11, and many more topics are covered in the release documentation of version 13.11.