With the new version 17.05, the Genode project moves forward to the goal of becoming more attractive and approachable to a wider audience. On the one hand, the release promises to be a sustainable basis for longer-term projects. With a modern tool chain based on GCC 6.3, Qt 5.8, VirtualBox 5.2.11, and the framework’s finished API modernization, the foreseeable future will be free of disruptions for users. On the other hand, Genode introduced a new approach and tooling for package management to relieve users from low-level technicalities.
Modern operating systems are unthinkable without a package-management solution for installing and updating software. Until now, however, Genode’s work flows were primarily geared towards appliance-like systems that come in the shape of system images. Even though the Genode developers managed to build a day-to-day usable OS (called “Turmvilla”) for their own use on that basis, there is a natural limit of how scalable such systems can be. Even for the developers, installing and updating such a system is a burden. Instead up building and installing a new system image on each update, users universally expect to install software from ready-to-use packages, and to update and configure the system in parts instead of a whole.
The discussion of suitable package-management approaches for Genode reaches several years back. The first step in this direction were custom tools for managing and integrating 3rd-party source code with the framework. But there was no notion of pre-built and easy-to-install packages, nor even a tangible idea of what a package in the context of Genode should represent. During a long period of experimentation, the developers encountered and fell in love with the Nix package manager. This encounter was followed by porting work, mind-bending architectural discussions, and a series of prototype scenarios. However, while those prototypes were technically sophisticated and interesting playgrounds, they were also complicated. A real-world solution remained cloudy.
At one time, it became clear that the universal notions of “software packages” and the role of a package manager made things more complicated than they should be. After all, Nix is designed for Unix-like systems with its existing ecosystem of libraries, build tools, conventions, and methodologies. In contrast, Genode opens up unique opportunities for simplification thanks to its breath of scope that covers the entire software stack including the build system, tool chain, the ABI and API design, the inter-component protocols, the dynamic linker, the system configuration, and the execution runtime. By taking a step back and soul-searching for the actual problem to solve, a strikingly simple new approach emerged. It is undeniably inspired by the virtues of Nix. But it leverages Genode in ways that wouldn’t be possible with a ported version of Nix. For example, it facilitates Genode’s notion of library ABIs to largely decouple libraries from applications and thereby completely eliminates transitive build-time dependencies. Or as another example, by introducing sensible categories of packaged content, the need for a package description language disappeared.
Genode’s release 17.05 contains the new packaging tools. Even though they are still labeled as experimental, the release comes with several examples of modest system scenarios based on them. Other prominent news are a feature-complete version of VirtualBox 5 for the NOVA microkernel, the update of Qt to version 5.8, added support for the Nim programming language, a new tool chain based on GCC 6.3 including Ada support, new tools for monitoring network traffic and CPU load, greatly enhanced flexibility of the init component, and a brand new timeout API. All these topics are covered in detail by the release documentation.