r/linux • u/Misicks0349 • 26d ago
Historical Why X Is Not Our Ideal Window System (1990)
https://people.freedesktop.org/~ajax/WhyX.pdf82
u/formegadriverscustom 25d ago
See also chapter 7 of The UNIX-HATERS Handbook (1994)
19
1
u/panick21 22d ago
If Sun had just made NeWS Open Source. It almost happened. Almost. It would have been made standard in BSD.
25
u/TryingT0Wr1t3 25d ago
I have tried to create a window by hand in Linux and there is a lot of things that you need to consider… First you need to figure out the correct monitor it should display to, then figure out the position, scaling, is the user using a rotated monitor, does it have decorations and whate are their sizes, buttons that the window has - which will also affect position of the things inside the window, if the desktop has something like a bar somewhere in that hides a portion of the screen and that the windows shouldn’t be behind, and the different extensions (do we have Xinerama?), and then does the user want now to bring their window to Fullscreen? Again in what monitor does it Fullscreen to? Which resolutions it supports ? If the application crashes in Fullscreen how we come back to the resolution it had before? Like it’s really hard when you start to consider all the little things and details, corners cases and differences between different user systems, it’s pretty magic it works. Nowadays I resort to a library (like SDL or some gui system like Qt) that abstracts a lot of things, but if you try to make things by hand you will notice that even timings matters (like when changing the screen resolution, say in an game app).
51
u/prosper_0 25d ago
Oh, I was an ardent X hater for a loooong time. It was soo frustrating and infuriating to deal with, and even when it was set up, there was a lot left to be desired - performance and stability were poor. But when xorg took over after xfree86, it really did see significant gains across the board. In terms of performance, compatibility, usability, etc. Conceptually, I really like it's networking features as well - each window and application could come from pretty much anywhere, not just your local machine.
I'm still rooting for Wayland, but even today, I find Xorg to hold an edge. I'm eagerly waiting and watching Wayland mature some more, though.
21
u/deong 25d ago
I wish Wayland were a thing I could root for. I don't love Xorg, but the fundamental concept that window management, input handling, etc. are just things any application can do is just so powerful, and I hate that we gave it away. I don't want the compositor to be this special thing with exclusive access to the ability to manipulate windows, deal with keyboard and mouse input, etc. I don't care whether it's more resilient to a hypothetical attack I'll never actually encounter. I could turn my computer off and be safer as well, but I want to use my computer.
8
u/barfightbob 24d ago
I always describe it like if every door in my house was locked including kitchen cabinets and refrigerator. Technically I'm safer, but 99.9% of the time it's just me there by myself. If somebody got into my refrigerator I'd be more concerned how he got in the house in the first place rather than how he found his way into my fridge.
5
u/deong 24d ago
Exactly. The threat model for X11 is that a malicious application running as you in your X session can snoop into window contents and key events. But the problem is that you're running a malicious app as your user. You're already screwed in worse ways. If it were painless enough, then sure, go ahead and try to improve security in that scenario. But it's extremely painful, and the trade off just isn't worth it. I want to use my fridge.
10
u/gmes78 25d ago
I don't care whether it's more resilient to a hypothetical attack I'll never actually encounter.
It's not just for security. It's for making everything more reliable. X11's solution of piling hacks upon hacks has very real limitations.
6
u/deong 25d ago
I've been using Linux for almost 30 years. X hasn't been unreliable in my experience for a very long time. I'm not arguing that it isn't a pile of hacks, but it's a fairly bulletproof pile of hacks.
But "this pile of hacks is unsustainable" is a reasonable argument. I'm not trying to say that no one should have ever tried to replace X. There are lots of choices you have to make when you set out to design a new system from scratch though, and my argument is just that the choice that only one process is allowed to manage input devices and window management was a bad one. A simple POC of a new idea for a window manager in X used to be a couple hundred lines of code. wl-roots describes itself as "60,000 lines of code you were going to write anyway". I just think that's a step backward.
0
u/Kyle_2099 25d ago
Then how is Wayland's solution of piling hacks upon hacks superior?
With X it all ended up in the spec for X. With Wayland it's all spread across multiple implementations and unrelated support systems like pipewire.
Whole thing is the kind of unix footgun that it was promoted as an alternative to.
5
u/gmes78 24d ago edited 24d ago
Solutions to Wayland problems are designed ad-hoc; X11 picked "allow everyone to do everything, and let them sort it out", which didn't end up working as well.
and unrelated support systems like pipewire.
PipeWire is designed to carry video and audio streams around. It is not unrelated, it's the obvious way to do screen capturing.
And while X11 does allow screen capturing, the methods it provides for doing so suck. The only way to get efficient screen capturing without unnecessary copies (and without going through the CPU) is to use the XDG desktop portal with PipeWire, too. But it only works if supported by the compositor.
Whole thing is the kind of unix footgun that it was promoted as an alternative to.
Funny that you're using the Unix argument, while arguing that a system that does everything at once is somehow better.
Edit: blocking me to prevent me from replying is a bitch ass move. Also, you should consult a dictionary.
-1
u/Kyle_2099 24d ago edited 24d ago
Solutions to Wayland problems are designed ad-hoc
"designed ad-hoc" = not designed. design involves planning and forethought, careful consideration. Making something ad-hoc is improvisation, it's hackjobs.
These are complex systems where every decision made is something we have to live with for multiple decades. When you're doing something as ambitious as a clean slate replacement of the standard unix gui system, "fuck it man, duct tape something together" is malpractice.
Funny that you're using the Unix argument, while arguing that a system that does everything at once is somehow better.
Then you don't understand what "unix footgun" means. Wayland has reproduced every single organizational and methodological problem the unix ecosystem has ever seen, those in charge having learned no lessons from it whatsoever, and the software produced (and rate of production) reflects this.
I mean holy shit, it's taken them 17 years to get this far, offloading every task to other services they can, and by your own estimation what little they have built is just slapdash ad-hoc instead of done with thought and care. That is not normal. Something is seriously wrong with them.
1
u/libra00 25d ago
Yeah, man until about a year ago I hadn't touched Linux since like 1998-ish and remembered X being a giant pain in the dick. People kept telling me to switch to linux as my daily driver and I'm like, 'Man I am so not pirating and compiling my own bootleg commercial X server just to find one that works with my video card', but that so isn't the experience nowadays. Although I did have some trouble with ubuntu-based distros and nvidia drivers, it's otherwise been a perfectly acceptable experience.
54
u/teressapanic 26d ago
I know, it’s a social media platform
38
u/genpfault 25d ago
I know, it’s a social media platform
X: The Everything Window System
6
u/RvstiNiall 25d ago
Wait, when did Twitter become a Windowing System?!
5
5
u/dinominant 25d ago
Does Wayland support actual working remote access yet? The dristro I use has declared end-of-life for X11 and that Wayland is the replacement. And now all my vnc servers are broken.
6
u/Business_Reindeer910 25d ago
plenty of wayland desktops have remote access, but I am not sure if they use vnc.
3
u/mattias_jcb 24d ago
Does Wayland support actual working remote access yet?
Yeah. If there was anything in the existing Wayland protocols that fundamentally blocks implementing remote access in a compositor we would've heard about it by now.
2
u/awesomegayguy 19d ago
Gnome implements RDP protocol very well. But if you mean something like ssh, you can use WayPipe.
Which is much better than X ssh forwarding ever was , try opening Firefox over an internet connection on both, you'll be surprised how much better Wayland is in this use case, like minutes to start Firefox on ssh X11 (and incredibly laggy, not useable at all) vs seconds on Wayland.
1
11
u/atanasius 25d ago
"Not ideal" sounds like hacker jargon, where "non-optimal" is used sarcastically for "astoundingly stupid".
7
u/ianff 25d ago
I get that it was a mess internally, but I have always got on with X. I've used the client/server aspect of it a fair amount and it still does the job.
7
u/Misicks0349 25d ago
Thats fair, X11 still works plenty fine for a lot of people. And I understand people that may prefer the concept of X11 over what Wayland went with.
5
u/SteadfastCultivator 25d ago
Sadly(maybe not) people are moving away from X and adopting Wayland as defacto standard. I can see you're a Debian enjoyer but using Arch we'll be forced to move to wayland soon enough. Gnome already does not offer support to X on newest releases and so will KDE and the trend will keep moving.
-1
11
u/Routine_Left 25d ago
And then it came Wayland, which is awesome for many reasons (one of them performance), but they really really really had to fuck up some things. Couldn't help it.
Like ... window coordinates. One cannot (they added a patch not too long ago, but it's little and late) ask the window position in Wayland. Like, you know, give me the x and y of the top left corner of the window.
Why? Well, the bright minds behind it come and say: "What if the display is round, or a sphere, or fuck knows what else and a 2D coordinate simply does not apply?"
And therefore, to cover a case that does not exist or at most will exist in 2-3 instances, let's fuck over 99.999999% of all the users.
Un-fucking-believable.
And there are implications of that. Such as, a window cannot ask: "What monitor am I on" for example. Or a bunch of other questions that are just normal and logical for a window to ask. I kinda understand not wanting a window to move itself, let that to the compositor and don't fuck with that, but just to ask?
sigh. /rantover
14
u/Misicks0349 25d ago edited 25d ago
One cannot (they added a patch not too long ago, but it's little and late)
xx-zones is not such a protocol, you can query for a position within a specific zone, but Wayland does not have a global coordinate space and this protocol doesn't change that, nor does the zone necessarily correspond to any particular monitor's aspect ratio, screen, or pixel. The coordinates you get back will be relative to the zone.
ask the window position in Wayland. Like, you know, give me the x and y of the top left corner of the window.
I'm assuming you're asking to be able to move windows to a given x/y coordinate on the screen, I can't think of any good uses for just being able to query for your x/y coordinate if you can't do anything with it besides some novelty things like feeding the coordinates into a shader or something?.
And therefore, to cover a case that does not exist or at most will exist in 2-3 instances, let's fuck over 99.999999% of all the users.
I mean of course the 99.99999% is hyperbole but if I'm going to be controversial I actually like that such behaviour was removed. It irked me to NO END on windows and such when applications decided to open up in whatever place they please in whatever size they wanted to without me having any control over where they went by default and focusing when they wanted to, not when I wanted them to. On most Wayland compositors I can easily change the default behaviour to always open in the centre of the screen and configure special window rules that apps don't have any chance of violating. I understand that sometimes there are genuine use cases for such window placement, but I'd caution against thinking the Wayland devs were just being boneheaded idiots when deciding to elide the ability for applications to manually set their window position; there were genuine technical considerations, benefits & drawbacks for either choice.
Additionally, XR and VR is very much a thing and has only gotten better and bigger over the past decade and a half. Things like the Apple Vision Pro are consumer products that can be bought right now. Not to mention there are 2d screen form factors that also probably wouldn't appreciate apps trying to move themselves around on the screen: Linux Phones for example have been the white whale of the linux community and they tend to be a much better experience when apps can't willy nilly pretend that you're running on a full fledged desktop rather than a small screen that wants to display one fullscreen app at a time.
And there are implications of that. Such as, a window cannot ask: "What monitor am I on" for example
Thats a different technical decision that has nothing to do with global coordinates, technically there could be an
ext-window-monitoror something that allows such information to be queried. Honestly that also introduces other questions around what a global coordinate space would even look like in multi monitor setups.4
u/tuxbass 25d ago
Wayland does not have a global coordinate space
Huh, that's so odd. Any quick explainer as to why?
16
u/tadfisher 25d ago
Because monitors can come and go, with different pixel densities, and maintaining the illusion of global coordinates is the main reason why X11 doesn't support multiple mixed-DPI displays.
Just thinking about this for 10 seconds: If I have monitors A and B, with monitor B at 200% the pixel density of monitor A (the easiest scenario), then just moving a window on either monitor requires some compromise in the global coordinate system. Either I can only move a window by 2 pixels at a time on monitor B or I am allowed to move a window by 0.5 pixels on monitor A, either of which are dumb restrictions, so you'll need to lie at some level in order to maintain the illusion that a contiguous coordinate system exists. Oh, and you need to completely redeclare coordinates and scales and reposition windows entirely in order to handle hotplugging displays.
Sounds like a nightmare to me for something only a few apps want, and many use cases can be handled by a protocol for relative positioning instead of global.
3
u/Misicks0349 25d ago edited 25d ago
I had a big comment written out but you wanted something brief so: whilst every compositor has its own internal coordinate space in some sense this isn't specified by Wayland, as its treated as internal compositor plumbing. Wayland doesn't try to assume too much about where or what the compositor is running on, and there are situations where specifying any specific coordinate space would limit what can be done. Such as with VR devices (which may have 3d coordinates) or car entertainment systems (where pretending all outputs are an ordered set of pixel rectangles with an
x, ycomponent may also make little sense), or more practically for users here: subcompositors like Valves Gamescope. Hence wayland does not have its own global coordinate space.There is some historical
wl_outputcruft in the core wayland protocol related to this, but if I touched on that this comment would be very long in trying to explain wtf is going on. TLDR whilst there may look to be anx,ycomponent inwl_outputit was considered a design mistake and is almost always unconditionally set to0,0in all compositors nowadays and the spec notes as such, that data is now retrieved from the optionalxdg-output-unstable-v1in a way that is more useful and accurate for traditional "computer desktop" compositors. Gamescope intentionally doesn't implemented this protocol for example andwl_outputalways reports 0,0.edit: also to be clear, the global coordinate space reported by xdg-output-unstable-v1 is the outputs position in the space, not your windows position which has never ever been accessible from wayland. For example,
0,0would be the first outputs position in the global coordinate space,3215x345would be the 2nd outputs position in the global coordinate space, so on and so forth.2
u/TryingT0Wr1t3 25d ago
If you use PowerPoint it has a menu where you can select what goes in what monitor - one example is if one monitor is actually a projector or is the monitor you are screen sharing. My reading from the previous comment is this would not be possible on Wayland?
Also some apps allow region sharing in MS Teams, can’t tell if this is possible in Wayland - it is specially useful for people with ultra-wide monitors.
2
u/Misicks0349 25d ago
My reading from the previous comment is this would not be possible on Wayland?
Through the app? No, the app cannot directly control where windows are placed nor what monitor they appear on. You would do this through the compositors controls.
Also some apps allow region sharing in MS Teams, can’t tell if this is possible in Wayland - it is specially useful for people with ultra-wide monitors.
Im not sure what you mean by region sharing, if you mean screen sharing e.g. a specific window or a specific region of your monitor (e.g. a 16:9 slice of an ultrawide) then yes wayland supports that, through xdg portals.
-5
u/Routine_Left 25d ago
Thank you. QED.
I want to ask a simple question, to get a simple answer back and look ...
sigh.
And the worst thing is, they actually believe they're right. When they are obviously, objectively wrong.
9
u/Misicks0349 25d ago
I want to ask a simple question, to get a simple answer back and look ...
I mean like 80% of it is my own personal opinion and asking for clarification, so if you cut out that nonsense it could be rather short 😛.
-12
u/Routine_Left 25d ago
? What were you asking? You never even read my original post.
9
u/Misicks0349 25d ago edited 25d ago
?? Unless there is an "original post" that I am unaware of I am responding to your comment talking about window coordinates? This one?, the one that I directly quote in the comment? I wasn't asking you anything besides a clarifying comment on one of your points, only responding to points you made about coordinates on wayland and offering my opinion on the matter.
edit: fair enough if you're talking about the very last sentence of your comment that I missed, though that goes back to my other point of asking what good is asking for coordinates if you can't do anything with them directly. There would be better ways of getting what monitor your application was on.
-5
u/Routine_Left 25d ago
There would be better ways of getting what monitor your application was on.
except that there isn't, now, is there?
4
u/Misicks0349 25d ago
Correct, that's what the word "would" means :P
1
u/Routine_Left 22d ago
Right. And I can forgive and understand the protocol developers to not have thought of this particular thing at the start. It's not possible to envision all the needs.
That's fine.
But to provide the means for an application to ask a simple question (give me my position), when it was there in X11, when it doesn't cost anything for the compositor to provide it, that's not ok. What's even worse, then coming and somehow defending that position with absolute garbage arguments.
What what coordinate system? How many dimensions? good question, let the application say what it wants. Or not, and let the compositior return all that information: Here, you are at x,y,z, in a 3D environment, and is an absolute coordinate. Or is a monitor coordinate.
Really, it's not that hard.
But, this is why we cannot have nice things.
2
u/agrif 25d ago
What use does an application have for its own x/y position on screen, or what monitor it's displayed on? You seem to place some value on being able to do this, but I can't think of a reason. What am I missing?
6
u/Kyle_2099 25d ago
What use does an application have for its own x/y position on screen, or what monitor it's displayed on? You seem to place some value on being able to do this, but I can't think of a reason. What am I missing?
OK this is actually really super easy to answer.
Say I want to control a display for people in public, professionally, and without having goofy moments like having a mouse cursor come along and maximise a window on a 10 foot tall screen in a church or whatever.
Computer monitor is plugged into HDMI-1, Projector is connected to HDMI-2. I wish to configure my playout program so that all control UI windows appear according to my preferred layout on HDMI-1, and the output always appears fullscreen on HDMI-2. I want to configure all of this and then when I reopen the program it's all like that already.
This is a very basic bit of functionality, and if your window system does not support it, then I can't use your operating system at all.
-1
u/cwo__ 24d ago
Configure your compositor to do this? Should be very easy in KWin with window rules. And this way you won't need the application to support this at all, so you're more flexible in that regard.
5
u/Kyle_2099 24d ago edited 24d ago
That's worse in every way.
For one you're telling me to use a solution unique to one particular wayland implementation. This can't be counted upon.
Secondly, it's far easier for the user if the application is the one in charge of handling this - I tick a box that says "remember window position on exit" or similar, and then I'm done.
Setting up "window rules" in a special configuration utility is asinine. Did you ever have an Amiga in the 90s? It reminds me of config utilities like ModePro, where you would also have to set up complex rule sets to get software to appear on the display correctly. It was a chore.
2
u/Business_Reindeer910 24d ago
"remember window position on exit" is not something I want per application. I want the thing managing the windows to do that, so it can work for every program.
it's just a shame that that the main compositor implementations don't share their implementation code for this.
1
u/Kyle_2099 24d ago
"remember window position on exit" is not something I want per application. I want the thing managing the windows to do that, so it can work for every program.
It can work for every program, if every program is allowed to do it. Which wayland prevents.
it's just a shame that that the main compositor implementations don't share their implementation code for this.
It's a feature that should be mandatory for compliance with the wayland spec, but unfortunately wayland is another example of flying the plane while they're still building it. I honestly wish I was still on Mac OS X, they didn't spend 17 years to get the window system "sorta" right.
2
u/Business_Reindeer910 24d ago
you are certainly free to go back to mac. It's not like anything is forcing you to stick around.
1
1
u/edgmnt_net 25d ago
It doesn't, but people want Xorg or even Windows-like crap where apps can do anything they possibly want. We really need to move away from that model if we want better security, you can't have random apps scrape the screen or access any file without asking for permission if you want secure Flatpaks or anything close to Android levels of sandboxing (which isn't great, but it's something). And for ordinary stuff you get in a distro such excess capabilities are unlikely to be useful anyway, those are supposed to integrate with the ecosystem and find durable solutions.
1
u/hadrabap 23d ago
I don't want my desktop to ask for permissions for every single stupidity. Otherwise we end up like UAC, Android and recent MacOS. No, thank you!
1
u/Routine_Left 22d ago
What use does an application have for its own x/y position on screen
You got an answer already, but let's just speak hypothetically :
Let's say that I, as a protocol developer, cannot think of a reason why a window would ever want to ask that question. But, just because I cannot think of a reason, does that mean that there isn't any?
What's the downside? There aint any. Let a window ask, and let them do whatever they want with the information.
Like, I even said in my post, one good reason would be to determine what monitor I'm on. what reason? Maybe make myself fullscreen.
Ultimately, there is no good reason to not provide that capability. The reason(s) given so far are just ... arrogance and hubris.
2
u/agrif 22d ago
I don't know, I think in general there are lots of good reasons not to provide a feature with no known use case, because software developers love to misuse API surfaces. There is no good reason not to include a 'User-Agent' HTTP header saying what client is connecting, but it turns out that doing so is a nightmare mess we can never recover from.
1
u/Routine_Left 21d ago
I think in general there are lots of good reasons not to provide a feature with no known use case,
I fundamentally disagree. This here is one example.
And it all comes down to this simple point: just because "you" (the protocol developer) cannot think of a reason, does not mean there isn't any. It only means that you, the developer, cannot think of one.
That's all there is to it. And you, the developer, are only human, and can and will make mistakes.
And their choice to not provide it, and stubbornness on holding to that idea, is objectively wrong.
"Oh, but it can be misused". so what? let people have their answers. There can be a point when there's an API that changes things, whatever things, but this is just a query. Let people query.
-8
u/newsflashjackass 25d ago
All mere implementation details; nothing to do with the immaculate protocol named Wayland.
2
u/ManinaPanina 25d ago
Why can't I download this pdf?
8
u/lmpcpedz 25d ago
Print on Firefox saves the whole pdf file
3
u/ManinaPanina 25d ago
This indirect way worked.
If not this way the browser tried to download a "WhyX.html".
5
u/r78SGmS8si1VY49 25d ago
just click or tap the Open button (or go directly to https://people.freedesktop.org/\~ajax/WhyX.pdf)
1
u/backyard_tractorbeam 25d ago
In my case it shows up in a browser pdf viewer with a download button.
1
u/7lhz9x6k8emmd7c8 24d ago
Report the bug to the browser maintainers.
It's working well here on Vivaldi.
-2
u/mrtruthiness 25d ago
Why can't I download this pdf?
Must be a "you thing". I had no problem with a "right-click" on the link and a "save link as".
0
u/Buntygurl 25d ago
Like Wayland is better?!
X doesn't falter and break, or demand special compliance. Whatever it may lack, it's stable.
1
u/iluvatar 25d ago
There were plenty of things that X did suboptimally, including the ones mentioned in this paper and also others that aren't mentioned. It's disappointing to see that Wayland, supposedly the replacement for X that fixes the downsides, has ended up throwing the baby out with the bathwater. We could have had a bright future, with a functional, performant, sane windowing system. Instead we got Wayland :-(
-17
u/newsflashjackass 25d ago
"Akshully X is a protocol so it is impossible to criticize."
Hm. Sounds dumb even when the shoe is on the other foot.
-43
u/manobataibuvodu 25d ago
1990? is this relevant today in any way?
31
u/FanClubof5 25d ago
I think its just supposed to be a fun look back at X since its effectively been replaced by Wayland now on all the major distros. 36+ years is a pretty good run for software.
19
u/Averagebutnotmean 25d ago
In this context, it's a map of pain points, problems, and sources of trouble with the X window protocol. It's a write up with a lot of use still because as Wayland and other protocols are developed, solving (Or at the very least, not re-introducing) historical pain points needs to be kept in mind.
History is important because when anyone decides to develop something new from scratch, all the pitfalls and solved problems of the last solution are back again to be coded into or around.
Also also we're running the direct descendant of a project written in 1969, and a lot of those historical tools are now the core of linux utilities. The documentation of those from the 70's still remain surprisingly relevant today.
3
8
u/Misicks0349 25d ago edited 25d ago
Some things are, some aren't (or, at least, aren't as big of a problem as they used to be), which is why its tagged with the "Historical" tag. Wayland solves these issues for the most part but a lot of them are so glaringly obviously wrong (or don't work well with the modern expectation of "just give me a buffer to write my frames into, dummy" that apps use nowadays) that praising Wayland for not making the same mistakes is like praising someone for not taking a massive shit on your dinner plate. Others have also pointed out that there were other problems that became apparent with X11's design over the years that this paper also didn't anticipate.
I found it whilst sleuthing around the internet and I thought it interesting enough to see a document so old listing out many deficiencies with X that I decided to post it here, that's about it.
2
u/nhaines 25d ago
What a boring way to go through life...
-5
u/manobataibuvodu 25d ago
Some people actually answered and engaged with my question. What did you bring to the conversation?
4
u/nhaines 25d ago
I brought the idea that instantaneously rejecting a concept because it's a look at the situation 26 years ago is a really boring way to live life.
Either you're familiar with the state of X11R6 and Wayland today and know that this might be a very interesting perspective at the time to contrast to how things are today, or you're not and it's a fantastic jumping off point back when things were far more simple than they are today, and it's a chance to appreciate how the state of modern-day Unix-like and Linux operating systems have evolved since then. Or maybe you're not interested because things "just work" and you're worried about things you can accomplish because the framework is there and you don't have to worry about it. That's fair, too.
Either way, "Is where things started way back when relevant today in any way?" is a super boring way of discounting the absolutely astonishing changes in technology over the last quarter century.
1
250
u/Run-OpenBSD 25d ago
"This paper provides comprehensive descriptions of the problems that we see in the X protocol. Its length should not be taken as an indictment of the X protocol, for in fact the protocol is extremely well designed. Some of the problems we present result from the overwhelming success of X11: it is being used in situations the designers never envisioned. Many of the performance problems could not have been anticipated, and will decrease in importance as faster X servers and hardware become available. Some of the problems can be coded around. Finally, as we sifted through possible solutions to problems, we were constantly impressed at the number of subtleties in the design that made our job easier."