The Mac OS X developers included features from BSD, System V, Sun Microsystems' Solaris, and Linux, as well as new features, in their operating system. Although most of the tools found on UNIX exist for Mac OS X, in some cases these tools have been replaced by more modern counterparts. This section describes many of the popular tools and features available under OS X.
GUIs: Graphical User Interfaces
Mac OS X comes with two graphical interfaces that can be used simultaneously. Macintosh users are familiar with Aqua, the standard Mac OS X graphical interface. Aqua is based on a rendering technology called Quartz and has a standard look and feel for applications.
Mac OS X also supports the X Window System (also called X or X11). The X in X Window System has nothing to do with the X in Mac OS X. X11 was developed in part by researchers at MIT (Massachusetts Institute of Technology) and provides the foundation for the GUIs available with many UNIX systems. Because X11 is widely used on other systems, support for X11 applications under Mac OS X allows users greater flexibility and access to a large pool of applications developed for UNIX (and Linux) systems. Given a terminal or workstation screen that supports X11, a user can interact with the computer through multiple windows on the screen, display graphical information, or use special-purpose applications to draw pictures, monitor processes, or preview formatted output. X11 is an across-the-network protocol that allows a user to open a window on a workstation or computer system that is remote from the CPU generating the window.
Usually two layers run under X11: a desktop manager and a window manager. A desktop manager is a picture-oriented user interface that enables you to interact with system programs by manipulating icons instead of typing the corresponding commands to a shell. Under Mac OS X, the Finder provides the desktop while Aqua launches applications and handles system menus, so there is no need for a desktop manager.
Mac OS X handles the desktop in Aqua, not in X11, so there is no desktop manager under X11.
A window manager is a program that allows you to open and close windows, run programs, and set up a mouse so it does various things depending on how and where you click. The window manager also gives the screen its personality. Whereas Microsoft Windows allows you to change the color of key elements in a window, a window manager under X11 allows you to customize the overall look and feel of the screen: change the way a window looks and works (by giving it different borders, buttons, and scrollbars), set up virtual desktops, create menus, and more. Under Mac OS X, the default window manager is quartz-wm. This window manager, which manages X11 applications, mimics the look and feel of the Apple Aqua user interface so as to better integrate X11 applications with the Aqua desktop.
Mac OS X network support includes many utilities that enable you to access remote systems over a variety of networks. In addition to sending email to users on other systems, you can access files on disks mounted on other computers as if they were located on the local system, make your files available to other systems in a similar manner, copy files back and forth, run programs on remote systems while displaying the results on the local system, and perform many other operations across local area networks (LANs) and wide area networks (WANs), including the Internet.
Layered on top of this network access is a wide range of application programs that extend the computer's resources around the globe. You can carry on conversations with people throughout the world, gather information on a wide variety of subjects, and download new software over the Internet quickly and reliably.
Individuals from companies throughout the computer industry have joined together to develop the POSIX (Portable Operating System Interface for Computer Environments) standard, which is based largely on the UNIX System V Interface Definition (SVID) and other earlier standardization efforts. These efforts have been spurred by the U.S. federal government, which needs a standard computing environment to minimize its training and procurement costs. Now that these standards are gaining acceptance, software developers are able to develop applications that run on all conforming versions of UNIX, Linux, and other operating systems. The OS X BSD API allows developers to take advantage of these standards.
The C and Objective-C Programming Languages
Ken Thompson wrote the UNIX operating system in 1969 in PDP-7 assembly language. Assembly language is machine dependent: Programs written in assembly language work on only one machine or, at best, one family of machines. The original UNIX operating system therefore could not easily be transported to run on other machines (it was not portable).
To make UNIX portable, Thompson developed the B programming language, a machine-independent language, from the BCPL language. Dennis Ritchie developed the C programming language by modifying B and, with Thompson, rewrote UNIX in C in 1973. After this rewrite, the operating system could be transported more easily to run on other machines.
That was the start of C. Its roots reveal some of the reasons why it is such a powerful tool. C can be used to write machine-independent programs. A programmer who designs a program to be portable can easily move it to any computer that has a C compiler. C is also designed to compile into very efficient code. With the advent of C, a programmer no longer had to resort to assembly language to get code that would run efficiently.
C is a good systems language. You can write a compiler or an operating system in C. It is highly structured, but it is not necessarily a high-level language. C allows a programmer to manipulate bits and bytes, as is necessary when writing an operating system, but it also has high-level constructs that allow for efficient, modular programming.
In the late 1980s, the American National Standards Institute (ANSI) defined a standard version of the C language, commonly referred to as ANSI C or C89 (for the year the standard was published). Ten years later, the C99 standard was published; C99 is mostly supported by the GNU Project's C compiler (named gcc). The original version of the language is often referred to as Kernighan & Ritchie (or K & R) C, named for the authors of the book that first described the C language.
As object-oriented programming became more popular, variants of C that supported object-oriented programming were developed. Two of the most famous are C++, developed at Bell Labs, and Objective-C, developed at a software company named Stepsone.
A researcher at Bell Labs, Bjarne Stroustrup, created the object-oriented programming language named C++, which is built on the foundation of C. Because object-oriented programming is desired by many employers today, C++ is preferred over C in many environments. Some developers felt that C++ did not do a good job of melding C and object-oriented concepts.
The Objective-C language is more accurately termed object-oriented. Objective-C was the language chosen for development on the NeXT. The NeXT compiler code was eventually contributed back to the GNU Project, and today the GNU C compiler supports Objective-C. Much of Mac OS X's application framework is written in Objective-C.
Apple continues to maintain versions of the GNU Project's C compiler and tools as the native ones used to build the Mac OS X operating system. The compiler and tools are distributed with Mac OS X.
One of the strengths of Mac OS X is its rich software development environment. You can find compilers and interpreters for many computer languages. Besides C, Objective-C, and C++, other languages available for Mac OS X include Java, Perl, and Python. The tools that come with the system are just part of the story; many others are available for download or purchase. The bison utility generates parsing code that makes it easier to write programs to build compilers (tools that parse files containing structured information). The flex utility generates scanners (code that recognizes lexical patterns in text). The make utility and GNU's automatic configuration utility (configure) make it easy to manage complex development projects. Source code management systems, such as CVS, simplify version control. The gdb debugger helps in tracking down and repairing software defects. The GNU C compiler (gcc) works with the gprof profiling utility to help programmers identify potential bottlenecks in a program's performance. The C compiler includes options to perform extensive checking of C code that can make the code more portable and reduce debugging time. Finally Apple's Xcode development environment provides a unified graphical front end to most of these tools as well as other options and features.