> 1. By changing the order of demultiplexing, it offers the option of remoting at
> a later time.
You can happily consider the unix syscall to be fd->read(buf, size) if you prefer, or fd->call(OP_READ, buf, siz). Its entirely semantics however you write it. it doesn't matter if its compiled into push and lcall (or int 0x80 in our case) or into a function call that does the int 0x80. The only time it becomes interesting is when you have hardware doors between nodes. And then read is just a libc wrapper anyway so you won't have to hit local kernel space
You are arguing ultimately about
struct foo *x x->op_read(buf, size) v foo[fd]->op_read(buf, size)
and if you look at Mosix that becomes extremely obvious for almost every unix API.