Author's Acknowledgements

This book benefitted from discussions with many people other than the guest contributors. Mark M. Miller helped me achieve enlightenment about threads. John Cowan supplied some insights about interface design patterns, and Jef Raskin showed me where the Rule of Least Surprise comes from. The UIUC System Architecture Group contributed useful feedback on early chapters. The sections on What Unix gets wrong and Flexibility in depth were directly inspired by their review. Russell J. Nelson contributed the material on Bernstein chaining in Chapter 6 (Multiprogramming). Les Hatton provided many helpful comments on the Languages chapter and motivated the portion of Chapter 4 (Modularity) on Optimal module size.

Special thanks go to Rob Landley and Catherine Raymond, who delivered intensive line-by-line critiques of early drafts. Hundreds of Unix programmers, far too many to mention here, contributed advice and comments during the book's public review period between January and June of 2003.

The expository style and some of the concerns of this book have been influenced by the design patterns movement; indeed, I flirted with the idea of titling it Unix Design Patterns. I didn't, because I disagree with some of the implicit central dogmas of the movement and don't feel the need to use all its formal apparatus or accept its cultural baggage. Nevertheless, I owe the Gang of Four and other members of their school a large debt of gratitude for showing me how it is possible to talk about design at a high level without merely uttering vague and useless generalities. Interested readers should see Design Patterns: Elements of Reusable Object-Oriented Software [GoF] for an introduction to design patterns.