For a couple years i the early naughts, I mostly ran DOS with various experimental / unusual…
For a couple years i the early naughts, I mostly ran DOS with various experimental / unusual (non-windows) GUIs on top. The most interesting one was a family of projects called XGUI that someone who I met in a chatroom about QBASIC gave me. He had been the hanger-on of a small group of weird but skilled programmers who had developed a whole bunch of projects, including TACKLE (a low-level language for 16-bit os dev modeled on a combination of NASM-style assembly and QBASIC) and the XGUI series of graphical environments. As far as I know, nobody but me & these guys ever used it: I was told not to distribute it further because the guy wasn’t sure if they still planned to release it (even though he hadn’t been in touch with them for years). I’ve since lost the files & lost touch with the guy who gave me them (since I only spoke to him through AIM, which is now defunct).
The XGUI projects were weird but also kind of brilliant.
I used two different generations of XGUI with no shared code. I forget the exact version names, so I will call them XGUI 2 and XGUI 3. XGUI 3 was sensible andconventional for what it was trying to do: it had its own special bytecode that all applications were in, which it interpreted, and a language for application development.
XGUI 2 was very different. It ran regular DOS applications, kind of, and made them multithread, kind of. Specifically: it provided a library of drawing routines and routines for loading current state from disk. A third-party application would, upon running, perform a single draw cycle and then exit. The XGUI 2 controller program would run whatever running application repeatedly, putting events & mouse position in the on-disk state.
It had some unusual features as a side effect of this structure. For instance, it had alpha, implemented by drawing every other pixel beneath the open window’s position (expecting mode 13/xmode, and expecting the switch to xmode to restore the framebuffer). But, also, the screen would constantly flash while you were using it.
XGUI 2 had ‘multi-threading’ because it could run two different programs in a row with different non-overlapping screen positions, and the flashing would get worse but it was basically non-preemptive multitasking. XGUI 3, despite literally being a VM, only ever ran the currently focused app.