Good read, Mark!
Regarding OSes: Do you like Urbit?
Regarding programming: The idea “that all you need are low level primitives and communication” is similar to what Steve Freeman identifies at the beginning of his book “Growing Object-Oriented Software: Guided by Tests”, in that he describes a stricter paradigm of objects communicating to other objects. (I know I just said OO, but I’m building a metaphor, stick with me…)
A lot of the time, OO programmers have left the communication part out of their design. Or worse, just let the code generators do all their getting & setting for them. That’s okay if the boilerplate is helpful, but it seems to lead to code bloat and inefficient or no communication, where object inheritance is the main (only) consideration of the application design. And even then over time it becomes brittle. It smacks of laziness, tunnel vision, and immaturity. A lot of time OO programmers learned it one way, and they don’t know what they don’t know.
At some point, applications do need objects. But they should react and respond to events. If done well, OO could work. I’ve never seen it done well.
Do we really need the low-level primitives? For max speed & min memory: yes. For the daily developer? no.
I, for one, am glad that OO is so poorly implemented that functional first programming is the fresh air needed to eradicate mouldering code bases.