The Art of Unix Usability

Eric Steven Raymond


Rob W. Landley


This book and its on-line version are distributed under the terms of the Creative Commons Attribution-NoDerivs 1.0 license, with the additional proviso that the right to publish it on paper for sale or other for-profit use is reserved to Pearson Education, Inc. A reference copy of this license may be found at

Revision History
Revision 0.1April 18 2004esr
Start of book



Table of Contents

An Invitation to Usability
1. Premises: The Rules of Interface Design
Usability Metrics
Usability and the Power Curve
The Rules of Usability
Rule of Bliss: Allow your users the luxury of ignorance.
Rule of Distractions: Allow your users the luxury of inattention.
Rule of Flow: Allow your users the luxury of attention.
Rule of Documentation: Documentation is an admission of failure.
Rule of Least Surprise: In interface design, always do the least surprising thing.
Rule of Transparency: Every bit of program state that the user has to reason about should be manifest in the interface.
Rule of Modelessness: The interface's response to user actions should be consistent and never depend on hidden state.
Rule of Seven: Users can hold at most 7±2 things at once in working storage.
Rule of Reversibility: Every operation without an undo is a horror story waiting to happen.
Rule of Confirmation: Every confirmation prompt should be a surprise.
Rule of Failure: All failures should be lessons in how not to fail.
Rule of Silence: When a program has nothing surprising to say, it should say nothing.
Rule of Automation: Never ask the user for any information that you can autodetect, copy, or deduce.
Rule of Defaults: Choose safe defaults, apply them unobtrusively, and let them be overridden if necessary.
Rule of Respect: Never mistake keeping things simple for dumbing them down, or vice-versa.
Rule of Predictability: Predictability is more important than prettiness.
Rule of Reality: The interface isn't finished till the end-user testing is done.
Comparison with the Nielsen-Molich Evaluation Method
Identifying with the User Experience
2. History: A Brief History of User Interfaces
Batch Computing
Command-Line Interfaces
What's Old is New Again
Vector Graphics, Video Games, and NLS/Augment
The first GUIs
The X Windowing System
The Color Convergence
GUIs in the era of commodity hardware
The Unix resurgence
Beyond the WIMP?
3. Programming: GUI Construction in the Unix Environment
Programming with the X Server
Toolkit libraries and bindings
Components of GUI environments
Higher-Level Widgets with Consistent Policy
Window Managers
An interface to ICCCM, and possibly an object broker
Sound Support
Other Services for Application Programming
Choosing a Desktop
Interface styles and Programming Models
The X Programming Model
Events: the Input Side
Rendering: the Output Side
X Programming at the Application Level
Scripting Languages, Code Generators, and GUI Best Practices
4. Wetware: The Human Side of Interfaces
Novelty, Consciousness, and the Single Locus of Attention
Real Time Costs
Hick's Law and Fitts's Law
Habituation, Expertise, and Undo Operations
Interfaces and Flow
Buffering and Human Memory
Designing around Characters and Stories
Designing With Personas
5. Examples: The Good, the Bad, and the Ugly
Case study: CUPS configuration
Case study: xmms, xine, and totem
6. Reality: Debugging and Testing User Interface Designs
A. Design Rule Reference
B. Bibliography

List of Figures

2.1. IBM 029 card punch.
2.2. ASR-33 Teletype.
2.3. VT100 terminal.
2.4. The Xerox Alto.
2.5. Alto running the Executive file browser (c.1974).
2.6. The Xerox Star (1981).
2.7. Screen shot from a Star (1981).
2.8. Kickstart on the Amiga 1000 (1985).
2.9. Early version of the Macintosh Finder (1985).
2.10. Windows 1.0 (1985).
2.11. OpenLook (c.1989).
2.12. NeXTstep (1988).
2.13. Windows 3.0 and 3.1 (1992).
2.14. Windows 95 (1995).
2.15. Microsoft Bob home screen (1995).
3.1. Comparing the X stack to a monolithic graphics system.
5.1. CUPS configuration: the saga begins
5.2. CUPS configuration: the Queue Name panel
5.3. CUPS configuration: the Queue Type panel
5.4. CUPS configuration: the stone wall
5.5. xmms
5.6. xine-ui
5.7. gxine

List of Tables

3.1. Summary of X Toolkits.
4.1. Timings for various interface actions