--- created_at: '2014-11-11T17:40:03.000Z' title: The Art of Unix Usability (2004) url: http://www.catb.org/~esr/writings/taouu/html/ author: diggan points: 128 story_text: '' comment_text: num_comments: 27 story_id: story_title: story_url: parent_id: created_at_i: 1415727603 _tags: - story - author_diggan - story_8591072 objectID: '8591072' year: 2004 --- [Source](http://www.catb.org/~esr/writings/taouu/html/ "Permalink to The Art of Unix Usability") # The Art of Unix Usability | ----- | | The Art of Unix Usability | |   |   |  [Next][1] | * * * # The Art of Unix Usability ### Eric Steven Raymond     `<[esr@thyrsus.com][2]>`      ### Rob W. Landley     `<[rob@landley.net][3]>`      Copyright © 2004 Eric S. Raymond 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.1 | April 18 2004 | esr | | Start of book | | | * * * ## Dedication   **Table of Contents** [An Invitation to Usability][1] [1\. Premises: The Rules of Interface Design][4] : [Usability Metrics][5] [Usability and the Power Curve][6] [The Rules of Usability][7] : [Rule of Bliss: Allow your users the luxury of ignorance.][8] [Rule of Distractions: Allow your users the luxury of inattention.][9] [Rule of Flow: Allow your users the luxury of attention.][10] [Rule of Documentation: Documentation is an admission of failure.][11] [Rule of Least Surprise: In interface design, always do the least surprising thing.][12] [Rule of Transparency: Every bit of program state that the user has to reason about should be manifest in the interface.][13] [Rule of Modelessness: The interface's response to user actions should be consistent and never depend on hidden state.][14] [Rule of Seven: Users can hold at most 7±2 things at once in working storage.][15] [Rule of Reversibility: Every operation without an undo is a horror story waiting to happen.][16] [Rule of Confirmation: Every confirmation prompt should be a surprise.][17] [Rule of Failure: All failures should be lessons in how not to fail.][18] [Rule of Silence: When a program has nothing surprising to say, it should say nothing.][19] [Rule of Automation: Never ask the user for any information that you can autodetect, copy, or deduce.][20] [Rule of Defaults: Choose safe defaults, apply them unobtrusively, and let them be overridden if necessary.][21] [Rule of Respect: Never mistake keeping things simple for dumbing them down, or vice-versa.][22] [Rule of Predictability: Predictability is more important than prettiness.][23] [Rule of Reality: The interface isn't finished till the end-user testing is done.][24] [Comparison with the Nielsen-Molich Evaluation Method][25] [Identifying with the User Experience][26] [2\. History: A Brief History of User Interfaces][27] : [Batch Computing][28] [Command-Line Interfaces][29] [What's Old is New Again][30] [Vector Graphics, Video Games, and NLS/Augment][31] [The first GUIs][32] [The X Windowing System][33] [The Color Convergence][34] [GUIs in the era of commodity hardware][35] [The Unix resurgence][36] [Beyond the WIMP?][37] [3\. Programming: GUI Construction in the Unix Environment][38] : [Overview][39] [Programming with the X Server][40] [Toolkit libraries and bindings][41] [Components of GUI environments][42] : [Higher-Level Widgets with Consistent Policy][43] [Window Managers][44] [An interface to ICCCM, and possibly an object broker][45] [Sound Support][46] [Other Services for Application Programming][47] [Choosing a Desktop][48] [Interface styles and Programming Models][49] [The X Programming Model][50] : [Events: the Input Side][51] [Rendering: the Output Side][52] [X Programming at the Application Level][53] [Scripting Languages, Code Generators, and GUI Best Practices][54] [4\. Wetware: The Human Side of Interfaces][55] : [Novelty, Consciousness, and the Single Locus of Attention][56] [Real Time Costs][57] [Hick's Law and Fitts's Law][58] [Habituation, Expertise, and Undo Operations][59] [Interfaces and Flow][60] [Buffering and Human Memory][61] [Designing around Characters and Stories][62] : [Designing With Personas][63] [5\. Examples: The Good, the Bad, and the Ugly][64] : [Case study: CUPS configuration][65] [Case study: xmms, xine, and totem][66] [6\. Reality: Debugging and Testing User Interface Designs][67] [A. Design Rule Reference][68] [B. Bibliography][69] : [Bibliography][70] **List of Figures** 2.1. [IBM 029 card punch.][71] 2.2. [ASR-33 Teletype.][72] 2.3. [VT100 terminal.][73] 2.4. [The Xerox Alto.][74] 2.5. [Alto running the Executive file browser (c.1974).][75] 2.6. [The Xerox Star (1981).][76] 2.7. [Screen shot from a Star (1981).][77] 2.8. [Kickstart on the Amiga 1000 (1985).][78] 2.9. [Early version of the Macintosh Finder (1985).][79] 2.10. [Windows 1.0 (1985).][80] 2.11. [OpenLook (c.1989).][81] 2.12. [NeXTstep (1988).][82] 2.13. [Windows 3.0 and 3.1 (1992).][83] 2.14. [Windows 95 (1995).][84] 2.15. [Microsoft Bob home screen (1995).][85] 3.1. [Comparing the X stack to a monolithic graphics system.][86] 5.1. [CUPS configuration: the saga begins][87] 5.2. [CUPS configuration: the Queue Name panel][88] 5.3. [CUPS configuration: the Queue Type panel][89] 5.4. [CUPS configuration: the stone wall][90] 5.5. [xmms][91] 5.6. [xine-ui][92] 5.7. [gxine][93] **List of Tables** 3.1. [Summary of X Toolkits.][94] 4.1. [Timings for various interface actions][95] * * * | ----- | |   |   |  [Next][1] | |   |   |  An Invitation to Usability | [1]: http://www.catb.org/pr01.html [2]: mailto:esr%40thyrsus.com [3]: mailto:rob%40landley.net [4]: http://www.catb.org/premises.html [5]: http://www.catb.org/ch01s01.html [6]: http://www.catb.org/ch01s02.html [7]: http://www.catb.org/ch01s03.html [8]: http://www.catb.org/ch01s03.html#rule-bliss [9]: http://www.catb.org/ch01s03.html#rule-distractions [10]: http://www.catb.org/ch01s03.html#rule-flow [11]: http://www.catb.org/ch01s03.html#rule-documentation [12]: http://www.catb.org/ch01s03.html#rule-surprise [13]: http://www.catb.org/ch01s03.html#rule-transparency [14]: http://www.catb.org/ch01s03.html#rule-consistency [15]: http://www.catb.org/ch01s03.html#rule-seven [16]: http://www.catb.org/ch01s03.html#rule-reversibility [17]: http://www.catb.org/ch01s03.html#rule-confirmation [18]: http://www.catb.org/ch01s03.html#rule-failure [19]: http://www.catb.org/ch01s03.html#rule-silence [20]: http://www.catb.org/ch01s03.html#rule-automation [21]: http://www.catb.org/ch01s03.html#rule-defaults [22]: http://www.catb.org/ch01s03.html#rule-non-condescension [23]: http://www.catb.org/ch01s03.html#rule-predictability [24]: http://www.catb.org/ch01s03.html#rule-reality [25]: http://www.catb.org/ch01s04.html [26]: http://www.catb.org/ch01s05.html [27]: http://www.catb.org/ch02.html [28]: http://www.catb.org/ch02s01.html [29]: http://www.catb.org/ch02s02.html [30]: http://www.catb.org/ch02s03.html [31]: http://www.catb.org/ch02s04.html [32]: http://www.catb.org/ch02s05.html [33]: http://www.catb.org/ch02s06.html [34]: http://www.catb.org/ch02s07.html [35]: http://www.catb.org/ch02s08.html [36]: http://www.catb.org/ch02s09.html [37]: http://www.catb.org/ch02s10.html [38]: http://www.catb.org/ch03.html [39]: http://www.catb.org/ch03s01.html [40]: http://www.catb.org/ch03s02.html [41]: http://www.catb.org/ch03s03.html [42]: http://www.catb.org/ch03s04.html [43]: http://www.catb.org/ch03s04.html#id3384133 [44]: http://www.catb.org/ch03s04.html#id3384142 [45]: http://www.catb.org/ch03s04.html#id3383071 [46]: http://www.catb.org/ch03s04.html#id3383117 [47]: http://www.catb.org/ch03s04.html#id3383134 [48]: http://www.catb.org/ch03s05.html [49]: http://www.catb.org/ch03s06.html [50]: http://www.catb.org/ch03s07.html [51]: http://www.catb.org/ch03s07.html#id3385104 [52]: http://www.catb.org/ch03s07.html#id3384661 [53]: http://www.catb.org/ch03s08.html [54]: http://www.catb.org/ch03s09.html [55]: http://www.catb.org/wetware.html [56]: http://www.catb.org/ch04s01.html [57]: http://www.catb.org/ch04s02.html [58]: http://www.catb.org/ch04s03.html [59]: http://www.catb.org/ch04s04.html [60]: http://www.catb.org/ch04s05.html [61]: http://www.catb.org/ch04s06.html [62]: http://www.catb.org/ch04s07.html [63]: http://www.catb.org/ch04s07.html#id3389857 [64]: http://www.catb.org/ch05.html [65]: http://www.catb.org/ch05s01.html [66]: http://www.catb.org/ch05s02.html [67]: http://www.catb.org/ch06.html [68]: http://www.catb.org/apa.html [69]: http://www.catb.org/apb.html [70]: http://www.catb.org/apb.html#id3394919 [71]: http://www.catb.org/ch02s01.html#IBM029 [72]: http://www.catb.org/ch02s02.html#ASR33 [73]: http://www.catb.org/ch02s02.html#VT100 [74]: http://www.catb.org/ch02s05.html#Alto [75]: http://www.catb.org/ch02s05.html#AltoExecutive [76]: http://www.catb.org/ch02s05.html#Star [77]: http://www.catb.org/ch02s05.html#StarScreen [78]: http://www.catb.org/ch02s05.html#Amiga [79]: http://www.catb.org/ch02s05.html#MacFinder [80]: http://www.catb.org/ch02s05.html#Windows1 [81]: http://www.catb.org/ch02s06.html#OpenLook [82]: http://www.catb.org/ch02s07.html#NeXTstep [83]: http://www.catb.org/ch02s08.html#Windows3 [84]: http://www.catb.org/ch02s08.html#Windows95 [85]: http://www.catb.org/ch02s08.html#Bob [86]: http://www.catb.org/ch03s01.html#X_layers [87]: http://www.catb.org/ch05s01.html#CUPS1 [88]: http://www.catb.org/ch05s01.html#CUPS2 [89]: http://www.catb.org/ch05s01.html#CUPS3 [90]: http://www.catb.org/ch05s01.html#CUPS4 [91]: http://www.catb.org/ch05s02.html#xmms [92]: http://www.catb.org/ch05s02.html#xine [93]: http://www.catb.org/ch05s02.html#gxine [94]: http://www.catb.org/ch03s03.html#x_toolkits [95]: http://www.catb.org/ch04s02.html#timings