My GUI Toolkit and Desktop Environment, Built from Scratch Specifically for FreeBSD

For the past 14 years, I’ve been teaching myself how to build a GUI toolkit in C++. My dream has always been to be the first to bring a bsd licensed gui toolkit and desktop environment to freebsd built from scratch.

I was even featured on phoronix https://www.phoronix.com/news/MTE4NTk in 2012 when I was still a Qt dev this was my breaking point when I decided I was going to do my own toolkit.

Day one - January 24, 2012:
https://stackoverflow.com/questions/6639640/want-to-learn-graphics-using-skia-on-ubuntu
APb85.png


See 14 years of me working it out https://gist.github.com/zester
I was stitching together random code snippets, experimenting through pure trial and error, just trying to make anything work.

This video marks my eureka moment when things finally started to click. I had spent years fighting performance issues because I was massively overthinking the problem and over-engineering my rendering engine. I was convinced I needed a scene graph with a renderer manager, state managers, focus managers, everything talking back and forth to decide what needed to be re-rendered, when, and how. In reality, that approach was a dead end and led to an overly complex, fragile design. The real solution turned out to be much simpler a flat render list. With something as complex as a GUI toolkit, performance problems don’t hit you all at once. They quietly build up over time until you’re suddenly wondering why something as basic as resizing a window is lagging.

The video below shows the GUI toolkit, compositor, and desktop shell.

This is the desktop environment itself. It’s built on wlroots, Skia, Yoga, and libvterm for the term, and it’s inspired by the Meta Quest UI.
Building a terminal emulator sucks!!!!! Easily more complex than anything else you’ll see here.
Untitled.jpg


Here’s an example of animating vector graphics:

And this is an early test of integrating Google Filament into the GUI toolkit. It works well overall, but I’m still fighting some object-picking issues. At the moment, this only works on Linux.

I also ended up building a new pkg tool and port system for this project because freebsd port system and how packages are built is not cool!!!

Once I figure out how to monetize this whether through donations or sponsorships, I’ll start releasing the code. The reality is that continuing this project will require full-time development. Feel free to share your thoughts in the comments.

If you want a shorter forum post, a dev blog version, or something more opinionated / raw, I can reshape it in minutes.
 
The system takes care of a graphical screen without any X-server running but it does run Xorg programs on it?
 
The system takes care of a graphical screen without any X-server running but it does run Xorg programs on it?
Well wlroots https://gitlab.freedesktop.org/wlroots/wlroots/ which is the c library we use to build the compositor, it does in fact support xwayland which is the protocol for running xorg programs on wayland compositors, now I haven't tested that feature and the compositor as it is now doesn't currently have support for xwayland, but implementing that feature is certainly a possibility if others need that capability. Out of curiosity do you have a specific xorg program you have in mind you would like to see work?
 
Back
Top