TinyWM – A tiny window manager in around 50 lines of C
incise.org
incise.org
It's like the exact opposite of what the Linux desktop needed.
X does not implement everything and the kitchen sink. A bare Xserver won't even be usable without a dedicated window manager, the compositor is completely replaceable and runs as a separate process, etc. Just because it is perceived by some to be bloated doesn't mean it is monolithic.
For links, this docs page listing many (all?) wl extensions kinda gives you an idea what wayland core does not handle, and also what in general is available through wayland: https://wayland.app/protocols/
Found that pretty quickly and it doesn't go down a point-by-point feature comparison but gives you some idea of what's up in the "introduction" where it notes that Wayland doesn't include things like keymapping functionality, so that's all up to each compositor to implement. Excerpt:
> From a user's point of view, Wayland is nothing more than a framework. In particular, Wayland itself does not implement any display server that should correspond to the Xorg server. In Wayland, compositors are display servers, implemented by various projects. A compositor also serves as X's window manager (and X's compositor).
> This means users first have to choose a compositor, and via that compositor they "configure the server", i.e. set screen resolutions, input and video drivers options, etc.
> [...]
> Some lack of specification results in chaos more or less. For example one common complaint as of 2021 is that key remapping is absent in the Wayland protocol - in Wayland there is nothing that corresponds to xmodmap of X. Each compositor offers, if any, their own way to remap keys.
> The situation however is not totally random - many compositors depend on the library "wlroots", which abstracts such common tasks, and is aimed to be impartial. First started as a subproject of the compositor Sway, it now is used by many compositors. Exceptions include mutter and KWin, i.e. GNOME and KDE, and Weston.
TL;DR minor WM/DE projects have circled around wlroots as a life-raft to fill in the missing functionality, while major ones have gone their own way, resulting in extremely basic functionality potentially being wildly different (and having a different set of bugs and quirks and how-to-configure-and-use-it) depending on which compositor you're running, or even simply being absent on some.
[EDIT]
Unsurprisingly, Gentoo's cousin distro (if you will), Arch, has an even better page on it:
https://wiki.archlinux.org/title/Wayland
Note especially the part where it's possible for a given compositor not to work with certain graphics hardware, while others will. That's how little help Wayland gives to desktop environments and window managers. To get the equivalent of Xorg you'd have to get everyone to agree on a single fairly-big and featureful compositor and only use that.
Or, good lord, look at the display manager support table. LOL.
For processes which use multiple windows, I'd be OK with all being minimized when one is to allow above functionality.
There was a time when it was desirable to make room on the visible desktop while keeping long running processes running, but today we have lots of desktop real-estate and few legitimate long running processes, instead web pages leaching CPU cycles (I look at you, github!).
> There was a time when it was desirable to make room on the visible desktop while keeping long running processes running, but today we have lots of desktop real-estate and few legitimate long running processes, instead web pages leaching CPU cycles (I look at you, github!).
That probably depends on the person. It's not weird for me to have a web server running in the foreground of a terminal that's sometimes hidden. If it's stopped, it's not going to respond to my requests. It's in the foreground because there are times where it'll provide me a console to inspect the running state of the backend.
Same when I'm running an strace on a PID. Sometimes that terminal gets hidden. If that's stopped, the program whose PID I'm tracing is going to get frozen at some point.
I look into i3, thanks!
Btw, this is from using Little Snitch on the Mac. If I temporarily block the refresh, nothing bad ever seems to happen.
https://github.com/rtyler/tinywm-ada/blob/master/tinywm-xcb....
I love any time I can spend 2 minutes reading code instead of 20 minutes piecing together the basics from documentation.
[0] https://www.x.org/releases/current/doc/xorg-docs/icccm/icccm... , one of the standards for how WMs and X11 applications should communicate.
xterm &
glxgears &
exec /usr/bin/tinywm
you get: https://files.catbox.moe/m0ejwr.png (pointer isn't shown but it's there)(I might have missed something)
It doesn't look like it's drawing any title bars or borders or decorations of any kind.
It's to illustrate the minimum, in case you want to play with it and become very familiar with X.
Also, I'm a visual thinker - nothing picks my curiosity about software like a nice screenshot.
At any rate, I dug up the old thing: https://pastebin.com/i91yD96F – I also had some other scripts to control window placement, movement, etc. I once planned to rewrite it to a "real" language and combine it with a "slightly less tiny wm" as a full release, but never really got around to it, and I also don't really use tiling any more (I just have one full-screen window all the time).
Xlib itself is in C.
This isn't a "real program", as such. It's a demo or "rainy Sunday fun to figure out a bit how X11 works".
C "might" be minimal but it brings with it a whole lot of dangerous baggage. Other languages can be just as minimal without the baggage.
> This isn't a "real program", as such. It's a demo
I didn't mean to imply anything different. I was just curious why C was used in the modern day where we (all?) know that C is a language that _should not_ be used for demoing because less experienced devs will think they can use C too and continue to create dangerous code
/* TinyWM is written by Nick Welch <mack@incise.org>, 2005.
*
* This software is in the public domain
* and is provided AS IS, with NO WARRANTY. \*/
> we (all?) know that C is a language that _should not_ be used for demoing because less experienced devs will think they can use C too and continue to create dangerous codeThat seems rather patronizing.
I have no great love for C; it has sharp edges for sure, but it can be used just fine for a great many things even today. I've written a bunch of C programs because it's simple, straight-forward, "just works" (mostly), and I'm not writing OpenSSL or a network daemon so if I have an occasional buffer overflow it's not even a big deal.
Also, on C, please, get OpenBSD and check their security practices.