I chuckled reading this, as we're trying to do exactly what you described at my current startup, https://github.com/kurtosis-tech/kurtosis ! More seriously, I've been mulling over the idea that humanity is going through a continual process of modularization and unification:
First came machines, to perform simple "computation" tasks.
Then came the computer with instructions to represent the generalized notion of computational work.
Then we wanted a way to DRY instructions so we got functions.
Then we wanted a way to package collections of functions so we got libraries.
Then we wanted a way to manage collections of libraries so we got package managers.
Then we wanted a way to distribute collections of packages so we got containers.
Now we're in a world where instantiating and configuring a collection of containers is error-prone, burdensome, and rarely portable.
Each level adds something (containers have the benefit of being language-agnostic), but the price is complexity.
I was secretly assuming that something like that is already being done. ;)
Recursion is fine and useful. What’s detrimental is if each layer defines conceptually same things in slightly different ways and with different terminology. Make a recursive format (like a file system) and be done with it (and/or extend it so that all levels can profit from the extension).
Yep, I agree. I've been chatting with a friend about Nix (I'm a novice) and it sounds like it has the capacity to treat many things as Just Files connected in a dependency web, which is cool.
First came machines, to perform simple "computation" tasks.
Then came the computer with instructions to represent the generalized notion of computational work.
Then we wanted a way to DRY instructions so we got functions.
Then we wanted a way to package collections of functions so we got libraries.
Then we wanted a way to manage collections of libraries so we got package managers.
Then we wanted a way to distribute collections of packages so we got containers.
Now we're in a world where instantiating and configuring a collection of containers is error-prone, burdensome, and rarely portable.
Each level adds something (containers have the benefit of being language-agnostic), but the price is complexity.