Plan 9 from Bell Labs in Cyberspace
bell-labs.com
bell-labs.com
If Linux worked like this today, you would not need Kubernetes. You could run systemd on a single host and it would just schedule services across all the hosts on the network. Namespaces would already be independent and distributed, so containers would only be used for their esoteric features (network address translation, chroot environment, image layers). Configurations, files, secrets, etc would just be regular files that any process in any container on any host could access using regular permissions models. About 50 layers of abstraction BS would disappear.
I think because nobody's actually seen how it can work, they can't imagine it being this simple.
Also, they made use of specialized computers - the ones with nice displays were terminals, there were compute servers with powerful CPUs and file servers with big disks. Some computers were quite specialized, like the ones with WORM drives that supported the Venti versioned file system, that provided seamless automatic backups and even a sort of version control.
Now Plan 9 lives on, used (as far as I know) mostly by lone individuals. So now the Plan 9 terminal, file server, and compute server usually all run on the same computer. It works, but it's not the original vision.
I think one of the reasons Linux but not Plan 9 took off, besides licensing, is that this vision of a project-scale distributed system fell out of style. Many of the people who adopted Linux in the 1990s wanted a largely self-contained computer they could run themselves, they didn't want a terminal to connect to a distributed system. The original Plan 9 stateless terminals don't really fit in a world where everyone is carrying around their own laptop.
So now we have a world with a lot of mostly self-contained individual computers, that use cloud services far away run by huge corporations. The intermediate scale organized around projects and small groups isn't explicitly supported by the computer systems themselves. Plan 9 can live on in this world, but it's not the world it was originally designed for.
I'm not so sure that this model of trust works with the way computers have evolved since then.
Comparing the issues E.G. X11 has vs modern workarounds for direct user IO for games I also wonder how the security model and composition of file layers could negatively impact the experience.
Taking the ideas of Plan 9 as inspiration, the more realtime elements could be filtered in kernel and message passed to other processes via a single centralized security model. That might also include exposing shared memory via a memory mapped file, or possibly via a higher level message passing abstraction.
All network connections are authenticated. Thanks to the way everything in Plan 9 is implemented using it in a network will be closer to how a VPN works: your "view" of the network will be of only trusted computers, and going to the outside world will go through a machine that can act as a firewall.
Distributed shared memory needs quite a bit more than the simple "read" and "write" primitives that something like 9P provides. You basically need to replicate a low-level coherency protocol in software. Of course, expect it to be quite slow.
What's a good way to try it? Cluster of raspberry pi's, or just any given home-lab setup?
How would a HA Plan 9 deployment handle disappearance of the "leader"?
Unless I missed something while researching P9 years ago.
A HA k8s- (or Heroku)- esque platform is more easily built, understood, and operated with Plan 9 because it comes out of the box with many of Docker (and Swarm's?) features.
Is that right?
In terms of HA, the implementation will be up to your preferred architecture (master/slave, master/master, p2p). Plan9 doesn't schedule services itself, so systemd would need to be modified to adapt one of those architectures. But it wouldn't be a whole lot of work, and it could reuse Plan9's abstractions for most of it. Etcd's key/value store becomes just a filesystem, and Paxos/Raft could be implemented either as a network driver or a userland app, which combined with a union fs, means you just manipulate a single directory of files. You don't even need to futz around with TLS, and again: filesystem permissions.
It's not a 1/1 replacement for K8s, but I bet about 80% of the codebase would go away, and most (if not all) of the abstractions.
Plan 9 was designed long before any high availability/CAP theorem/distributed databases lessons were learned: it embodies the Unix mindset of reliably available nodes talking over tcp.
Failover/distributed consensus/orchestration/load balancing/network split tolerance/replication could be built on top of 9P servers, but all of these concepts are pretty alien to Plan 9 itself.
Plan 9 Foundation: https://p9f.org/
Wikipedia: https://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs
There's still a pretty active community around Plan 9, too.
9Front, a popular fork of Plan 9: http://9front.org/
Interviews with some Plan 9 community members: https://0intro.dev/
Some videos: [A Tour of Acme](https://www.youtube.com/watch?v=dP1xVpMPn8M), [Peertube channel of sigrid's](https://diode.zone/video-channels/necrocheesecake/videos)
I personally learned about it from GSoC many years ago.
https://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt
>So we went to dinner, Ken figured out the bit-packing, and when we came back to the lab after dinner we called the X/Open guys and explained our scheme. We mailed them an outline of our spec, and they replied saying that it was better than theirs (I don't believe I ever actually saw their proposal; I know I don't remember it) and how fast could we implement it? I think this was a Wednesday night and we promised a complete running system by Monday, which I think was when their big vote was.
>So that night Ken wrote packing and unpacking code and I started tearing into the C and graphics libraries. The next day all the code was done and we started converting the text files on the system itself. By Friday some time Plan 9 was running, and only running, what would be called UTF-8. We called X/Open and the rest, as they say, is slightly rewritten history.
As a software developer, my main use of my computer is writing / building / running code and surfing the web, mostly in read-only mode but also to interact with others via stuff like slack. I have always wondered how difficult it would be to make Plan 9 a viable platform for these requirements, and why this is not so today (or maybe it is and I just don't know where to look): does the difficulty lie in porting programs that already run on other operating systems? Are there other, deeper reasons? Is it possible today to run stuff like vim, gcc / g++, python, java, node, zig, rust, firefox on Plan 9? If not, is it possible to port these, or are there fundamental architectural reasons against it?
Note: I am willing and happy to try other paradigms, such as acme for editing, but also find it quite baffling that, if it is technically possible, you could not install vim / emacs / vscode alongside acme.
I think the biggest strength (and weakness) of the ideas both present in LISP and Plan9 is the consistency and internal integration. And, I see two big challenges with that.
One is technical: It is not that easy to reinvent everything and do it in such a way that makes it more consistent than existing systems. If we believe Conway's law such an effort would require a team as small as possible, optimally just a single person. Note that Plan9 for example does not fully integrate, the programming language and standard library are not composed of the same building blocks as the underlying system, there is a divide there.
The second is economical / political: While such a consistency and internal integration is desired by the users and developers, it is not very beneficial to business. Image if all components were actually integrated with one another. How would management divide that into projects? How would you make marketable products from it? How would you implement your branding and vendor lock-in? Where would SaaS and subscription models fit in?
>Gcc/g++
Just get plan9's C.
>Python
They have mercurial, so yes.
>Node, Firefox.
Avoid that, seriously.
You have a Go compiler, BTW.
If the answer is "nope, Plan 9 is not intended for this type of user" then I guess that's fine, although sad to me, because I cannot play around with something that is appealing to me. And, again, if this is the case, it would be interesting (to me) to understand WHY: why is there no Firefox (or any modern browser) for Plan 9. From another comment, I learned there IS vim ported to it, so I guess that means it is fundamentally possible to port medium-complexity software. Maybe nobody else cares about having these things in Plan 9, which again, is fine. Cheers.
libatk1.0-0
libc6
libcairo-gobject2
libcairo2
libdbus-1-3
libdbus-glib-1-2
libevent-2.1-6
libffi6
libfontconfig1
libfreetype6
libgcc1
libgdk-pixbuf2.0-0
libglib2.0-0
libgtk-3-0
libpango-1.0-0
libstdc++6
libx11-6
libx11-xcb1
libxcb-shm0
libxcb1
libxcomposite1
libxdamage1
libxext6
libxfixes3
libxrender1
zlib1g
fontconfig
procps
debianutils
And that's just runtime dependencies, I'm not sure what you need to compile it in the first place. Don't forget that these may have their own dependencies and so on... And for comparison, runtime dependencies of the `nvi` package which is probably closer to that vim port than normal `vim` package in Debian: libc6
libdb5.3
libncursesw6
libtinfo6
Much less software overhead.If you want the Firefox experience from your typical Linux distribution on Plan 9, somebody needs to either port all these libraries, or provide functional equivalents. The problem is that for the longest time Plan 9 license was not favorable for anyone wanting to develop it further - that's why we have all these forks and re-implementations around, which increases fragmentation. Hopefully now, that Plan 9 has been opened fully, there's a Foundation behind the project, people will pick it up again and start porting stuff to it. Forks could be folded back into the main project if their developers would want to. But don't expect Firefox right away just yet.
Also, don't forget that Linux had 20 years of development in its UI and UX department; Plan 9 didn't. You can see on the Plan 9 Foundation GSoC page[1] that there are plans to work on this part of the OS. When the work is done, hopefully more people will be attracted to the platform itself, which will mean more hands to work on porting or developing other software, and there's a chance that we can snowball an alternative ecosystem from there.
For removing xorg dependency from a web browser that isn't Firefox, I believe there is in fact a project for running webkit in a framebuffer, called WPE Webkit [0]
(I'm well aware that this doesn't mean you can run these on p9, just pointing out that xorg isn't a hard dependency)
And just to clarify, I used Firefox only as an example of a modern open source web browser. I don't really much care which browser it is, as long as it is relatively modern.
I guess the "everything is a file" might have multiple meanings. For example:
(1) Everything is represented by a (file) descriptor
(2) Same as (1) and the descriptor has a file-like API (think read(), seek(), write(), etc.)
(3) Everything is an "byte addressable blob of bytes"
Meaning (1) is OK. But it doesn't tell nothing about the API the (file) descriptor itself would use. It could be a fixed set (like meaning (2)), or be variable depending on something else (like the (file) descriptor type).
Meaning (2) looks like too restrictive and inefficient to me and is the one I really have trouble accepting as a general OS primitive.
Meaning (3) surely can't be used for everything in practice, right? It's just to generic like "every computer architecture can be emulated by a universal turing machine." And it also seems too inefficient. But it could be very useful if the blob of bytes had an API like (2) or any other, including having an API depending of the "file type".
Is option (3) that folks are meaning when talking about "everything is/should be a file"?
EDIT: formatted the meaning list correctly.
But lots of things in Plan9 present an interface that isn't just a single file. The 8½ window system, for example, presents not only /dev/mouse but also /dev/cons (character-oriented I/O), /dev/bitblt (to which you write requests for 2-D accelerated drawing operations), /dev/rcons (keystroke-oriented character I/O), and /dev/screen (the contents of the window—which is just a byte-addressable blob of bytes). http://doc.cat-v.org/plan_9/4th_edition/papers/812/ explains in more detail.
And, of course, file storage servers similarly provide an arbitrary tree of files, and when you remotely log into a CPU server, you mount your local filesystem on the CPU server so that processes running on the CPU server can access your local files transparently—including /dev/screen, /dev/mouse, and /dev/bitblt, if you so choose.
Even on my local Linux system I wouldn't know how to get hold of the mouse data without using an X Windows API (or SDL on a console only app before X is run).
You may be interested in https://gitlab.com/kragen/bubbleos/blob/master/spikes/intell..., which reads from /dev/input/mice, although I haven't yet implemented support in https://gitlab.com/kragen/bubbleos/blob/master/yeso/yeso-fb.....
http://www.cs.cmu.edu/~412/lectures/2009-10-23_radeon.pdf
>>Provide 2D acceleration via the 3D engine.
a) tooling and familiarity
b) it's leveraged for modularity, composition and access control. Normal unix basically has no modularity and little composition beyond piping to stdin (which is of limited applicability). And of course no useful access control mechanism to speak of. The last 5 decades mostly just added layers of shitty hacks that don't work and that no one understands anymore (by contrast e.g. the original unix ownership and permissions model was misdesigned but at least possible to grasp).
Plan9 does substantially better in both regards via clever use of a proper union file system (which incidentally makes another horrible hack superfluous: symlinks). If you want your shell, or some other executable, to find some executable, you mount it into its /bin -- there is no $PATH. If you want some process or user to have access to a resource (file, device, server in the network, ...) you mount it into their filesystem. This gets rid of a lot of problems and special purpose solutions.
Interpreting bytes is message passing and this communication happens through the handle/descriptor to the file/object/whatever. As above, this handle could have come from the kernel, another process or the executing process itself (the process opened some file or whatever).
I think the message passing version happening through a handle can be more versatile as you could send this handle over to another process. Could copy it and distribute it to other processes in a easier way than injecting/changing a (presumably C ABI) into a process address space.
That means you can run graphical applications on the CPU server.
In a way it's similar to HTTP REST, which is also organized by file paths, except instead of the HTTP verbs GET, POST etc. you get open, read, write as your verbs.
A side channel is then just a directory entry.
A file object is a very basic, general type, that allows open, read bytes, write bytes, close, maybe seek, maybe some ops are restricted (read-only, write-only) etc.
I don’t think it is generally appreciated how far it gets you to have a unifying simple interface. You can always add a complex one, you know?
If you have a laptop and a desktop, and your desktop has a printer attached, can your laptop just print to it? In Linux, you have to set up CUPS, open network ports, download drivers, and generally set up both machines to be able to "talk printers". In Plan 9, your laptop just opens the desktop's printer file over the network, and prints.
There is per process namespaces/"filesystems". Their 9P protocol is FIDL and the main system API is defined by FIDL protocols/APIs.
Or so I understand.
If we could imagine a network filesystem (spanning many hosts) full of Erlang objects which can receive and send data, it would be somehow similar.
1. Nowadays we can represent the essence of this approach with FUSE and SSH/SSHFS. Sadly, nobody does: local servers (i3, dbus, ..., vscode) use domain sockets and client executables, probably due to the lack of private namespace support by default.
2. The difference between hypothetical "/dev/my-printer/print-pdf" and almost-like-real-world "my-printer-print-pdf /dev/my-printer" looks similar to binding the first argument in OOP-style vs the explicit C-like call syntax.
These suck hard against 9p and factotum. Not even close, Linux and BSD's are jokes against what you can achieve with plan9/9front on networking whole componentes. You can run remote processes seamlessly.
The important point is that "everything is a file" is just a short way to say "everything is a file system". Your interface is not a file descriptor to which you read and write, but a whole tree where there are different files on which you can perform the operations defined in the 9P protocol (create/read/write/...). For example, in the windowing system, you open a file to create a new window, and the new window will have associated a directory with files that represent the screen, mouse and keyboard (and the process running in that window will work with those files exactly as it does with native devices).
You can have a look at the man pages (sections 3 and 4) to see how these filesystems work.
This is great news altogether - I've been dabbling with Plan9 for a fair bit (mostly on Raspberry Pis of late as they are nicer "disposable" machines and I have plenty of them), so am hopeful that this will lead to more modern versions (especially something whose UX does not rely on mouse chording, which is a chore on modern machines).
And I rather use Swing than Tk.
Now one thing I agree is that it was Android done properly.
Having said that..i installed 3 days ago a 9front "cluster",
2x RPI3 as cpu server
1x RPI2 with 2 external HD's (2x7TB) as Storage Server
1x RPI2 (down-clocked) as Auth Server
Love it to work and play with it.
Didn't bell-labs already make the source available under the GPL years ago? Why is this necessary?
This removes the corporate roadblocks and lets plan9 exist but itself.
I've always wanted to see more OSes , there has to be a different way of doing things then the Unix/Linux / BSD OSX or Windows operating systems
1. Millers wifi implementation is different than 9fronts wifi so a lot of work needs to be done to get Rich's driver working on 9front. Patches welcome :-)
Frequently Questioned Answers???
9front is peppered with extremely dry sarcasm, to the point of controversy (http://fqa.9front.org/fqa1.html#1.3.0.1)
have a look at thread(2)[2] and enjoy Go like channels and concurrency cleanly built on top of the nice pan 9 c library. You could just use Go but we dont have Go on pi yet, that's a google SOC 2021 project if anyone is interested.
Once P9 gets over its insane NIH syndrome (or IHBBTWP, "Invented Here But By The Wrong Person", i.e. Stroustrup) it could maybe do some weird stuff like, I dunno, run a web browswer? I vividly remember people in the Unix room moving to a PC (running Windows?) to browse the web, ffs. Back in '94.
>but I'm not aware of anything a normal person would recognize as a web browser.
Same could be said about hackernews (no facebook or twitter look...not even hashtag's), so be happy you are not "normal".
Oh how the mighty have fallen.
https://sites.google.com/site/dicknewsite/home/computing/byt...
The capitalization, brand recognition, and streamlined corporate franchise structure, cooperate to make it easier to launch and run a Domino's franchise, than to start a pizza joint from scratch.
But not that much easier. There is plenty of room to market better pizza for more money.
Computer systems tend to have strong network effects, there's a lot to learn and a skilled developer is, ceteris paribus, more productive than a greenhorn. Most of the value in operating systems and programming languages is in the ecosystem rather than the core.
Worse is better isn't a universal solvent, there are plenty of areas where it isn't applicable. The original essay† is about why C and Unix were eating Lisp's lunch, and is worth reading.
That's a really bad and wrong comparison. By your measurements Microsoft, Apple and Oracle is the best the industry ever had.
We are getting into philosophy territory here. You know what I mean and in which context.
https://www.theregister.com/2017/06/26/coraids_athenian_resu...
So, if something had a window 20 years ago, but didn’t get applied, there’s a good chance that another window has opened up.
https://en.wikipedia.org/wiki/Inferno_(operating_system)
That's the one I've used and it was pretty cool. Limbo was a fun little scripting language.
[0] the original pre-1984 AT&T, not Southwestern Bell d/b/a AT&T
It seems to me that if one were desperately looking for an objective measurement of what the lab was currently accomplishing, it would involve looking at the quality and retention of its hires. It sounds like they dropped the ball.
Basically Alcatel-Lucent was broke and was bought out by Nokia with Microsoft money. Nokia is now also broke and they're pawning the good silver.
That said, it's based around what the designers of Plan 9 thought were problems with Unix. It's a very opinionated operating system. But it has so many ideas that were ahead of their time, and in many ways are still lightyears beyond what we have now.
It's a really cool piece of computing history, and if you haven't tried it, I suggest you look into it, but keep in mind that even though it looks and sometimes feels like Unix, it very much is not. It's not terribly useful as a daily driver OS due to a lack of software, but it's very, very cool.
I think this wildly overstates it. Much of the good innovations have been adopted in Linux. 9p exists. /proc was adopted (though that was in UNIX first).
One unifying principle of plan9 is that everything is a file. But the (POSIX) file api has a lot of limitations. Fuschia, in contrast had some nice ideas about different types of file (blob/object, log, etc).
The main innovation can't be done by addition. With plan 9, many special cases are removed. You no longer have to wonder what happens if you try to create a Unix socket on an NFS file system, and then mmap it: There's just 9p. Everywhere.
9p is nice, but it isn't special. Making the whole universe 9p is where the improvement lies.
https://devblogs.microsoft.com/commandline/a-deep-dive-into-...
How does that work? I don't know the details of any implementation, but 9p the protocol appears not to have any concept of mmap: https://9fans.github.io/plan9port/man/man9/intro.html
I think I see what you mean about 9p not being that special, it doesn't seem much different than if Windows decided to export every system-level API as a DCOM object, that would also get you the same kind of "the whole universe is networked" kind of deal.
The difference is that in Plan 9, there is no 'if', and there's no other option for accessing resources. All programs interface with the OS and other programs via 9p, more or less: Notable exceptions are process creation calls like rfork() and exec().
> but 9p the protocol appears not to have any concept of mmap:
Correct. Mmap is a kernel feature -- and mmap style stuff is only really done for demand paging of binaries at the moment. You get a cache miss and a page fault? Backfill with a read. Backfilling IO on page fault is really all mmap does, conceptually.
That seems like it would create difficulties in porting software there. Please correct me if I'm wrong but the original plan9 appears to also have no support for shared memory or for poll/select.
>Backfilling IO on page fault is really all mmap does, conceptually.
For read-only resources yes, for handling writes to the mmapped region, that seems quite broken.
> For read-only resources yes, for handling writes to the mmapped region, that seems quite broken.
No more broken than mmap of nfs. Consistency is hard.
Right, I get that's what you meant, it doesn't seem to really change much versus NFS, or DCOM, or whatever. So it's unclear what benefit is being provided by 9p here.
Also upon further research I am not sure what you mean by this is the only option, plan9 seems to suggest use of channels for other types of IPC interfaces, which seem to not be the same as 9p and are not necessarily network serializable. (Or are they?)
There are few magic kernel devices that don't act like 9p, like '#s' which implements fd passing on a single node. And the VGA drivers expose a special memory segment on PCs to enable configuring VGA devices.
But the exceptions are very few and far in between, and affect very few programs.
> So it's unclear what benefit is being provided by 9p here.
A uniform and simple API for interacting with out-of-process resources that can be implemented in a few hundred lines of code.
I guess I just don't see what is conceptually the difference here versus something like doing basic HTTP over a TCP socket, it seems like the same kind of multiplexing. Either way, you still have to deal with the same issues: can't pass pointers directly, need to implement byte swapping, need another serialization library if you want the format to be JSON/XML or if you want a schema, etc... So in cases where that stuff isn't important, channels would come in handy, but of course that is now getting closer to a local Unix IPC. Am I getting this right?
A thread reads them from a file descriptor and writes them to a channel. You can look at the code which gets linked into the binary:
/sys/src/libdraw/mouse.c:61
Essentially, the loop in _ioproc is: while(read(fd, event)){
parse(event);
send(mousechan, event);
}
And yes, once you have an open FD, read() and write() act similar to how they would elsewhere. The difference is that there are no OTHER cases. All the code works that way, not just draw events.And getting the FD is also done via 9p, which means that it naturally respects namespaces and can be interposed. For example, sshnet just mounts itself over /net, and replaces all network calls transparently for all programs in its namespace. Because there's no special case API for opening sockets: it's all 9p.
To me the problem with saying "no special cases" seems to make it quite limited on the kernel side and prevent optimization opportunities. For example if you look at the file node vtables on Linux [0] and FreeBSD [1] there are quite a lot of other functions there that don't fit in 9p. So you lose out on all that stuff if you try to fit everything into a 9p server or a FUSE filesystem or something else of that nature.
[0]: https://elixir.bootlin.com/linux/v5.11.8/source/include/linu...
[1]: https://github.com/freebsd/freebsd-src/blob/master/sys/kern/...
I don't have to use the network stack from my machine, I can grab it from the network gateway. NAT gets replaced with mount.
I don't have to use the debug APIs from my machine, I can grab them from the machine where the process is crashing. GDB remote stubs get replaced with mount.
You see the theme here. Resources don't have to be in front of you, and special case protocols get replaced with mount; 9p lets you interpose and redirect. Without needing your programs to know about the replacement, because there's a uniform interface.
You could theoretically do syscall forwarding for many parts of unix, but the interface is so fat that it's actually simpler to do it on a case by case basis. This sucks.
* In kernel devices can add some hacks and special magic, so long as they still mostly look as if they're speaking 9p. This is frowned upon, since it makes the system more complex -- but it's useful in some cases, like the '#s' device for fd passing. This is one of the abstraction breaks that I mentioned earlier.
> The debug APIs can still only return a direct memory mapped pointer to the process memory as a special case
Can you point to the special case here?
http://man.cat-v.org/plan_9/3/proc
Because it replaces ptrace, and seems to work perfectly fine when I mount it over 9p. It's used by acid, which needs no additional utilities: http://man.cat-v.org/plan_9/1/acid
> If you want to add compression to your VNC thing
Images may be sent compressed. More -- or at least better -- formats would be good, but this is done.
http://man.cat-v.org/plan_9/3/draw
For a full implementation of remote login using these interfaces, here's the code:
http://shithub.us/ori/plan9front/fd1db35c4d429096b9aff1763f2...
It's a bit complex because it needs to do more than just forward mouse, keyboard and drawing -- signals need to be interposed and forwarded, and there are a few other subtle things that need to happen in the namespace. And because it contains both the client and server code. Even so, it's still small compared to VNC.
And yes, shithub is hosted on plan 9.
> or add some more complex routing to your network setup, you have to start adding special daemons and proxies and translation layers into another socket
Here are the network APIs.
http://man.cat-v.org/plan_9/3/ip
What kind of complex routing are you talking about, and why would it be impossible to implement using those interfaces?
FTFY.
> 9p exists.
A hacked up version called 9p200.u and later on, 9p2000.l which comes laden with posix and unix baggage and of course linux baggage in the lase of .l. This is to handle things like symlinks and special device file hacks inherited from Unix.
> /proc was adopted (though that was in UNIX first).
Linux proc is a mess. Plan 9 proc is just that, the interface to running processes. There's no stupid stuff like /proc/cpuinfo. wtf is that doing in there? http://man.postnix.pw/plan_9/3/proc
> One unifying principle of plan9 is that everything is a file. But the (POSIX) file api has a lot of limitations.
Plan 9 is not posix.
> Fuschia, in contrast had some nice ideas about different types of file (blob/object, log, etc).
A file is an array of bytes. Why complicate that simple approach?
Do you think Plan 9 /proc would have remained as "clean" over time if it were as popular as Linux?
One thing that seems to be something of an axiom is that popular interfaces become messy over time. The location of /proc/cpuinfo seems to be an individual act of vandalism rather than being due to fundamental differences in underlying philosophy/approach.
If people are allowed to submit "functionality" patches ad-hoc with little to no scrutiny or thought, then yes, any project will become a mess.
The general approach taken by plan 9 maintainers is to question functionality/feature patches and ask "Who does this benefit?" If the answer is only the submitter or rare edge cases then the patch is rejected. If the patch benefits a large audience, then it is accepted.
But to be fair, Linux is hammered on by large corps who's only goal is to make money by vomiting webshit from Linux servers. They don't care about simplicity, technical details, correctness, or anything like that, so long as it increases their bottom line. From my point of view the Linux I came to love is long dead.
A lot of the appeal of Plan 9 is that it's not widely used, and so has remained opinionated. It's not a general use operating system. It's a research operating system.
stream-of-bytes was the right idea then. It doesn't mean it is still right.
It failed.
At that point, I needed muscle memory across all machines more than anything else, and switched back to sh (bash was still very new and not widely available, csh was born borked, and ksh was only available under certain OSes). That was sad.
rc had a beautiful, clean C-like syntax without any csh weirdness and was much more powerful than sh. Scripts were a joy to write and maintain.
(Plan 9's `rc` was originally written for 10th edition Unix, and would later get ported back to Unix as part of Russ Cox's plan9port in 2003.)
I had a lot of fun with rc....
PS1="$(hostname)=; "
because it's just nice.When you're talking about things like displays, performance is extremely important. We're talking about 178MB/s to update a full HD screen at 30 fps, which requires networking pretty much no normal user has.
There's a program called drawterm which implements Plan 9 graphics devices on Linux. You run drawterm locally, connecting to a Plan 9 system, and your applications on the Plan 9 system draw to your drawterm window over the network. I regularly run it at 4k and it performs quite well.
But it doesn't stop there. Wanna play local music remotely ? /dev/audio is there for that. Want to use a machine as a jump server ? Just mount their /net folder into yours and any network operation will go through them.
The ideas can be used today. I have a folder of Music with only lossless songs for personal reasons, but it's obviously not perfect for playing from my phone because of how large they are. So I had a server that transcoded them to Vorbis on-the-fly and served them with FUSE, and a sshfs on top of that to serve the transcoded fly to my phone. This composition of a common interface might use no line of code from Plan 9 but it definitely reuses its philosophy.
1,920 x 1,080 pixels @ 24 bits/pixel = 6,220,800 bytes/frame
30 frames/s = 186,624,000 bytes/s = 177.98 MiB/s
You are seriously underestimating the simplicity of plugging in a video encoder.
At that point it doesn't really matter if the screen is a file or not -- you need a compressor that can easily provide the output on a network socket, and a client that can perform the decoding.
What matters - and what the file interface gets you, but you can do the same thing in many other ways - is introducing the concept of a generic pluggable, chainable API.
10G ethernet can do it no problem and fractional speed like the 2.5 and 5 gigabit standards should have little issue as well.
But even on 10G that's no picnic. Sure, that works for a single user, but add a few more people and it's not hard to run into trouble. Such a system can't for instance just drop frames when the network is overloaded which to me makes this more of a curiosity than something anybody would actually want to use in practice.
Trunk lines of 100G and higher are pretty common in core networks now, if your big enough to span a single switch. The main limit was we had trouble doing 10G over cat-5e copper with long distances. 2.5/5 solve that problem and 10g is possible with cat-6. Fibre has no issue with super high rates for network backhauls to aggregate all that traffic.
With the exception of the copper standards all of this has been roled out in the datacenter for years and is pretty mature.
However the 10G (over copper) encoding format uses a complex forward error correction encoding that is a bit energy intensive, it also adds some latency. A smaller silicon production node and this being used outside of SERIOUSLY EXPENSIVE for pro-sumers / medium businesses would instigate a drop via commodity.
How close were they to Lisp Machines? :)
Plan 9 from Bell Labs is a distributed operating system, originating in the Computing Science Research Center (CSRC) at Bell Labs in the mid-1980s, and building on UNIX concepts first developed there in the late 1960s. The final official release was in early 2015.
Under Plan 9, UNIX's everything is a file metaphor is extended via a pervasive network-centric filesystem, and the cursor-addressed, terminal-based I/O at the heart of UNIX-like operating systems is replaced by a windowing system and graphical user interface without cursor addressing, although rc, the Plan 9 shell, is text-based.
“Starting in the late 1980s, a group led by Rob Pike and UNIX co-creators Ken Thompson and Dennis Ritchie developed Plan 9. Their motivation was two-fold: to build an operating system that would fit an increasingly distributed world, and to do so in a clean and elegant manner. The plan was not to build directly on the Unix foundation but to implement a new design from scratch. The result was named Plan 9 from Bell Labs – the name an inside joke inspired by the cult B-movie "Plan 9 from Outer Space."
Plan 9 is built around a radically different model from that of conventional operating systems. The OS is structured as a collection of loosely coupled services, which may be hosted on different machines. Another key concept in its design is that of a per-process name space: services can be mapped on to local names fixed by convention, so that programs using those services need not change if the current services are replaced by others providing the same functionality.“
It's of course not relevant in the current context but still fun so I dare add that it is famous because it's so bad. It's known as "worst movie ever". It is worth watching the start and a few scenes - even if one does not have the patience for the whole thing - just for some laughs. It already starts (4 minutes in) with a scene in a hilarious airplane cockpit, which does not look like one at all (those controls..!). The zombies are really funny too.
Full movie: https://youtu.be/Ln7WF78PolA
One of the reviewers of ‘Manos’ says: “What can I say about a movie so bad that it makes Plan 9 From Outer Space look like Casablanca?”, another “I have endured a thing or two in my life: Plan 9 from outer space. Hercules against the moon men. Godzilla versus Megalon. German musical comedies from the early sixties. However, THIS was too much for me. About one hour or so into the movie, I quit.”
I am very glad I had alcohol to go with it.
"Manos" is worse to the extent slogging through it is a chore, at least without commentary to add some entertainment value.
Well explained in this PDF.
> I wish the so called open source projects were more inclusive.
- What barrier is there currently to open source projects. Take the code, do whatever you want with it.
- What is the difference between an open source project and a "so-called open source" project. Is the source available freely available? Then its open source. It is a gift!
> Many people would love to work on these projects, but are unable to because they need to have a paid employment to pay bills and feed family.
Why is that anyone else's problem? Billions of people don't get to do exactly what they want to do. Many (most?) open source contributors work on the open source in their spare time. "Many people would love to do X, but are unable to because Y". You can fill in those blanks for anything.
> Companies who use such software are essentially getting labour without paying for it. We need to think about royalty system that will be reimbursing people working on those projects...
They aren't paying for it because the person who wrote it didn't want them to pay for it. You are trying to control the explicit desires of the person who created and shared the software.
There is a barrier to participate in development of those projects. Developers are expected to work for free and not every developer can afford to do it, so these projects are dominated by people from privileged backgrounds.
> What is the difference between an open source project and a "so-called open source" project. Is the source available freely available? Then its open source. It is a gift!
I am not sure why do you mean by this question.
> Billions of people don't get to do exactly what they want to do. Many (most?) open source contributors work on the open source in their spare time.
The problem is that "Open Source" is a source of free R&D for companies who don't have to pay salaries and taxes and developers are expected to give up their time for free. Big companies are promoting this, because it saves them money in the long run at the expense of developers. This is the same situation as with unpaid internships. If a company offers an unpaid internships, only people from privileged backgrounds can afford that (e.g. parents pay their bills) and people from poor background are missing out because they need to find a paid work often in completely different sector. That's why in many countries (for example in the UK) unpaid internships are illegal to level the playing field and to reduce the social divide.
> They aren't paying for it because the person who wrote it didn't want them to pay for it.
As I wrote above, in many places it is illegal. Everyone should be paid for their work even if they are privileged and don't want money (then they can send it to charity).
You are speaking like it was started by big companies to get free labor.
It was literally the opposite. It was started by people who wanted to share and have the source code so they could make changes and not be beholden to large companies.
You are literally complaining that about GIFTs! It is a gift that you can get the source code. You can use it, change it, learn from it. You are welcome!
You also keep associating open source to unpaid forced labor. What about hobbies?
Please tell me anywhere in the world where it is illegal to give away something I created.
It’s hard for me to believe you are not trolling. If you are not, I don’t know how to help you.
It is not illegal for me to work on a project then release it for free and a company to use it.
It’s not exploitative. It was my decision.
Also, in what countries is volunteering for free illegal?
Not royalties, but dues at least.
A DAO structure would work well, but not many people seem to see it as viable.
Like, if Y is controlled by the Y foundation which is in part funded by Z company, Y foundation isnt really getting a direct revenue stream from the software - thats the thing about open source software, you dont have a say in how its used, and you cannot force payment.
I think your read of the law on what is or isnt an internship is a wee bit of a hot take, but IANAL, and certainly not a UK Labor Lawyer.
For example 0.1% of 0 is 0 (https://en.wikipedia.org/wiki/Percentage)
Whoever gets the revenue from the software should be paying.
Regarding any constructs with foundations and other tax avoidance schemes, that's probably another topic.
At that point, what sets aside open source software from any other kind of software?