X11, Part Deux: Why It Blows

In a recent flame war about X11, a comment suggested that using Emacs under X11 and then saying that X11 was “primitive” was like judging modern Windows by using Windows 3.1.

It’s interesting that they bring up Windows 3.1, since the evidence will show that Windows 3.1, for the majority of actual users, was already years ahead of X11 and its ilk even back in 1992.

Ultimately the roots of why X11 blows come back to the community that designed it and the community for which it was designed. It was designed by engineers and dorks to be an interesting technical exercise in how to construct a display server. Note that the term Window Manager never appears in that statement, and that is telling. X11 as a system was not initially designed with the idea of being a comprehensive user interface and application support platform. It was initially designed as a way to experiment with display system mechanism vs. policy, but was hastily rolled out to crush Sun’s network window system before it became another NFS. So, at its core, it was a funky display hack. 20 years later it is still a funky display hack.

Meanwhile, even the Macintosh has had time to put a real operating system under its nice user interface, and update the display technology to do things that X11 only dreams about (Windows as OpenGL textures? Resolution independence? Fully antialiased rendering? Decent system wide text layout?). MacOS has all of this infrastructure not just as a technical exercise, but to support the requirements of the applications that users run on the platform.

But, all of this is the lowest level of the infrastructure. MacOS (and Windows) also have mature mechanisms that support application development at a high level. For example, It’s great to be proud of the fact that GNOME and KDE have text only copy paste covered. But how about a system wide standard for drag and drop? How about styled text? HTML? Images? Structured graphics?

MacOS, via Cocoa, also has high level frameworks for modelling a lot of the standard functionality of a GUI application. I’m not just talking about the user interface widgets. I’m talking about comprehensive support for MVC. There is standardized infrastructure in the AppKit to model your document, archiving, control flow and input focus, communication between the model and the view (key value coding, key value observing), undo, redo, copy and paste of rich content, drag and drop, shared support for text styled text editing and, in addition, for no extra charge, lickable icons.

But this isn’t anything new. Even as early as 1985, the MacApp framework on MacOS 2 or 3 provided a lot of these features. Just not in a package at the same level of maturity.

Of course, as X11 shows so well, all the mechanism in the world does you no good without developers who care passionately about the usability of the final product. This is why Firefox or Mozilla are pretty decent even on X11. This is why most of the X11 applications I have ever used completely blow (GIMP? Xfig? Please). Usability and polish are not high priority requirements. Other things take precedence, and it shows.