The just released version 12.02 of the Genode OS Framework takes the first steps to carry out the plan to turn the framework into a general-purpose OS for the daily use by its developers until the end of the year. It features a new ACPI driver, the first bits of a device-driver manager, support for using the fork syscall in GNU programs, and a PDF rendering engine. The most significant point of this release, however, is the way it was conducted. It represents the first version carried out using a completely open development process.

Thank you for the response! It's very nice to hear from people directly involved.

"At a later stage, Genode will hopefully evolve into something that other end users will use. But they will probably not be aware of that."

Some kind of special purpose rebranded OEM arrangement, I understand. Yes that does do away with the "end user problem" nicely

"I am a proponent of porting existing software instead of implementing new software wherever feasible. For doing this, we don't need to convince authors of existing (OSS/FS) projects to explicitly support our platform if their software can be integrated as is."

Clearly being able to run portable software helps offset the fact that not much native software is available. But it seems to me that this this might impede the development/use of more ideal/redesigned/cleaner programming interfaces for the sake of compatibility. For example, I read about your foray with the notorious "fork". Many developers are fans of it, but many also may not realize how many subtle problems it has under the hood: threads, leaking file handles, overcommit, inefficient clone/exec sequences, etc. Also, I imagine deviating from linux's libc, TLS and threading implementations has it's own set of compatibility problems. Have there been instances when compatibility restraints forced you to alter your ideal implementation design?

I'm actually impressed that you guys are tackling these things and I think it's high time complex & baggy monolithic kernels get a run for their money.

"For example, I read about your foray with the notorious fork. Many developers are fans of it, but many also may not realize how many subtle problems it has under the hood: threads, leaking file handles, overcommit, inefficient clone/exec sequences, etc."

From Genode's viewpoint, I am not a fan of fork at all because it contradicts badly with Genode's principles (i.e., with respect to the accounting of resources). However, I recognise the beauty of its concept when looking from the perspective of the original Unix design. (although, in my opinion, this beauty was seriously spoiled with the addition of later POSIX APIs such as pthreads)

"Have there been instances when compatibility restraints forced you to alter your ideal implementation design?"

Sure. Those temptations are lurking everywhere. Fortunately, the cross-kernel portability of Genode positively reinforces careful API design. Often, taking a shortcut that works on a specific kernel would quickly solve a problem at hand. But because we need to take all the other base platforms into consideration, the costs of such narrow-sighted decisions become immediately visible. Taking fork as an example, it was not until the third attempt of implementing this feature until we found a way that would fit nicely with the existing framework design and would not need a special case for each platform. If had only one kernel to consider, we would certainly ended up with a less elegant solution.

Another pretty painful example is the C++ runtime, which is normally expected to run on top of a C library. We want to use C++ but we don't want to have a C library as a mandatory part of the framework. Here GCC's C++ support libraries pose a good deal of challenges. For example, during the initialization of exception support, malloc() is called. On Genode, there is no malloc(). So we have to provide a custom malloc() that uses Genode's allocators. But those are written in C++. Chicken or egg? In this case we decided against changing GCC's support libraries because this looked to us like opening a can of worms. Consequently, we ended up with a solution that is not completely in line with our principles. We opted for the practical way. It's not black and white but always a question of judgement.