The Macintosh operating system was designed at Apple in the
early 1980s, inspired by pioneering work on GUIs done earlier at
Xerox's Palo Alto Research Center. It saw its debut with the
Macintosh in 1984. MacOS has gone through two significant design
transitions since, and is undergoing a third. The first transition was
the shift from supporting only a single application at a time to being
able to cooperatively multitask multiple applications (MultiFinder);
the second was the shift from 68000 to PowerPC processors, which both
preserved backward binary compatibility with 68K applications and
brought in an advanced shared library management system for PowerPC
applications, replacing the original 68K trap instruction-based
code-sharing system. The third was the merger of MacOS design ideas
with a Unix-derived infrastructure in MacOS X. Except where
specifically noted, the discussion here applies to pre-OS-X
versions.
MacOS has a very strong unifying idea that is very different
from Unix's: the Mac Interface Guidelines. These specify in
great detail what an application GUI should look like and how it
should behave. The consistency of the Guidelines influenced the
culture of Mac users in significant ways. Not infrequently,
simple-minded ports of DOS or Unix programs that did not follow the
Guidelines have been summarily rejected by the Mac user base and
failed in the marketplace.
One key idea of the Guidelines is that things stay where you
put them. Documents, directories, and other objects have
persistent locations on the desktop that the system doesn't mess with,
and the desktop context persists through reboots.
The Macintosh's unifying idea is so strong that most of the
other design choices we discussed above are either forced by it or
invisible. All programs have GUIs. There is no CLI at all.
Scripting facilities are present but much less commonly used than
under Unix; many Mac programmers never learn them. MacOS's
captive-interface GUI metaphor (organized around a single main event
loop) leads to a weak scheduler without preemption. The weak
scheduler, and the fact that all MultiFinder applications run in a
single large address space, implies that it is not practical to use
separated processes or even threads rather than polling.
MacOS applications are not, however, invariably monster
monoliths. The system's GUI support code, which is partly implemented
in a ROM shipped with the hardware and partly implemented in shared
libraries, communicates with MacOS programs through an event interface
that has been quite stable since its beginnings. Thus, the design of
the operating system encourages a relatively clean separation between
application engine and GUI interface.
MacOS also has strong support for isolating application metadata
like menu structures from the engine code. MacOS files have both a
‘data fork’ (a Unix-style bag of bytes that
contains a document or program code) and a ‘resource fork’
(a set of user-definable file attributes). Mac applications tend
to be designed so that (for example) the images and sound used in them
are stored in the resource fork and can be modified separately from
the application code.
The MacOS system of internal boundaries is very weak. There is
a wired-in assumption that there is but a single user, so there are no
per-user privilege groups. Multitasking is cooperative, not
pre-emptive. All MultiFinder applications run in the same address
space, so bad code in any application can corrupt anything outside the
operating system's low-level kernel. Security cracks against MacOS
machines are very easy to write; the OS has been spared an epidemic
mainly because very few people are motivated to crack it.
The intended role for the Macintosh was as a client operating
system for nontechnical end users, implying a very low tolerance for
interface complexity. Developers in the Macintosh culture became
very, very good at designing simple interfaces.
The incremental cost of becoming a developer, assuming you have
a Macintosh already, has never been high. Thus, despite rather
complex interfaces, the Mac developed a strong hobbyist culture early
on. There is a vigorous tradition of small tools, shareware, and
user-supported software.