My thanks go to the Digital Equipment Corporation: without their belief in, and generous support of, this window system, it would have remained just another hack used by an MIT research group. DEC provided support (in the form of hardware), and yet did not try to exercise any control of rights to the software. Other companies would do well to follow DEC's example. The server has been completely rewritten several times now, and I am reasonably happy with it. I have fine-tuned it specifically for the current (sub-optimal) VAX compiler. For other machines, faster code may be obtained in some cases by changing sizes (e.g., to avoid indexing shifts on the 68000) or register declarations. Attempts to parameterize along these lines have only been made for the byte-swapping code. Unfortunately, a great many invariants are not written down. Hopefully you will spend a few weeks understanding the code before you muck with it. If something seems easy to add or change, you probably forgot something important. Almost everything depends on everything else. It is almost impossible to devise rigorous test cases. Innocuous looking changes can have large performance effects, so watch out. If you muck with fundamental window components, a good cross-check is to see how quickly you can manipulate a window with, say, 100 non-adjacent subwindows. I would liken the current functionality of the window system with Version 7 in the history of Unix: adequate for many tasks, but missing lots of bells and whistles. I have tended not to add a feature until there is a real application that can't be finished without it. Now that it is out of my control, and assuming it survives, no doubt a year or two from now people will have hacked it into the equivalent of 4.3bsd. For those who just can't resist such urges, here is a list (in no particular order) of suggestions people have already made. I make no claims about which of them are reasonable. 1. Redo fonts to handle all the font attributes ever invented. 2. In X_MoveWindow, X_ChangeWindow, and X_ConfigureWindow, add options for lowering the window and for leaving its stacking order unchanged. 3. Add a request to change the width of a border, with options to raise, lower, or leave the stacking order unchanged. The inside of the window should not move. 4. Add stack push/pop options to X_FocusKeyboard. 5. Allow an application to send an input event to a window. 6. Allow transparent windows to have opaque subwindows. 7. Add MoveWindow, RaiseWindow, LowerWindow, DestroyWindow events. 8. Add a request to return the event mask for a window. 9. Allow multiple clients to SelectInput on the same window. 10. Add requests to return the background and border Pixmaps of a window. 11. Add support hooks for automatic placement (e.g., tiling) of windows. 12. Add a request to create a cursor from a Pixmap. 13. Add requests for printing scaled and rotated text. 14. Add a request to draw with a tile. 15. Generalize the notion of GrabServer to GrabWindow. 16. Allow an application to find out if output to (a region of) a window has occurred since a given point in time (e.g., since a PixmapSave of (that region of) that window). 17. Add support for saving the bits of an obscured window and suspending output to it until it is fully exposed. 18. Add support for Bitmap and Pixmap data to come from shared memory segments (SysV) and files. 19. Allow keyboard keys to be grabbed. 20. Allow window creation to insert between two existing windows. 21. Add request to return a single plane of a region of a window. Robert W. Scheifler MIT Laboratory for Computer Science August 1985