renamed 9P2000. Unlike most other operating systems, Plan 9 does not provide special application programming interfaces (such as Berkeley sockets, X resources or ioctl system calls) to access devices. Instead, Plan 9 device drivers implement their control interface as a file system, so that the hardware can be accessed by the ordinary file input/output operations read and write. Consequently, sharing the device across the network can be accomplished by mounting the corresponding directory tree to the target machine. Union directories and namespaces Plan 9 allows the user to collect the files (called names) from different directory trees in a single location. The resulting union directory behaves as the concatenation of the underlying directories (the order of concatenation can be controlled); if the constituent directories contain files having the same name, a listing of the union directory ( or ) will simply report duplicate names. Resolution of a single path name is performed top-down: if the directories and are unioned into with first, then denotes if it exists, only if it exists and does not exist, and no file if neither exists. No recursive unioning of subdirectories is performed, so if exists, the files in are not accessible through the union. A union directory can be created by using the command: ; bind /arm/bin /bin ; bind -a /acme/bin/arm /bin ; bind -b /usr/alice/bin /bin In the example above, is mounted at , the contents of replacing the previous contents of . Acme's directory is then union mounted after , and Alice's personal directory is union mounted before. When a file is requested from , it is first looked for in , then in , and then finally in . The separate process namespaces thus usually replace the notion of a search path in the shell. A path environment variable () still exists in the rc shell (the shell mainly used in Plan 9); however, rc's path environment variable conventionally only contains the and directories and modifying the variable is discouraged, instead, adding additional commands should be done by binding several directories together as a single . Unlike in Plan 9, the path environment variable of Unix shells should be set to include the additional directories whose executable files need to be added as commands. Furthermore, the kernel can keep separate mount tables for each process, and can thus provide each process with its own file system namespace. Processes' namespaces can