It was thus said that the Great Don Y once stated:
And it makes things so much easier to "load
balance" in a
multiprocessor design since you just move the thread to
a different processor and let the magic do its thing
(at a nontrivial cost, unfortunately).
I also worked at a software company porting Unix utilities to QNX and I
really like QNX and what can be done with it. I could use the modem on my
boss' computer to dial out without using *any* special software, just
specify the device on his computer (not only was the file system network
transparent, but you could use devices across the network). You could even
run a program on one computer, pipe the output to another program on another
computer and send the output to a third computer, all from the command line,
and all possible because QNX was built on a microkernel and had all this
functionality built in.
Exactly. Things are inherently "decomposed" so all you need is
a name service that lets you tag resources ("objects") and
an RPC protocol that extends the local messaging and you
"magically" have a distributed system. By extension, you
can move key threads from one machine to another depending
on how where its I/Os will be located and what percentage
of it's work is CPU bound vs. communication bound.
Sure, you can do the same in a monolithic kernel. But you
have to *add* structure to it to provide these features
and flexibility.