Like many others, I discovered the X11 graphic environment at the university. Graphical user interfaces were imposing themselves and X11 had many features that were desirable at the time: it could run over the network, and there were cross platform clients, Exceed on Windows, MacX on the classical Mac OS. It also ran across the large variety of Unix systems the university had, Solaris, AU/X, HP-Unix and later Linux.
While everyone was using X11, I never actually learnt to program that thing, when a course involved some form of graphics (and many did), we always used some intermediate layer, either a toolkit that would generate some stubs, language specific bindings, or just some scaffolding code written by the teaching assistants. Most of the time, the goal was just to draw some bitmap of data on the screen.
As time passed, old X11 toolkit like Sunview and Motif faded and where replaced by new ones, the underlying X11 infrastructure felt more and more distant and many of its original ideas were dropped: server side rendering (X11 has client and server backwards) was increasingly moved to the client – fonts were now on the application side, and the set of drawing operations provided by the server, lines, circles, and rectangles were no longer considered adequate. There were many extensions, like for instance to handle multiple screens, but most applications did not handle these. It was just easier to let some toolkit handle all the complicated stuff, and increasingly X11 was just used to run text terminals and draw bitmaps of data on the screen.
I still feel some nostalgic affection for this system, I wrote a few utility programs that interface directly to X11, but the system is dying, a crippled system that even the Linux distributions abandoned in the end.
The strange thing is, I increasingly feel that the web is going the same direction. Consider the following similarities:
- The underlying system has become to complex for programmers to interact with directly. they increasingly rely on some intermediate framework to build programs.
- The underlying display system has become so complex that there is only one common implementation left, the behaviour of the implementation is the reference, not some document.
- The display system uses one order of magnitude more resources that a native solution
- The underlying system has accumulated many extensions and options that are either not understood, not properly implemented, or both.
- The initial design meant that the display system would provide certain resources (fonts) and control some aspect of the actual content, this is dying out.
- The programs that run on this system have completely inconsistent user-interfaces.
- The underlying system does not have a unified notion of vector graphics, just partial sub-standards that are not compatible.
- Some features associated with graphical user interfaces, like copy-pasting or printing don’t actually work properly.
- Increasingly, the system is just used to push text terminals and bitmaps to the display.