5.1.3 Think Portable 5.2 Classifying the Strategies This final principle is simply an admonition to be conscious of the portability goal during all design decisions and development activities. Many portability problems arise not because there was noway to avoid them, but because portability wasn’t considered when the choice was made. The strategies to be studied are concerned with controlling particular interfaces. They can be identified and classified by considering the various interface models of Section 2. Static models such as the SIM or the OSE/RM allow us to identify the principal interfaces with which atypical application interacts. We have seen that the primary low-level interfaces can be classified as architecture interfaces (including processor, memory, and direct I/O), operating system interfaces (including APIs), and library interfaces (including support packages). We are most interested in achieving commonality for these low-level interfaces. These interfaces in turn mediate access to higher-level interfaces such as the user interface, file systems, network resources, and numerous domain-specific abstractions. Controlling these interfaces can be viewed as special cases of controlling the underlying interfaces to the architecture, operating system, and libraries. The first and most essential strategy for portable software development is the use of a suitable programming language. Portable programming in an appropriate language will generally provide a common model for most (but not all) of the elements of each of the three main interface classes. The remaining elements must be dealt with by considering the interfaces more directly. There are thus four main classes of strategies that are most important to consider: Language-based strategies Library strategies Operating system strategies Architecture strategies 1. 2. 3. 4. Regardless of the specific interface or representation we are dealing with, all strategies for achieving portability at that interface can be grouped into
66 James D. Mooney three main types. We examine these types in the next subsection. We will then discuss strategies of each type that apply to each of the four classes.