For example, there is only one coordinate space in the X11 world. This meant that 1 pixel is always N "real" pixels (typically N=1).
But nowadays we have this thing called HiDPI, where 1 pixel can mean 1.5 real pixels on one screen (150% scaling), 2 real pixels on the second (200% scaling), and 1 real pixel on the third (100% scaling). We need mixed DPI and hence multiple coordinate systems, but you will break existing X11 programs if you tried to add that to the protocol, and at this point if you force your way through the problem it'll just be Wayland.
Existing X11-compatible systems "fix" this by:
1. assuming N=scale factor, thus upscaling all programs. Everything becomes a blurry mess (see XWayland).
2. assuming N=1, and let the programs upscale themselves. The problem is older apps (e.g. GTK2) don't understand HiDPI and you get a GUI for ants.
This is the wrong way to do scaling and even Wayland got it wrong and has been very slowly fixing things. What you actually want to do is just use real pixels everywhere and just tell the client "here's your NxM window size and it will be displayed in a X scale" and let the client do the intelligent thing. If it's a browser, a 3D game, or a PDF reader it will render directly at target resolution and scale with no fuzziness and those are most use cases people care about. GUI toolkits were stuck at integer scaling for a long time and thus the strange solutions to render at higher resolution and then scale down happened. All of this can work in X11, just always use native resolution for everything but Wayland is much better anyway and works great these days.
This is already how the Wayland fractional scaling protocol works. You have a 100x60 window and Wayland tells you the scale is 1.5. You give Wayland a 150x90 framebuffer and call it a day.
The giant problem with X11 is that it is still making the assumption that everything is one giant screen -- even if you have multiple monitors and whatnot. Even the act of sending a scaling event like Wayland does is a challenge on X11.
The assumptions that X11 uses are incompatible with what personal computing turned into. Drivers, security, the networking part... All of it is just not how things work these days.
It is a major project, it is hard to push through but it's there already, with most of the work complete by now.
And as a programer I must say that underlying Wayland libraries are vastly better than X11 ever was.
The people who actually work on it decided that was not the way forward, and chose another approach.
If you are qualified to work on it yourself, and you disagree, you can step up to maintain and improve X11.
Now, X11 being un-sandboxable is truly something broken by design.
There are many technical aspects that make Wayland broken by design (like default forced vsync, forced double buffering, a fucked up event-loop for single threaded applications or severely lacking functionality for things like window positioning or screen sharing). But the biggest problem is the design-philosophy: Wayland makes life extremely easy for gate keeping "Protocol Designers" and extremely hard for application developers.
> un-sandboxable
Not true. The quick and dirty way would be using Xephyr. Besides that many access control hooks like XACE are present and standardized in the X11 protocol for many years. Application developers just choose not to use them. So if X11 is not secure enough for you, blame GNOME and KDE, not X11.
A few things:
1. Vsync-by-default is the norm. X11 was the outlier.
2. Wayland does triple buffering, not double buffering.
>a fucked up event-loop for single threaded applications
I dunno, I wrote Wayland applications and I did not notice any peculiarities w.r.t. the event loop, at least in comparison with other platforms like Win32.
You need to expand a little more.
>window positioning
I suggest to read up on the Gitlab MR for the in-development window positioning protocol. The basic TL;DR is that window positioning has certain implications regarding tiling window managers and other unusual desktop usecases e.g. VR.
>screen sharing
I just shared my screen this morning.
> Not true. The quick and dirty way would be using Xephyr.
...So what you are saying is that you'd need a separate server running. Thanks for telling me that X11 is unsandboxable.
Check the lwn.net archives for some articles that explain this in detail.
https://zamundaaa.github.io/wayland/2021/12/14/about-gaming-...
Even according to your blog post uncomposited X11 wins in all cases (or is tied within the error of one millisecond). It especially sweeps the floor with immediate rendering.
(And no, composition is not just for 3D cube effects or anything like that. Although it certainly enables them.)
MacOS have moved on, Windows have moved on, Linux should do the same.
I managed to be a bystander in this debate as I've been using X exclusively but I do hope that one day Wayland gets all the functionality and performance of X, and people stop getting frustrated by it.
People dragged their feet on Wayland support for at least 10 years.
The Wayland developers have limited manpower. Obviously it would take a long them for them to get Wayland to reach a critical mass when there wasn't support from the community.
Sort of feels like a self-fulfilling prophecy.
Wayland might reach feature parity in 2, 5, 10, or 20 years, and I'm fine waiting, because while X11 can kinda work well now, its archaic design with 10 levels of hacks will likely make it extremely hard to support new needs (it already struggles with some existing use cases).
Are you working on X11 though?