Hacker News new | past | comments | ask | show | jobs | submit login
Plan 9 from Bell Labs (github.com/0intro)
53 points by testing_1_2_3_4 on March 21, 2021 | hide | past | favorite | 17 comments



A dead comment asserts that the reason Plan 9 didn't succeed as "unix 2.0" is because of licensing, and because it only became open source "30 years late".

This is an interesting argument and perhaps has merit, but as a matter of fact: It became open source in 2002, 10 years after the initial 1992 release; albeit under a GPL-incompatible license. In 2014 it was released under the GPLv2; 22 years after the initial release. Either way; less than 30 years.


In truth it's closer to this

"To get people to switch to X competitor, it needs to not be better, but 10 times better"

I am sure I hacked that quote up badly but, the point is, sure plan9 is cool, but it wasn't better-er enough to get people to switch.

Instead people brought a lot of plan9 concepts TO other systems. That's a good thing.


Only because I was just reading the Wikipedia page before I posted this :)

  It looks like Plan 9 failed simply because it fell short of being a compelling enough improvement on Unix to displace its ancestor. Compared to Plan 9, Unix creaks and clanks and has obvious rust spots, but it gets the job done well enough to hold its position. There is a lesson here for ambitious system architects: the most dangerous enemy of a better solution is an existing codebase that is just good enough.
  — Eric S. Raymond


The 9p filesystem found its way into KVM's VirtFS. Curious if there's other active places where parts of Plan 9 are being used.


The original Cisco PIX firewall used modified Plan 9 as the operating system. In fact, despite the official history, the name PIX came from Plan 9, or Plan IX. I know this because the person who wrote the entire PIX software stack, Brantley Coile, told me.


Much of the Golang toolchain came from Plan 9:

https://news.ycombinator.com/item?id=8817990

EDIT: and the Gopher mascot was designed by Reneé French who also designed Glenda the Plan 9 bunny:

https://golang.org/doc/faq#gopher


Shoot, much of the Go lang team came from Plan 9. And they brought a lot of code and ideas with them.

Currently on my mind os `os.FileMode`; here's a comment I wrote in some Go code that interfaces with Python:

    // A StatMode represents a file's mode and permission bits, as represented in Python
    // (i.e. `os.stat()`'s `st_mode` member).  Similar to how Go's `os.FileMode` assigns bits to have
    // the same definition on all systems for portability, Python's `stat` assigns bits to have the same
    // definition on all systems for portability.  And it just so happens that Go's bits match those of
    // Plan 9, and Python's bits match those of the Linux kernel.
    type StatMode uint16
PS: If you weren't aware, Renée French's connection to Plan 9 and Go is largely that she's married to Rob Pike.


I did not know the about Reneé and Rob! Thanks!


The image and image/draw package design[1] is also inspired by Plan 9.

[1] https://blog.golang.org/image-draw


It's used, bizarrely enough, to communicate between the Windows and Linux sides of Windows Subsystem for Linux 2 - if I remember correctly, it's used to expose NTFS to the Linux side.


And in roughly the same role (Host FS parts exposed to the VMs) in ChromeOS's Crostini container runtime.

https://chromium.googlesource.com/chromiumos/docs/+/HEAD/con...


Isn't WSL using 9p to mount the linux fs on windows side? https://devblogs.microsoft.com/commandline/whats-new-for-wsl...


Why is the 9P filesystem used to frequently for these applications? Is it just that much better than the alternatives?


In general, 9P2000 is simple and fairly elegant. If you don't need POSIX semantics (and fs metadata), it's really quite simple to implement. For a bit more cost in terms of complexity you can go for 9P2000.u which makes things POSIXy enough if you've got a single client (as you do with VM -> host). This is great if you want to provide virtual filesystems, either proxied from the host or backed by something more exotic. In addition to QEMU, the gVisor folks (https://gvisor.dev/) have made heavy use of 9P (with enhancements) for similar reasons (in addition to Google being generally populated with Plan 9 aficionados).

Then, there's 9P2000.L... This has that "let's just take the filesystem vtable and export it as a protocol" flavor. This works well enough on Linux if you're just looking to translate the calls over into syscalls. I wouldn't recommend implementing a bespoke server for it, though. You're better off just implementing things with FUSE.


9front is the fork you're looking for.


Here's the 9front FAQ:

http://fqa.9front.org

And the 9front install guide (shields eyes from 90's HTML):

http://fqa.9front.org/fqa4.html

Or maybe this is more useful:

https://gist.github.com/99z/740bd7fdc020154049ebd1476f55ada2

HTH.


When you are done praising Plan 9, head on to Inferno and Limbo, which are actually the last OS developed by the authors at Bell Labs and contain the genesis of Go.

http://doc.cat-v.org/inferno/

http://www.vitanuova.com/inferno/

http://www.vitanuova.com/inferno/docs.html




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: