But there is a big difference. These small targeted programs are invoked in user land, usually by the user. Microservices get invoked directly by the user when debugging is going on. Otherwise they are expected to automagically talk to each other and depending on the abstraction even discovery each other automatically.
Also I can pipe these tools together from the same terminal session, like
tail -f foo | grep something | awk ...
You don't have that in general with Microservices. Unix tools are Lego, Microservices aren't. They are Domino at best.
Probably one could come up with an abstraction to do Lego with Microservices but we're not there yet.
And they can be a right mess to wrangle because upstream gets into some artistic frenzy, and shouts down anyone that worries about the ensuing breakages as luddites and haters.
And still nobody would argue to pack everything together into one executable because of these issues. As everything in software engineering, it is about finding the right trade-off.
The big problems with microservices come from distributed transactions being difficult and clocks getting out of sync. Multiple services on a single machine don't have that problem.
Also I can pipe these tools together from the same terminal session, like
You don't have that in general with Microservices. Unix tools are Lego, Microservices aren't. They are Domino at best.Probably one could come up with an abstraction to do Lego with Microservices but we're not there yet.