I manage computers running BSD variants every day, at work and at home. After many man page and RTFM iterations to support vital administrative aspects, a desire grew to understand what lay beneath my level of expertise. As eager as I was, I found the prospect of simply plunging into a lengthy code review unappealing.
For this Summer reading season, I went looking for serious professional technical material, the sort that enriches the reader, providing ample opportunity to become significantly smarter about the topic.
My search coincided with the news that, “The Design and Implementation of the FreeBSD Operating System,” the long-awaited update to, “The Design and Implementation of the 4.4BSD Operating System,” was due in August. My interest piqued, I contacted Eugenia at OSNews immediately with an offer to read and review both texts.
I read, “The Design and Implementation of the 4.4BSD Operating System,” first, reasoning the effort essential to properly review the latest edition. After a brief break, I read, “The Design and Implementation of the FreeBSD Operating System,” and then wrote this review.
Both books share identical goals, foci, clarity, and organization. Neither are anything like simple, annotated source code listings (despite the inherent value of such material). Rather, both provide a tremendous depth of background. Unlike a great many computer-related titles currently available, these are designed to serve as texts for Computer Science students as well as authoritative reference material for professional consumption.
The authors rigorously achieve the stated goals of both books (to serve as an authoritative study of the inner workings of 4.4BSD and FreeBSD, respectively). These texts were never intended to serve as published man pages or variations of the excellent web page documentation for administrators as well as end users. Rather, the words, C-like pseudocode fragments, and graphical representations contained in each chapter are composed to answer the, “why,” and, “how,” questions pertaining to the internal structure of the operating system.
The authors never depart from the stated foci (“concepts, data structures and algorithms”) either. Although the reader will learn a LOT about kernel organization, process and memory management, devices, filesystems, the terminal interface, how TCP/IP is implemented, and system startup, there is absolutely no treatment of such topics as shell scripting, X11, graphical desktop environments, electronic mail, apache, samba, etc. These topics clearly fall well beyond the scope of the book. No collection of elementary How-To’s this.
As to clarity, I have to confess that I was concerned that a book of such an intense technical nature could be–while technically precise–quite the difficult reading experience.
I am happy to report that both texts share a common clarity of written word (lucid, readable prose), pseudocode fragment presentation (concise and to the point), and graphical representation (simple yet descriptive). At no time during my reading was effort wasted on trying to discern how the authors were trying to explain the material.
Finally, the organization of both texts is quite sensible. Both start with a solid preface and progress into a history of UNIX. The new edition adds quite a bit about FreeBSD in particular, as would be expected. I have to admit that I enjoyed the two-page timeline in the earlier edition and think it should be present in the current edition as well, but that is because of my fascination with UNIX history.
Other than the chapters on history and system startup (which can be read separately) the best strategy (at least initially) is reading each chapter within each part in sequence. I have not yet attempted the code review mentioned above. However, one of these days I will, and at that point I imagine that reading chapters out of sequence will prove invaluable.
These texts are not lightweight reading, and, quite frankly, having read both I cannot envision an editing strategy that could significantly cut their length without abandoning the depth necessary to be an authoritative reference and university level text.
Reading these two books was time consuming, but as an investment that immediately pays dividends, it was a valuable time expenditure that has yielded an understanding of why FreeBSD works the way it does.
I enjoyed reading these books, the earlier edition for the historical context and the latest edition for its contemporary relevance. Given that I am currently working in a FreeBSD 5.2.1 environment and support Apple OS X (in addition to Linux) the new edition is the right book at the right time.
I appreciated the references to the rationale for design and implementation decisions. I especially liked the remarks about alternative paths that were not followed which appear throughout the design and implementation chapters, along with the reasons why those paths were not followed. The treatments of the decision to extend UFS1 to UFS2 versus implementing either XFS or ReiserFS and the selection of 64 bit over 48 bit time in the new inode format are examples. These were presented in a matter-of-fact way, with no words wasted on gossip or discussions of infighting.
If you are new to the idea of FreeBSD and want to purchase a book to help you gain a general understanding, then this is not the book you are looking for. I recommend instead, “The FreeBSD Corporate Networker’s Guide,” by Ted Mittelstaedt (if you can find a copy) because it covers representative portions of general production topics in an easily digested format.
If you are looking for a FreeBSD text that presents FreeBSD 5 administration and configuration topics, then the book is entirely wrong for you, too. I would suggest either, “The Complete FreeBSD, 4th Edition,” by Greg Lehey, or, “Absolute BSD,” by Michael Lucas.
However, once you progress to the point where you need to learn about the internals of FreeBSD, this will be the book for you.
Finally, assorted observations and comments follow.
* In keeping with academic tradition, both texts contain footnotes. In reading through these, I came to appreciate that if these texts were a series of web pages and the footnotes links to the source documents, reading along the link trail would be a further exploration gratifying in its own right.
* Given the potential use in Computer Science courses, each chapter includes questions of varying degree of difficulty and thought required.
* Both texts include a glossary.
* NetBSD and OpenBSD are not entirely ignored in the latest edition. Descriptive references to both appear at the beginning, to place each BSD family member in proper context. A few references to each appear later in the text where appropriate.
* Darwin (the FreeBSD core for Apple OS X) gets a mention at the very beginning of the book, when the authors first describe the scope of the BSD family of operating systems.
* Although DragonFlyBSD (the newest member of the BSD family of operating systems) is not mentioned by name, Matthew Dillon is acknowledged at the beginning of this book. Despite the fact that the stated goals of the DragonFlyBSD group include advancing BSD from 4.x instead of 5.x, the BSD community shares code with one another. It will be interesting to see how this group contributes to the whole as well as if the next edition of the text (whenever it is published) includes ideas from the project.
* There are no politics, rhetoric, or diatribes in either text. The authors correctly understood that forays into that territory would only detract from achieving their goal. For example, Microsoft, although mentioned in passing in the earlier text in the context of Windows being unable to succeed as a UNIX-killer (as was IBM with OS/2, by the way) is given no mention at all in the latest edition.
* Linux is mentioned, although only in historical context. Given that on the F/OSS side of the operating systems debate there are those in the Linux camp who adhere to a, “BSD is dead,” line, I found it refreshing to get a, “we’re all in this together,” sense from the history chapter. This is a view I personally espouse as the best path to encompass ever larger numbers of newcomers to F/OSS.
If you would like to see your thoughts or experiences with technology published, please consider writing an article for OSNews.