Required reading: Plan 9 from Bell Labs
everything is a file (more everything than unix - networks, graphics)
one file protocol for accessing remote files
every process gets its own private malleable name space
dump file system
UTF-8
new programming language
generalized fork
clean compilers
cleaner shell
terminals vs cpu servers
everything is a file + can share files => can share everything
per-process name spaces help move toward "each process thinks it owns the machine" ideal.
per-process name spaces mean that names are now ambiguous (/bin/cat might mean different things for different programs or on different machines)
name spaces allow arbitrary customization
name spaces allow establishing simple conventions - binaries always in /bin - because people can adapt their environment to the conventions instead of vice versa
in plan 9, always know where the resource should be (/net, /dev, /proc, etc), but it might not be there. convention ties everything together.
easy for new users to violate conventions accidentally, with sometimes bizarre results
kind of file system belongs on /net very different from /proc - no type system to check this.
convention-based system: conventions very powerful but only when followed
untyped system: tension between generality (everything is a file + can share files => can share everything) and specificity (not all files are equal: /net vs /proc vs disk files vs pipe files etc).
useful testbed for experimentation on part of authors; small ideas have been picked up in other systems - UTF8 everywhere, OldFiles on athena, .snapshot on NetApp, rfork in FreeBSD, clone in Linux, SunRay terminals
other ideas harder to adopt: per-process name spaces don't interact well with setuid programs, for example; unix assumes single name space at many levels
Some ideas come over little by little.