The Gemini Nucleus originates from two other projects in operating system development: the Apostle Project and the Elysium Project. Both projects have their merits, but also their drawbacks. The Apostle Project tried to build a micro-kernel based on the ideas proposed by Liedtke. The design is such that the kernel provides for a minimal set of abstractions. Other abstractions required by user applications are provided by driver modules. Liedtkes ideas are also implemented in the L3/L4 micro-kernels, which perform much better than any other existing micro-kernel.
The Apostle micro-kernel design also tried to incorporate scheduler activations as proposed by Anderson et al, which enhances the performance of user threads. Unfortunately, the combination of these ideas increased the complexity of the micro-kernel.
All data structures in the Apostle micro-kernel are dynamic. No fixed arrays exist, every major data structure is implemented using a list or a queue. This requires a more sophisticated way of memory management inside the kernel. Again, this increased the complexity of the micro-kernel proper, but the number of hardcoded restrictions are reduced to a minimum in the Apostle micro-kernel.
The Elysium Project tried to build a operating system based on the exokernel as proposed by Engler. The exokernel provides for no abstractions at all, it only provides for secure distribution of resources. On top of an exokernel a number of dedicated purpose library operating systems can run, providing for the abstractions that are required by user applications.
At this point, the Apostle and Elysium projects are considered prototypes. A lot was learned through their development, the time and effort put into them are not wasted. The acquired knowledge and experience is now used to develop the Gemini Nucleus.