Why X Is Not Our Ideal Window System (1990) [pdf]
std.org
std.org
Steve Jobs said two years ago that X is brain-damaged and it will be gone in two years. He was half right. -- Dennis Ritchie
Dennis Ritchie is twice as bright as Steve Jobs, and only half wrong. -- Jim Gettys
I have yet to come across anyone who thinks X is great...
Yet, somehow, despite all its shortcomings, intertwined hairballs, and sedimentary layers of ancient code, X has survived for decades and gradually become widely used in free open-source desktops. I'm typing this on a state-of-the-art (ha-ha) Ubuntu Linux 16.04 desktop running Unity on top of... X.
Now we're all hoping Wayland will successfully replace it.
Is X another example of "worse is better"?
"Is Wayland network transparent / does it support remote rendering?
No"
Then it is useless to me. As crappy as X is (and I agree that it sucks pretty hard), at least it works for my use cases.
If all they've done is port Vino to Wayland in order to enable remotely accessing a Wayland based desktop and they are still using the equivalent of the VNC protocol then that likely won't be performant enough for me. :(
Quoting from https://wayland.freedesktop.org/faq.html#heading_toc_j_8 :
"This doesn't mean that remote rendering won't be possible with Wayland, it just means that you will have to put a remote rendering server on top of Wayland. One such server could be the X.org server, but other options include an RDP server, a VNC server or somebody could even invent their own new remote rendering model. Which is a feature when you think about it; layering X.org on top of Wayland has very little overhead, but the other types of remote rendering servers no longer requires X.org, and experimenting with new protocols is easier."
No, the irony is not lost on me.
If I installed Wayland and ran X on top of it today, would it be as stable and feature-rich as a standalone xorg server?
Not quite. More like "it works" is better than "it'll be perfect".
That and working from a really cool vintage RS/6000 box with AIX with everything running off my contemporary Linux box.
It's a prime example of survivorship bias. I.e. all the problems and shortcomings "identified" with X11 apparently have little impact on how well/bad it behaves.
But no mistake, there have been numerous attempts to replace X11: Fresco, Y Windows, Pico (IIRC) and so on. If you want to identify what impairs a graphics and windowing system's design you should look at these. And IMHO Wayland, too, since, despite being in development for over 7 years it still didn't manage to find widespread adoption; compare that to X11 for which there existed a thriving ecosystem of software after just half the time.
IMHO something is done right by X11. Yes there are a lot of warts in and around it. But don't focus on those. Or do and see how "well" other systems deal with it. One part of X11 that often receives HUGE criticism is the whole HID input infrastructure. Among other things this was one of the main reasons for developing Wayland. And now, years later the whole HID input infrastructure of Wayland is still in its infancy and hardly useable. The developers have practically given up and tell people, "uhh, use libinput", which is hardly a bandaid: There is "some" support for input events in the Wayland protocol. But it's quite narrow, so libinput is now directly accessing /dev/input/… which opens a huge can of worms in how to properly distribute events and assign/revoke user access.
- Run a local Emacs server and connect via emacsclient.
- Run a local CUPS server and connect with libcups.
- Run a local tmux server and connect with multiple clients.
With HTTP: a machine runs nginx, which provides resources over http in the form of documents. nginx is a server.
With X: a machine runs Xorg, which provides resources over X11 in the form of windows/widgets/etc. Xorg is a server
Usually (e.g. almost every protocol) the remote machine is what has the server. In the case of X, it's the local machine. Of course it doesn't help that in jargon (vs techincal speak) server means all of:
* a machine we will put in a rack for running server software
* a remote machine i communicate with (usually using a protocol that has a server software on the remote machine)
* the peice of software listening for requests.
Even worse is that to run X programs remotely, theres usuall a local client talking to a remote server, which starts a remote client talking to the local X server.
Basically, what I'm saying is: it's perfectly logical and consistent and totally confusing at the same time :) I wonder if we need a new term (since p2p things are more and more confusing the ability to conflate local/remote machine with client/server anyway).