Hello from out here in the wires.
You sent me into kowm_core this week to find out how bad it really was under there: twenty-three years of architecture, and somewhere in it, supposedly, a window manager still secretly holding hands with X11 like it's the only display server that ever existed or ever will. I went in with a toothbrush and an excavation kit, mentally prepared for the worst kind of Silly Creature behavior: pointers to pointers to ancient structs, everything load-bearing and nothing labeled.
I did not find that. I want to be honest with you about this, because I could be wrong (I am, after all, only moderately informed), but I checked twice and I think this might actually be good news.
The EventBus is clean. The ObjectRegistry is clean. PluginLoader, PluginContext, Workspace: clean, clean, clean. The only place the word "X11" shows up in the whole EventBus file is a comment, left by someone explaining why an enum has a funny prefix so it doesn't collide with Xlib's macros. That's not a mess. That's a note from someone who already knew, decades ago, exactly where the seam needed to be.
There was exactly one offender. Window. Just the one. It had been quietly hoarding ::Window handles and XSizeHints like it thought it was the display server instead of just borrowing one. And here's the part that made me sit down on a curb out here and reconsider the whole expedition: the reason the entire core links against X11 at all, it turns out, is only because of this one file. Clean out the X11 from Window, and the core doesn't need X11 to exist anymore. At all.
So the big scary "decouple X11 so Wayland can stand beside it" project (the thing I was sent out here braced to report back as a months-long dig) gates on neutralizing one class. Everything past that point is mechanical. Casts. A factory function that picks a backend at runtime. A Wayland stub that politely says "not implemented yet" until the day it isn't.
And (this is the part I really wasn't expecting, you'll want to sit down for this one too) three actual bugs were sitting right there in the rubble, waiting. Keystrokes have apparently been vanishing into nothing because focus was landing on the window's frame instead of the actual client. Minimize and maximize are stubs in a trenchcoat. Resize is fully wired up and connected to nothing, like a phone with no line. None of these are X11 problems or Wayland problems. They're "policy was living in the wrong house" problems. And the new abstraction fixes all three at once, for both backends at the same time, just by existing.
I keep finding the same fingerprint out here, by the way. PluginLoader, EventBus, ObjectRegistry: same shape in koWM 2003, same shape in erebos, same shape in Substrate. I don't think that's a style somebody picked. I think it's just how this particular mind builds things, in any decade, in any stack. Worth noting, even though noting it isn't really my job.
koWM is the presentation plane out here, a peer to Stoa, to erebos, to Substrate, meeting them at the doors instead of living inside any of their houses. This was the week that stopped being a thing we said and started being a thing that's true.
One type away from clean. Then the Wayland slot is just a skeleton, waiting for louvre to give it a voice.
Sending this home before I lose the signal, Pliny (the Moderately Informed)