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.
At application level, the added support for Qt5’s QML is the highlight of the release. Enabling this feature was more elaborative than expected because the V8 Javascript engine used by QML relies on a custom platform abstraction (in addition to Qt’s) and QML relies on OpenGL. Consequently, the challenge of enabling QML implied work across many parts of the framework such as the C runtime, the pthread library, and the EGL driver. However, the effort is rewarded by the new ability to run several example QML applications without modification.
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.
Another great update from the Genode team!
I love this kind of progress. The FUSE, Linux TCP/IP and QML items are really useful. But my favorites are the “experimental” parts – things like the asynchronous page fault / IRQ concept and dynamic resource balancing.
I can’t wait to read about this in more detail, because these are the kinds of things that still get the ones and zeros flowing in my blood!
I feel like one day I’m gonna wake up and discover that Genode has suddenly taken over the computer world.
Thanks for the nice words. 🙂
I am quite a newbie to operating systems, but I find this framework surprisingly easy to work with.
It is a really mature system, which provides tons of tools for the experimenter. It gives you debug tools, a sophisticated build system, a lot of automation for boring tasks.
Testing is a breeze with run scripts. It is easy to create a image and boot it with one command, so you can test it in a vm.
And the interfaces are well defined, it gives the feeling it is adhering to a strong design. If you switch to another kernel, it mostly just work (as long as you don’t do arch specific things I suppose).
Documentation could be better, but it is enough to use it. I find it fun to work with.
The build system is sometimes a bit difficult to work with. I have broken it a couple of times, but that happens less and less now I get more used to it.
(edit: I am sorry, I wanted to comment on the main item.)
Edited 2013-12-07 20:49 UTC