With the ability to run the GNU tool chain including GCC, binutils, and GNU make, the Genode OS framework has taken another big step towards becoming a general-purpose OS. The just released version 12.05 introduces Genode’s file-system infrastructure along with support for stacked file systems, extends the framework API with support for configuring system components on-thy-fly, and adds media replay capabilities.
The driving force behind most of the new features was the Noux runtime environment, which allows the use of a growing number of GNU software packages directly on the variety of microkernels supported by Genode. Noux is pivotal for the plan of the Genode developers to use Genode as OS for their everyday development work by the end of the year. The biggest missing piece of the puzzle was the lack of file-system infrastructure. Even though accessing block devices was possible through one of the block-device drives, accessing file systems stored on these block devices was performed via libraries only. This imposed the huge restriction that one block device could not be used by more than one process at a time.
With the newly added file-system infrastructure, this road block is gone. The key element is the RPC interface for file-system access. This interfaces facilitates the use of synchronous RPC for all functions related managing the file name space. But for potentially long-taking read and write operations, the interface devises the use of asynchronous communication via shared memory and signals. The first implementation of the new interface comes in the form of an in-memory file system. At the client side, the interface can be used either directly via the Genode API, through the POSIX file API provided by the libc, or by the means of the Noux runtime.
The second major focus of the development during the release cycle was put on the USB stack. The existing USB stack ported from Linux 2.6.20 turned out to be too hard to maintain to represent a sustainable solution for Genode. So the project took the chance to re-approach the problem of integrating 3rd-party device drivers with the framework in a clean way. The result is a new USB stack based on Linux 3.2. Compared to the old solution, the new variant significantly lowers the complexity of modified or custom created glue code (to less than 4.000 lines of code) so that the driver stack becomes much easier to maintain in the future.
With regard to libraries and applications, the most prominent addition is the port of libav alongside a profound improvement of libSDL. The popular libav library is a solution for decoding, converting, and streaming video and audio data. The introduction of libav support is accompanied with a Qt4-based example application that facilitates the use of Genode’s unique concepts such as the natural way of sandboxing the codec within a separate process and the ability to use Genode’s session concept for creating a video post-processing pipeline.
Version 12.05 comes with many further additions and improvements. The get the full picture, read on the comprehensive release notes.
The Genode project is really the most impressive general-purpose OS development out there. Congratulation to the team. I do hope it will stay under active development several more years, there will definitely be a use case for it sooner or later.
Being completely new to Genode OS I find the whole thing quite fascinating. They’ve actually managed to implement many of the things I’ve complained about for years and they’ve seemingly managed to do it all in functional way. “The principle of least possible privileges” is something that should have been implemented on mobile devices YEARS ago already, so I really hope Genode OS will gain some traction sooner or later in the mobile device industry.
I’ll have to keep an eye on this thing.
Thanks for the encouraging words. Even though Genode does not yet qualify for being called a general-purpose OS, it is definitely the goal to get there in the not-too-distant future.
I can imagine it requiring quite a boatload of work still to get it there, but.. well, to be honest, the improved security model is definitely worth it IMHO.
Too bad, though, that it’s unlikely to attract much attention from the big manufacturers, mostly because the mobile device OS – market is already quite crowded. If it were to ever gain their attention, though.. well, the implications could be huge.
As an aside: how’s the ARM-support on it? I’m likely getting a Pandaboard soon, would love to try Genode OS on it first-hand.
Genode already supports a few ARM platforms such as ARM Versatile Express. Support for Pandaboard is in the works. BTW, the current release features the first fragments:
http://genode.org/documentation/release-notes/12.05#Fiasco.OC_micro…
Genode happily boots on the Pandaboard and shows lifesigns via the serial console. But several device drivers for peripherals such as display, mouse, keyboard, network, SD card are still missing.
Good to know that there is public interest in running Genode on this nice platform.
Regarding Fiasco.OC – long term is the aim to have it at the core of the operating system? what is the driver API like compared to other platforms? is there a move to LLVM maybe at a later date given the heavy lifting which Apple and others are providing by way of C++ 2011 functionality being added?
Fiasco.OC is one of the kernels that can be used at the core of the Genode system. But it is only one among several kernels. Alternatively, you may opt to use NOVA, OKL4, Pistachio, or even Linux. Each of those kernels has different pros and cons. It is up to the user of Genode to pick the kernel that fits best for her/him.
The driver API is, in the line of all Genode’s API, a C++ interface. In addition, there exists a C wrapper called DDE kit, which is primarily intended to ease the porting of device drivers (typically written in C) from other platforms.
Switching from GCC to LLVM is not planned. From what I gathered so far, LLVM is pretty intriguing and I am tempted to explore it. But on the other hand, we are actually quite happy with our current GCC-based tool chain.
Do you have compelling and tangible arguments for investing development time on switching Genode to LLVM over the many other topics on our road map?