Plan 9 is a research operating system from Bell Labs. For several years it was my primary environment and I still use it regularly. Despite its conceptual and implementation simplicity, I’ve found that folks often don’t immediately understand the system’s fundamentals: hence this series of articles.
Bookmark this website, folks.
I cite plan9 as how things should have been because of how consistently it was engineered. In unix sometimes we say “everything is a file”, but in plan9 we actually mean it; it’s consistent through and through.
In Unix/Linux, procfs is a notorious kitchen sink of processes and totally unrelated things. Kernel functionality is exposed by syscalls, ioctrls, sysfs, procfs. To manipulate a device setting, it’s not at all obvious whether it is exposed through a special syscall, or an ioctrl on a file handle from “/dev/…”, or as a write operation in either /proc or /sys. Block devices were blessed with a namespace in /dev, but network devices are not.
It all works of course, but the inconsistencies leave a lot to be desired. Here’s an insightful paper about it. I disagree with the author’s theme that “plan9 is not dead yet”, but that may have been sarcastic reference to Monty python.
Plan9 consistency leads to some pretty spectacular capabilities, like exporting a device to another machine without having any special kernel drivers to emulate remote devices. This is stuff I wish could be done transparently on linux.
Unfortunately Plan9 never really had any market relevance. Even though it’s a historical relic, I often wish that indy os efforts could push back in that direction instead of striving to reimplement posix all the time. It just feels like a mono-culture.