I have been looking into various options of GUI/Windowing systems to implement in AquilaOS and here is what I found so far
While X is the defacto when it comes to GUI, it is extremely heavy, mostly optimized for Linux and requires too much dependencies.
Wayland is a little promising than X due to its lightweight design, however it still makes certain assumptions about the underlying kernel that might not be very easy for everyone to support.
That could have been a really promising project, only now it is deprecated and way out-of-sync.
Well, first, Nuklear should have not been on this list, it is not a replacement for X server but it supports a few features that took my interest way too far:
- Extrememly portable, doesn’t even depend on libc!
- Entirely written in C with many bindings
- Has a basic windowing system and widgets
- Can be optimized to use HW acceleration for various targets easily
- It’s design is simple and straightforward
All in all, Nuklear is an amazing GUI library, well done Micha Mettke!
So, one could say that Nuklear is a replacement for GTK/X for example, only Nuklear is not based on a server/client model, all applications are hosted in the same binary and executed as a single program.
However, that doesn’t stop us from trying to make it work as a server/client model, I’ve started project NuklearUI exactly for that, it should serve as a starting point for OSDevers willing to incorportate a GUI system in their OS with minimum requirements. My first idea is to use POSIX shared-memory for communication due to its simplicity, but we could think of other design patterns (like Nuklear would be fully contained in kernel space). I will try to make that decision on the developer side.
Currently, there isn’t much, other than some “Hello, Nuklear!” stuff. I just managed to implement a basic PS/2 Keyboard & Mouse drivers and Aquila framebuffer backend, it works as a standalone application and safetly returns to fbterm (and shell).
Here is a screenshot of a demo of Nuklear running on AquilaOS
And a video showing the switch between fbterm and Nuklear https://youtu.be/gfuRbHAGhl8