2.1 The Diversity of Unix Systems
Of the programs discussed in this book, the first to be developed was
Autoconf. Its development was determined by the history of the Unix
The first version of Unix was written by Dennis Ritchie and Ken Thompson
at Bell Labs in 1969. During the 1970s, Bell Labs was not permitted to
sell Unix commercially, but did distribute Unix to universities at
relatively low cost. The University of California at Berkeley added
their own improvements to the Unix sources; the result was known as the
BSD version of Unix.
In the early 1980s, AT&T signed an agreement permitting them
to sell Unix commercially. The first AT&T version of Unix was
known as System III.
As the popularity of Unix increased during the 1980s, several other
companies modified the Unix sources to create their own variants.
Examples include SunOS from Sun Microsystems, Ultrix from Digital
Equipment Corporation, and HP-UX from Hewlett Packard.
Although all of the Unix variants were fundamentally similar, there were
various differences between them. They had slightly different sets of
header files and slightly different lists of functions in the system
libraries, as well as more significant differences in areas such as
terminal handling and job control.
The emerging POSIX standards helped to eliminate some of these
differences. However, in some areas POSIX introduced new features,
leading to more variants. Also, different systems adopted the
POSIX standard at different times, leading to further disparities.
All of these variations caused problems for programs distributed as
source code. Even a function as straightforward as
not available everywhere; the BSD system library provided the
bcopy instead, but the order of arguments was
Program authors who wanted their programs to run on a wide variety of
Unix variants had to be familiar with the detailed differences between
the variants. They also had to worry about the ways in which the
variants changed from one version to another, as variants on the one
hand converged on the POSIX standard and on the other continued to
introduce new and different features.
While it was generally possible to use
#ifdef to identify
particular systems and versions, it became increasingly difficult to
know which versions had which features. It became clear that some more
organized approach was needed to handle the differences between Unix