The concern for efficient and easy-to-use inter-process communication is prevalent among microkernel-based operating systems. Genode has always taken an unorthodox stance on this subject by disregarding the time-tested standard solution of using an IDL compiler in favour of sticking to raw C++ mechanisms. The new version 11.05 of the OS framework takes another leap by introducing a brand new API for implementing procedure calls across process boundaries, facilitating type safety and ease of use, yet still not relying on external tools. Furthermore, the platform support for the Fiasco.OC kernel has been extended to the complete feature set of the framework. The most significant new features are L4Linux (on Fiasco.OC), an experimental integration of GDB, ARM RealView PBX device drivers, and device I/O support for the MicroBlaze platform.
Inter-process communication (IPC) is one of the most challenging aspects of creating a multi-server operating system. On the one hand, the design space for IPC kernel mechanisms is huge and there seem to be never-ending debates in the OS community about which approach is the best. E.g., the Mach kernel used to buffer messages in the kernel. In contrast, L4 regarded synchronous IPC as the key for achieving high performance. Others follow the line of Nemesis and K42, preferring a combination of signalling and shared memory. On the other hand, most kernel architects miss the holistic knowledge of the usage patterns demanded by user-level components.
Genode tries to bridge the gap between the variety of kernel interfaces and real-world user-level software by providing an API that should be implementable on a wide range of different kernels, yet cover all use cases required to build a fully-featured operating system. When the Genode project was started in 2006, it was clear that user-level software demands three different types of communication, synchronous remote procedure calls (RPC), shared memory, and signalling. However, the actual patterns of how these mechanisms are used when the system scales in complexity were not fully understood. Now, five years later, the picture has clarified, prompting the project to reconsider the APIs introduced initially. The result is a brand new RPC framework crafted for type safety and ease of use while sticking to plain C++. For those interested in the subject, the complete line of thought is described here.
Besides the work on the foundations of the framework, Genode's new platforms introduced with the previous release received a great deal of attention. The Fiasco.OC microkernel is now fully supported for the x86-32, x86-64, and ARM architectures. Thereby, Genode's complete software stack including the dynamic linker, lwIP, and Qt4 have become available on this kernel. Furthermore, the prime feature of Fiasco.OC, namely the paravirtualized L4Linux kernel, has been ported over to Genode. L4Linux is a variant of the Linux kernel specifically developed to run as user-level component on top of Fiasco.OC.
Genode's custom kernel for the MicroBlaze architecture has been complemented with the functionality needed for implementing user-level device drivers. For those who are eager to explore Genode on Xilinx FPGAs, the new version provides a ready-to-use reference SoC for the Spartan3A Starter Kit platform accompanied with new documentation.
As the Genode developer community grows, the need for a solid debugging solution arises. The new release features the first step towards the use of the GNU debugger with the framework. In addition to the progress on the actual framework, the current release provides new ways to make Genode more approachable to new developers by the means of ready-to-use scripts for building, configuring, and test-driving a number of Genode features including Qt4, lwIP, GDB, and L4Linux.
Read on about those and more topics in the full version of the release notes of Genode 11.05.