Incremental progress
I got the shel_read() and shel_write() code working (shel_write is just doing application-launching, not any of the added-later stuff yet). The "AES" (such as it is) now looks for a desktop application to launch (via shel_write) which itself connects to the display server and is annotated as being the desktop. The actual program that runs here is configurable but the codebase has a (very!) basic stand-in for the time being. Since I'm missing event processing, it currently launches, does its stuff, and disconnects, but that will eventually change...
The model will be a bit different for this desktop, because there aren't really "drives" per se - instead I plan to make each directory under {sys root}/Disk into a "disk". The user can have as many as (s)he likes, but we install an "Applications" folder there (in which goes the 'desktop.app' folder-cum-application <- see above) but others can be installed there also just by coping the files over. Another thing might be a symlink to the user's home directory as 'Home' for example.
Given that we know which application has been chosen by the user as the "desktop", when that application asks to create its first window, we can create a full-screen sized window with no borders. It's still a window in the window-list, but (uniquely) the work-area is the entire display. Subsequent windows will get suitable chrome.
Here's where things start to get a bit fun

I intend to make the screen manager code be theme-able for the various widget types (including window decorations), and since I have this handy-dandy per-application folder, the preference can go inside that application's folder. So when you launch
Nethack, the theme might be based on
something like this and when you run the scientific calculator app (at the same time) it might display
something like this.
So, before the fun bit starts, I do need to parse/write the newdesk.inf file (which I can get/save via shel_get/shel_put) - although I suspect I'll be extending that quite a bit with the various options I intend to support. So that's next on the list.
I also have to figure out how I'm going to to redraws - given the memory size of the target hardware (a Pi 5) is
at least 4GB, and a 1920x1080x32-bit screen is 8MB, I do have a lot of latitude for using memory-backing to optimise the screen redraw (and minimise the number of times I have to send a large data-dump over the socket). It comes with extra complexity though, and some apps might want to re-render rather than just re-draw if you pull the window wider (do a zoom-up, or re-layout text in a wider column, or...). I think it was Knuth who came up with the rules for optimisation...
- Don't.
- (for experts only) Don't, yet
So, I'm probably going to go with the "app has to redraw" and maybe tackle the optimisation later if it ends up being needed.
Anyway, progress is happening, if slowly. The newdesk.inf parser/writer is up next, then themes, then I can start actually creating windows...