interface policy in the clients' hands. The first principle was modified during the design of X11 to: Do not add new functionality unless you know of some real application that will require it. X has largely kept to these principles since. The X.Org Foundation develops the reference implementation with a view to extension and improvement of the implementation, whilst keeping it almost entirely compatible with the original 1987 protocol. Core protocol Communication between server and clients is done by exchanging packets over a network channel. The client establishes the connection, sending the first packet. The server answers by sending back a packet stating the acceptance or refusal of the connection, or with a request for a further authentication. If the connection is accepted, the acceptance packet contains data for the client to use in the subsequent interaction with the server. After connection is established, the client and the server exchange four different types of packets over the channel: Request: the client requests information from the server or requests it to perform an action. Reply: the server responds to a request. Not all requests generate replies. Event: the server sends an event to the client, e.g., keyboard or mouse input, or a window being moved, resized or exposed. Error: the server sends an error packet if a request is invalid. Since requests are queued, error packets generated by a request may not be sent immediately. The X server provides a set of basic services. The client programs realize more complex functionalities by interacting with the server. Windows What other graphical user interfaces usually call a window is a top-level window in the X Window System. The term window is also used for windows that lie within another window, that is, the subwindows of a parent window. Graphical elements such as buttons, menus, icons, etc. are all realized using windows. A window can only be created as a subwindow of a parent window. This causes the windows to be arranged hierarchically in a tree. The X server automatically creates the root of the tree, called the root window. The top-level windows are exactly the direct subwindows of the root window. Visibly, the root window is as large as the screen, and lies behind all other windows. Identifiers The X server stores all data about windows, fonts, etc. The client knows identifiers of these objects – integers it can use as names for