DRAFT: Running Software: A Preliminary Hierarchy of Abstraction

Michael Stone, March 15, 2014, , (src), (all posts)

As I wrote a few months back, I’ve been thinking about how to run software. Since then, I’ve noticed:

  1. 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:

  1. As in manufacturing + product development, the intersecting waterfall/spiral seems to be a useful mental model for how to bring software together with hardware.
  1. 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).