David Chisnall has written a good article on limitations of Unix. It is well worth a read if you want to think about the limitations of a good, mature operating system. From the thinking I've done about it, David's analysis seems quite on.
Many of the followup comments show a shallow reading that I hope is not representative. Unix is good, but David's suggestions seem accurate.
On a particular couple of points that were dismissed in the comments:
Additionally, I have to disagree with types per se as the way forward. If you take Smalltalk and treated it as an operating system, then most of David's requests would be answered immediately. The answer, it seems to me, is more about using language instead of types per se. It just so happens that a big chunk of language researchers these days are type enthusiasts.
Finally, the best way forward seems to involve POSIX compatibility. Swapping in a microkernel at a low level sounds helpful, because then existing programs could run but smarter programs could use the better interaction mechanisms. Another trick that is worth thinking about is that some Unices, including Linux, now allow using /dev/fd/nnn pseudofiles as a way to convert between file names and file descriptors. File descriptors allow richer interactions between programs than stdin/stdout, but many existing programs want to see file names instead of descriptors, so this provides a way forward.
But the most important thing of all for moving forward is that the people spending their time building tools need to be aware of what is possible and what the limitations are. Posts like David's are essential to spread this awareness.