UNIX, in all its many forms, was developed by developers for developers. This is evident in the connection between UNIX and C. In many ways, you can't truly understand one without the other. Certainly this point is arguable, there are plenty of UNIX users and system admins who understand semaphores but have never written a threaded application or C programmers who have never left the Windows world, but never the less at some point you cannot escape the symbiotic relationship the two share. But so often we find system administration books that discuss programming topics but not programming itself and conversely C programming books that don't address the essence of UNIX. When we combine the two topics we get a systems programming book, an epic guide that clarifies relationships essential to understanding both entities in a truly holistic manner.
Several such guides have popped up over the years, such as The UNIX Programming Environment [Kernighan & Pike,84], Advanced UNIX Programming [Rochkind, 85], The Magic Garden Explained [Goodheart & Cox, 94], Advanced Unix Programming [Gay, 00] (thats not a typo, there really are two books with the same name), Unix Systems Programming [Robbins & Robbins, 03], UNIX Systems Programming for SVR4 [Curry 96], and the undisputed heavy weight champ Advanced Programming in the UNIX Environment [Stevens, 92]. Each is individual, yet they're discussing the same thing so they share a number of similar topics. Essential topics include low and high level IO, signal handling, processes, IPC, and basic file system mechanics. In the more modern books we see inclusion of popular topics such as threading. Discussion directed toward broader topics of UNIX vary widely, namely due to the OS agnostic nature of such guides, despite the fact that until recently most books tend to slant toward SunOS/Solaris. Regardless of how many systems programming texts have appear, however, most programmers will agree that Stevens' guide is the only truly definitive choice. Since it's release there has been little challenge to it's prominence, despite the emergence of Linux as a major UNIX implementation, despite several newer systems programming books and even the 2nd edition of the Rochkind's guide. But all of this now changes thanks to the release of Rich Teer's Solaris Systems Programming [Teer, 05].
At a whopping 1248 pages this volume dwarfs every other systems programming book available by over 500 pages. It avoids the distractions of OS ambivalence by being tailored to Solaris, but is applicable to any UNIX platform available including Linux. It's layout is similar to that of Stevens' or Curry's books but builds significantly on each topic.
New systems programmers will immediately appreciate Teer's completeness, both in topic coverage and in his example code. Almost every code example is complete and runnable unlike many of the other guides that demonstrate a topic only in an abstract function rather than complete program. Essential topics for completeness, that have remained surprisingly absent from nearly every guide available, such as memory, code security and 64-bit topics are thoroughly covered. A striking example is coverage of memory topics. When I pulled volume after volume off the shelf of my local bookstore and looked up "memory" in the index of each I found surprisingly few even cover the topic beyond explaining the difference between stack and heap. In fact, many don't even include the malloc() function! Solaris Systems Programming is the only book I've ever found that was so complete in it's memory discussion that it not only covered stack and heap, all the available memory management functions, but even discussed such important topics as memory alignment!
A complete chapter on secure C programming is provided, thoroughly disusing such important topics as buffer overflows, chroot jails, and program environment. A good number of tips are provided to help you immediately incorporate better security into your app whether it's a real concern (for now) or not. Combine this with a complete chapter on resource control and limits, including discussions on system information, the /proc file system, and some Solaris specific resource control facilities, you can write more intelligent, less obtrusive, and better tuned applications.
The coverage of advanced IO topics (including STREAMS) and file system coverage are superior to any other text I've seen. System admins will appreciate the in depth coverage of file system topics that have only seen this sort of detail in books such as Solaris Internals [Mauro & McDougall, 00]. This level of discussion allows not only a better understanding of file system and IO techniques but also the clarity to immediately start building your own tools that allow you to interact with file system in far greater precision than ever before. Other sensitive topics, such as memory mapped IO have rarely seen this detail of coverage with numerous examples.
A full treatment of IPC topics are handled, but like Stevens', these techniques are discussed using conventional concurrency techniques such as fork(). A discussion of POSIX threading is absent and regarded as too large a topic to address properly in a systems programming book and the reader is urged to consult a complete guide to the topic such as Programming with POSIX Threads [Butenhof, 97]. While some readers might be put off by this, you'll appreciate how this keeps IPC discussions unencumbered. POSIX threading is mentioned where applicable, so it's not at all ignored, but readers of Rochkind's 2nd Edition, or Robbins' books will notice that introduction of a PThreads overview can quickly overwhelm the rest of the text. Unique to any text, is the inclusion of a section on Solaris Doors (also applicable to the Linux implementation), which is the fastest IPC method in Solaris introduced with Solaris 2.6.
Something that both new and seasoned programmers will appreciate is the inclusion of a chapter on utility functions and another on localization. The utility chapter provides great discussion and reference for the often used functions that many other books ignore, such as string handling and manipulation functions, memory management, byte arrays, temporary files, error reporting, command line argument parsing, character classes and more. While it's true that these aren't strictly systems programming topics, they are inevitably going to be topics of interest to most programmers. It is the inclusion of such topics as these that allow you to take your existing pile of reference books and replace it with this single volume.
A major topic to systems programmers today is 64-bit programming. Naturally Solaris is a robust 64-bit environment and is well handled in this book. Programmers new to 64-bit environments, whether on Linux, Solaris, or other UNIX platforms will greatly appreciate the gentle introduction to 64-bit coding, as well as best practice techniques and sprinkled 64-bit wisdom throughout the text.
This is the only book that I've seen that truly has it all. The evening I picked up Solaris Systems Programming I promptly and confidently took 4 of my reference books off my desk and replaced them with this one book. I now carry a copy in my bag so that I have it whenever I need it. And even though it has almost double the page count of Stevens' book, it is exactly the same thickness thanks to a thinner paper. Whats more, this book lists for $60 which is the best deal I've ever gotten on a technical book, this book should really list for at least $90. There isn't any excuse for not having this essential book in your library, and it is the only book that has finally been able to knock Stevens' book off the top step of the podium. I guarantee that this book won't send you digging for your Stevens' like every other systems programming book out there.
Rich spent three and a half years working on this book and the result can not be properly appreciated and I don't think will be for years to come. Like it or not, Solaris is the dominant commercial UNIX platform in the market today and will be for the foreseeable future and this guide doesn't pull any punches in giving you the best information available to leverage that environment to it's full potential. If you're a programmer, this book gives you a single reference to consolidate your library and give you a new appreciation for familiar topics and entry point to things that you might have never leveraged before (Doors, 64-bit optimization, etc). If you're a system admin you'll find a whole new appreciation for Solaris and UNIX in general with unparalleled understanding of how Solaris and UNIX really work under the covers, especially if you've already read Solaris Internals. Everyone will love the detail and completeness, combined with with the hundreds of priceless gems and tips (not to mention nifty Solaris Trivia) scattered throughout the book. Rich's style is compelling and relaxed, very readable in front of your keyboard or with a cup of coffee on the porch. And readers will enjoy his great sense of humor, which is admittedly suttle, but experience programmers and system admins alike will enjoy the wide range of jokes hidden within.
Finally, given the impending release of Solaris 10 yet another aspect of this book needs to be considered... it's an essential companion for DTrace users! Rich couldn't have possibly foreseen this need when he started writing the book, but it is extremely important today. Solaris 10 provides more visibility and debugging tools than any other UNIX system in existence today, the most popular of which being DTrace. But all of these tools expect the user to have a certain level of understanding of the system itself. This book should be standard issue for any sysadmin that ever plays with Solaris 10. When doing system root cause analysis with DTrace this book becomes an essential reference, especially if you are allergic to system headers. If you have been using DTrace and getting lost or feel that you just don't know Solaris the way you need to, buy this book and you'll immediately find the confidence and skills to get you back on track.
A Note just for my fellow SysAdmins:
I've never written a book review before, and of all the docs I've ever written this review has been the toughest, yet I'm compelled to sing the praises of this book from the rooftops. We all know that the path toward becoming a truly Senior SA involved becoming a competent C programmer. In recent years however, several groups have begun to accept PERL expertise as a replacement for C. As was discussed in the first paragraph of this review, while PERL is an invaluable tool essential to modern administration it is by no means a replacement for systems level experience with C. PERL will help you better use a UNIX system but can't teach you the essence of it. This is solidified only further by the new tools available in Solaris 10.
Solaris 10 is a huge milestone in the evolution of both UNIX and the profession of systems administration. I don't think I stand alone in my many doubts about what the future would hold for us, especially as IBM and HP pushed more and more toward self monitoring and healing systems coupled with services like IBM Global Services and other large support organizations that try to hold the keys to the system relegating the local system admins to a mere extension of that support organization. The fear was, I thought, for a long time that more and more power would be stripped from the sysadmin until we became monitoring monkeys and implementers rather than true keepers of our systems. Tools like DTrace, Zones, and ZFS provide a look toward the future were sysadmins won't have less power but much much more than we ever had before. We can now isolate and troubleshoot problems that previously required a call to Sun, and we can make sound root cause analysis based on facts rather than experienced guesses based on symptoms as we've had to do in the past. This new future raises the bar, not lowers it, for sysadmins and provides a shining "light at the end of the tunnel" that I think we've not had for a long time.
Now is the time that we will be divided, the men from the boys, as we enter this new era. Those who have a true passion of systems will need to draw even more close to systems programming then was ever needed before, and those who wish to stay in the past will certainly stay there. The divide between programmer and sysadmin has no doubt always been a fine one, as we are expected to know it all, but now we can stretch our legs like never before and it's essential that we grasp this opportunity firmly and encourage other vendors to take up the same approach. More than ever, the path of systems administration leads from Jr. to Sr. to Systems Engineer as we all become more than gurus of the system but truly become engineering professionals managing our systems as never before.
This book firmly follows this curve toward the future and gives us all a foothold on the essential skills we need in a way that wasn't available before and I strongly believe every SA should have a copy, along with "Solaris Internals", on their shelf.
You can learn more about Solaris Systems Programming on Rich Teer's home page for the book. On that page the full contents and index are available, including a sample chapter (Ch 8 "System Information and Resource Limits", 62 pages!). On that page you can also buy the book from Amazon.com. If you wish to buy a copy, please consider buying it from Amazon using Rich's page so that he can pick up some extra appreciation from the referral fee Amazon pays. You can also visit his personal home page to learn more about him and his work.
As an extra bonus, not only is Rich Teer the hottest UNIX programming author of the year, but he's also for hire! Rich was so dedicated to the book that he's been unemployed for the last 3 and a half years while he focused on writing the book, and boy does that commitment show! Now that the book is done he's ready to get back to work. Rich lives in Kelowna, British Columbia. You can download his CV/Resume to be charmed by his skill set. He's a great guy, a skilled and experienced programmer and could definitely give you some ultra-"star power". Nothing says "kool company" like having the talk of the UNIX world at an industry conference with your companies name on his badge!
On behalf of SunHelp.org and Cuddletech, I'd like to extend a huge debt of thanks to Rich, his wife, and his trusty sidekick Judge. This book couldn't possibly be more timely or more helpful to the entire UNIX community, and we can not thank you properly for this great gift. Thousands of us will benifit for years and years to come thanks to your sacrifies and we can only hope that you can now recieve all the good things that you have rightly earned.