Here are some key decisions I have made:
- The desktop environment will be written in Common Lisp in order to take advantage of the Common Lisp Object System, a dynamic object system that supports multiple dispatch. I feel that using a dynamic object system will make it easier for me to implement a component-based desktop environment. I plan to write demo programs that are also written in Common Lisp.
- The desktop environment will be for Wayland, which is expected to replace X for new GUI development in the future.
- This desktop will be written using its own BSD-licensed GUI toolkit, written for Wayland (although support for non-Wayland backends may be possible) and also written in Common Lisp. There seems to be few options for BSD-licensed GUI toolkits; GTK+, Qt, and GNUstep are under the LGPL. Having a BSD-licensed toolkit will maximize its adoption.
- This new GUI toolkit will be fully themable; programmers will be able to describe windows using an S-expression syntax. For example, we could describe a window that contains the label "I'm a window!" and two buttons (one to change the color of the label and the other to close the window) using two S-expressions: one for describing the contents of the window, and one for describing its format:
; Layout definition file
:size (300 400))
:text "I'm a window"
:position (20 5)
:text "Change Color"
:size (50 150)
:position (100 100))
:size (50 150)
:position (260 100))
- Underneath the GUI toolkit will be a 2D graphics system that renders directly to a Wayland pixel buffer. I am still exploring possible design options, but I've always been intrigued by the Display PostScript system used by NeXTSTEP and Sun NeWS, and I personally love macOS's Quartz 2D graphics system, which uses the same graphics model as PDF. I am leaning toward also using PDF as the 2D graphics model of this desktop environment.
As I mentioned before, I haven't started coding yet. Because there are still many technologies I need to learn, as well as other responsibilities that I have, I anticipate development of my side project to be slow. Nevertheless, I hope to have a working prototype of the desktop environment completed sometime in either late 2021 or early 2022.