As I wrote a few months back, I’ve been thinking about how to run software. Since
then, I’ve noticed:
- As with networking, the static parts of the end-to-end task of
“running software” seem to be usefully decomposable into a hierarchy of
layers of abstraction like so:
- As in manufacturing + product development, the intersecting
waterfall/spiral seems to be a useful mental model for how to bring
software together with hardware.
- Curiously, even though it has historically been the case that
different languages are used both within and between layers, I find that
I am increasingly enjoying systems that impose more uniformity, both for
in-layer work (like, e.g., Golang and GCL)
and for between-layer configuration (like Nix).