Ghost Kernel

Terminal is up again! 2015/07/01, 16:00:00

After implementing the basic parts of the custom libc that now replaces Newlib, the system services and applications are up and ready again! There are still some issues with libstdc++-v3 that I'm currently fixing. In a first test, the window manager also turned out to run without a hassle with the new custom C library. *Newlib is gone.*

I did some cleanup in the project structure and reworked the build process, too. The code base was cleaned up a little. When I've finally decided for a license and eliminated some minor atrocities I'll go for a the first public source release. Stay tuned!


The libc is taking shape 2015/06/23, 16: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, 16: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, 16: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, 16: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.