The Unix Programming Environment


The Unix Programming Environment, first published in 1984 by Prentice Hall, is a book written by Brian W. Kernighan and Rob Pike, both of Bell Labs and considered an important and early document of the Unix operating system.

Unix philosophy

The book addresses the Unix philosophy of small cooperating tools with standardized inputs and outputs. Kernighan and Pike give a brief description of the Unix design and the Unix philosophy:
The authors further write that their goal for this book is "to communicate the UNIX programming philosophy."

Content and topics

The book starts off with an introduction to Unix for beginners. Next, it goes into the basics of the file system and shell. The reader is led through topics ranging from the use of filters, to how to use C for programming robust Unix applications, and the basics of grep, sed, make, and awk. The book closes with a tutorial on making a programming language parser with yacc and how to use troff with ms and mm to format documents, the preprocessors tbl, eqn, and pic, and making man pages with the man macro set. The appendices cover the ed editor and the abovementioned programming language, named hoc, which stands for "high-order calculator".

Historical context

Although Unix still exists decades after the publication of this book, the book describes an already mature Unix: In 1984, Unix had already been in development for 15 years, it had been published in a peer-reviewed journal 10 years earlier, and at least seven official editions of its manuals had been published. In 1984, several commercial and academic variants of UNIX already existed, and a year earlier Ritchie and Thompson won the prestigious Turing Award for their work on UNIX. The book was written not when UNIX was just starting out, but when it was already popular enough to be worthy of a book published for the masses of new users that were coming in.
In retrospect, not only was 1984 not an early stage of Unix's evolution, in some respects it was the end of Unix evolution, at least in Bell Labs: The important UNIX variants had already forked from AT&T's Research Unix earlier: System V was published in 1983, BSD was based on the 1979 Seventh Edition Unix - and most commercial Unix variants were based on System V, BSD, or some combination of both. Eighth Edition Unix came out right after this book, and further development of UNIX in Bell Labs never made it outside Bell Labs - until their effort evolved into Plan 9 from Bell Labs.

C programming style

The book was written before ANSI C was first drafted; the programs in it follow the older K&R style. However, the source code available on the book's website has been updated for ANSI C conformance.

Critical reception

Technical editor Ben Everard for Linux Voice magazine praised the book for providing relevant documentation despite being 30 years old and for being a good book for aspiring programmers who don't know much about Linux.

Editions