Ghost Kernel

The libc is taking shape 2015/06/23, 22:00:00

Making steady progress in my C library implementation. The headers & declarations are done and some parts are implemented.

Moving away from Newlib was painful so far, but writing a custom library in the end gives much more control to the way applications on the system work.

Not doing much else at the moment, I was on vacation and the top priority is bringing the lib to a status where the existing programs work again.


Starting a custom libc 2015/05/13, 22:00:00

After struggling with some ugly userspace bugs for a few days that were mainly caused due to the way that the current C library (Newlib) is working and bound into the system, I decided to start writing my own C standard library implementation. Newlib has already caused too many problems and I'll be glad once its gone.


Refactoring & Window server library 2015/04/28, 22:00:00

In the last few weeks I mostly did bug fixing and cleaning up the existing code base. This worked out well, much of the kernel code is cleaner and more efficient now. Currently I'm working on a deadlock somewhere in the UI communication process.

Window server library

I've reworked the way that programs communicate with the window server. This currently happens via pipes. I also added functionality to the userspace library, so it is now actually possible to create windows, buttons and also register an "action listener" (that is called when a click event is fired) on these buttons.

As a little example, a window with a text field and a button can be created like this:

g_window* myWindow = g_window::create(); g_textfield* textfield = g_textfield::create(); textfield->setBounds(g_rectangle(10, 10, 120, 20)); myWindow->addChild(textfield); g_button* button = g_button::create(); button->setBounds(g_rectangle(10, 30, 120, 20)); button->setTitle("Press me!"); myWindow->addChild(button); myWindow->setBounds(g_rectangle(200, 200, 140, 160)); myWindow->setVisible(true);

This style is plain and simple, and anyone who has ever created a UI with Swing will easily find their way into this framework.


VFS in kernel & Unix pipes 2015/03/31, 22:00:00

Phew, that was quite a piece of work. I've finally decided to move the virtual filesystem to kernel space. The drivers still run in userspace and communicate with the kernel through messages & mapped areas. Performance is good so far, but there are still quite some improvements to do.

Filesystem paths

I moved away from the prefix:// style of filesystem paths. A single root seems much more convenient and clean. Currently all mountpoints exist in the root.

Unix pipes

The kernel now also supports unix pipes, which are used for standard input/output of programs, the communication of programs with the old window manager and probably also for other things like mouse/keyboard event transfer from the driver to programs (terminal/window manager).


I also improved the terminal of Ghost when run in headless mode. You can now create multiple terminals and switch between them using Ctrl + Tab.


Capri 2.0 released 2015/03/11, 21:00:00

The new version of the Capri script, the build system of the Ghost project, is now released on This release contains a rewrite of the parser, interpreter and command line interface.

It has support for native functionality loaded from shared libraries, has a more flexible native binding and is more portable than the previous version. Feel free to ask any questions and report bugs to me.