Plan 9 from Bell Labs is a research system developed at Bell Labs starting in the late 1980s. Its original designers and authors were Ken Thompson, Rob Pike, Dave Presotto, and Phil Winterbottom. They were joined by many others as development continued throughout the 1990s to the present.
Plan 9 demonstrates a new and often cleaner way to solve most systems problems. The system as a whole is likely to feel tantalizingly familiar to Unix users but at the same time quite foreign.
In Plan 9, each process has its own mutable name space. A process may rearrange, add to, and remove from its own name space without affecting the name spaces of unrelated processes. Included in the name space mutations is the ability to mount a connection to a file server speaking 9P, a simple file protocol. The connection may be a network connection, a pipe, or any other file descriptor open for reading and writing with a 9P server on the other end. Customized name spaces are used heavily throughout the system, to present new resources (e.g., the window system), to import resources from another machine (e.g., the network stack), or to browse backward in time (e.g., the dump file system).
Plan 9 is an operating system kernel but also a collection of accompanying software. The bulk of the software is predominantly new, written for Plan 9 rather than ported from Unix or other systems. The window system, compilers, file server, and network services are all freshly written for Plan 9. Although classic Unix programs like dc(1), ed(1), and even troff(1) have been brought along, they are often in an updated form. For example, troff accepts Unicode documents encoded in UTF-8, as does the rest of the system.
The paper Plan 9 from Bell Labs gives a more in-depth introduction to the system.
Plan 9 has had four major releases over its lifetime.
The first edition, released in 1992, was made available only to universities. The first edition had most of the recognizable parts of Plan 9, including the kernel, ndb, sam, upas, alef, and full UTF-8 support. Acme was present in an early form as help. The CPU servers were the Sun Sparcstation, SGI Power, and SGI Magnum, with NeXTstations and PCs as terminals. The locally built Gnot and Hobbit workstations were also used as terminals.
The second edition, released in 1995 in book-and-CD form, added acme and a few smaller utilities. By the time of the second edition release, the Plan 9 team was working on a reimplementation of the system called Brazil. In 1999, in preparation for a third edition release, Brazil’s name was changed back to Plan 9.
The anticipated third edition was released in June 2000, distributed for free over the Internet. It introduced a new color graphics operator called draw and a new program connection mechanism called plumbing. The distribution introduced a simple update manager called wrap to install packaged system updates.
Starting shortly after the third edition release, the Bell Labs team began a revision to the 9P protocol called 9P2000. Compared to the 9P used by earlier releases, 9P2000 removes some now-cumbersome restrictions on name lengths, adds a ‘last modifier’ field to directory metadata, batches walk messages, and introduces authentication files as a mechanism for moving the details of authentication protocols out of the 9P protocol proper.
The fourth edition release, in 2002, introduced 9P2000 along with the associated security agent factotum(4) and key store secstore(8). It also introduced the venti(8) block storage server. The venti-based file server fossil(4) made its debut in early 2003.
In addition to these programs, the fourth edition introduced a new mechanism for distributing updates to the system. A public fossil file server, sources.cs.bell-labs.com, holds a current file tree which it serves to any Internet-connected Plan 9 system. Changes to this fourth edition tree are made frequently, usually every day. Clients run the replica(1) tools to keep their own systems in sync with sources. Nightly snapshots of sources, accessed via its dump file system, provide a convenient release history.
The first edition was made available only for use by universities.
The second edition was made available to the general public at a cost of $350 for the distribution, which included a license to use the software throughout the organization.
For the third edition, Lucent agreed to release Plan 9 for free via the Internet, under a new license, the Plan 9 License.
The fourth edition was made available under the Lucent Public License version 1.02. Adopted to address shortcomings in the Plan 9 License, the Lucent Public License 1.02 is identical the IBM Public License 1.0 except that it does not require source code to be distributed with derived works; it is non-viral.
Since March 23, 2021, all fourth editions were made available under the MIT License.
Plan 9 continues to change daily. Those changes are distributed to the many Plan 9 users via sources.cs.bell-labs.com as described above. Even so, Plan 9 has remained true to its original vision, and a user of a 1992 first edition system would not need much help in adapting to today’s.
Slowly, ideas from Plan 9 are being adopted by other systems. Plan 9 was the first operating system with complete support for the UTF-8 Unicode character set encoding. The dump file system has been mimicked in Athena’s OldFiles directories or Network Appliance’s .snapshot directories. The flexible rfork(2) system call, the basis of lightweight threads, was adopted as is by the various BSD derivatives and reincarnated on Linux as clone(2). The simple file protocol 9P has been implemented on early versions of FreeBSD and current versions of Linux.
A handful of companies have had success in selling Plan 9-based products. Most notable is Vita Nuova, which continues to maintain and market Inferno, a Plan 9 derivative targeted at set-top boxes and other embedded devices.
Because Plan 9 has a very different system model from other modern operating systems, it is sometimes difficult to port external software to Plan 9. In particular, Plan 9 has no full-featured web browser; webfs(4) and html(2) are intended as steps toward a solution.
The home page contains links to additional documentation and download information.