|< Day Day Up >|
As described in the preceding section, because of the common heritage of many of today's operating environments, there are inherently more similarities than differences between versions of UNIX. However, that is not to say that they provide similar functionality or even similar internals. In this section, we investigate some of the specific technical differences you will encounter when migrating between some of the families of UNIX implementations .
UNIX implementations diverge in many fundamental and not-so-fundamental ways. This divergence has led to compatibility issues that many people refer to as the "splintering" of UNIX. Variations in the different file systems, networking frameworks, and virtual memory architectures are often cited as a difficulty for companies deploying multiple UNIX variants. This was especially difficult for companies looking to deploy complex applications. As a response to this issue, a movement was created to standardize a set of interfaces to abstract these complexities from application developers. The most common UNIX standards groups are:
Standard interfaces allow an application to interact with the operating system without detailed knowledge of how the functionality is actually implemented. The standard consists of a set of functions and their detailed semantics.
System V Interface Definition
The System V Interface Definition (SVID) is a standard published by AT&T (which became USL) in 1995 to specify system calls, commands, and utilities. Versions of UNIX that conform to the SVID are permitted to call their operating system "System V compliant." The current version of SVID, SVID3, corresponds to SVR4. With changes in ownership of the UNIX brand and source code, SVID has been merged into The Open Group's Single Unix Specification.
POSIX is an Institute of Electrical and Electronic Engineers (IEEE) group of standards for operating systems. Unlike SVID, the POSIX standard blends parts of SVR3 and 4.3BSD, not favoring one over the other. This has led to the widespread acceptance of the POSIX standard, especially POSIX1003.1 (POSIX.1), which defines many of the system calls. The following are some of the POSIX standards:
Solaris, HP-UX, and Tru64 are all POSIX-compliant operating systems. Most of these environments provide both POSIX-compliant calls and their own proprietary calls for important functions.
X/Open was organized in 1984 by a consortium of international computer vendors . Their aim was to develop an open common application environment comprising already existing standards. They published a seven-volume X/Open Portability Guide (XPG) that extended the POSIX.1 standard in areas of internationalization, window interfaces, and data management. This led to a host of standards including UNIX95 (Single Unix Standard version 1) and UNIX98 (Single Unix Standard version 2).
In 1993, all the major commercial UNIX vendors declared backing for X/Open, to create a common standard for UNIX. Because these standards had acquired the UNIX trademarks, this became the definitive UNIX definition.
Finally, in 2002, X/Open (now called The Open Group) completed the Single Unix Standard version 3. This unifying standard, which incorporates the X/Open standards and the IEEE POSIX work, now defines the UNIX operating system. The final specification includes over 1700 programming interfaces, organized into five documents covering the following topics:
While no vendor has received Single Unix Standard version 3 certification, UNIX98 is still a common standard for many UNIX developers and users. Tru64 (version 5.1), AIX (versions 4 and 5L), and Solaris (versions 7, 8, and 9) are all UNIX98 certified. HP-UX 11i is not UNIX98 compliant, but is UNIX95 compliant.
More information on The Open Group and these standards is available on their Web site at http://www.opengroup.org/.
The UNIX (and Linux) kernel provides a set of common facilities through abstracted frameworks. This provides a flexible operating system that retains its simplicity for developers. Some of the common facilities available on most modern versions of UNIX include:
Within each of these abstracted frameworks, interfaces are implemented to support specific technologies. For example, the virtual storage framework allows interfaces for remote storage, such as NFS, as well as local storage, such as a UFS+ file system. The virtual storage facility is very flexible: it allows access to remote or local storage but hides complexity from the developer with its single method of accessing files. The virtual memory facilities hide the complexities of swap space and physical memory by making all available memory appear to applications as one memory space.
While the implementations of the major commercial UNIX kernels differ greatly, the differences are largely hidden from the user and programmer through these abstractions and the standards discussed in the preceding section. However, the areas that the standards do not cover are the major concerns for most porting efforts. These differences are noted throughout this book, when applicable .
All versions of UNIX provide their users with a host of environments in which to work. These environments are divided into two types: graphical and shell. The shell environment is the classic command-line interface (CLI) with the choice of command interpreters. The graphical user interface (GUI) environments provide visual representations through the use of the windows managers such as X11.
Four major shells are available today. These include the venerable Bourne shell ( sh ) and C shells ( csh ), the Korn shell ( ksh ), and GNU's Bourne-Again Shell (popularly known as bash ). Each of these shells is available on the major UNIX and Linux platforms. However, only a few platforms ship and support all of them.
Although these shells are available on different vendors' platforms, not all of them are implemented exactly the same. This shows up most commonly in shell scripts used to automate repetitive tasks . Usual culprits are differences in quoting rules, command return codes, and environmental variables .
Graphical User Interfaces
There are three popular GUIs in today's UNIX environments: the common desktop environment (CDE), GNOME, and KDE. Each of these GUIs has its strengths and weaknesses. While CDE is the incumbent, GNOME and KDE are quickly becoming the desktops of choice for many UNIX users.
CDE is a reference implementation of a common UNIX desktop user environment. The CDE user interface presented a common desktop across the Solaris, HP-UX, Tru64, and AIX environments when it was introduced. CDE provides the following benefits:
Unfortunately, CDE never lived up to its potential as a common GUI to compete with Microsoft Windows. Because it was developed jointly, its features did not keep pace with other popular desktops. In addition, few productivity application vendors chose to support it. The following figure shows the GUI from the Solaris 9 OS.
Figure 2-1. CDE Desktop
The GNOME environment sprang from the open source world as a enabler for Linux's desktop ambitions.
The project comprises the following:
Some key features of GNOME include the following:
Figure 2-2. GNOME Desktop
Sun has chosen GNOME as its future desktop, and it is available for version 9 of the Solaris OS and later versions as an optional installation. The following figure shows the GNOME desktop from version 9 of the Solaris OS.
The KDE desktop also emerged from the open source world as GNOME's chief competition. Its design goals were slightly different, emphasizing stability and ease of migration for Microsoft Windows users. HP has chosen KDE as their common desktop, and it is available for the Solaris environment. The following figure shows the KDE desktop.
Figure 2-3. KDE Desktop
|< Day Day Up >|