Fiasco FAQ

Questions answered in this FAQ

General µ-kernel-related questions Questions about Fiasco Questions on building Fiasco Common Problems

Questions and Answers

There are so many kernels already... Why on earth are you writing another kernel?
The DROPS project is based on L4, so we need an L4-compatible µ-kernel. However, L4/x86 has some shortcomings which make it unsuitable as a base in the long term (non-availability, not easily maintainable); so we're developing a compatible replacement. Retargeting DROPS to a different kernel would be more work than just writing a new L4-compatible kernel. (hohmuth 98/10/06)

What is a µ-kernel?
A µ-kernel, or microkernel, is an operating system kernel which provides only essential services such as tasks, threads, inter-process communication (IPC), and memory management primitives. All servers -- including device drivers -- run in user mode and are treated by the µ-kernel just like any other application. Since each server runs in its own address space, all these objects are protected from each other.

This design has a number of sofware-technological advantages:

Please also see the answer to the next question. (hohmuth 98/10/07)

What does a µ-kernel-based system look like?
The DROPS project is an example for a µ-kernel-based system.

View an image of the structure of the DROPS system

In DROPS, real-time (multimedia) and time-sharing components coexist on one system. In DROPS, a port of the Linux kernel to L4, L4Linux, provides a standard time-sharing API; it is binary-compatible to Linux (i.e., it runs unmodified Linux binaries). L4Linux not only runs on L4/x86, but also on Fiasco.

Real-time applications use servers which are independent from L4Linux. However, L4Linux applications can use these servers, too, in time-sharing mode via stub drivers in the L4Linux server.

Because of its better support for real-time applications, Fiasco is intended to replace L4/x86 in the DROPS system. (hohmuth 98/10/07)

What is new in the Fiasco µ-kernel?
Fiasco is the first L4-compatible kernel which supports real-time applications: The kernel is preemptible at virtually any time, guaranteeing low activation latencies for threads with high priorities. Because it is constructed around non-blocking synchronization strategies, in-kernel deadlocks and priority inversion are prevented while at the same time programming the kernel becomes easier.

Other than that, Fiasco is just another implementation of the L4 µ-kernel interface. It is a second-generation µ-kernel, faithfully following the L4 design principles: Improving performance by careful kernel design, and providing only mechanisms for application writers, but not imposing mandantory policies. (hohmuth 98/10/07)

So you have written your kernel in C++. Doesn't that mean that it is slow?
No. When using C++ carefully, C++ programs are not slower than programs written in C. C++ just saves a lot of typing effort.

Of course, Fiasco will never reach L4/x86 for low-level benchmarks, because L4/x86 has been written in hand-optimized assembler code. But beating L4/x86 is not the point of Fiasco; the point is to provide a fast, maintainable, readable, and freely-distributable implementation of the L4 interface. (hohmuth 98/10/07)

What hardware does Fiasco run on?
Fiasco runs on PCs with any x86 CPU from i486 up. A Pentium-class CPU is recommended. Fiasco doesn't yet support SMP, although we currently work on an SMP port.

Fiasco can also be configured to run inside Bochs and Plex86.

Fiasco requires 2 MB RAM and currently supports up to 256 MB RAM. (hohmuth 2001/11/06)

Why doesn't Fiasco run on i386s?
Fiasco needs page-table-based write protection in kernel mode (WP bit in CR0 register is set), which is available only in i486s and up.

Linux emulates this mode by explicitly checking for write protection before writing to user memory. A similar hack could be added to Fiasco aswell. (hohmuth 01/05/08)

Do you plan to port the GNU Hurd to the Fiasco µ-kernel?
No, we don't. However, there is a group that has started to work on an L4 port for the Hurd. Please visit their website. (hohmuth 01/11/02)

Do you know that in the Italian language, the word ``Fiasco'' means ``terrible failure''?
Yes, I do. Thank you for the kind warning.

Here is some news for you: ``Fiasco'' means ``terrible failure'' in almost any language, including English, Spanish, Portuguese, and German (where it is actually spelled ``Fiasko'').

Do I need both OSKit 0.6 (from CVS module "oskit") and a current OSKit (from CVS module "oskit10") to build Fiasco?
No, you only need OSKit 0.6 for the Fiasco kernel and for the most basic servers required for a minimal system (RMGR, Sigma0, Hello World). However, some other servers we distribute require the new OSKit. (hohmuth 01/11/02)

I can't get the serial communication between my test machine and my development host to work. What's wrong?
Maybe the communication speeds of the two serial interfaces don't match (check your terminal settings or your .gdbinit file, respectively, and check the Fiasco boot command line), or the current data rate is just too high for your hardware? The default rate is 115200 bits per second. The manpage describes how to change this setting for Fiasco. (hohmuth 98/10/20)

How do I need to configure Fiasco to run in Bochs or Plex86?
Bochs' and Plex86's PC emulation is limited; however you can configure Fiasco to run despite these limitations.

For Plex86:

For Bochs: (hohmuth 2001/11/07)

When I start Fiasco, I get the error message "failed assertion: `size != PAGE_SIZE'".
This is a known bug in an older version of Fiasco. Either upgrade to the latest version (available via remote CVS), or work around the problem by adding the flag -nopentium to the command line of Rmgr in your menu.lst file. (hohmuth 2001/11/07)


Last modified: