It's worth noting that when you set up a pipeline of processes, each can spawn on its own core. Setting up task-oriented processes is an idea that still has a lot of power in it, whether you're talking about the "lots of tiny C utilities" approach or something more like Erlang.<p>While Pike doesn't mention it explicitly, I think the issue is that the context for "one tool per job" shifted from the shell (with Unix itself doing process management) to the Python runtime, the JVM, etc. This has its advantages and disadvantages. Working at the level of different processes, each can be written in its own language and rely on simple interfaces such as text-streams or structured files for communication. Within other contexts, everything can work with the same object system, process supervisor infrastructure, etc.