Free on-line copy:
Eric Raymond, a well-known Open Source advocate, set out to 'capture the engineering wisdom and philosophy of the Unix community'. He was remarkably successful.
Books describing the architecture of a piece of software are not very common and the author clearly intended his work to be one of a kind. As an Open Source enthusiast, he also strived to use Open Source principles in the book's creation wherever possible. He solicited cooperation of a number of leading Unix developers and kept the evolving manuscript on-line, inviting comments from the general public. (This is a review of the on-line version, version number 0.66 - I've never seen the printed book, which should be published in August 2003. I also did not comment on it until now.)
The amount of work that went into the book shows off in extensive and authoritative references, numerous case studies (real programs only, with an emphasis on but not nearly confined to author's own Open Source software) and also in the elaborate book structure. One of the more unusual stylistic devices it employs is the in-line preservation of some comments about early versions of the text, with attribution, which proves an effective way to highlight design controversies. Some choices in the book structure (e.g. putting off a section about Unix documentation until chapter 18) feel arbitrary, but overall, it is presenting a logical progression for readers who want to read even technical books from beginning to end while giving clear instructions on what to skip according to individual preferences and prior knowledge.
Part I, Context is a general introduction, Unix history and comparison to other operating systems. It mostly repeats what the author has written on previous occasions. Extensive Microsoft bashing ('Microsoft's mal-engineered software was rising around us like a tide of sewage') serves to remind the reader that this is an advocacy book: the author has an agenda and wants to convince you. I hasten to add that this is not a criticism of the book - there's nothing wrong with having opinions and Raymond's opinions and advocacy are well known - but merely a warning not to read the book uncritically. I did not find any factual errors. The tone of the writing did compel me to look.
Part II, Design discusses the usual keywords (modularity, transparency, complexity...) as well as topics I've never seen in texts about software design, for example Unix conventions for configuration files. These 'unusual' chapters I found most interesting. The case study on Emacs vs. other editors (where Doug McIlroy, one of the guest contributors, sharply disagrees with Raymond) recapitulates a well-known polemic still going strong after decades of successful deployment, re-implementation and refinement. The accompanying case studies show genuinely new architectures for a Unix editor - many Unix designers clearly do not consider the fact that something works a good enough reason to stop improving it...
Part III, Implementation describes Unix programming languages and tools. The technical parts are especially suitable for a beginning programmer, or one who didn't program under Unix before. The chapter on re-use and Open Source licences is a good example of the author's writing methods and advocacy goals. He feels strongly about the importance of Open Source software licences and - perhaps guided by early reactions to the section (the old version I remember reading was much drier) - spares no rhetorical effort to get his point across. I don't think I'm entirely convinced, but it was worth reading.
Part IV, Community discusses documentation - including an introduction to XML and DocBook - software standards and Open Source best practices and then gives an overview of the current technical issues exercising the Linux community.
Conclusion: For the question 'Why are we using Linux?' - whether it's posed in an educational or commercial software development context - this book gives some very good answers. If you are (or want to become) a professional programmer and want to acquire thorough understanding of Unix as a software development platform, then - independently of your current knowledge of Unix in general and Linux in particular - you should at least skim this book. Highly recommended.