My love-hate relationship with Wayland ────────────────────────────────────────────────────────────────────── # The X windowing system, and me It took me years to come up with the X11 setup I currently have. I had to learn Xlib and XCB programming in the process, because I wanted an experience so sweet an tailored to my needs that I wrote a shitload of tools [0][1][2][3][4], just for the sake of learning how the venerable X.org server works internally. I learnt a lot of stuff in the process. About the X protocol and libraries, of course, but not only. Because of the complexity of its interface and architecture (I'm not saying this in a pejorative way!), I had to learn how to read the documentation (XCB ? Documentation ?), understand its inner concepts, organize my code better and force myself into a discipline I didn't have before. Building programs for my X environment also helped me think about what I need to feel comfortable when using my computer. What makes my workflow more fluid, or what slows me down. I quickly realized that tiling window managers were not for me for example, and that I need a quick way to move windows at to opposite side of the monitor, in a different size. That why cwm(1) quickly became my best friend for managing windows. When I wrote glazier [3] later, I use cwm as my model, and ended up creating a somehow stripped down version of it, on top of XCB rather than Xlib ! Then came Wayland. [0]: https://github.com/wmutils/core [1]: https://github.com/wmutils/opt [2]: git://git.z3bra.org/xmenu.git [3]: https://z3bra.org/glazier [4]: https://z3bra.org/man/ewmh # Wayland, take one (2014) I really heard about Wayland a few years ago, back when I was discovering Linux, and especially aesthetics of a Linux desktop. At the time, I was trying hard to make my desktop look good to me, and was spending much more time "improving" my workflow, rather than doing any real work. It was pretty fun though, and helped me get into the deepest corners of my operating system configuration, including replacing the init system just so my "ps" output could fit on a single terminal page ! During my explorations, I stumbled upon a video showcasing a 3D Wayland compositor [5]. The video shows a 3D where the user navigates like in an FPS game, put application windows on the walls, and navigate between them by "walking around" the desktop. THAT WAS SO COOL ! So I looked into this "Wayland" thing, and discovered that this was a competitor to the well-known X server, which I was still experimenting with, but was slowly starting to show its limits in terms of customisability. I read the Wayland introductory post, and started looking into how I could test it out, and what could be *actually* done with it. And as it turned out… Not much. Back in the days (around 2014), the only "viable" option was to use weston, a compositor made to showcase Wayland, rather than do any actual work. It featured a terminal (weston-terminal), but that's pretty much it. You couldn't even get a web browser running, so that was FAR from usable. I wanted to do customizations, tuning, modifications, try new concepts… Not feel stuck in a totally meaningless desktop environment. And so I did what every IT hobbyist does in the Unix world when a new technology appears to "replace" and older one: join the hate bandwagon ! It was pretty easy to hate it at that time. It was advertising as the new challenger, yet nobody adopted it, there was nothing useful made out of it, and the only "documentation" was the code of the single, useless, application available: weston. I remember trying to look at that code and was so horified that it reinforced my hate against it. It was at that time that I decided that X.org wasn't going anywhere, and that I could invest some more time to learn how it works internally and start making software for it. We (dcat and I) came up with wmutils [0], which is to this day the most "famous" software I wrote, even though it targets a small niche. [5]: https://youtu.be/_FjuPn7MXMs # The Plan9 operating system Years were passing and I stopped caring about how my desktop *look*, to concentrate on what I could *do* with it. I started contributing to more meaningful software, to perform data deduplication [6] for backing up my family pictures, securely storing my passwords [7] and so on… I also started looking into other operating systems, mostly OpenBSD (which powers all my servers!), and Plan9. Plan9 was a fascinating discovery at the time. The system was so elegant, and consistent that even OpenBSD looked messy compared to it (not even mentioning Linux !). Since I discovered it, I've been admirative about it, without ever giving it a try. Not even plan9ports ! I've however read the research paper quite a few times, and integrated some concepts in my day-to-day computer usage, like embracing the mouse for the correct use cases, rather than being a "TILING WM FTW, LUV KEEB, MOUSE SUCKS LOL" kind of guy. [6]: git://git.2f30.org/dedup.git [7]: https://z3bra.org/safe # Wayland, take two (2019) A couple years passed, and I started hearing about Wayland more and more. There was this guy who created a simple WM for wayland, "swc", and everyone was so enthusiastic about it! This was the first time I heard about someone doing ACTUAL work for Wayland. Of course I heard about GTK and Qt providing bindings for it, but it didn't really interest me. This new window manager, however, was the proof that real work was starting on Wayland. Then came "sway", the compositor meant to be the i3 window manager for wayland. Later on, a new library named "wlroots" came out of it, and started gaining widespread usage. I was hearing more and more people succesfully "switching to wayland for the desktop", and I started being curious again. I looked into some Wayland articles here and there, out of curiosity rather than from real interest… Then Drew Devault, the creator of the famous "wlroots" library posted this article: https://drewdevault.com/2019/05/01/Announcing-wio.html It was announcing the initial release of "wio", a wayland compositor replicating the rio(1) window manager from Plan9. THAT WAS SO COOL ! I read about rio multiple times when looking at Plan9, and tried to replicate its usage under X multiple time, in vain. And this guy come up with a Wayland compositor doing exactly that ? This was the time for me to stop hating on Wayland, and actually look into it. I started reading about it as a protocol, as a library, how it differs from the X server, and why this is a good thing. To be totally honest. I didn't understand. It was still to complex for me to understand, and I started hating it again, this time for a *real* reason: I could not understand it. From the other feedbacks I had, many stuff were still imprecise and not working. Most people on wayland had to resort to "Xwayland", that could let them run X software under wayland. It felt hacky, and I decided I didn't want wayland anymore. # Crux, OpenBSD and the lost drives By the end of 2019, I bought myself an SSD for my workstation, deciding that recycling old hard drives was great for the planet, but not so for my sanity. Reinstalling your OS often because your drives fail is good for practicing and cleaning up, but it gets boring over time and cleaning up, but it's boring at some point. When I got that SSD, I decided to try OpenBSD as a workstation, and slapped it on my SSD real quick. I was happy, until I realized that I could not mount my existing /home and /var/data partitions, because I used LVM for partitionning my 1Tib harddrive, which stores all my data. That's how the SSD took dust. By the end of the year, a pandemic known as Covid-19 stroke the whole world, and eventually resulted in a full country lockdown in march 2020. This left me with a lot of time on my hands to eventually do stuff that were on my TODO for a while, which includes setup up a good backup system for my data. That's fortunate because a few weeks later, my 1Tb drive died spectacularly, taking with it all my data, and /home partition. That's only a few month later that I replaced this failed drive. This time I decided to go for a filesystem I could use on both Linux and OpenBSD, that is, well, nothing actually. The only common filesystems between Linux and OpenBSD are FAT32 and ext2, which I didn't want to use at all. I then gave up on OpenBSD, and decided to reinstall my current OS, Crux [8] on the SSD, when I have some time. [8]: https://crux.nu # Wayland, take three (2020) Tech news come in waves. You do not hear about something for months or years, and all of the sudden, everyone is debating it ! This is true for Wayland, up to the point I read a post about X.org being tagged as "abandonware" [9]. This article made a lot of noise in the wayland community and got many replies [10][11][12][13]. These discussions convinced me that Wayland was now usable, and I decided to look into it. Again. And so did I… [9]: https://www.phoronix.com/scan.php?page=news_item&px=XServer-Abandonware [10]: https://lobste.rs/s/vqv6nu/it_s_time_admit_it_x_org_server_is [11]: https://ajaxnwnk.blogspot.com/2020/10/on-abandoning-x-server.html [12]: https://lobste.rs/s/qtplaa/on_abandoning_x_server [13]: https://arewewaylandyet.com # Crux and the X-less ports As of november 2020, we're going for a lockdown again, as the (in)famous "second wave" of Covid-19 strikes again. As I get to spend more time home, I decided to reinstall Crux on the SSD, with a special twist this time: The X server won't be installed at all ! This will force myself into embracing and understanding Wayland if I want to use my computer. As time passes by, I'll certainly hit some shortcomings of wayland, but I'm decided to actively participate in its deployment this time ! I gave Wayland a quick try first (using X11 as the backend), to make sure that the software I planned on using (wio, cage, alacritty and firefox) were usable under wayland), and started porting them on crux. I made myself a "wayland" port tree, and started looking into what is needed for running wayland natively on my desktop. I'll be documenting what I find along the way, and collect thoughs on my findings. You'll find them on my gopher hole, under /notes/wayland, along with this "introduction". As a conclusion, I'll say this: Only fools never change their minds. Don't hate on a technology just because you don't see the point, or don't understand it, because you might embrace it later on. Unless it's systemd. It just plain sucks. Be happy, stay cool, and contribute ! ☮️ 20201106.1728