1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329 |
- .TL
- Plan 9 from Bell Labs
- .AU
- Rob Pike
- Dave Presotto
- Sean Dorward
- Bob Flandrena
- Ken Thompson
- Howard Trickey
- Phil Winterbottom
- .AI
- .MH
- USA
- .SH
- Motivation
- .PP
- .FS
- Appeared in a slightly different form in
- .I
- Computing Systems,
- .R
- Vol 8 #3, Summer 1995, pp. 221-254.
- .FE
- By the mid 1980's, the trend in computing was
- away from large centralized time-shared computers towards
- networks of smaller, personal machines,
- typically UNIX `workstations'.
- People had grown weary of overloaded, bureaucratic timesharing machines
- and were eager to move to small, self-maintained systems, even if that
- meant a net loss in computing power.
- As microcomputers became faster, even that loss was recovered, and
- this style of computing remains popular today.
- .PP
- In the rush to personal workstations, though, some of their weaknesses
- were overlooked.
- First, the operating system they run, UNIX, is itself an old timesharing system and
- has had trouble adapting to ideas
- born after it. Graphics and networking were added to UNIX well into
- its lifetime and remain poorly integrated and difficult to administer.
- More important, the early focus on having private machines
- made it difficult for networks of machines to serve as seamlessly as the old
- monolithic timesharing systems.
- Timesharing centralized the management
- and amortization of costs and resources;
- personal computing fractured, democratized, and ultimately amplified
- administrative problems.
- The choice of
- an old timesharing operating system to run those personal machines
- made it difficult to bind things together smoothly.
- .PP
- Plan 9 began in the late 1980's as an attempt to have it both
- ways: to build a system that was centrally administered and cost-effective
- using cheap modern microcomputers as its computing elements.
- The idea was to build a time-sharing system out of workstations, but in a novel way.
- Different computers would handle
- different tasks: small, cheap machines in people's offices would serve
- as terminals providing access to large, central, shared resources such as computing
- servers and file servers. For the central machines, the coming wave of
- shared-memory multiprocessors seemed obvious candidates.
- The philosophy is much like that of the Cambridge
- Distributed System [NeHe82].
- The early catch phrase was to build a UNIX out of a lot of little systems,
- not a system out of a lot of little UNIXes.
- .PP
- The problems with UNIX were too deep to fix, but some of its ideas could be
- brought along. The best was its use of the file system to coordinate
- naming of and access to resources, even those, such as devices, not traditionally
- treated as files.
- For Plan 9, we adopted this idea by designing a network-level protocol, called 9P,
- to enable machines to access files on remote systems.
- Above this, we built a naming
- system that lets people and their computing agents build customized views
- of the resources in the network.
- This is where Plan 9 first began to look different:
- a Plan 9 user builds a private computing environment and recreates it wherever
- desired, rather than doing all computing on a private machine.
- It soon became clear that this model was richer
- than we had foreseen, and the ideas of per-process name spaces
- and file-system-like resources were extended throughout
- the system\(emto processes, graphics, even the network itself.
- .PP
- By 1989 the system had become solid enough
- that some of us began using it as our exclusive computing environment.
- This meant bringing along many of the services and applications we had
- used on UNIX. We used this opportunity to revisit many issues, not just
- kernel-resident ones, that we felt UNIX addressed badly.
- Plan 9 has new compilers,
- languages,
- libraries,
- window systems,
- and many new applications.
- Many of the old tools were dropped, while those brought along have
- been polished or rewritten.
- .PP
- Why be so all-encompassing?
- The distinction between operating system, library, and application
- is important to the operating system researcher but uninteresting to the
- user. What matters is clean functionality.
- By building a complete new system,
- we were able to solve problems where we thought they should be solved.
- For example, there is no real `tty driver' in the kernel; that is the job of the window
- system.
- In the modern world, multi-vendor and multi-architecture computing
- are essential, yet the usual compilers and tools assume the program is being
- built to run locally; we needed to rethink these issues.
- Most important, though, the test of a system is the computing
- environment it provides.
- Producing a more efficient way to run the old UNIX warhorses
- is empty engineering;
- we were more interested in whether the new ideas suggested by
- the architecture of the underlying system encourage a more effective way of working.
- Thus, although Plan 9 provides an emulation environment for
- running POSIX commands, it is a backwater of the system.
- The vast majority
- of system software is developed in the `native' Plan 9 environment.
- .PP
- There are benefits to having an all-new system.
- First, our laboratory has a history of building experimental peripheral boards.
- To make it easy to write device drivers,
- we want a system that is available in source form
- (no longer guaranteed with UNIX, even
- in the laboratory in which it was born).
- Also, we want to redistribute our work, which means the software
- must be locally produced. For example, we could have used some vendors'
- C compilers for our system, but even had we overcome the problems with
- cross-compilation, we would have difficulty
- redistributing the result.
- .PP
- This paper serves as an overview of the system. It discusses the architecture
- from the lowest building blocks to the computing environment seen by users.
- It also serves as an introduction to the rest of the Plan 9 Programmer's Manual,
- which it accompanies. More detail about topics in this paper
- can be found elsewhere in the manual.
- .SH
- Design
- .PP
- The view of the system is built upon three principles.
- First, resources are named and accessed like files in a hierarchical file system.
- Second, there is a standard protocol, called 9P, for accessing these
- resources.
- Third, the disjoint hierarchies provided by different services are
- joined together into a single private hierarchical file name space.
- The unusual properties of Plan 9 stem from the consistent, aggressive
- application of these principles.
- .PP
- A large Plan 9 installation has a number of computers networked
- together, each providing a particular class of service.
- Shared multiprocessor servers provide computing cycles;
- other large machines offer file storage.
- These machines are located in an air-conditioned machine
- room and are connected by high-performance networks.
- Lower bandwidth networks such as Ethernet or ISDN connect these
- servers to office- and home-resident workstations or PCs, called terminals
- in Plan 9 terminology.
- Figure 1 shows the arrangement.
- .KF
- .PS < network.pic
- .IP
- .ps -1
- .in .25i
- .ll -.25i
- .ps -1
- .vs -1
- .I "Figure 1. Structure of a large Plan 9 installation.
- CPU servers and file servers share fast local-area networks,
- while terminals use slower wider-area networks such as Ethernet,
- Datakit, or telephone lines to connect to them.
- Gateway machines, which are just CPU servers connected to multiple
- networks, allow machines on one network to see another.
- .ps +1
- .vs +1
- .ll +.25i
- .in 0
- .ps
- .sp
- .KE
- .PP
- The modern style of computing offers each user a dedicated workstation or PC.
- Plan 9's approach is different.
- The various machines with screens, keyboards, and mice all provide
- access to the resources of the network, so they are functionally equivalent,
- in the manner of the terminals attached to old timesharing systems.
- When someone uses the system, though,
- the terminal is temporarily personalized by that user.
- Instead of customizing the hardware, Plan 9 offers the ability to customize
- one's view of the system provided by the software.
- That customization is accomplished by giving local, personal names for the
- publicly visible resources in the network.
- Plan 9 provides the mechanism to assemble a personal view of the public
- space with local names for globally accessible resources.
- Since the most important resources of the network are files, the model
- of that view is file-oriented.
- .PP
- The client's local name space provides a way to customize the user's
- view of the network. The services available in the network all export file
- hierarchies.
- Those important to the user are gathered together into
- a custom name space; those of no immediate interest are ignored.
- This is a different style of use from the idea of a `uniform global name space'.
- In Plan 9, there are known names for services and uniform names for
- files exported by those services,
- but the view is entirely local. As an analogy, consider the difference
- between the phrase `my house' and the precise address of the speaker's
- home. The latter may be used by anyone but the former is easier to say and
- makes sense when spoken.
- It also changes meaning depending on who says it,
- yet that does not cause confusion.
- Similarly, in Plan 9 the name
- .CW /dev/cons
- always refers to the user's terminal and
- .CW /bin/date
- the correct version of the date
- command to run,
- but which files those names represent depends on circumstances such as the
- architecture of the machine executing
- .CW date .
- Plan 9, then, has local name spaces that obey globally understood
- conventions;
- it is the conventions that guarantee sane behavior in the presence
- of local names.
- .PP
- The 9P protocol is structured as a set of transactions that
- send a request from a client to a (local or remote) server and return the result.
- 9P controls file systems, not just files:
- it includes procedures to resolve file names and traverse the name
- hierarchy of the file system provided by the server.
- On the other hand,
- the client's name space is held by the client system alone, not on or with the server,
- a distinction from systems such as Sprite [OCDNW88].
- Also, file access is at the level of bytes, not blocks, which distinguishes
- 9P from protocols like NFS and RFS.
- A paper by Welch compares Sprite, NFS, and Plan 9's network file system structures [Welc94].
- .PP
- This approach was designed with traditional files in mind,
- but can be extended
- to many other resources.
- Plan 9 services that export file hierarchies include I/O devices,
- backup services,
- the window system,
- network interfaces,
- and many others.
- One example is the process file system,
- .CW /proc ,
- which provides a clean way
- to examine and control running processes.
- Precursor systems had a similar idea [Kill84], but Plan 9 pushes the
- file metaphor much further [PPTTW93].
- The file system model is well-understood, both by system builders and general users,
- so services that present file-like interfaces are easy to build, easy to understand,
- and easy to use.
- Files come with agreed-upon rules for
- protection,
- naming,
- and access both local and remote,
- so services built this way are ready-made for a distributed system.
- (This is a distinction from `object-oriented' models, where these issues
- must be faced anew for every class of object.)
- Examples in the sections that follow illustrate these ideas in action.
- .SH
- The Command-level View
- .PP
- Plan 9 is meant to be used from a machine with a screen running
- the window system.
- It has no notion of `teletype' in the UNIX sense. The keyboard handling of
- the bare system is rudimentary, but once the window system, 8½ [Pike91],
- is running,
- text can be edited with `cut and paste' operations from a pop-up menu,
- copied between windows, and so on.
- 8½ permits editing text from the past, not just on the current input line.
- The text-editing capabilities of 8½ are strong enough to displace
- special features such as history in the shell,
- paging and scrolling,
- and mail editors.
- 8½ windows do not support cursor addressing and,
- except for one terminal emulator to simplify connecting to traditional systems,
- there is no cursor-addressing software in Plan 9.
- .PP
- Each window is created in a separate name space.
- Adjustments made to the name space in a window do not affect other windows
- or programs, making it safe to experiment with local modifications to the name
- space, for example
- to substitute files from the dump file system when debugging.
- Once the debugging is done, the window can be deleted and all trace of the
- experimental apparatus is gone.
- Similar arguments apply to the private space each window has for environment
- variables, notes (analogous to UNIX signals), etc.
- .PP
- Each window is created running an application, such as the shell, with
- standard input and output connected to the editable text of the window.
- Each window also has a private bitmap and multiplexed access to the
- keyboard, mouse, and other graphical resources through files like
- .CW /dev/mouse ,
- .CW /dev/bitblt ,
- and
- .CW /dev/cons
- (analogous to UNIX's
- .CW /dev/tty ).
- These files are provided by 8½, which is implemented as a file server.
- Unlike X windows, where a new application typically creates a new window
- to run in, an 8½ graphics application usually runs in the window where it starts.
- It is possible and efficient for an application to create a new window, but
- that is not the style of the system.
- Again contrasting to X, in which a remote application makes a network
- call to the X server to start running,
- a remote 8½ application sees the
- .CW mouse ,
- .CW bitblt ,
- and
- .CW cons
- files for the window as usual in
- .CW /dev ;
- it does not know whether the files are local.
- It just reads and writes them to control the window;
- the network connection is already there and multiplexed.
- .PP
- The intended style of use is to run interactive applications such as the window
- system and text editor on the terminal and to run computation- or file-intensive
- applications on remote servers.
- Different windows may be running programs on different machines over
- different networks, but by making the name space equivalent in all windows,
- this is transparent: the same commands and resources are available, with the same names,
- wherever the computation is performed.
- .PP
- The command set of Plan 9 is similar to that of UNIX.
- The commands fall into several broad classes. Some are new programs for
- old jobs: programs like
- .CW ls ,
- .CW cat ,
- and
- .CW who
- have familiar names and functions but are new, simpler implementations.
- .CW Who ,
- for example, is a shell script, while
- .CW ps
- is just 95 lines of C code.
- Some commands are essentially the same as their UNIX ancestors:
- .CW awk ,
- .CW troff ,
- and others have been converted to ANSI C and extended to handle
- Unicode, but are still the familiar tools.
- Some are entirely new programs for old niches: the shell
- .CW rc ,
- text editor
- .CW sam ,
- debugger
- .CW acid ,
- and others
- displace the better-known UNIX tools with similar jobs.
- Finally, about half the commands are new.
- .PP
- Compatibility was not a requirement for the system.
- Where the old commands or notation seemed good enough, we
- kept them. When they didn't, we replaced them.
- .SH
- The File Server
- .PP
- A central file server stores permanent files and presents them to the network
- as a file hierarchy exported using 9P.
- The server is a stand-alone system, accessible only over the network,
- designed to do its one job well.
- It runs no user processes, only a fixed set of routines compiled into the
- boot image.
- Rather than a set of disks or separate file systems,
- the main hierarchy exported by the server is a single
- tree, representing files on many disks.
- That hierarchy is
- shared by many users over a wide area on a variety of networks.
- Other file trees exported by
- the server include
- special-purpose systems such as temporary storage and, as explained
- below, a backup service.
- .PP
- The file server has three levels of storage.
- The central server in our installation has
- about 100 megabytes of memory buffers,
- 27 gigabytes of magnetic disks,
- and 350 gigabytes of
- bulk storage in a write-once-read-many (WORM) jukebox.
- The disk is a cache for the WORM and the memory is a cache for the disk;
- each is much faster, and sees about an order of magnitude more traffic,
- than the level it caches.
- The addressable data in the file system can be larger than the size of the
- magnetic disks, because they are only a cache;
- our main file server has about 40 gigabytes of active storage.
- .PP
- The most unusual feature of the file server
- comes from its use of a WORM device for
- stable storage.
- Every morning at 5 o'clock, a
- .I dump
- of the file system occurs automatically.
- The file system is frozen and
- all blocks modified since the last dump
- are queued to be written to the WORM.
- Once the blocks are queued,
- service is restored and
- the read-only root of the dumped
- file system appears in a
- hierarchy of all dumps ever taken, named by its date.
- For example, the directory
- .CW /n/dump/1995/0315
- is the root directory of an image of the file system
- as it appeared in the early morning of March 15, 1995.
- It takes a few minutes to queue the blocks,
- but the process to copy blocks to the WORM, which runs in the background, may take hours.
- .PP
- There are two ways the dump file system is used.
- The first is by the users themselves, who can browse the
- dump file system directly or attach pieces of
- it to their name space.
- For example, to track down a bug,
- it is straightforward to try the compiler from three months ago
- or to link a program with yesterday's library.
- With daily snapshots of all files,
- it is easy to find when a particular change was
- made or what changes were made on a particular date.
- People feel free to make large speculative changes
- to files in the knowledge that they can be backed
- out with a single
- copy command.
- There is no backup system as such;
- instead, because the dump
- is in the file name space,
- backup problems can be solved with
- standard tools
- such as
- .CW cp ,
- .CW ls ,
- .CW grep ,
- and
- .CW diff .
- .PP
- The other (very rare) use is complete system backup.
- In the event of disaster,
- the active file system can be initialized from any dump by clearing the
- disk cache and setting the root of
- the active file system to be a copy
- of the dumped root.
- Although easy to do, this is not to be taken lightly:
- besides losing any change made after the date of the dump, this recovery method
- results in a very slow system.
- The cache must be reloaded from WORM, which is much
- slower than magnetic disks.
- The file system takes a few days to reload the working
- set and regain its full performance.
- .PP
- Access permissions of files in the dump are the same
- as they were when the dump was made.
- Normal utilities have normal
- permissions in the dump without any special arrangement.
- The dump file system is read-only, though,
- which means that files in the dump cannot be written regardless of their permission bits;
- in fact, since directories are part of the read-only structure,
- even the permissions cannot be changed.
- .PP
- Once a file is written to WORM, it cannot be removed,
- so our users never see
- ``please clean up your files''
- messages and there is no
- .CW df
- command.
- We regard the WORM jukebox as an unlimited resource.
- The only issue is how long it will take to fill.
- Our WORM has served a community of about 50 users
- for five years and has absorbed daily dumps, consuming a total of
- 65% of the storage in the jukebox.
- In that time, the manufacturer has improved the technology,
- doubling the capacity of the individual disks.
- If we were to upgrade to the new media,
- we would have more free space than in the original empty jukebox.
- Technology has created storage faster than we can use it.
- .SH
- Unusual file servers
- .PP
- Plan 9 is characterized by a variety of servers that offer
- a file-like interface to unusual services.
- Many of these are implemented by user-level processes, although the distinction
- is unimportant to their clients; whether a service is provided by the kernel,
- a user process, or a remote server is irrelevant to the way it is used.
- There are dozens of such servers; in this section we present three representative ones.
- .PP
- Perhaps the most remarkable file server in Plan 9 is 8½, the window system.
- It is discussed at length elsewhere [Pike91], but deserves a brief explanation here.
- 8½ provides two interfaces: to the user seated at the terminal, it offers a traditional
- style of interaction with multiple windows, each running an application, all controlled
- by a mouse and keyboard.
- To the client programs, the view is also fairly traditional:
- programs running in a window see a set of files in
- .CW /dev
- with names like
- .CW mouse ,
- .CW screen ,
- and
- .CW cons .
- Programs that want to print text to their window write to
- .CW /dev/cons ;
- to read the mouse, they read
- .CW /dev/mouse .
- In the Plan 9 style, bitmap graphics is implemented by providing a file
- .CW /dev/bitblt
- on which clients write encoded messages to execute graphical operations such as
- .CW bitblt
- (RasterOp).
- What is unusual is how this is done:
- 8½ is a file server, serving the files in
- .CW /dev
- to the clients running in each window.
- Although every window looks the same to its client,
- each window has a distinct set of files in
- .CW /dev .
- 8½ multiplexes its clients' access to the resources of the terminal
- by serving multiple sets of files. Each client is given a private name space
- with a
- .I different
- set of files that behave the same as in all other windows.
- There are many advantages to this structure.
- One is that 8½ serves the same files it needs for its own implementation\(emit
- multiplexes its own interface\(emso it may be run, recursively, as a client of itself.
- Also, consider the implementation of
- .CW /dev/tty
- in UNIX, which requires special code in the kernel to redirect
- .CW open
- calls to the appropriate device.
- Instead, in 8½ the equivalent service falls out
- automatically: 8½ serves
- .CW /dev/cons
- as its basic function; there is nothing extra to do.
- When a program wants to
- read from the keyboard, it opens
- .CW /dev/cons ,
- but it is a private file, not a shared one with special properties.
- Again, local name spaces make this possible; conventions about the consistency of
- the files within them make it natural.
- .PP
- 8½ has a unique feature made possible by its design.
- Because it is implemented as a file server,
- it has the power to postpone answering read requests for a particular window.
- This behavior is toggled by a reserved key on the keyboard.
- Toggling once suspends client reads from the window;
- toggling again resumes normal reads, which absorb whatever text has been prepared,
- one line at a time.
- This allows the user to edit multi-line input text on the screen before the application sees it,
- obviating the need to invoke a separate editor to prepare text such as mail
- messages.
- A related property is that reads are answered directly from the
- data structure defining the text on the display: text may be edited until
- its final newline makes the prepared line of text readable by the client.
- Even then, until the line is read, the text the client will read can be changed.
- For example, after typing
- .P1
- % make
- rm *
- .P2
- to the shell, the user can backspace over the final newline at any time until
- .CW make
- finishes, holding off execution of the
- .CW rm
- command, or even point with the mouse
- before the
- .CW rm
- and type another command to be executed first.
- .PP
- There is no
- .CW ftp
- command in Plan 9. Instead, a user-level file server called
- .CW ftpfs
- dials the FTP site, logs in on behalf of the user, and uses the FTP protocol
- to examine files in the remote directory.
- To the local user, it offers a file hierarchy, attached to
- .CW /n/ftp
- in the local name space, mirroring the contents of the FTP site.
- In other words, it translates the FTP protocol into 9P to offer Plan 9 access to FTP sites.
- The implementation is tricky;
- .CW ftpfs
- must do some sophisticated caching for efficiency and
- use heuristics to decode remote directory information.
- But the result is worthwhile:
- all the local file management tools such as
- .CW cp ,
- .CW grep ,
- .CW diff ,
- and of course
- .CW ls
- are available to FTP-served files exactly as if they were local files.
- Other systems such as Jade and Prospero
- have exploited the same opportunity [Rao81, Neu92],
- but because of local name spaces and the simplicity of implementing 9P,
- this approach
- fits more naturally into Plan 9 than into other environments.
- .PP
- One server,
- .CW exportfs ,
- is a user process that takes a portion of its own name space and
- makes it available to other processes by
- translating 9P requests into system calls to the Plan 9 kernel.
- The file hierarchy it exports may contain files from multiple servers.
- .CW Exportfs
- is usually run as a remote server
- started by a local program,
- either
- .CW import
- or
- .CW cpu .
- .CW Import
- makes a network call to the remote machine, starts
- .CW exportfs
- there, and attaches its 9P connection to the local name space. For example,
- .P1
- import helix /net
- .P2
- makes Helix's network interfaces visible in the local
- .CW /net
- directory. Helix is a central server and
- has many network interfaces, so this permits a machine with one network to
- access to any of Helix's networks. After such an import, the local
- machine may make calls on any of the networks connected to Helix.
- Another example is
- .P1
- import helix /proc
- .P2
- which makes Helix's processes visible in the local
- .CW /proc ,
- permitting local debuggers to examine remote processes.
- .PP
- The
- .CW cpu
- command connects the local terminal to a remote
- CPU server.
- It works in the opposite direction to
- .CW import :
- after calling the server, it starts a
- .I local
- .CW exportfs
- and mounts it in the name space of a process, typically a newly created shell, on the
- server.
- It then rearranges the name space
- to make local device files (such as those served by
- the terminal's window system) visible in the server's
- .CW /dev
- directory.
- The effect of running a
- .CW cpu
- command is therefore to start a shell on a fast machine, one more tightly
- coupled to the file server,
- with a name space analogous
- to the local one.
- All local device files are visible remotely, so remote applications have full
- access to local services such as bitmap graphics,
- .CW /dev/cons ,
- and so on.
- This is not the same as
- .CW rlogin ,
- which does nothing to reproduce the local name space on the remote system,
- nor is it the same as
- file sharing with, say, NFS, which can achieve some name space equivalence but
- not the combination of access to local hardware devices, remote files, and remote
- CPU resources.
- The
- .CW cpu
- command is a uniquely transparent mechanism.
- For example, it is reasonable
- to start a window system in a window running a
- .CW cpu
- command; all windows created there automatically start processes on the CPU server.
- .SH
- Configurability and administration
- .PP
- The uniform interconnection of components in Plan 9 makes it possible to configure
- a Plan 9 installation many different ways.
- A single laptop PC can function as a stand-alone Plan 9 system;
- at the other extreme, our setup has central multiprocessor CPU
- servers and file servers and scores of terminals ranging from small PCs to
- high-end graphics workstations.
- It is such large installations that best represent how Plan 9 operates.
- .PP
- The system software is portable and the same
- operating system runs on all hardware.
- Except for performance, the appearance of the system on, say,
- an SGI workstation is the same
- as on a laptop.
- Since computing and file services are centralized, and terminals have
- no permanent file storage, all terminals are functionally identical.
- In this way, Plan 9 has one of the good properties of old timesharing systems, where
- a user could sit in front of any machine and see the same system. In the modern
- workstation community, machines tend to be owned by people who customize them
- by storing private information on local disk.
- We reject this style of use,
- although the system itself can be used this way.
- In our group, we have a laboratory with many public-access machines\(ema terminal
- room\(emand a user may sit down at any one of them and work.
- .PP
- Central file servers centralize not just the files, but also their administration
- and maintenance.
- In fact, one server is the main server, holding all system files; other servers provide
- extra storage or are available for debugging and other special uses, but the system
- software resides on one machine.
- This means that each program
- has a single copy of the binary for each architecture, so it is
- trivial to install updates and bug fixes.
- There is also a single user database; there is no need to synchronize distinct
- .CW /etc/passwd
- files.
- On the other hand, depending on a single central server does limit the size of an installation.
- .PP
- Another example of the power of centralized file service
- is the way Plan 9 administers network information.
- On the central server there is a directory,
- .CW /lib/ndb ,
- that contains all the information necessary to administer the local Ethernet and
- other networks.
- All the machines use the same database to talk to the network; there is no
- need to manage a distributed naming system or keep parallel files up to date.
- To install a new machine on the local Ethernet, choose a
- name and IP address and add these to a single file in
- .CW /lib/ndb ;
- all the machines in the installation will be able to talk to it immediately.
- To start running, plug the machine into the network, turn it on, and use BOOTP
- and TFTP to load the kernel.
- All else is automatic.
- .PP
- Finally,
- the automated dump file system frees all users from the need to maintain
- their systems, while providing easy access to backup files without
- tapes, special commands, or the involvement of support staff.
- It is difficult to overstate the improvement in lifestyle afforded by this service.
- .PP
- Plan 9 runs on a variety of hardware without
- constraining how to configure an installation.
- In our laboratory, we
- chose to use central servers because they amortize costs and administration.
- A sign that this is a good decision is that our cheap
- terminals remain comfortable places
- to work for about five years, much longer than workstations that must provide
- the complete computing environment.
- We do, however, upgrade the central machines, so
- the computation available from even old Plan 9 terminals improves with time.
- The money saved by avoiding regular upgrades of terminals
- is instead spent on the newest, fastest multiprocessor servers.
- We estimate this costs about half the money of networked workstations
- yet provides general access to more powerful machines.
- .SH
- C Programming
- .PP
- Plan 9 utilities are written in several languages.
- Some are scripts for the shell,
- .CW rc
- [Duff90]; a handful
- are written in a new C-like concurrent language called Alef [Wint95], described below.
- The great majority, though, are written in a dialect of ANSI C [ANSIC].
- Of these, most are entirely new programs, but some
- originate in pre-ANSI C code
- from our research UNIX system [UNIX85].
- These have been updated to ANSI C
- and reworked for portability and cleanliness.
- .PP
- The Plan 9 C dialect has some minor extensions,
- described elsewhere [Pike95], and a few major restrictions.
- The most important restriction is that the compiler demands that
- all function definitions have ANSI prototypes
- and all function calls appear in the scope of a prototyped declaration
- of the function.
- As a stylistic rule,
- the prototyped declaration is placed in a header file
- included by all files that call the function.
- Each system library has an associated header file, declaring all
- functions in that library.
- For example, the standard Plan 9 library is called
- .CW libc ,
- so all C source files include
- .CW <libc.h> .
- These rules guarantee that all functions
- are called with arguments having the expected types \(em something
- that was not true with pre-ANSI C programs.
- .PP
- Another restriction is that the C compilers accept only a subset of the
- preprocessor directives required by ANSI.
- The main omission is
- .CW #if ,
- since we believe it
- is never necessary and often abused.
- Also, its effect is
- better achieved by other means.
- For instance, an
- .CW #if
- used to toggle a feature at compile time can be written
- as a regular
- .CW if
- statement, relying on compile-time constant folding and
- dead code elimination to discard object code.
- .PP
- Conditional compilation, even with
- .CW #ifdef ,
- is used sparingly in Plan 9.
- The only architecture-dependent
- .CW #ifdefs
- in the system are in low-level routines in the graphics library.
- Instead, we avoid such dependencies or, when necessary, isolate
- them in separate source files or libraries.
- Besides making code hard to read,
- .CW #ifdefs
- make it impossible to know what source is compiled into the binary
- or whether source protected by them will compile or work properly.
- They make it harder to maintain software.
- .PP
- The standard Plan 9 library overlaps much of
- ANSI C and POSIX [POSIX], but diverges
- when appropriate to Plan 9's goals or implementation.
- When the semantics of a function
- change, we also change the name.
- For instance, instead of UNIX's
- .CW creat ,
- Plan 9 has a
- .CW create
- function that takes three arguments,
- the original two plus a third that, like the second
- argument of
- .CW open ,
- defines whether the returned file descriptor is to be opened for reading,
- writing, or both.
- This design was forced by the way 9P implements creation,
- but it also simplifies the common use of
- .CW create
- to initialize a temporary file.
- .PP
- Another departure from ANSI C is that Plan 9 uses a 16-bit character set
- called Unicode [ISO10646, Unicode].
- Although we stopped short of full internationalization,
- Plan 9 treats the representation
- of all major languages uniformly throughout all its
- software.
- To simplify the exchange of text between programs, the characters are packed into
- a byte stream by an encoding we designed, called UTF-8,
- which is now
- becoming accepted as a standard [FSSUTF].
- It has several attractive properties,
- including byte-order independence,
- backwards compatibility with ASCII,
- and ease of implementation.
- .PP
- There are many problems in adapting existing software to a large
- character set with an encoding that represents characters with
- a variable number of bytes.
- ANSI C addresses some of the issues but
- falls short of
- solving them all.
- It does not pick a character set encoding and does not
- define all the necessary I/O library routines.
- Furthermore, the functions it
- .I does
- define have engineering problems.
- Since the standard left too many problems unsolved,
- we decided to build our own interface.
- A separate paper has the details [Pike93].
- .PP
- A small class of Plan 9 programs do not follow the conventions
- discussed in this section.
- These are programs imported from and maintained by
- the UNIX community;
- .CW tex
- is a representative example.
- To avoid reconverting such programs every time a new version
- is released,
- we built a porting environment, called the ANSI C/POSIX Environment, or APE [Tric95].
- APE comprises separate include files, libraries, and commands,
- conforming as much as possible to the strict ANSI C and base-level
- POSIX specifications.
- To port network-based software such as X Windows, it was necessary to add
- some extensions to those
- specifications, such as the BSD networking functions.
- .SH
- Portability and Compilation
- .PP
- Plan 9 is portable across a variety of processor architectures.
- Within a single computing session, it is common to use
- several architectures: perhaps the window system running on
- an Intel processor connected to a MIPS-based CPU server with files
- resident on a SPARC system.
- For this heterogeneity to be transparent, there must be conventions
- about data interchange between programs; for software maintenance
- to be straightforward, there must be conventions about cross-architecture
- compilation.
- .PP
- To avoid byte order problems,
- data is communicated between programs as text whenever practical.
- Sometimes, though, the amount of data is high enough that a binary
- format is necessary;
- such data is communicated as a byte stream with a pre-defined encoding
- for multi-byte values.
- In the rare cases where a format
- is complex enough to be defined by a data structure,
- the structure is never
- communicated as a unit; instead, it is decomposed into
- individual fields, encoded as an ordered byte stream, and then
- reassembled by the recipient.
- These conventions affect data
- ranging from kernel or application program state information to object file
- intermediates generated by the compiler.
- .PP
- Programs, including the kernel, often present their data
- through a file system interface,
- an access mechanism that is inherently portable.
- For example, the system clock is represented by a decimal number in the file
- .CW /dev/time ;
- the
- .CW time
- library function (there is no
- .CW time
- system call) reads the file and converts it to binary.
- Similarly, instead of encoding the state of an application
- process in a series of flags and bits in private memory,
- the kernel
- presents a text string in the file named
- .CW status
- in the
- .CW /proc
- file system associated with each process.
- The Plan 9
- .CW ps
- command is trivial: it prints the contents of
- the desired status files after some minor reformatting; moreover, after
- .P1
- import helix /proc
- .P2
- a local
- .CW ps
- command reports on the status of Helix's processes.
- .PP
- Each supported architecture has its own compilers and loader.
- The C and Alef compilers produce intermediate files that
- are portably encoded; the contents
- are unique to the target architecture but the format of the
- file is independent of compiling processor type.
- When a compiler for a given architecture is compiled on
- another type of processor and then used to compile a program
- there,
- the intermediate produced on
- the new architecture is identical to the intermediate
- produced on the native processor. From the compiler's
- point of view, every compilation is a cross-compilation.
- .PP
- Although each architecture's loader accepts only intermediate files produced
- by compilers for that architecture,
- such files could have been generated by a compiler executing
- on any type of processor.
- For instance, it is possible to run
- the MIPS compiler on a 486, then use the MIPS loader on a
- SPARC to produce a MIPS executable.
- .PP
- Since Plan 9 runs on a variety of architectures, even in a single installation,
- distinguishing the compilers and intermediate names
- simplifies multi-architecture
- development from a single source tree.
- The compilers and the loader for each architecture are
- uniquely named; there is no
- .CW cc
- command.
- The names are derived by concatenating a code letter
- associated with the target architecture with the name of the
- compiler or loader. For example, the letter `8' is
- the code letter for Intel
- .I x 86
- processors; the C compiler is named
- .CW 8c ,
- the Alef compiler
- .CW 8al ,
- and the loader is called
- .CW 8l .
- Similarly, the compiler intermediate files are suffixed
- .CW .8 ,
- not
- .CW .o .
- .PP
- The Plan 9
- build program
- .CW mk ,
- a relative of
- .CW make ,
- reads the names of the current and target
- architectures from environment variables called
- .CW $cputype
- and
- .CW $objtype .
- By default the current processor is the target, but setting
- .CW $objtype
- to the name of another architecture
- before invoking
- .CW mk
- results in a cross-build:
- .P1
- % objtype=sparc mk
- .P2
- builds a program for the SPARC architecture regardless of the executing machine.
- The value of
- .CW $objtype
- selects a
- file of architecture-dependent variable definitions
- that configures the build to use the appropriate compilers and loader.
- Although simple-minded, this technique works well in practice:
- all applications in Plan 9 are built from a single source tree
- and it is possible to build the various architectures in parallel without conflict.
- .SH
- Parallel programming
- .PP
- Plan 9's support for parallel programming has two aspects.
- First, the kernel provides
- a simple process model and a few carefully designed system calls for
- synchronization and sharing.
- Second, a new parallel programming language called Alef
- supports concurrent programming.
- Although it is possible to write parallel
- programs in C, Alef is the parallel language of choice.
- .PP
- There is a trend in new operating systems to implement two
- classes of processes: normal UNIX-style processes and light-weight
- kernel threads.
- Instead, Plan 9 provides a single class of process but allows fine control of the
- sharing of a process's resources such as memory and file descriptors.
- A single class of process is a
- feasible approach in Plan 9 because the kernel has an efficient system
- call interface and cheap process creation and scheduling.
- .PP
- Parallel programs have three basic requirements:
- management of resources shared between processes,
- an interface to the scheduler,
- and fine-grain process synchronization using spin locks.
- On Plan 9,
- new processes are created using the
- .CW rfork
- system call.
- .CW Rfork
- takes a single argument,
- a bit vector that specifies
- which of the parent process's resources should be shared,
- copied, or created anew
- in the child.
- The resources controlled by
- .CW rfork
- include the name space,
- the environment,
- the file descriptor table,
- memory segments,
- and notes (Plan 9's analog of UNIX signals).
- One of the bits controls whether the
- .CW rfork
- call will create a new process; if the bit is off, the resulting
- modification to the resources occurs in the process making the call.
- For example, a process calls
- .CW rfork(RFNAMEG)
- to disconnect its name space from its parent's.
- Alef uses a
- fine-grained fork in which all the resources, including
- memory, are shared between parent
- and child, analogous to creating a kernel thread in many systems.
- .PP
- An indication that
- .CW rfork
- is the right model is the variety of ways it is used.
- Other than the canonical use in the library routine
- .CW fork ,
- it is hard to find two calls to
- .CW rfork
- with the same bits set; programs
- use it to create many different forms of sharing and resource allocation.
- A system with just two types of processes\(emregular processes and threads\(emcould
- not handle this variety.
- .PP
- There are two ways to share memory.
- First, a flag to
- .CW rfork
- causes all the memory segments of the parent to be shared with the child
- (except the stack, which is
- forked copy-on-write regardless).
- Alternatively, a new segment of memory may be
- attached using the
- .CW segattach
- system call; such a segment
- will always be shared between parent and child.
- .PP
- The
- .CW rendezvous
- system call provides a way for processes to synchronize.
- Alef uses it to implement communication channels,
- queuing locks,
- multiple reader/writer locks, and
- the sleep and wakeup mechanism.
- .CW Rendezvous
- takes two arguments, a tag and a value.
- When a process calls
- .CW rendezvous
- with a tag it sleeps until another process
- presents a matching tag.
- When a pair of tags match, the values are exchanged
- between the two processes and both
- .CW rendezvous
- calls return.
- This primitive is sufficient to implement the full set of synchronization routines.
- .PP
- Finally, spin locks are provided by
- an architecture-dependent library at user level.
- Most processors provide atomic test and set instructions that
- can be used to implement locks.
- A notable exception is the MIPS R3000, so the SGI
- Power series multiprocessors have special lock hardware on the bus.
- User processes gain access to the lock hardware
- by mapping pages of hardware locks
- into their address space using the
- .CW segattach
- system call.
- .PP
- A Plan 9 process in a system call will block regardless of its `weight'.
- This means that when a program wishes to read from a slow
- device without blocking the entire calculation, it must fork a process to do
- the read for it. The solution is to start a satellite
- process that does the I/O and delivers the answer to the main program
- through shared memory or perhaps a pipe.
- This sounds onerous but works easily and efficiently in practice; in fact,
- most interactive Plan 9 applications, even relatively ordinary ones written
- in C, such as
- the text editor Sam [Pike87], run as multiprocess programs.
- .PP
- The kernel support for parallel programming in Plan 9 is a few hundred lines
- of portable code; a handful of simple primitives enable the problems to be handled
- cleanly at user level.
- Although the primitives work fine from C,
- they are particularly expressive from within Alef.
- The creation
- and management of slave I/O processes can be written in a few lines of Alef,
- providing the foundation for a consistent means of multiplexing
- data flows between arbitrary processes.
- Moreover, implementing it in a language rather than in the kernel
- ensures consistent semantics between all devices
- and provides a more general multiplexing primitive.
- Compare this to the UNIX
- .CW select
- system call:
- .CW select
- applies only to a restricted set of devices,
- legislates a style of multiprogramming in the kernel,
- does not extend across networks,
- is difficult to implement, and is hard to use.
- .PP
- Another reason
- parallel programming is important in Plan 9 is that
- multi-threaded user-level file servers are the preferred way
- to implement services.
- Examples of such servers include the programming environment
- Acme [Pike94],
- the name space exporting tool
- .CW exportfs
- [PPTTW93],
- the HTTP daemon,
- and the network name servers
- .CW cs
- and
- .CW dns
- [PrWi93].
- Complex applications such as Acme prove that
- careful operating system support can reduce the difficulty of writing
- multi-threaded applications without moving threading and
- synchronization primitives into the kernel.
- .SH
- Implementation of Name Spaces
- .PP
- User processes construct name spaces using three system calls:
- .CW mount ,
- .CW bind ,
- and
- .CW unmount .
- The
- .CW mount
- system call attaches a tree served by a file server to
- the current name space. Before calling
- .CW mount ,
- the client must (by outside means) acquire a connection to the server in
- the form of a file descriptor that may be written and read to transmit 9P messages.
- That file descriptor represents a pipe or network connection.
- .PP
- The
- .CW mount
- call attaches a new hierarchy to the existing name space.
- The
- .CW bind
- system call, on the other hand, duplicates some piece of existing name space at
- another point in the name space.
- The
- .CW unmount
- system call allows components to be removed.
- .PP
- Using
- either
- .CW bind
- or
- .CW mount ,
- multiple directories may be stacked at a single point in the name space.
- In Plan 9 terminology, this is a
- .I union
- directory and behaves like the concatenation of the constituent directories.
- A flag argument to
- .CW bind
- and
- .CW mount
- specifies the position of a new directory in the union,
- permitting new elements
- to be added either at the front or rear of the union or to replace it entirely.
- When a file lookup is performed in a union directory, each component
- of the union is searched in turn and the first match taken; likewise,
- when a union directory is read, the contents of each of the component directories
- is read in turn.
- Union directories are one of the most widely used organizational features
- of the Plan 9 name space.
- For instance, the directory
- .CW /bin
- is built as a union of
- .CW /$cputype/bin
- (program binaries),
- .CW /rc/bin
- (shell scripts),
- and perhaps more directories provided by the user.
- This construction makes the shell
- .CW $PATH
- variable unnecessary.
- .PP
- One question raised by union directories
- is which element of the union receives a newly created file.
- After several designs, we decided on the following.
- By default, directories in unions do not accept new files, although the
- .CW create
- system call applied to an existing file succeeds normally.
- When a directory is added to the union, a flag to
- .CW bind
- or
- .CW mount
- enables create permission (a property of the name space) in that directory.
- When a file is being created with a new name in a union, it is created in the
- first directory of the union with create permission; if that creation fails,
- the entire
- .CW create
- fails.
- This scheme enables the common use of placing a private directory anywhere
- in a union of public ones,
- while allowing creation only in the private directory.
- .PP
- By convention, kernel device file systems
- are bound into the
- .CW /dev
- directory, but to bootstrap the name space building process it is
- necessary to have a notation that permits
- direct access to the devices without an existing name space.
- The root directory
- of the tree served by a device driver can be accessed using the syntax
- .CW # \f2c\f1,
- where
- .I c
- is a unique character (typically a letter) identifying the
- .I type
- of the device.
- Simple device drivers serve a single level directory containing a few files.
- As an example,
- each serial port is represented by a data and a control file:
- .P1
- % bind -a '#t' /dev
- % cd /dev
- % ls -l eia*
- --rw-rw-rw- t 0 bootes bootes 0 Feb 24 21:14 eia1
- --rw-rw-rw- t 0 bootes bootes 0 Feb 24 21:14 eia1ctl
- --rw-rw-rw- t 0 bootes bootes 0 Feb 24 21:14 eia2
- --rw-rw-rw- t 0 bootes bootes 0 Feb 24 21:14 eia2ctl
- .P2
- The
- .CW bind
- program is an encapsulation of the
- .CW bind
- system call; its
- .CW -a
- flag positions the new directory at the end of the union.
- The data files
- .CW eia1
- and
- .CW eia2
- may be read and written to communicate over the serial line.
- Instead of using special operations on these files to control the devices,
- commands written to the files
- .CW eia1ctl
- and
- .CW eia2ctl
- control the corresponding device;
- for example,
- writing the text string
- .CW b1200
- to
- .CW /dev/eia1ctl
- sets the speed of that line to 1200 baud.
- Compare this to the UNIX
- .CW ioctl
- system call: in Plan 9, devices are controlled by textual messages,
- free of byte order problems, with clear semantics for reading and writing.
- It is common to configure or debug devices using shell scripts.
- .PP
- It is the universal use of the 9P protocol that
- connects Plan 9's components together to form a
- distributed system.
- Rather than inventing a unique protocol for each
- service such as
- .CW rlogin ,
- FTP, TFTP, and X windows,
- Plan 9 implements services
- in terms of operations on file objects,
- and then uses a single, well-documented protocol to exchange information between
- computers.
- Unlike NFS, 9P treats files as a sequence of bytes rather than blocks.
- Also unlike NFS, 9P is stateful: clients perform
- remote procedure calls to establish pointers to objects in the remote
- file server.
- These pointers are called file identifiers or
- .I fids .
- All operations on files supply a fid to identify an object in the remote file system.
- .PP
- The 9P protocol defines 17 messages, providing
- means to authenticate users, navigate fids around
- a file system hierarchy, copy fids, perform I/O, change file attributes,
- and create and delete files.
- Its complete specification is in Section 5 of the Programmer's Manual [9man].
- Here is the procedure to gain access to the name hierarchy supplied by a server.
- A file server connection is established via a pipe or network connection.
- An initial
- .CW session
- message performs a bilateral authentication between client and server.
- An
- .CW attach
- message then connects a fid suggested by the client to the root of the server file
- tree.
- The
- .CW attach
- message includes the identity of the user performing the attach; henceforth all
- fids derived from the root fid will have permissions associated with
- that user.
- Multiple users may share the connection, but each must perform an attach to
- establish his or her identity.
- .PP
- The
- .CW walk
- message moves a fid through a single level of the file system hierarchy.
- The
- .CW clone
- message takes an established fid and produces a copy that points
- to the same file as the original.
- Its purpose is to enable walking to a file in a directory without losing the fid
- on the directory.
- The
- .CW open
- message locks a fid to a specific file in the hierarchy,
- checks access permissions,
- and prepares the fid
- for I/O.
- The
- .CW read
- and
- .CW write
- messages allow I/O at arbitrary offsets in the file;
- the maximum size transferred is defined by the protocol.
- The
- .CW clunk
- message indicates the client has no further use for a fid.
- The
- .CW remove
- message behaves like
- .CW clunk
- but causes the file associated with the fid to be removed and any associated
- resources on the server to be deallocated.
- .PP
- 9P has two forms: RPC messages sent on a pipe or network connection and a procedural
- interface within the kernel.
- Since kernel device drivers are directly addressable,
- there is no need to pass messages to
- communicate with them;
- instead each 9P transaction is implemented by a direct procedure call.
- For each fid,
- the kernel maintains a local representation in a data structure called a
- .I channel ,
- so all operations on files performed by the kernel involve a channel connected
- to that fid.
- The simplest example is a user process's file descriptors, which are
- indexes into an array of channels.
- A table in the kernel provides a list
- of entry points corresponding one to one with the 9P messages for each device.
- A system call such as
- .CW read
- from the user translates into one or more procedure calls
- through that table, indexed by the type character stored in the channel:
- .CW procread ,
- .CW eiaread ,
- etc.
- Each call takes at least
- one channel as an argument.
- A special kernel driver, called the
- .I mount
- driver, translates procedure calls to messages, that is,
- it converts local procedure calls to remote ones.
- In effect, this special driver
- becomes a local proxy for the files served by a remote file server.
- The channel pointer in the local call is translated to the associated fid
- in the transmitted message.
- .PP
- The mount driver is the sole RPC mechanism employed by the system.
- The semantics of the supplied files, rather than the operations performed upon
- them, create a particular service such as the
- .CW cpu
- command.
- The mount driver demultiplexes protocol
- messages between clients sharing a communication channel
- with a file server.
- For each outgoing RPC message,
- the mount driver allocates a buffer labeled by a small unique integer,
- called a
- .I tag .
- The reply to the RPC is labeled with the same tag, which is used by
- the mount driver to match the reply with the request.
- .PP
- The kernel representation of the name space
- is called the
- .I "mount table" ,
- which stores a list of bindings between channels.
- Each entry in the mount table contains a pair of channels: a
- .I from
- channel and a
- .I to
- channel.
- Every time a walk succeeds in moving a channel to a new location in the name space,
- the mount table is consulted to see if a `from' channel matches the new name; if
- so the `to' channel is cloned and substituted for the original.
- Union directories are implemented by converting the `to'
- channel into a list of channels:
- a successful walk to a union directory returns a `to' channel that forms
- the head of
- a list of channels, each representing a component directory
- of the union.
- If a walk
- fails to find a file in the first directory of the union, the list is followed,
- the next component cloned, and walk tried on that directory.
- .PP
- Each file in Plan 9 is uniquely identified by a set of integers:
- the type of the channel (used as the index of the function call table),
- the server or device number
- distinguishing the server from others of the same type (decided locally by the driver),
- and a
- .I qid
- formed from two 32-bit numbers called
- .I path
- and
- .I version .
- The path is a unique file number assigned by a device driver or
- file server when a file is created.
- The version number is updated whenever
- the file is modified; as described in the next section,
- it can be used to maintain cache coherency between
- clients and servers.
- .PP
- The type and device number are analogous to UNIX major and minor
- device numbers;
- the qid is analogous to the i-number.
- The device and type
- connect the channel to a device driver and the qid
- identifies the file within that device.
- If the file recovered from a walk has the same type, device, and qid path
- as an entry in the mount table, they are the same file and the
- corresponding substitution from the mount table is made.
- This is how the name space is implemented.
- .SH
- File Caching
- .PP
- The 9P protocol has no explicit support for caching files on a client.
- The large memory of the central file server acts as a shared cache for all its clients,
- which reduces the total amount of memory needed across all machines in the network.
- Nonetheless, there are sound reasons to cache files on the client, such as a slow
- connection to the file server.
- .PP
- The version field of the qid is changed whenever the file is modified,
- which makes it possible to do some weakly coherent forms of caching.
- The most important is client caching of text and data segments of executable files.
- When a process
- .CW execs
- a program, the file is re-opened and the qid's version is compared with that in the cache;
- if they match, the local copy is used.
- The same method can be used to build a local caching file server.
- This user-level server interposes on the 9P connection to the remote server and
- monitors the traffic, copying data to a local disk.
- When it sees a read of known data, it answers directly,
- while writes are passed on immediately\(emthe cache is write-through\(emto keep
- the central copy up to date.
- This is transparent to processes on the terminal and requires no change to 9P;
- it works well on home machines connected over serial lines.
- A similar method can be applied to build a general client cache in unused local
- memory, but this has not been done in Plan 9.
- .SH
- Networks and Communication Devices
- .PP
- Network interfaces are kernel-resident file systems, analogous to the EIA device
- described earlier.
- Call setup and shutdown are achieved by writing text strings to the control file
- associated with the device;
- information is sent and received by reading and writing the data file.
- The structure and semantics of the devices is common to all networks so,
- other than a file name substitution,
- the same procedure makes a call using TCP over Ethernet as URP over Datakit [Fra80].
- .PP
- This example illustrates the structure of the TCP device:
- .P1
- % ls -lp /net/tcp
- d-r-xr-xr-x I 0 bootes bootes 0 Feb 23 20:20 0
- d-r-xr-xr-x I 0 bootes bootes 0 Feb 23 20:20 1
- --rw-rw-rw- I 0 bootes bootes 0 Feb 23 20:20 clone
- % ls -lp /net/tcp/0
- --rw-rw---- I 0 rob bootes 0 Feb 23 20:20 ctl
- --rw-rw---- I 0 rob bootes 0 Feb 23 20:20 data
- --rw-rw---- I 0 rob bootes 0 Feb 23 20:20 listen
- --r--r--r-- I 0 bootes bootes 0 Feb 23 20:20 local
- --r--r--r-- I 0 bootes bootes 0 Feb 23 20:20 remote
- --r--r--r-- I 0 bootes bootes 0 Feb 23 20:20 status
- %
- .P2
- The top directory,
- .CW /net/tcp ,
- contains a
- .CW clone
- file and a directory for each connection, numbered
- .CW 0
- to
- .I n .
- Each connection directory corresponds to an TCP/IP connection.
- Opening
- .CW clone
- reserves an unused connection and returns its control file.
- Reading the control file returns the textual connection number, so the user
- process can construct the full name of the newly allocated
- connection directory.
- The
- .CW local ,
- .CW remote ,
- and
- .CW status
- files are diagnostic; for example,
- .CW remote
- contains the address (for TCP, the IP address and port number) of the remote side.
- .PP
- A call is initiated by writing a connect message with a network-specific address as
- its argument; for example, to open a Telnet session (port 23) to a remote machine
- with IP address 135.104.9.52,
- the string is:
- .P1
- connect 135.104.9.52!23
- .P2
- The write to the control file blocks until the connection is established;
- if the destination is unreachable, the write returns an error.
- Once the connection is established, the
- .CW telnet
- application reads and writes the
- .CW data
- file
- to talk to the remote Telnet daemon.
- On the other end, the Telnet daemon would start by writing
- .P1
- announce 23
- .P2
- to its control file to indicate its willingness to receive calls to this port.
- Such a daemon is called a
- .I listener
- in Plan 9.
- .PP
- A uniform structure for network devices cannot hide all the details
- of addressing and communication for dissimilar networks.
- For example, Datakit uses textual, hierarchical addresses unlike IP's 32-bit addresses, so
- an application given a control file must still know what network it represents.
- Rather than make every application know the addressing of every network,
- Plan 9 hides these details in a
- .I connection
- .I server ,
- called
- .CW cs .
- .CW Cs
- is a file system mounted in a known place.
- It supplies a single control file that an application uses to discover how to connect
- to a host.
- The application writes the symbolic address and service name for
- the connection it wishes to make,
- and reads back the name of the
- .CW clone
- file to open and the address to present to it.
- If there are multiple networks between the machines,
- .CW cs
- presents a list of possible networks and addresses to be tried in sequence;
- it uses heuristics to decide the order.
- For instance, it presents the highest-bandwidth choice first.
- .PP
- A single library function called
- .CW dial
- talks to
- .CW cs
- to establish the connection.
- An application that uses
- .CW dial
- needs no changes, not even recompilation, to adapt to new networks;
- the interface to
- .CW cs
- hides the details.
- .PP
- The uniform structure for networks in Plan 9 makes the
- .CW import
- command all that is needed to construct gateways.
- .SH
- Kernel structure for networks
- .PP
- The kernel plumbing used to build Plan 9 communications
- channels is called
- .I streams
- [Rit84][Presotto].
- A stream is a bidirectional channel connecting a
- physical or pseudo-device to a user process.
- The user process inserts and removes data at one end of the stream;
- a kernel process acting on behalf of a device operates at
- the other end.
- A stream comprises a linear list of
- .I "processing modules" .
- Each module has both an upstream (toward the process) and
- downstream (toward the device)
- .I "put routine" .
- Calling the put routine of the module on either end of the stream
- inserts data into the stream.
- Each module calls the succeeding one to send data up or down the stream.
- Like UNIX streams [Rit84],
- Plan 9 streams can be dynamically configured.
- .SH
- The IL Protocol
- .PP
- The 9P protocol must run above a reliable transport protocol with delimited messages.
- 9P has no mechanism to recover from transmission errors and
- the system assumes that each read from a communication channel will
- return a single 9P message;
- it does not parse the data stream to discover message boundaries.
- Pipes and some network protocols already have these properties but
- the standard IP protocols do not.
- TCP does not delimit messages, while
- UDP [RFC768] does not provide reliable in-order delivery.
- .PP
- We designed a new protocol, called IL (Internet Link), to transmit 9P messages over IP.
- It is a connection-based protocol that provides
- reliable transmission of sequenced messages between machines.
- Since a process can have only a single outstanding 9P request,
- there is no need for flow control in IL.
- Like TCP, IL has adaptive timeouts: it scales acknowledge and retransmission times
- to match the network speed.
- This allows the protocol to perform well on both the Internet and on local Ethernets.
- Also, IL does no blind retransmission,
- to avoid adding to the congestion of busy networks.
- Full details are in another paper [PrWi95].
- .PP
- In Plan 9, the implementation of IL is smaller and faster than TCP.
- IL is our main Internet transport protocol.
- .SH
- Overview of authentication
- .PP
- Authentication establishes the identity of a
- user accessing a resource.
- The user requesting the resource is called the
- .I client
- and the user granting access to the resource is called the
- .I server .
- This is usually done under the auspices of a 9P attach message.
- A user may be a client in one authentication exchange and a server in another.
- Servers always act on behalf of some user,
- either a normal client or some administrative entity, so authentication
- is defined to be between users, not machines.
- .PP
- Each Plan 9 user has an associated DES [NBS77] authentication key;
- the user's identity is verified by the ability to
- encrypt and decrypt special messages called challenges.
- Since knowledge of a user's key gives access to that user's resources,
- the Plan 9 authentication protocols never transmit a message containing
- a cleartext key.
- .PP
- Authentication is bilateral:
- at the end of the authentication exchange,
- each side is convinced of the other's identity.
- Every machine begins the exchange with a DES key in memory.
- In the case of CPU and file servers, the key, user name, and domain name
- for the server are read from permanent storage,
- usually non-volatile RAM.
- In the case of terminals,
- the key is derived from a password typed by the user at boot time.
- A special machine, known as the
- .I authentication
- .I server ,
- maintains a database of keys for all users in its administrative domain and
- participates in the authentication protocols.
- .PP
- The authentication protocol is as follows:
- after exchanging challenges, one party
- contacts the authentication server to create
- permission-granting
- .I tickets
- encrypted with
- each party's secret key and containing a new conversation key.
- Each
- party decrypts its own ticket and uses the conversation key to
- encrypt the other party's challenge.
- .PP
- This structure is somewhat like Kerberos [MBSS87], but avoids
- its reliance on synchronized clocks.
- Also
- unlike Kerberos, Plan 9 authentication supports a `speaks for'
- relation [LABW91] that enables one user to have the authority
- of another;
- this is how a CPU server runs processes on behalf of its clients.
- .PP
- Plan 9's authentication structure builds
- secure services rather than depending on firewalls.
- Whereas firewalls require special code for every service penetrating the wall,
- the Plan 9 approach permits authentication to be done in a single place\(em9P\(emfor
- all services.
- For example, the
- .CW cpu
- command works securely across the Internet.
- .SH
- Authenticating external connections
- .PP
- The regular Plan 9 authentication protocol is not suitable for text-based services such as
- Telnet
- or FTP.
- In such cases, Plan 9 users authenticate with hand-held DES calculators called
- .I authenticators .
- The authenticator holds a key for the user, distinct from
- the user's normal authentication key.
- The user `logs on' to the authenticator using a 4-digit PIN.
- A correct PIN enables the authenticator for a challenge/response exchange with the server.
- Since a correct challenge/response exchange is valid only once
- and keys are never sent over the network,
- this procedure is not susceptible to replay attacks, yet
- is compatible with protocols like Telnet and FTP.
- .SH
- Special users
- .PP
- Plan 9 has no super-user.
- Each server is responsible for maintaining its own security, usually permitting
- access only from the console, which is protected by a password.
- For example, file servers have a unique administrative user called
- .CW adm ,
- with special privileges that apply only to commands typed at the server's
- physical console.
- These privileges concern the day-to-day maintenance of the server,
- such as adding new users and configuring disks and networks.
- The privileges do
- .I not
- include the ability to modify, examine, or change the permissions of any files.
- If a file is read-protected by a user, only that user may grant access to others.
- .PP
- CPU servers have an equivalent user name that allows administrative access to
- resources on that server such as the control files of user processes.
- Such permission is necessary, for example, to kill rogue processes, but
- does not extend beyond that server.
- On the other hand, by means of a key
- held in protected non-volatile RAM,
- the identity of the administrative user is proven to the
- authentication server.
- This allows the CPU server to authenticate remote users, both
- for access to the server itself and when the CPU server is acting
- as a proxy on their behalf.
- .PP
- Finally, a special user called
- .CW none
- has no password and is always allowed to connect;
- anyone may claim to be
- .CW none .
- .CW None
- has restricted permissions; for example, it is not allowed to examine dump files
- and can read only world-readable files.
- .PP
- The idea behind
- .CW none
- is analogous to the anonymous user in FTP
- services.
- On Plan 9, guest FTP servers are further confined within a special
- restricted name space.
- It disconnects guest users from system programs, such as the contents of
- .CW /bin ,
- but makes it possible to make local files available to guests
- by binding them explicitly into the space.
- A restricted name space is more secure than the usual technique of exporting
- an ad hoc directory tree; the result is a kind of cage around untrusted users.
- .SH
- The cpu command and proxied authentication
- .PP
- When a call is made to a CPU server for a user, say Peter,
- the intent is that Peter wishes to run processes with his own authority.
- To implement this property,
- the CPU server does the following when the call is received.
- First, the listener forks off a process to handle the call.
- This process changes to the user
- .CW none
- to avoid giving away permissions if it is compromised.
- It then performs the authentication protocol to verify that the
- calling user really is Peter, and to prove to Peter that
- the machine is itself trustworthy.
- Finally, it reattaches to all relevant file servers using the
- authentication protocol to identify itself as Peter.
- In this case, the CPU server is a client of the file server and performs the
- client portion of the authentication exchange on behalf of Peter.
- The authentication server will give the process tickets to
- accomplish this only if the CPU server's administrative user name is allowed to
- .I "speak for"
- Peter.
- .PP
- The
- .I "speaks for
- relation [LABW91] is kept in a table on the authentication server.
- To simplify the management of users computing in different authentication domains,
- it also contains mappings between user names in different domains,
- for example saying that user
- .CW rtm
- in one domain is the same person as user
- .CW rtmorris
- in another.
- .SH
- File Permissions
- .PP
- One of the advantages of constructing services as file systems
- is that the solutions to ownership and permission problems fall out naturally.
- As in UNIX,
- each file or directory has separate read, write, and execute/search permissions
- for the file's owner, the file's group, and anyone else.
- The idea of group is unusual:
- any user name is potentially a group name.
- A group is just a user with a list of other users in the group.
- Conventions make the distinction: most people have user names without group members,
- while groups have long lists of attached names. For example, the
- .CW sys
- group traditionally has all the system programmers,
- and system files are accessible
- by group
- .CW sys .
- Consider the following two lines of a user database stored on a server:
- .P1
- pjw:pjw:
- sys::pjw,ken,philw,presotto
- .P2
- The first establishes user
- .CW pjw
- as a regular user. The second establishes user
- .CW sys
- as a group and lists four users who are
- .I members
- of that group.
- The empty colon-separated field is space for a user to be named as the
- .I group
- .I leader .
- If a group has a leader, that user has special permissions for the group,
- such as freedom to change the group permissions
- of files in that group.
- If no leader is specified, each member of the group is considered equal, as if each were
- the leader.
- In our example, only
- .CW pjw
- can add members to his group, but all of
- .CW sys 's
- members are equal partners in that group.
- .PP
- Regular files are owned by the user that creates them.
- The group name is inherited from the directory holding the new file.
- Device files are treated specially:
- the kernel may arrange the ownership and permissions of
- a file appropriate to the user accessing the file.
- .PP
- A good example of the generality this offers is process files,
- which are owned and read-protected by the owner of the process.
- If the owner wants to let someone else access the memory of a process,
- for example to let the author of a program debug a broken image, the standard
- .CW chmod
- command applied to the process files does the job.
- .PP
- Another unusual application of file permissions
- is the dump file system, which is not only served by the same file
- server as the original data, but represented by the same user database.
- Files in the dump are therefore given identical protection as files in the regular
- file system;
- if a file is owned by
- .CW pjw
- and read-protected, once it is in the dump file system it is still owned by
- .CW pjw
- and read-protected.
- Also, since the dump file system is immutable, the file cannot be changed;
- it is read-protected forever.
- Drawbacks are that if the file is readable but should have been read-protected,
- it is readable forever, and that user names are hard to re-use.
- .SH
- Performance
- .PP
- As a simple measure of the performance of the Plan 9 kernel,
- we compared the
- time to do some simple operations on Plan 9 and on SGI's IRIX Release 5.3
- running on an SGI Challenge M with a 100MHz MIPS R4400 and a 1-megabyte
- secondary cache.
- The test program was written in Alef,
- compiled with the same compiler,
- and run on identical hardware,
- so the only variables are the operating system and libraries.
- .PP
- The program tests the time to do a context switch
- .CW rendezvous "" (
- on Plan 9,
- .CW blockproc
- on IRIX);
- a trivial system call
- .CW rfork(0) "" (
- and
- .CW nap(0) );
- and
- lightweight fork
- .CW rfork(RFPROC) "" (
- and
- .CW sproc(PR_SFDS|PR_SADDR) ).
- It also measures the time to send a byte on a pipe from one process
- to another and the throughput on a pipe between two processes.
- The results appear in Table 1.
- .KS
- .TS
- center,box;
- ccc
- lnn.
- Test Plan 9 IRIX
- _
- Context switch 39 µs 150 µs
- System call 6 µs 36 µs
- Light fork 1300 µs 2200 µs
- Pipe latency 110 µs 200 µs
- Pipe bandwidth 11678 KB/s 14545 KB/s
- .TE
- .ce
- .I
- Table 1. Performance comparison.
- .R
- .KE
- .LP
- Although the Plan 9 times are not spectacular, they show that the kernel is
- competitive with commercial systems.
- .SH
- Discussion
- .PP
- Plan 9 has a relatively conventional kernel;
- the system's novelty lies in the pieces outside the kernel and the way they interact.
- When building Plan 9, we considered all aspects
- of the system together, solving problems where the solution fit best.
- Sometimes the solution spanned many components.
- An example is the problem of heterogeneous instruction architectures,
- which is addressed by the compilers (different code characters, portable
- object code),
- the environment
- .CW $cputype "" (
- and
- .CW $objtype ),
- the name space
- (binding in
- .CW /bin ),
- and other components.
- Sometimes many issues could be solved in a single place.
- The best example is 9P,
- which centralizes naming, access, and authentication.
- 9P is really the core
- of the system;
- it is fair to say that the Plan 9 kernel is primarily a 9P multiplexer.
- .PP
- Plan 9's focus on files and naming is central to its expressiveness.
- Particularly in distributed computing, the way things are named has profound
- influence on the system [Nee89].
- The combination of
- local name spaces and global conventions to interconnect networked resources
- avoids the difficulty of maintaining a global uniform name space,
- while naming everything like a file makes the system easy to understand, even for
- novices.
- Consider the dump file system, which is trivial to use for anyone familiar with
- hierarchical file systems.
- At a deeper level, building all the resources above a single uniform interface
- makes interoperability easy.
- Once a resource exports a 9P interface,
- it can combine transparently
- with any other part of the system to build unusual applications;
- the details are hidden.
- This may sound object-oriented, but there are distinctions.
- First, 9P defines a fixed set of `methods'; it is not an extensible protocol.
- More important,
- files are well-defined and well-understood
- and come prepackaged with familiar methods of access, protection, naming, and
- networking.
- Objects, despite their generality, do not come with these attributes defined.
- By reducing `object' to `file', Plan 9 gets some technology for free.
- .PP
- Nonetheless, it is possible to push the idea of file-based computing too far.
- Converting every resource in the system into a file system is a kind of metaphor,
- and metaphors can be abused.
- A good example of restraint is
- .CW /proc ,
- which is only a view of a process, not a representation.
- To run processes, the usual
- .CW fork
- and
- .CW exec
- calls are still necessary, rather than doing something like
- .P1
- cp /bin/date /proc/clone/mem
- .P2
- The problem with such examples is that they require the server to do things
- not under its control.
- The ability to assign meaning to a command like this does not
- imply the meaning will fall naturally out of the structure of answering the 9P requests
- it generates.
- As a related example, Plan 9 does not put machine's network names in the file
- name space.
- The network interfaces provide a very different model of naming, because using
- .CW open ,
- .CW create ,
- .CW read ,
- and
- .CW write
- on such files would not offer a suitable place to encode all the details of call
- setup for an arbitrary network.
- This does not mean that the network interface cannot be file-like, just that it must
- have a more tightly defined structure.
- .PP
- What would we do differently next time?
- Some elements of the implementation are unsatisfactory.
- Using streams to implement network interfaces in the kernel
- allows protocols to be connected together dynamically,
- such as to attach the same TTY driver to TCP, URP, and
- IL connections,
- but Plan 9 makes no use of this configurability.
- (It was exploited, however, in the research UNIX system for which
- streams were invented.)
- Replacing streams by static I/O queues would
- simplify the code and make it faster.
- .PP
- Although the main Plan 9 kernel is portable across many machines,
- the file server is implemented separately.
- This has caused several problems:
- drivers that must be written twice,
- bugs that must be fixed twice,
- and weaker portability of the file system code.
- The solution is easy: the file server kernel should be maintained
- as a variant of the regular operating system, with no user processes and
- special compiled-in
- kernel processes to implement file service.
- Another improvement to the file system would be a change of internal structure.
- The WORM jukebox is the least reliable piece of the hardware, but because
- it holds the metadata of the file system, it must be present in order to serve files.
- The system could be restructured so the WORM is a backup device only, with the
- file system proper residing on magnetic disks.
- This would require no change to the external interface.
- .PP
- Although Plan 9 has per-process name spaces, it has no mechanism to give the
- description of a process's name space to another process except by direct inheritance.
- The
- .CW cpu
- command, for example, cannot in general reproduce the terminal's name space;
- it can only re-interpret the user's login profile and make substitutions for things like
- the name of the binary directory to load.
- This misses any local modifications made before running
- .CW cpu .
- It should instead be possible to capture the terminal's name space and transmit
- its description to a remote process.
- .PP
- Despite these problems, Plan 9 works well.
- It has matured into the system that supports our research,
- rather than being the subject of the research itself.
- Experimental new work includes developing interfaces to faster networks,
- file caching in the client kernel,
- encapsulating and exporting name spaces,
- and the ability to re-establish the client state after a server crash.
- Attention is now focusing on using the system to build distributed applications.
- .PP
- One reason for Plan 9's success is that we use it for our daily work, not just as a research tool.
- Active use forces us to address shortcomings as they arise and to adapt the system
- to solve our problems.
- Through this process, Plan 9 has become a comfortable, productive programming
- environment, as well as a vehicle for further systems research.
- .SH
- References
- .nr PS -1
- .nr VS -2
- .IP [9man] 9
- .I
- Plan 9 Programmer's Manual,
- Volume 1,
- .R
- AT&T Bell Laboratories,
- Murray Hill, NJ,
- 1995.
- .IP [ANSIC] 9
- \f2American National Standard for Information Systems \-
- Programming Language C\f1, American National Standards Institute, Inc.,
- New York, 1990.
- .IP [Duff90] 9
- Tom Duff, ``Rc - A Shell for Plan 9 and UNIX systems'',
- .I
- Proc. of the Summer 1990 UKUUG Conf.,
- .R
- London, July, 1990, pp. 21-33, reprinted, in a different form, in this volume.
- .IP [Fra80] 9
- A.G. Fraser,
- ``Datakit \- A Modular Network for Synchronous and Asynchronous Traffic'',
- .I
- Proc. Int. Conf. on Commun.,
- .R
- June 1980, Boston, MA.
- .IP [FSSUTF] 9
- .I
- File System Safe UCS Transformation Format (FSS-UTF),
- .R
- X/Open Preliminary Specification, 1993.
- ISO designation is
- ISO/IEC JTC1/SC2/WG2 N 1036, dated 1994-08-01.
- .IP "[ISO10646] " 9
- ISO/IEC DIS 10646-1:1993
- .I
- Information technology \-
- Universal Multiple-Octet Coded Character Set (UCS) \(em
- Part 1: Architecture and Basic Multilingual Plane.
- .R
- .IP [Kill84] 9
- T.J. Killian,
- ``Processes as Files'',
- .I
- USENIX Summer 1984 Conf. Proc.,
- .R
- June 1984, Salt Lake City, UT.
- .IP "[LABW91] " 9
- Butler Lampson,
- Martín Abadi,
- Michael Burrows, and
- Edward Wobber,
- ``Authentication in Distributed Systems: Theory and Practice'',
- .I
- Proc. 13th ACM Symp. on Op. Sys. Princ.,
- .R
- Asilomar, 1991,
- pp. 165-182.
- .IP "[MBSS87] " 9
- S. P. Miller,
- B. C. Neumann,
- J. I. Schiller, and
- J. H. Saltzer,
- ``Kerberos Authentication and Authorization System'',
- Massachusetts Institute of Technology,
- 1987.
- .IP [NBS77] 9
- National Bureau of Standards (U.S.),
- .I
- Federal Information Processing Standard 46,
- .R
- National Technical Information Service, Springfield, VA, 1977.
- .IP [Nee89] 9
- R. Needham, ``Names'', in
- .I
- Distributed systems,
- .R
- S. Mullender, ed.,
- Addison Wesley, 1989
- .IP "[NeHe82] " 9
- R.M. Needham and A.J. Herbert,
- .I
- The Cambridge Distributed Computing System,
- .R
- Addison-Wesley, London, 1982
- .IP [Neu92] 9
- B. Clifford Neuman,
- ``The Prospero File System'',
- .I
- USENIX File Systems Workshop Proc.,
- .R
- Ann Arbor, 1992, pp. 13-28.
- .IP "[OCDNW88] " 9
- John Ousterhout, Andrew Cherenson, Fred Douglis, Mike Nelson, and Brent Welch,
- ``The Sprite Network Operating System'',
- .I
- IEEE Computer,
- .R
- 21(2), 23-38, Feb. 1988.
- .IP [Pike87] 9
- Rob Pike, ``The Text Editor \f(CWsam\fP'',
- .I
- Software - Practice and Experience,
- .R
- Nov 1987, \f3\&17\f1(11), pp. 813-845; reprinted in this volume.
- .IP [Pike91] 9
- Rob Pike, ``8½, the Plan 9 Window System'',
- .I
- USENIX Summer Conf. Proc.,
- .R
- Nashville, June, 1991, pp. 257-265,
- reprinted in this volume.
- .IP [Pike93] 9
- Rob Pike and Ken Thompson, ``Hello World or Καλημέρα κόσμε or
- \f(Jpこんにちは 世界\fP'',
- .I
- USENIX Winter Conf. Proc.,
- .R
- San Diego, 1993, pp. 43-50,
- reprinted in this volume.
- .IP [Pike94] 9
- Rob Pike,
- ``Acme: A User Interface for Programmers'',
- .I
- USENIX Proc. of the Winter 1994 Conf.,
- .R
- San Francisco, CA,
- .IP [Pike95] 9
- Rob Pike,
- ``How to Use the Plan 9 C Compiler'',
- .I
- Plan 9 Programmer's Manual,
- Volume 2,
- .R
- AT&T Bell Laboratories,
- Murray Hill, NJ,
- 1995.
- .IP [POSIX] 9
- .I
- Information Technology\(emPortable Operating
- System Interface (POSIX) Part 1:
- System Application Program Interface (API)
- [C Language],
- .R
- IEEE, New York, 1990.
- .IP "[PPTTW93] " 9
- Rob Pike, Dave Presotto, Ken Thompson, Howard Trickey, and Phil Winterbottom, ``The Use of Name Spaces in Plan 9'',
- .I
- Op. Sys. Rev.,
- .R
- Vol. 27, No. 2, April 1993, pp. 72-76,
- reprinted in this volume.
- .IP [Presotto] 9
- Dave Presotto,
- ``Multiprocessor Streams for Plan 9'',
- .I
- UKUUG Summer 1990 Conf. Proc.,
- .R
- July 1990, pp. 11-19.
- .IP [PrWi93] 9
- Dave Presotto and Phil Winterbottom,
- ``The Organization of Networks in Plan 9'',
- .I
- USENIX Proc. of the Winter 1993 Conf.,
- .R
- San Diego, CA,
- pp. 43-50,
- reprinted in this volume.
- .IP [PrWi95] 9
- Dave Presotto and Phil Winterbottom,
- ``The IL Protocol'',
- .I
- Plan 9 Programmer's Manual,
- Volume 2,
- .R
- AT&T Bell Laboratories,
- Murray Hill, NJ,
- 1995.
- .IP "[RFC768] " 9
- J. Postel, RFC768,
- .I "User Datagram Protocol,
- .I "DARPA Internet Program Protocol Specification,
- August 1980.
- .IP "[RFC793] " 9
- RFC793,
- .I "Transmission Control Protocol,
- .I "DARPA Internet Program Protocol Specification,
- September 1981.
- .IP [Rao91] 9
- Herman Chung-Hwa Rao,
- .I
- The Jade File System,
- .R
- (Ph. D. Dissertation),
- Dept. of Comp. Sci,
- University of Arizona,
- TR 91-18.
- .IP [Rit84] 9
- D.M. Ritchie,
- ``A Stream Input-Output System'',
- .I
- AT&T Bell Laboratories Technical Journal,
- \f363\f1(8), October, 1984.
- .IP [Tric95] 9
- Howard Trickey,
- ``APE \(em The ANSI/POSIX Environment'',
- .I
- Plan 9 Programmer's Manual,
- Volume 2,
- .R
- AT&T Bell Laboratories,
- Murray Hill, NJ,
- 1995.
- .IP [Unicode] 9
- .I
- The Unicode Standard,
- Worldwide Character Encoding,
- Version 1.0, Volume 1,
- .R
- The Unicode Consortium,
- Addison Wesley,
- New York,
- 1991.
- .IP [UNIX85] 9
- .I
- UNIX Time-Sharing System Programmer's Manual,
- Research Version, Eighth Edition, Volume 1.
- .R
- AT&T Bell Laboratories, Murray Hill, NJ, 1985.
- .IP [Welc94] 9
- Brent Welch,
- ``A Comparison of Three Distributed File System Architectures: Vnode, Sprite, and Plan 9'',
- .I
- Computing Systems,
- .R
- 7(2), pp. 175-199, Spring, 1994.
- .IP [Wint95] 9
- Phil Winterbottom,
- ``Alef Language Reference Manual'',
- .I
- Plan 9 Programmer's Manual,
- Volume 2,
- .R
- AT&T Bell Laboratories,
- Murray Hill, NJ,
- 1995.
|