October 16, 2007

There are few Linux enthusiasts who have not built, attempted to build, or thought about building a Linux-based appliance computer. Some are very easy and have a lot of extant software that does all the hard work for you — digital video recorders, network firewalls, and wireless routers, for instance — but what if you want to build something more complicated? What if there is no premade Linux distribution designed for the kind of appliance you want to make? Well, if you have some programming skills, you can make it yourself with the aid of No Starch Press’ Linux Appliance Design.

Writing analysis

The quality of the writing in Linux Appliance Design is good. It’s by no means entertaining, but it’s also not distracting or incomplete. I’d like to say that the writing is average, but the average technology book is poorly written and edited, so to avoid misleading you, I’ll say that it’s “good.” I did not find any typographical errors, spelling mistakes, or formatting problems in this book, and that alone puts it a cut above the majority of modern tech books.

The authors make extensive use of diagrams, code samples, and the occasional photo or screen shot — one or more of these appears on almost every page in the book. The diagrams show the layouts of complex processes, and the code samples show relevant pieces of actual, working code. This is in stark contrast to many programming books that list non-working sample code for the purpose of explaining a concept or technique. That’s fine in some cases, but programmers learn best by looking at and working with real, operational code that can be plugged in and played with. All of the book’s code, plus development tools and libraries, are available on a CD in the back of the book and available for download from the No Starch Web site.

Putting the book to the test

Linux Appliance Design’s goal is to guide readers through the development of their own Linux-based computer appliance. The book’s primary example is Laddie, a fully functional but feature-incomplete alarm system. The most impressive facet of Linux Appliance Design is the depth of information about this example appliance — all of the code, plus hardware specifications, block diagrams, and schematics are included. Obviously if you want to build an alarm system, this book will be an enormously helpful resource. The further you get away from Laddie’s functionality, the more work you have to do on your own.

You must be a competent C and C++ programmer with Linux experience, and you need to be comfortable with soldering and wiring in order to get the most benefit from Linux Appliance Design. You should be ready to build a unique hardware appliance and have a basic idea of how it will operate before getting into this book. There is little discussion of Linux in specific; this is more of a hardware-oriented book with a secondary emphasis on control software. Linux is only presented as the easiest and cheapest platform on which your software will run, so if you were hoping to learn more about hacking Linux for embedded use, Linux Appliance Design is not what you’re looking for. Considering this information, the book is not appropriately titled — the fact that Linux is the most sensible operating system to use for the projects that the book enables you to learn to create is not important to the book’s primary content.

Every facet of appliance design is covered, from the hardware design and construction to operating system installation and configuration to application development to designing a variety of different user and network management interfaces. Everything you need is here — you just have to learn how to implement these ideas and examples into your own project. Alternatively, if you are not totally up to par on your programming or hardware construction and application design skills, you could learn quite a bit about these concepts by simply following the book and sticking to the Laddie example throughout.

Conclusions

Linux Appliance Design is by no means light reading, and I’m kind of surprised to see a book this technically involved come from No Starch Press. When I picked it up, I was expecting to read something about installing Debian and MythTV, using ATI infrared remotes, and installing third-party drivers for LCD and VFT displays. Linux Appliance Design does cover some of this material, but in far greater detail than any superficial do-it-yourself guide could hope to.

This book is effective in what it presents, and has obvious and well-deserved appeal to those who want to learn more on this subject. The only real point of this review is to ward off people who are expecting a manual on operating system development or mini-PC assembly.