It is not perfect but it's a pretty good protocol/API.
It is kind of awful. Or at least significantly subpar. I use to work on twm, tvtwm, and fvwm, or an xtrek, nettrek, and xtank. Not like "I used those to do work", but I contributed code to them (or was a primary maintainer). For example it is "my fault" that many X11 window managers use (or have modes to use) the m4 macro preprocessor on their config files. I won't say I'm a world expert in X11, but I have done more then my fair share of work in and around X11.
X11 was an ok, but not awesome design to support what was common in the early 1990s. It didn't keep up with changing hardware or users needs/expectations. Font handling for example was poked at a few times and then largely left to rot. I would take MacOS's or iOS's graphics subsystem any way of the week and twice on Sunday for most jobs. Rendering fonts and curves is far simpler, anything dealign with alpha transparency is easier, and so on.
For a recent project I have been controlling a laser cutter. I ended up using macOS's graphics layer to render fonts as BezierCurves and combining them with other BezierCurves (most of macOS's rendering layer deals in BezierCurves, and you can get it to cough them up in many contexts), and I collect the curves into collection of CutPaths withe various nongraphical attributes (laser frequency, power level, and number of passes). I form them into tiles, space the tiles on a surface (the tiles are "mostly" rectangular, but I have some support for fitting non-rectangles when it is really needed to pack things onto a single sheet of material). I convert the Bezier curves into things the laser turret handles and burn my projects. X11 would be utterly unsuited to the task. Now to be fair most of what I get from macOS isn't hard to do directly with my own BezierPath code, making curves out of straight line rectangles and line segments is easy enough, ellipses are harder then you would think, but with an assist mathematica it is a solvable problem. Doing text layout is a stone cold bitch though. Before deciding to lean on macOS for bezier paths I took WebFotns which are a collection of SVGs which aren't too hard to turn into Bezier Curves. However even after writing a significant amount of code to parse web fonts, and then lay them out character after character they look awful in some combinations. It turns out kerning and ligatures were invented for a reason, and the reason is because text kind of sucks without it. That might be acceptable in some contexts, but if you are layering text onto things it mostly isn't a debugging "SLOT A" it tends to be the important decorative embossed text. X11 might actually do some of it, but not in a way that lets you extract anything other than pixels. Not a curve. Plus borrowing macOS's text system I can do things like "lay this text out across this other curve not straight lines. Or "lay this text out in this rectangle, but exclude these other sub areas in the rectangle..."; X11 doesn't do any of that.
Those seem like minor things, and to a certain extent they are minor. On the other hand basically anything you look at in X11 has a similar deficit. Except being able to shove graphics operations over a network connection. Other windowing systems basically go pixel diffing of virtual frambuffers and send compressed diffs along. If that doesn't work well for a particular task you are screwed. X11 shoves graphic primitives over the wire, this is much better for some applications. You can also do the virtual frame buffer diffing thing with X11 if that works better for your application.
X11 could have used an X12, but never got one. It should really be about X17 by now. That doesn't mean it is worse then Weyland, but trying to defined it like it is an awesome piece of software as opposed to something old and creaky that kind of gets by isn't really helping address the issues X11 has, and by extension the drag it has on everything built on top of it.