UNIX was originally developed at Bell Laboratories as a private research project by a small group of people starting in the late 1960s. This group had experience with a number of different operating systems research efforts in the previous decade, and their goals with the UNIX project were to design an operating system to satisfy the objectives of transparency, simplicity, and modifiability, with the use of a new third-generation programming language. At the time of conception, typical vendor-specific operating systems were extremely large and all were written in assembly language, making them difficult to maintain. Although the first attempts to write the UNIX kernel were based on assembly language, later versions were written in a high-level language called C, which was developed during the same era. Even today, most modern operating system kernels, such as the Linux kernel, are written in C. After the kernel was developed using the first C compiler, a complete operating environment was developed, including the many utilities associated with UNIX today (for example, the visual editor, vi). In this section, we examine the timeline leading to the development of UNIX, and the origins of the two main “flavors” of UNIX: AT&T (System V) and BSD.
In 1969, Ken Thompson from AT&T’s Bell Telephone Labs wrote the first version of the UNIX operating system, on a DEC PDP-7. Disillusioned with the inefficiency of the Multics (Multiplexed Information and Computing Service) project, Thompson decided to create a programmer-friendly operating system that limited the functions contained within the kernel and allowed greater flexibility in the design and implementation of applications. The PDP-7 was a modest system on which to build a new operating system—it had only an assembler and a loader, and it would allow only a single-user login at any one time. It didn’t even have a hard disk—the developers were forced to partition physical memory into an operating system segment and a RAM disk segment. Thus, the first UNIX file system was emulated entirely in RAM!
After successfully crafting a single-user version of UNIX on the PDP-7, Thompson and his colleague Dennis Ritchie ported the system to a much larger DEC PDP-11/20 system in 1970. This project was funded and charged with the requirement of building a text processing system for patents, the descendents of which still exist in text filters such as troff. The need to create application programs ultimately led to the development of the first C compiler by Ritchie, which was based on the B language. C was written with portability in mind—thus, platform-specific libraries could be addressed using the same function call from source code that would also compile on another hardware platform. Although the PDP-11 was better than the PDP-7, it was still very modest compared to today’s scientific calculators—it had 24K of addressable memory, with 12K reserved for the operating system. By 1972, the number of worldwide UNIX installations had grown to ten.
The next major milestone in the development of UNIX was the rewriting of the kernel in C, by Ritchie and Thompson, in 1973. This explains why C and UNIX are strongly related—even today, most UNIX applications are written in C, even though other programming languages have long been made available. Following the development of the C kernel, the owners of UNIX (being AT&T) began licensing the source code to educational institutions within the U.S. and abroad. However, these licenses were often restrictive, and the releases were not widely advertised. No support was offered, and no mechanism was available for officially fixing bugs. However, because users had access to the source code, the ingenuity in hacking code—whose legacy exists today in community projects like Linux—gathered steam, particularly at the University of California at Berkeley. The issue of licensing and AT&T’s control over UNIX would determine the future fragmentation of the operating system in years to come.
In 1975, the first distribution of UNIX software was made by the Berkeley group, and was known as the BSD. Berkeley was Ken Thompson’s alma mater, and he teamed up with two graduate students (Bill Joy and Chuck Haley) who were later to become leading figures in the UNIX world. They worked on a UNIX Pascal compiler that was released as part of BSD, and Bill Joy also wrote the first version of vi, the visual editor, which continues to be popular even today.
In 1978, the seventh edition of the operating system was released, and it supported many different hardware architectures, including the IBM 360, Interdata 8/32, and an Interdata 7/32. The version 7 kernel was a mere 40K in size, and included the following system calls: _exit, access, acct, alarm, brk, chdir, chmod, chown, chroot, close, creat, dup, dup2, exec*, exit, fork, fstat, ftime, getegid, geteuid, getgid, getpid, getuid, gtty, indir, ioctl, kill, link, lock, lseek, mknod, mount, mpxcall, nice, open, pause, phys, pipe, pkoff, pkon, profil, ptrace, read, sbrk, setgid, setuid, signal, stat, stime, stty, sync, tell, time, times, umask, umount, unlink, utime, wait, write. Indeed, the full manual for version 7 is now available online at http://plan9.bell-labs.com/7thEdMan/index.html.
With the worldwide popularity of UNIX version 7, AT&T began to realize that UNIX might be a valuable commercial product, and attempted to restrict the teaching of UNIX from source code in university courses, thereby protecting valuable intellectual property. In addition, AT&T began to charge license fees for access to the UNIX source, for the first time. This prompted the UCB group to create their own variant of UNIX—the BSD distribution now contains a full operating system in addition to the traditional applications that originally formed the distribution. As a result, version 7 forms the basis for all the UNIX versions currently available. This version of UNIX also contained a full Brian Kernighan and Ritchie C compiler, and the Bourne shell. The branching of UNIX into AT&T and BSD “flavors” continues even today, although many commercial systems—such as SunOS—which are derived from BSD have now adopted many System V features, as discussed next.
The most influential BSD versions of UNIX were 4.2, released in 1983, and 4.3, released in 1987. The DARPA-sponsored development of the Internet was largely undertaken on BSD UNIX, and most of the early commercial vendors of UNIX used BSD UNIX rather than paying license fees to AT&T. Indeed, many hardware platforms even today—right up to Cray super computers—can still run BSD out of the box. Other responses to the commercialization of UNIX included Andrew Tanenbaum’s independent solution, which was to write a new UNIX-like operating system from scratch that would be compatible with UNIX, but without even one line of AT&T code. Tanenbaum called it Minix, and Minix is still taught in operating systems courses today. Minix also played a crucial role in Linus Torvald’s experiments with his UNIX-like operating system, known today as Linux.
Bill Joy left Berkeley prior to the release of 4.2BSD, and modified the 4.1c system to form SunOS. In the meantime, AT&T continued with their commercial development of the UNIX platform. In 1983, they released the first System V Release 1, which had worked its way up to Release 3 by 1987. This is the release that several of the older generation of mainframe hardware vendors, such as HP and IBM, based their HP-UX and AIX systems upon, respectively. At this time, Sun and AT&T also began planning a future merging of the BSD and System V distributions. In 1990, AT&T released System V Release 4, which formed the basis for the SunOS 5.x release in 1992—this differed substantially from the previous SunOS 4.x systems, which were entirely based on BSD. Other vendors, such as IBM and DEC, eschewed this new cooperation and formed the Open Software Foundation (OSF).
In recent years, a new threat has emerged to the market dominance of UNIX systems: Microsoft’s enterprise-level computing products, such as Windows NT and Windows 2000, are designed to deliver price-competitive alternatives to UNIX on inexpensive Intel hardware. In the same way that UNIX outgunned the dominant mainframe vendors with a faster, leaner operating system, Microsoft’s strategy has also been based on arguments concerning total cost of ownership (TCO), and a worldwide support scheme for an enormous installed base of desktop Microsoft Windows clients. However, the increasing popularity of Linux and the release of Solaris for Intel have forced Microsoft to defend their platform publicly, and the future of enterprise operating systems is not clear. UNIX will have an important role to play in the future, however. As desktop computing systems rapidly become connected to the Internet, they will require the kinds of services typically available under operating systems such as Solaris 9. As part of their territorial defense of the UNIX environment, many former adversaries in the enterprise computing market, such as IBM, HP, and Sun, have agreed to work towards a Common Open Software Environment (COSE), which is designed to capitalize on the common features of UNIX provided by these vendors. By distributing common operating system elements such as the Common Desktop Environment, based on X11, these vendors will be looking to streamline their competing application APIs, and to support emerging enterprise data processing standards, such as the Object Management Group’s CORBA object management service.
Solaris was originally derived from the BSD distribution from the University of California. Thus commands in SunOS 4.x were very similar to those found in other BSD distributions, although these changed significantly in SunOS 5.x when System V Release 4 was adopted. For example, many veteran system administrators would still find themselves typing ps aux to display a process list, which is BSD style, rather than the newer ps –eaf, which is correct for SVR4. Before AT&T commercialized UNIX, the BSD distribution required elements of the AT&T system to form a fully operational system. By the early 1990s, the UCB groups had removed all dependencies on the AT&T system. This led to the development of many of the existing BSD systems available today, including FreeBSD and NetBSD.
The innovations pioneered at UCB included the development of a virtual memory system for UNIX, a fast file system (which supported long filenames and symbolic links), and the basic elements of a TCP/IP networking system (including authentication with Kerberos). The TCP/IP package included support for services such as telnet and ftp, and the sendmail mail transport agent, which used the Simple Mail Transfer Protocol. In addition, alternate shells to the default Bourne shell—such as the C shell, which uses C-like constructs to process commands within an interpreted framework—were also first seen in the BSD distribution, as were extensions to process management, such as job control. Standard terminal management libraries such as termcap and curses also originated with BSD. Products from other vendors were also introduced into BSD, including NFS clients and servers from Sun Microsystems. Later releases also included support for symmetric multiprocessing, thread management, and shared libraries.
It is often said that the BSD group gave rise to the community-oriented free software movement, which underlies many successful software projects being conducted around the world today. However, BSD is not the only attempt to develop a “free” version UNIX. In 1984, Richard Stallman started developing the GNU (GNUs Not UNIX) system, which was intended to be a replacement for UNIX that was completely free. The GNU C and C++ compilers were some of the first to fully support industry standards (ANSI), and the GNU Bourne again shell has many more features than the original Bourne shell. You can find more information about the GNU project at http://www.gnu.org/.
Several versions of BSD are still freely distributed and available, such as FreeBSD.
Solaris 9 integrates many features from the AT&T System V releases (including support for interprocess communication) that were missing in the BSD distributions. As we discussed earlier, many legal battles were fought over the UNIX name and source. System V was developed by the UNIX System Laboratories (USL), which was still majority owned by AT&T in the early 1980s. However, Novell bought USL in early 1993. Eventually, USL sold UNIX to Novell, which ultimately sold it to X/Open. In 1991, the OSF-1 specification was released, and although DEC is the only major manufacturer to fully implement the standard, there is much useful cross-fertilization between System V and other operating systems. Since Sun joined OSF in 1994, there has been new hope of standardizing UNIX services and APIs across platforms.
The major contributions of System V to the UNIX platform are as follows:
Enhancement of the Bourne shell, including shell functions
The STREAMS and TLI networking libraries
Remote file sharing (RFS)
Improved memory paging
The Application Binary Interface (ABI)
The major differences between SVR4 and BSD UNIX can be summarized as follows:
Boot scripts /etc/init.d in System V, /etc/rc.d in BSD
Default shell Bourne shell in System V, C shell in BSD
File system mount database /etc/mnttab in System V, /etc/mtab in BSD
Kernel name /unix in System V, /vmunix in BSD
Printing system lp in System V, lpr in BSD
String functions memcopy in System V, bcopy in BSD
Terminal initialization /etc/inittab in System V, /etc/ttys in BSD
Terminal control termio in System V, termios in BSD