The failure of the X Window system paved the road for the rise of the Web

(written by lawrence krubner, however indented passages are often quotes). You can contact lawrence at:, or follow me on Twitter.

This is an amazing article about the absolute failure of the X Window system. Copyright (C) 1994, so this was written just as the Web was gaining momentum, but before it was obvious that the Web would become the main way that different devices could establish a single interface. Among the many good bits, there is this:

Figuring out where a particular resource value is for a running application is much fun, as resource can have come from any of the following: (there is a specified order for this, which has changed from r2 to r3 to r4)

.Xdefaults (only if they didn’t xrdb something)

command line -xrm ‘thing.resource: value’

xrdb, which the user runs in .xsession or .xinitrc; this program runs cpp on the supplied filename argument, so shit can have been #included from another planet. Oh, and it #defines COLOR and a few other things as appropriate, so you better know what kind of display it’s running on.

file name, pointed to by XENVIRONMENT


file name that’s the class name of the application (usually completely non-intuitively generated: XParty for xparty, Mwm for mwm, XRn for xrn, etc) in the directory /usr/lib/X11/app-defaults (or the directory pointed to by the XAPPLRESDIR environment variable). The default for this directory may have been changed by whoever built and installed the x libraries.

Or, the truly inventive program may actively seek out and merge resource databases from other happy places. The Motifified xrn posted recently had a retarded resource editor which drops modified resources in files in the current directory as well as in the user’s home. On startup, it happily looks all over the place for amusing looking file names to load, many of them starting with dots so they won’t ‘bother’ you when you list your files.

Or, writers of WCL based applications can load resource files that actually generate new widgets with names specified in those (or other) resource files.

What this means is that the smarter-than-the-average-bear user who actually managed to figure out that

snot.fucked.stupid.widget.fontList: micro

is the resource to change the font in his snot application, could be unable to figure out where to put it. Suzie sitting in the next cubicle will tell him, “just put it in your .Xdefaults”, but if he happens to have copied Fred’s .xsession, he does an xrdb .xresources, so .Xdefaults never gets read. Susie either doesn’t xrdb, or was told by someone once to xrdb .Xdefaults. She wonders why when she edits .Xdefaults, the changes don’t happen until she ‘logs out’, since she never reran xrdb to reload the resources. Oh, and when she uses the NCD from home, things act `different’, and she doesn’t know why. “It’s just different sometimes.”

Joe Smartass has figured out that XAPPLRESDIR is the way to go, as it allows him to have separate files for each application. But he doesn’t know what the class name for this thing is. He knows his copy of the executable is called snot, but when he adds a file Snot or XSnot or Xsnot, nothing happens. He has a man page which forgot to mention the application class name, and always describes resources starting with ‘*’, which is no help. He asks Gardner, who fires up emacs on the executable, and searches for (case insensitve) snot, and finds a few SNot strings, and suggests that. It works, hooray. He figures he can even use SNot*fontList: micro to change all the fonts in the application, but finds that a few widgets don’t get that font for some reason. Someone points out that he has a line in his .xresources (or was it a file that was #included in .xresources) of the form *fucked*fontList: 10×22, which he copied from Steve who quit last year, and that of course that resources is ‘more specific’ than his, whatever the fuck that means, so it takes precedence. Sorry, guy. He can’t even remember what application that resource was supposed to change anymore. Too bad.

Sigh. It goes on and on. Try to explain to someone how to modify some behavior of the window manager, with having to re-xrdb, then select the window manager restart menu item (which most people don’t have, as they copied the guy next door’s .mwmrc), or logging out. Which file do I have to edit? .mwmrc? Mwm? .Xdefaults? .xrdb? .xresources? .xsession? .xinitrc? .xinitrc.ncd?

Why doesn’t all this work the way I want? How come when I try to use the workstation sitting next to mine, some of the windows come up on my workstation? Why is it when I rlogin to another machine, I get these weird X messages and core dumps when I try to run this application? How do I turn this autoraising behavior off? I don’t know where it came from, I just #included Bob’s color scheme file, and everything went wrong, and I can’t figure out why!


The article concludes with:

X is just so stupid, why do people use it? Beats us. Maybe it’s because they don’t have a choice. (See Figure 2)
Nobody really wants to run X: what they do want is a way to run several applications at the same time using a large screen. If you want to run Unix, it’s either X or a dumb character-based terminal.

As much as I now condemn the Web, it’s clear that the Web solved a problem that was urgently felt in the 1980s and early 1990s. However, it is now 2017. We know all of the ways that the Web has failed. It is important that we move beyond the Web, just as in 1994 it was important to move beyond the X Window system.

Post external references

  1. 1