Operating Systems
Recently I've been looking at Inferno and reading a bit about Plan 9 (there seems to be a lot written about Plan 9, and barely anything written about Inferno). Some of their ideas just really blew me away. I understood that everything was a file, and I understood that you could export things over 9P/Styx, and I knew that you could build up your own namespace. What I didn't realise was just how cool this is!
- Want to use the CDROM drive in that machine over there? Go mount it's device locally
- Your window manager provides windows as files. If you move them over the network, then you have remote display
- Your text editor provides it's world as a file, you can control it like that.
- Want to debug a process remotely? Just mount /proc over the network and attach a debugger to it.
- Networking is done via files, so want to use someone elses networing? Go mount their stuff locally!
- You can mount arbitary shell commands! neat! This is how ftpfs and friends work. Why oh why don't other OS's have FTPFSes?
I can't help but think tho, that there is something missing. I can move files around a network, but I can't move processes. Inferno has a virtual machine to abstract the hardware away, it's filesystem can abstract everything else away, but I can't move processes?
I want it so you don't ever "quit" an application, you can "close" it, but all that ever does is serialise the process to disk. When you run it again you just thaw the process and start up where it left off.
I want processes to be "checkpointed" like you would "autosave" today. Power outage? Thats ok, when the machine comes up again, you can revive your last checkpoint and continue from where you left off. If a process crashes you can restore it back to any previous checkpoint.
I want processes to migrate! I want to goto work and be able to pull my webbrowser to my machine at work and continue running it. Sure networking will have to round trip via my machine at home, but that's doable already with plan9 (see above).
When I shutdown my laptop, I want all my running programs to migrate onto my fileserver at home. There they might be serialised to disk, or they might continue running while I'm away. My IM client might be designed with two halves, a UI part which migrates onto my phone (via bluetooth) and the actual program which migrates to my file server (or desktop) and continues to communicate with it's UI thread over GPRS.
I want this to use my "Internet Drive" for disk storage. I want to write programs for this in a programming language like I described two posts ago. I want a pony.