Essential to modern computers are operating systems (OS). A multitude of OSes (UNIX variants, classic MacOS, MS Windows, just name a few) are available to computer users. While your choice of operating system may or may not say much about you, it does say a lot about how your computer is going to operate: operating systems control the basic functions of your computer (I/O [input/output], memory management, etc.), the "look and feel" of your interface, and increasingly even how you communicate with the outside world—the Internet. Indeed, to some one's choice of operating system is so important that they have gone so far as to start virtual religious "holy wars," forever claiming "my OS is better than your OS."
First, what is an operating system, and what does it do? OSes, as mentioned above, control many of the more "basic" functions of your computer's operation, such as the management of memory and processes (programs), and the running of and interaction between devices (printers, disk drives, scanners, digital cameras, modems, video cards, sound cards, etc.). The OS serves as a sort of "buffer" between your other software and the hardware of your computer. However, the question of "what an OS is" is complicated by many different visions of what an operating system should be, and the various OSes and architectures available today sometimes take different approaches to these questions. Today OSes range from small, real-time kernels installed on embedded devices, to protected-mode, multi-user systems. Some OSes are minimalistic, attempting to only cover the most basic functions, whereas others even dictate the user interface. Superiority in one area area of OS design does not necessarily imply superiority in another area.
In the following paragraphs, several key components of operating systems will be briefly and informally discussed. The main interest of the author is operating systems running on personal computers and workstations. Embedded systems and supercomputers, while rather interesting, do not play much of a role on this site, and in this discussion in particular. The author is not an expert on operating systems, nor even on computers in general, and makes no claims regarding the accuracy of the material provided. This article is aimed at new(er) computer users and those with little background in the history and design of system software. At the end of this page there is a short list of links to other OS-oriented sites on the web.
One of the most basic, low-level features of an operating system is its kernel. The kernel is usually responsible for I/O, and in many "monolithic" architectures it also deals with memory management, file systems, etc. The two extremes of contemporary kernel design are microkernel architectures, and monolithic kernels. Examples of the latter include Linux, the classic MacOS, DOS, and Windows 95. Examples of the former include the Mach microkernel (referred to simply as "Mach"), Windows NT, QNX, and GNU Hurd. Hybrid architectures also exist: MkLinux runs Linux on top of Mach; GNU Hurd currently runs on Mach, but is designed to be platform and microkernel independent.
Microkernels themselves can offer several advantages over traditional, monolithic kernels. For example, the OS is more easily ported to other hardware; whatever platform specific code there is, is often limited to the microkernel. Such a design, as seen with QNX, is very modular, and hence the OS can be more easily customized for the system at hand. This modularity also has the advantage of making it easier to integrate new features and upgrades into the OS. This, of course, is in theory—a lot depends on the people actually doing the programming.
On the other hand, by introducing extra "layers" of code, microkernels are not always more efficient than monolithic kernels. If the filesystem, networking, virtual memory, and device driver code, for example, is outside of the kernel itself, then these pieces of code will need to communicate with the kernel; this is achieved by way of message passing, which by its very nature slows things down (how much depends on the implementation). Indeed, placing a monolithic structure such as Linux or BSD on top of a microkernel, while improving portability, can result in a performance hit. Part of this has to do with the microkernel itself; a newer version of Mach (3.0 versus 2.5) helps to improve speed. On the other hand, part of it may simply have to do with the architectural style of the OS in question; some have argued that UNIX is more suited to having a monolithic kernel (micro- and macro-kernel versions exist), others claim this is nonsense.
Important features of current desktop and server OSes include preemptive multi-tasking, protected memory, and virtual memory. Preemptive multi-tasking allows multiple programs (or processes) to be running simultaneously. This is particularly important on multi-user systems (UNIX and its clones), but increasingly so on workstations and personal computers, where users may want to download a large file in the background while playing music or games, for example. Preemptive multi-tasking differs from cooperative multi-tasking and task-switching in that the OS itself has the responsibility for managing how much processor time an application receives. The importance of this feature for stability is obvious: on a cooperative multi-tasking system, a single application can "lock-up" or freeze the whole computer; this should not happen in a true preemptive environment. (Multi-threading is another important feature, but too complicated a topic to go into right now)
Protected memory is needed in a multi-tasking environment so that individual applications do not "overstep" their bounds and bring down the whole system. With protected memory, applications are restricted from using the memory addresses already taken by another application. Again, the task falls to the OS to manage the applications. Virtual memory (VM) is a further important feature of multi-tasking systems (although large amounts of RAM reduce its necessity). When multiple programs are running at once, it is likely, especially when the system has little RAM, that the system will run out of memory, sometimes even causing applications to crash. With VM, the computer treats a section of disk space as RAM; the drawback to VM is that hard drives are always slower than actual memory.
Most modern operating systems go beyond simply "managing" the system. This is especially true in the field of Graphical User Interfaces (GUIs). For example, the Win32 APIs are a collection of commonly used functions in Windows 95/98 and NT, such as opening a file, saving a file, drawing a window, etc. The same is true for the classic Mac Tool-kit, and the various and sundry tool-kits/libraries for the X Window System. In the case of Windows and the classic MacOS, such shared resources are essentially part of the OS itself. For example, Microsoft has "integrated" Internet Explorer into Windows by turning its HTML rendering functions, etc. into shared libraries usable by other programs. Such libraries can be highly useful; they eliminate the need for a programmer to "re-invent the wheel" when creating a new application.
This brings us to another aspect of an OS—its interface. Interfaces (how the user interacts with the computer) are commonly divided into two categories: Command Line Interfaces (CLIs) and Graphical User Interfaces (GUIs). Examples of the former include UNIX shells and DOS's
command.com, whereas the MacOS, Windows, and Gnome/KDE/CDE for the X Window System provide examples of the latter. As shown in the cases of UNIX, DOS/Windows 3.x and Windows NT, the underlying OS and the particular user interface are separate beasts. For example, in the shift from Windows NT 3.x to NT 4.x, Microsoft changed the GUI from one similar to that in Windows 3.1/3.11 to one identical with the Windows 95 interface. In the case of the UNIX machines running the X Window System and Windows 3.x on PC running DOS, the GUI is itself is not necessarily the only or even the primary interface. Today's GUIs are generally "windowing" systems; applications/documents appear in "windows" which are placed on top of a "desktop." Further features often include "icons"; graphical representations of programs and files. Such "objects" as windows and icons can be manipulated by way of a mouse. This is summarized as the WIMP paradigm: Windows, Icons, Menus, and Pointing device. In contrast, a CLI provides a "prompt," at which commands are given. Commands are like verbs; they often take a file or other piece of data as an "object" to be acted upon, and they can be modified by various arguments ("adverbs"). CLIs can be quite powerful for experienced users, but just like human languages, if you do not know the "vocabulary" and "syntax" of the system you are using, you can become quite lost. This "feature" of CLIs has given them a reputation for being "arcane" and "complex". For many users, a GUI can present a more accessible user interface; however, the choice of a user interface is a matter of personal preference.
The history of personal computer operating systems is rather interesting. It begins in many regards with Dr. Gary Kidall and CP/M. A new feature of computers in the early 70s was the disk drive. Whereas we take the venerable and horribly out-of-date floppy for granted, such a device posed a problem for computers 25-30 years ago. One of the jobs of CP/M, and the "DOSes" that followed it, was to control the floppy drive; hence the term DOS—"Disk Operating System." CP/M was first introduced for Intel's 4-bit processors, later it became 8-bit. Around 1980 IBM went looking for an OS for its new line of personal computers; there were discussions with Kidall's Digital Research, but the deal ended up going to Microsoft (the how and why of this event is beyond the scope of this article), which promptly licenced Q-DOS from a Seattle company, bought it outright later, and renamed it MS-DOS. The original DOS (version 1.x), rather than being a full OS, seems to have done much of its work through the built-in BASIC intepreter.
Up to that point, Micosoft (MS) had been almost exclusively a "language" company, providing computer languages for various companies. Indeed, MS-BASIC was standard on many early personal computers. BASIC—which was built-in through the ROMS of most computers—was hardly an OS; it was merely an interpreter, turning BASIC commands into commands the computer could understand. Operating systems such as MS-DOS and Apple's ProDOS, for example, allowed computers to access disk drives and other hardware devices.
Microsoft had at an earlier date licenced UNIX from AT&T; their version was called Xenix, and which was later acquired by SCO (the Santa Cruz Operation). By DOS 2.0, it was clear that Microsoft was trying to emulate the features of the UNIX command line in DOS. The prompt was changed, and the directory divider was switched (from / to \), but many of the traditional unix commands from the Bourne Shell can still be found in and for
command.com, such as
more and pipes. Microsoft even had plans to make DOS multi-tasking and perhaps even multi-user. Such features, however, never really materialized. (multi-tasking eventually appeared, in one form or another, but MS never produced a multi-user DOS) One possible reason for this shift was to avoide legal troubles with AT&T, but I cannot give a definitive answer on this matter. UNIX ties could also be seen in Apple's ProDOS; one of the closest ties for both MS-DOS 2.x and beyond and ProDOS is the use of a hierarchical file system (and notice Apple's directory divider...). Indeed, CP/M itself was in many regards a single-user, single-tasking UNIX clone.
As UNIX and CP/M were taking shape, the mouse and the GUI were being created (the former around the same time as UNIX, the latter around the time of CP/M). The eventual result can be seen in practically every OS released since 1984/85. In 1983, Apple released the Lisa, the first "personal computer" (at $10,000) with a GUI, followed a year later by the Macintosh. The Lisa came with an advanced OS that provided not only a windowing system, but also a multi-tasking environment. The first Macintoshes, in contrast, could only run one program at a time, a situation remedied by the Multi-Finder. Digital Research (DR) released GEM, a GUI extension for DOS, in 1984. It could multi-task (cooperatively) in version 1.0, but legal threats by Apple caused DR to disable multi-tasking and limit the number of possible open windows in further releases. MS approached IBM several times with its plans for Windows, which IBM shunned each time; they were working on their own graphical shell for DOS—Topview (scrapped because MS and IBM began work on OS/2 and because Windows and DOS [the "low-end"] became the realm of MS). The Amiga provided an OS that many have called "ahead of its time"—it featured not only a GUI, but great multi-media features (due to both the hardware and the software) and full preemptive multi-tasking (but no protected memory). Atari followed suit with TOS, which incorporated DR's GEM environment. Acorn, over time, continued to develop its RISC OS, sporting a nice GUI and many other features—it runs on Acorn's RISC-PC (basically unavailable in the U.S.). Also, in 1984 the major UNIX vendors formed X/Open, the primary result of which is the X Window System, a powerful GUI and application environment for UNIX and other OSes.
Since then, Windows went through many realeases: 1.x, 2.x, 3.x, Windows for Workgroups, and Windows 95-98. Along the way, OS/2 was formed, the development of which led to IBM's OS/2 and MS's Windows NT. Windows NT "became" Windows 2000, and later Windows XP. The MacOS has gone through numerous versions; of note are the 6.x line, which had the option of both single-tasking and multi-tasking Finders, the 7.x line, the 8.x line that sported a new code-base, 9.x which marked a transition to more modern features, and then OS X, a UNIX-based operating system. The Amiga basically died and Atari is all but buried, no longer existing any more as a computer manufacturer. Digital Research is 6 feet under. OS/2 provided all the features of a "modern" OS years before MS and Apple got around to it, but in the technology world marketing, not quality, often reigns supreme. UNIX development became splintered, and out of the ashes have risen several free, open-source versions and clones (often referred to as "UNIX-like"): Linux, and Free/Net/OpenBSD. In order to move into the 21st century, MS merged its commerical line—Windows 95/98—with the Windows NT code base, finally moving away from a DOS heritage. Apple attempted for several years to introduce a major upgrade to its OS; Copland essentially failed, but by buying Steve Jobs' NeXT (instead of going with the innovative BeOS), it not only brought back its original CEO, but was also able to produce "Rhapsody" (Mach + BSD UNIX + nice Interface), which then further merged with an updated Mac interface to form MacOS X. IBM pulled OS/2 from the desktop sphere, quietly making enhancements here and there, and giving it some of the best native Java and networking support available, and what was OS/2 is now eComStation.
All in all, the realm of operating systems is rather interesting and productive. In addition to the "established OSes," there are many private OS intiatives, for both modern and older computers. There are many important OSes that I have not been able to give much, if any, time to, such as VMS, BeOS, and various OSes of primarily academic interest. Links to some of them are on my other pages. Also, the U.S. does not represent the totality of the computer market; additionally, interesting OS research continues to take place both in academia and in private industry. Personal computers are now powerful enough to run UNIX-like OSes, whereas older OSes are too hindered by their past to fully take advantage of today's hardware. The following is a short list of links to other OS-oriented sites.