My previous company, which made high-availability (Active/Standby) routers for mobile networks, used QNX as the OS. I remain impressed by its capabilities.
My memory is rusty, but we ran QNX on the control-plane processors, and it natively allowed launching processes on remote processors over the internal network of the router. That is: their low-level IPC was IP-capable. QNX's IPC was essential for our HA failover functionality.
Also, device drivers as user-space processes that you could restart on crash was great (we were developing our network drivers, so this would occasionally happen). Also, better respect for devices actually showing up in the /dev/ tree, unlike Linux where network devices are a notable exception.
One funny story, I once spent days debugging an issue which turned out to be due to me accidentally marking const the return values of some IPC, which caused my process to crash in between QNX's IPC function and mine! Whatever level of debugger (C/userspace) I was using at the time could not catch the error ^^;
> it natively allowed launching processes on remote processors over the internal network of the router
This was already possible in CP/NET (https://en.wikipedia.org/wiki/MP/M#CP/NET) or CP/J with JUNET [https://pl.wikipedia.org/wiki/JUNET_(CP/J)].
I also worked on routes for mobile networks. Everything ran Linux, especially the control plane. Line cards were also linux, but the only task they had to do is to program the ASICS as the control plane told them to do. None of those features are relevant, you could do the IPC over HTTP or whatever you wanted.