Plan 9: The Way the Future Was (2003)
homepage.cs.uri.edu
homepage.cs.uri.edu
I really don't think so. Unix caught on because it was (initially) available for free with source code. It was freely available at the time because the Bell System, as a regulated monopoly, was prohibited from getting into the software business. Universities loved it as an object of study, and it spawned many derivatives, also freely available. After the breakup of Bell, they started marketing Unix.
Plan 9 in contrast was not released for free, had restrictive licensing, because Bell Labs was now under AT&T. I think it is hard to overstate the impact of this difference.
Linux became popular first because it was free, and because it invited hacking, and then because the combination of these caused a snowball effect.
I would like to add that Plan 9 is in fact very compelling, but the advantages are maybe hard to appreciate. A big issue was also that it initially supported a limited set of hardware because they didn't use the hardware BIOS.
The "Worse Is Better" essay[1] illustrates a bit of the controversy over radically simple design, which Gabriel contrasts with "doing the right thing."
The philosophy that led to Plan 9 is articulated in "cat -v considered harmful" : "One thing that UNIX does not need is more features. It is successful in part because it has a small number of good ideas that work well together."[2]
I am firmly convinced that this is an unpopular position. People really do want more features, and are not really concerned about how well they work together ... until they don't, in which case they have a reason to post an incredulous condemnation.
I wonder if the team members' experience designing an OS made them a bit bolder doing some things differently from most of the ecosystem around them, like starting with their own ABI (everything on the (variable-sized) stack) and static linking.
There's certainly a focus on networked uses in both Plan 9 and Go, and the lightweight threading (for apps that juggle a lot of clients but spend a lot of time waiting on other machines) and the servers in the stdlib (including HTTP2 by default in 1.6!) are part of that.
"Everything is a file" makes me think of interfaces like io.Reader/Writer in Go. I remember as a newbie being impressed how it was elementary to string together a pipeline. I suppose you can string together pipelines fine in other languages too, but I still think Go does a pretty good job keeping it simple (a couple of method definitions get you started) but clear on essentials (when things block, how errors look).
Anyhow, I'd really love to hear more about the connections back to Plan 9 from someone who knows about them.
As I mentioned in another comment, a lot of nomenclature and idiomaticism is derived from Plan9 in Go.
http://man.cat-v.org/plan_9/2/dial
Files, network connections, program interfaces, local IPC, and hardware are completely different, and that difference is important on about any interaction you make. They do have some common behavior, but one can't just make they look alike without losing a lot.
Learn about Limbo and see how much of Go resembles it.
> Some Plan 9 ideas have been absorbed into modern Unixes, particularly the more
> innovative open-source versions. FreeBSD has a /proc file system modeled
> exactly on that of Plan 9 that can be used to query or control running
> processes. FreeBSD's rfork(2) and Linux's clone(2) system calls are modeled on
> Plan 9's rfork(2). Linux's /proc file system, in addition to presenting process
> information, holds a variety of synthesized Plan 9-like device files used to
> query and control kernel internals using predominantly textual interfaces.
> Experimental 2003 versions of Linux are implementing per-process mount points,
> a long step toward Plan 9's private namespaces. The various open-source Unixes
> are all moving toward systemwide support for UTF-8, an encoding actually
> invented for Plan 9.
This is interesting. Anyone know of other ways Plan9 has influenced Linux etc. since 2003?Interesting thing is missing mmap in Plan9. Aside other things it makes most programs work with remote files quite easily. There is no separate path for local and remote files, because either way you have to read/write to them. That also makes local access slower than it can be, but that is the price for network transparency. You can hammer mmap to work with remote files, but it may have too many corner cases. That's at least how I understand it. Please correct me if I'm wrong.
Inferno seems like the obvious choice for the IoT.
[1]: http://9front.org/ [2]: http://www.9atom.org/
I remember a couple of Lucent telecom products from the mid nineties that ran on it but I'm not sure what else was out there.
Every configuration file, every proc-style file, every interchange format ends up with its own unique take on what format is easiest for it to present/consume. Every program has its own text parser & generator that generally is the minimum bar to deal with the text that it assumes.
And at some point, when taking a bird's eye view at all of this, it just turns into an unpredictable and insecure mess.
> ...every proc-style file
You're conflating Linux with UNIX, wrt what /proc emits[0], or if it's even the interface to do what you think you want[1].
[0] https://illumos.org/man/4/proc
[1] /proc/mounts vs getmntinfo(3)[2]
We have tried queued 9p responses, multiple 9p packets in the same tcp packet, extensions to the protocol. Nothing seems satisfactory enough to make it into the core.
Given the need to retrofit X11 with various mechanisms for fast local access to framebuffer or graphics accelerator, I have never been convinced that the 8 1/2 and Rio window systems, in which all drawing happened through streams of bytes, were complete and future-ready graphics systems.
I wonder if the "everything is a file" principle is actually Plan 9's weakness, a simplistic oversimplification of the nature of OS resources. What if we keep Plan 9's structure/topology (private namespaces, network transparency where possible) but redesign the fundamental file abstraction. Maybe this needs to happen at the level of a new instruction set which provides primitive data block transfer operations which can be implemented efficiently e.g. by memory mapping or dma on local hardware and which automatically fallback to streaming in the network case. Not new silicon but a fast virtual machine which provides network transparency and high performance where possible.
We can play Quake though so it's not all bad :)
Also communication with the X server can use shared memory - AIUI the modern GUI toolkits render everything to buffers themselves rather than using X drawing protocol calls, so I suspect drawing on modern linux is mostly a shared-memory thing.
I'm just saying unixes have done it a similar way to Plan 9 since almost forever - and it's not that big of a deal.
As for drawing. Plan9 is intended to be used graphically. Although the interface is by majority text (which is very handy). Images and window usage in general is as run of the mill as would be expected in a graphical environment.
9P in Plan9 is not great because it is some super advanced technology (it is actually quite simple), but because of its ubiquity. You can use 9P from Linux, with or without FUSE, but this won't give you a completely consistent system with a single interface as Plan9 is.
Another comment made some analogies of Plan9 and Go. gofmt is not the most awesome program ever written; but a consistent style for all the code written in the language is one of the most appreciated features of Go. You could write a cfmt, a cppfmt or a jsfmt program, but this won't give you the advantages of gofmt in those languages.
See:
http://man.cat-v.org/plan_9/6/style
http://doc.cat-v.org/plan_9/programming/c_programming_in_pla...