It has been my impression that one of the advantages of Unix is not having to rewrite the userland each time you write a new kernel or port an existing one to a new platform.
It has been my impression that one of the advantages of Unix is not having to rewrite the userland each time you write a new kernel or port an existing one to a new platform.
It still draws quite a bit from Unix though, and provides a shim translating `/dev/proc` to `proc:` or whatever.
That's something new... So, for the N-th device type in addition to the device driver I might need 2*(N-1) translating drivers!
In any case, you only need 2N for translating both ways between file: and whatever: to get the same experience Unix does, and wherever that makes sense it is usually provided.
The win is of course that each of those protocols can be strongly typed and provide exactly all the operations that make sense for that protocol. Basically, think of all the things IOCTL does and give them their own names.
This elevates the mistake, and polishes the worst of the early Unix conceptual fuckups.
But it seems like for type safety, you wouldn't want different OS services with different API's to have the same type? If they aren't actually interchangeable, pretending they are with a common naming scheme is just a source of bugs.
block-device://sata/disk1/partition2
ethernet://eth1
usb://hid/keyboard1
i2c://temperature/chassis1
net://vpn1/node/somewhere/elseit can be used as a primitive typing layer