How to be resilient

21 Apr 2020

The specification for ARPANET, the precurser for the internet, was a blueprint for building a computer network that could work even if severely damaged.

In general, an implementation must be conservative in its sending behavior, and liberal in its receiving behavior. That is, it must be careful to send well-formed datagrams, but must accept any datagram that it can interpret.

RFC 760: DOD Standard Internet Protocol, Information Sciences Institute, Jan 1980.

More succinctly:

TCP implementations should follow a general principle of robustness: be conservative in what you do, be liberal in what you accept from others.

RFC 761: DOD Standard Transmission Control Protocol, Information Sciences Institute, Jan 1980.

Now I’ve heard this before, phrased differently and in a different context. If you squint hard enough, Be conservative in what you do can be restated as Follow the rules perfectly or Do unto others as you would have them do unto you.

Be liberal in what you accept from others can be restated as Don’t expect others to follow the rules perfectly or Turn the other cheek.

Following the rules perfectly but not expecting others to creates a more resilient network, whether of computers or people.1 Resilient networks achieve more.

  1. Even pagans understood the concept: Marcus Aurelius wrote in Meditations 5.33 “Be tolerant with others and strict with yourself.”