An operating system performs various tasks relating to a computer system, including managing its hardware and software resources. Hardware resources include processors, primary storage (e.g., memory), secondary storage (e.g., hard disk or optical disk), printers, display adapters, network interface cards, input/output ports, etc. Software resources include application programs, user interfaces, device drivers, network protocol stacks, etc. The operating system manages and coordinates these resources to complete various tasks, such as under the direction of an application program.
Operating systems may provide functionality to application programs using subsystems. A subsystem is an operating system component that implements an operating system's application program interfaces (“APIs”). A subsystem generally provides APIs relating to a specific implementation of the operating system.
Multiple implementations of operating systems may exist. As an example, the UNIX operating system has a variety of implementations including, e.g., POSIX, BSD, LINUX, SCO, XENIX, SOLARIS, and others. These implementations may be referred to as “flavors” of UNIX. An API relating to a flavor of UNIX may be different than an API relating to another flavor of UNIX. As an example, a command available in one flavor may be unavailable in the other flavor. Furthermore, although a command is available in both flavors, a result of the command may be different in the flavors. Thus, an application designed for a flavor of UNIX may function in an unexpected manner when used on another flavor of UNIX. When an administrator attempts to migrate a complex application from a flavor of UNIX, such as BSD, to another flavor of UNIX, such as POSIX, the application may behave unexpectedly.
One approach to changing a flavor of an operating system is to modify the operating system, such as by modifying a subsystem of the operating system. For example, a POSIX subsystem may be modified to emulate another flavor of UNIX. However, this could lead to multiple incompatible versions of an operating system. Furthermore, customers of such modified operating systems may be unable to receive benefits of using a standard operating system, such as commonly employed tools, robust testing, or having a dependable supplier of the operating system. It would thus be highly desirable to provide a facility for extending operating system subsystems without requiring modification of the operating system subsystems.