In this first section of the book, I discuss the various "big picture" and architectural issues that you need to keep in mind. This is a condensation (some would say "brain dump") of the work I've done with QNX operating systems over the years—I've seen what works, and what doesn't. I'll share both, because I think it's important to know what doesn't work too, so you can understand why it didn't work out.

The Basics

In this chapter, the main() function and its friend, the option processing function optproc(), are discussed. It's in its own chapter so we don't have to talk about the things I use in almost every project.

High Availability

High availability is a very interesting topic. In this chapter, I discuss the concept of high availability (what it is, how it's measured, and how to achieve it). We'll discuss such things as Mean Time Between Failures (MTBF), Mean Time To Repair (MTTR), and the formula used to calculate availability.

I'll also talk about how you can design your systems to be "highly-available" and some of the problems that you'll run into. Unfortunately, in a lot of today's designs, high availability is done as an afterthought—this almost always leads to disaster.

By thinking about high availability up front, you'll be able to benefit from having the architectural insight necessary to design highly-available systems.

Design Philosophy

Next, I present an article about the basic philosophy that's useful when building a system based on message passing—the fundamental Inter Process Communications (IPC) model used by all QNX operating systems. We'll take a hypothetical security system example, and examine how the design is derived to meet various goals. We'll look at the design of the individual pieces (things like swipe card readers and door lock actuators) and see how they fit into a larger system. We'll also discuss things like scalability—how to make your software design scale from a small security system to a large, multi-site security system.