INTRO(1) INTRO(1) | |
NAME | |
intro - introduction to Plan 9 from User Space | |
DESCRIPTION | |
Plan 9 is a distributed computing environment built at Bell | |
Labs starting in the late 1980s. The system can be obtained | |
from Bell Labs at http://plan9.bell-labs.com/plan9 and runs | |
on PCs and a variety of other platforms. Plan 9 became a | |
convenient platform for experimenting with new ideas, appli- | |
cations, and services. | |
Plan 9 from User Space provides many of the ideas, applica- | |
tions, and services from Plan 9 on Unix-like systems. It | |
runs on FreeBSD (x86, x86-64), Linux (x86, x86-64, PowerPC | |
and ARM), Mac OS X (x86, x86-64, and PowerPC), NetBSD (x86 | |
and PowerPC), OpenBSD (x86 and PowerPC), Dragonfly BSD | |
(x86-64), and SunOS (x86-64 and Sparc). | |
Commands | |
Plan 9 from User Space expects its own directory tree, con- | |
ventionally /usr/local/plan9. When programs need to access | |
files in the tree, they expect the $PLAN9 environment vari- | |
able to contain the name of the root of the tree. See | |
install(1) for details about installation. | |
Many of the familiar Unix commands, for example cat(1), | |
ls(1), and wc(1), are present, but in their Plan 9 forms: | |
cat takes no options, ls does not columnate its output when | |
printing to a terminal, and wc counts UTF characters. In | |
some cases, the differences are quite noticeable: grep(1) | |
and sed(1) expect Plan 9 regular expressions (see | |
regexp(7)), which are closest to what Unix calls extended | |
regular expressions. Because of these differences, it is | |
not recommended to put $PLAN9/bin before the usual system | |
bin directories in your search path. Instead, put it at the | |
end of your path and use the 9(1) script when you want to | |
invoke the Plan 9 version of a traditional Unix command. | |
Occasionally the Plan 9 programs have been changed to adapt | |
to Unix. Mk(1) now allows mkfiles to choose their own | |
shell, and rc(1) has a ulimit builtin and manages $PATH. | |
Many of the graphical programs from Plan 9 are present, | |
including sam(1) and acme(1). An X11 window manager rio(1) | |
mimics Plan 9's window system, with command windows imple- | |
mented by the external program 9term(1). Following the style | |
of X Windows, these programs run in new windows rather than | |
the one in which they are invoked. They all take a -W | |
option to specify the size and placement of the new window. | |
The argument is one of widthxheight, widthxheight@xmin,xmax, | |
Page 1 Plan 9 (printed 12/1/14) | |
INTRO(1) INTRO(1) | |
or xmin,ymin,xmax,ymax. | |
The plumber(4) helps to connect the various Plan 9 programs | |
together, and fittings like web(1) connect it to external | |
programs such as web browsers; one can click on a URL in | |
acme and see the page load in Firefox. | |
User-level file servers | |
In Plan 9, user-level file servers present file trees via | |
the Plan 9 file protocol, 9P. Processes can mount arbitrary | |
file servers and customize their own name spaces. These | |
facilities are used to connect programs. Clients interact | |
with file servers by reading and writing files. | |
This cannot be done directly on Unix. Instead the servers | |
listen for 9P connections on Unix domain sockets; clients | |
connect to these sockets and speak 9P directly using the | |
9pclient(3) library. Intro(4) tells more of the story. The | |
effect is not as clean as on Plan 9, but it gets the job | |
done and still provides a uniform and easy-to-understand | |
mechanism. The 9p(1) client can be used in shell scripts or | |
by hand to carry out simple interactions with servers. | |
Netfiles(1) is an experimental client for acme. | |
External databases | |
Some programs rely on large databases that would be cumber- | |
some to include in every release. Scripts are provided that | |
download these databases separately. These databases can be | |
downloaded separately. See $PLAN9/dict/README and | |
$PLAN9/sky/README. | |
Programming | |
The shell scripts 9c and 9l (see 9c(1)) provide a simple | |
interface to the underlying system compiler and linker, sim- | |
ilar to the 2c and 2l families on Plan 9. 9c compiles | |
source files, and 9l links object files into executables. | |
When using Plan 9 libraries, 9l infers the correct set of | |
libraries from the object files, so that no -l options are | |
needed. | |
The only way to write multithreaded programs is to use the | |
thread(3) library. Rfork(3) exists but is not as capable as | |
on Plan 9. There are many unfortunate by necessary prepro- | |
cessor diversions to make Plan 9 and Unix libraries coexist. | |
See intro(3) for details. | |
The debuggers acid(1) and db(1) and the debugging library | |
mach(3) are works in progress. They are platform- | |
independent, so that x86 Linux core dumps can be inspected | |
on PowerPC Mac OS X machines, but they are also fairly | |
incomplete. The x86 target is the most mature; initial Pow- | |
erPC support exists; and other targets are unimplemented. | |
Page 2 Plan 9 (printed 12/1/14) | |
INTRO(1) INTRO(1) | |
The debuggers can only inspect, not manipulate, target pro- | |
cesses. Support for operating system threads and for 64-bit | |
architectures needs to be rethought. On x86 Linux systems, | |
acid and db can be relied upon to produce reasonable stack | |
traces (often in cases when GNU gdb cannot) and dump data | |
structures, but that it is the extent to which they have | |
been developed and exercised. | |
Porting programs | |
The vast majority of the familiar Plan 9 programs have been | |
ported, including the Unicode-aware troff(1). | |
Of the more recent additions to Plan 9, factotum(4), | |
secstore(1), and secstored(1), vac(1), vacfs(4), and | |
venti(8) are all ported. | |
A backup system providing a dump file system built atop | |
Venti is in progress; see vbackup(8). | |
Porting to new systems | |
Porting the tree to new operating systems or architectures | |
should be straightforward, as system-specific code has been | |
kept to a minimum. The largest pieces of system-specific | |
code are <u.h>, which must include the right system files | |
and set up the right integer type definitions, and | |
libthread, which must implement spin locks, operating system | |
thread creation, and context switching routines. Portable | |
implementations of these using <pthread.h> and <ucontext.h> | |
already exist. If your system supports them, you may not | |
need to write any system specific code at all. | |
There are other smaller system dependencies, such as the | |
terminal handling code in 9term(1) and the implementation of | |
getcallerpc(3), but these are usually simple and are not on | |
the critical path for getting the system up and running. | |
SEE ALSO | |
The rest of this manual describes Plan 9 from User Space. | |
Many of the man pages have been brought from Plan 9, but | |
they have been updated, and others have been written from | |
scratch. | |
The manual pages are in a Unix style tree, with names like | |
$PLAN9/man/man1/cat.1 instead of Plan 9's simpler | |
$PLAN9/man/1/cat, so that the Unix man(1) utility can handle | |
it. Some systems, for example Debian Linux, deduce the man | |
page locations from the search path, so that adding | |
$PLAN9/bin to your path is sufficient to cause $PLAN9/man to | |
be consulted for manual pages using the system man. On other | |
systems, or to look at manual pages with the same name as a | |
system page, invoke the Plan 9 man directly, as in 9 man | |
cat. | |
Page 3 Plan 9 (printed 12/1/14) | |
INTRO(1) INTRO(1) | |
The manual sections follow the Unix numbering conventions, | |
not the Plan 9 ones. | |
Section (1) describes general publicly accessible commands. | |
Section (3) describes C library functions. | |
Section (4) describes user-level file servers. | |
Section (7) describes file formats and protocols. (On Unix, | |
section (5) is technically for file formats but seems now to | |
be used for describing specific files.) | |
Section (8) describes commands used for system administra- | |
tion. | |
Section (9p) describes the Plan 9 file protocol 9P. | |
These pages describe parts of the system that are new or | |
different from Plan 9 from Bell Labs: | |
9(1), 9c(1), 9p(1), 9term(1), acidtypes in acid(1), | |
dial(1), git(1), label(1), the MKSHELL variable in | |
mk(1), namespace(1), netfiles(1), page(1), psfonts(1), | |
rio(1), web(1), wintext(1) | |
intro(3), 9pclient(3), the unix network in dial(3), | |
exits(3), get9root(3), getns(3), notify(3), | |
post9pservice(3), rfork(3), searchpath(3), sendfd(3), | |
udpread(3), venti(3), wait(3), wctl(3) | |
intro(4), 9pserve(4), import(4), | |
vbackup(8) | |
openfd(9p) | |
DIAGNOSTICS | |
In Plan 9, a program's exit status is an arbitrary text | |
string, while on Unix it is an integer. Section (1) of this | |
manual describes commands as though they exit with string | |
statuses. In fact, exiting with an empty status corresponds | |
to exiting with status 0, and exiting with any non-empty | |
string corresponds to exiting with status 1. See exits(3). | |
Page 4 Plan 9 (printed 12/1/14) | |