This is an HTML rendering of a working paper draft that led to a publication. The publication should always be cited in preference to this draft using the following reference:
Athens University of Economics and Business
Eric S. Raymond
The Art of UNIX Programming
Addison Wesley, Boston, 2003
Eric Raymond is often described as the unofficial spokesperson of the Open Source community. In his new book titled The Art of UNIX Programming he successfully tackles a much grander task: that of articulating and explaining the guiding design, implementation, and social principles behind the success, adaptability, and durability of the Unix operating system. Although the word programming appears on the book's title, Raymond covers a lot more and deeper ground. The book's first part provides the context of Unix development by outlining the most important positive features of Unix and the 17 guiding elements of the Unix philosophy. These elements prescribe the structure of systems following the Unix way (modularity, composition, separation, diversity, and extensibility), their behavior (clarity, simplicity, parsimony, silence, transparency, robustness, repair, and least surprise), and the approach to build them (economy, generation, representation, and distrust for optimization). The first part ends with two chapters providing a historical overview, and an instructive comparison of Unix to other systems.
In the book's next two parts, Design and Implementation, the author manages to distill the accumulated wisdom of programming following the Unix philosophy into concrete principles such as the use of text-based protocols, the utilization of domain-specific minilanguages, the structure of user interfaces, the choice of a programming languages, and the use of tools. Each principle is illustrated by numerous case studies (a dozen in the case of minilanguages), and contains prescriptive guidelines for applying it in practice. Importantly, the author is never shy to identify a particular technology as a dead end, advising us to steer away from it. Many chapters can be read as mini surveys and concise tutorials for the technique they discuss.
Raymond uses the idea of open-source software as unifying principle behind this book. He argues that Unix began its history as effectively an open-source system (AT&T, being restrained from selling it, distributed Unix accompanied with source code to universities and research institutes for only a nominal fee), and that its current popularity and versatility stem again from open-source systems such as GNU/Linux and FreeBSD. The book's last part, titled "Community" explores this aspect in depth by examining the elements around which the Unix community is built. Here Raymond discusses portability (providing an excellent roadmap of the, typically obtuse and contradicting, Unix-related standardization efforts), documentation (giving solid advice for choosing and using the appropriate documentation format), and open source (offering guidelines for contributing, developing, and distributing open source software). A final chapter titled "Futures: Dangers and Opportunities" discusses problems facing Unix in the areas of its design, environment, and culture presenting the challenges in the road ahead.
As doubtlessly many readers already know by experience, Raymond's writing is fluid, free from unnecessary technical jargon, and remarkably perceptive. All these qualities make The Art of UNIX Programming a joy to read and a valuable contribution to the Unix community.