+++
title = "Interface"
glassblowers = ["cristobalsciutto.md"]
+++

Infrastructure accretes in the form of layers of abstractions. Each layer
builds on top of the prior one, using its metaphors to bootstrap more complex
ideas. This conceptual leap-frogging permits one to not work from scratch, and
as such multiply efforts. Critically, however, it becomes imperative to design
layers of infrastructure that retain an expansive space of possibilities.

Deeper layers of the infrastructural stack evolve at slower paces than higher
layers, simply because as more infrastructure gets stacked on top, changing too
quickly may cause the whole edifice to collapse. In other words, the more
others depend on you, the harder change becomes.

In order to change without affecting those that depend on you, it becomes
beneficial to define an *interface*, the contract of what you offer. As long as
the interface is consistent, it does not matter *how* the promise is fulfilled.
This is the positive side of a black box; you're able to swap it out as long as
the same things come out, given the same things going in.

If M different users interact with N different providers separately, each of
the MxN interfaces must be designed. If an intermediate standard is chosen,
then the M users interact with one standard, as do the N providers. Therefore,
only M+N interfaces are designed. The standard operates as a narrow waist,
reducing complexity. The prototypical example of a narrow waist is the Internet
Protocol (IP). Email, hypertext, domain resolutions, and more all interact via
the IP, which itself is implemented via copper cable, fibre optic, or radio.

Text and bytes are the two most important narrow waists in computing. The
computer uses raw bytes as a narrow waist between a variety of media (images,
text, video, 3D models, etc) and a variety of transmission and compression
techniques. An HTTP message transmits arbitrary data in the form of text or
bytes between a client and server. It does not matter what is in the payload.
Similarly, gzip can be used to encode any arbitrary sequence of bytes,
regardless if the file is a sequence of text or the RGB of an image.

* Ref: ![](bib:7817cc0f-a538-4c1d-872e-b2bbb874c094)
* Ref: https://www.oilshell.org/blog/2022/02/diagrams.html 
* Ref: https://www.ietf.org/rfc/rfc791.txt