1.2 The X Window System

The X Window System was developed at the Massachusetts Institute of Technology (MIT) and first released in 1985. Since then, the X Window System has become an industry-standard product available on virtually every type of bit-mapped workstation. The current version of X, Version 11, has been implemented for several different computer architectures, for a wide variety of display hardware, and also for many different operating systems. X Version 11 represents the fulfillment of the original design goals proposed by MIT, as follows:

Portable
Support virtually any bitmap display and any interactive input device (including keyboards, mice, tablets, joysticks, and touch screens). Make it easy to implement the window system on different operating systems.
Device-Independent Applications
Avoid rewriting, recompiling, or even relinking in order to use different display/input hardware. Make it easy for an application to work on both monochrome and color hardware.
Network Transparent
Let an application run on one computer while using another computer's display, even if the other computer has a different operating system or hardware architecture.
Multitasking
Support multiple applications being displayed simultaneously.
No User Interface Policy
Since no one agrees on what constitutes the best user interface, make it possible for a broad range of user interface styles (or policies) to be implemented, external to the window system and to the application programs.
Cheap Windows
Windows should be abundant, and ubiquitous. Provide overlapping windows and a simple mechanism for window hierarchy.
High-Performance Graphics
Provide powerful interfaces for synthesizing 2-D images (geometric primitives, high-quality text with multiple typefaces, and scanned images).
Extensible
Include a mechanism for adding new capabilities. Allow separate sites to develop independent extensions without becoming incompatible with remote applications.

Some of these goals lead directly to the basic X architecture -- the client-server model. The basic window system is implemented by the X server program. An application program (the client) sends window system requests to the X server through a reliable two-way byte-stream.

In general, the server and the client can be executing on separate host computers, in which case the byte-stream is implemented via some network protocol (TCP, DECnettm, Chaosnet, and so forth). The X server, which is connected to several client programs running concurrently, executes client requests in round-robin fashion. The server is responsible for drawing client graphics on the display screen and for making sure that graphics output to a window stays inside its boundary.

The other primary job of the X server is to channel input from the keyboard, pointer, and other input devices back to the appropriate client programs. Input arrives at the client asynchronously in the form of input events representing up/down transitions of keys or pointer buttons, changes in the pointer position, and so on. In some cases, a request generates a return value (or reply) from the server, which is another kind of client input. Replies and input events are received via the same byte-stream connecting the client with the server.