Overview
This is to prepare for discussion of an interesting topic that doesn't get enough attention: how do you build systems that work well even when software at the various communicating nodes isn't speaking quite the same language!
This can be a minor problem with any software system: perhaps a library is updated and when you link the new version your program does something unexpected, or you are surprised when your C compiler is updated to support a new version of the C standard. When software is connected across organizations and especially on an Internet-scale, the problems become very significant and very important. There are several inter-related reasons incompatibilities can arise:
- Internet-scale systems like the Web and e-mail provide for multiple implementations of the same functions: popular Web browsers include Firefox, Safari, Edge and Internet explorer; email clients include Outlook and Thunderbird; and Web servers include many variations of Apache-based systems as well as IIS and many others. It's rare for different implementations of a given function to be completely compatible.
- Specifications for protocols such as HTTP and formats such as HTML evolve over time, and different implementations will update at differing rates.
- Few implementations are bug free, and different implementations are likely to have different bugs or shortcomings. This is particularly true in the period immediately after specifications are revised.
- Users and IT departments make their own decisions on when to install updates, and those decisions are often tied to other things: installing a new version of Mac OS might get you a new version of Safari.
So, we are faced with a very big, critically important and in some ways surprising challenge: how can we build systems that work reasonably well even when endpoints don't agree on the rules for communicating!
One important though controversial perspective is attributed to Internet pioneer Jon Postel, who formulated what is sometimes called the Robustness Principle, but more commonly Postel's Law. There are a few minor variations of the phrasing, but typically:
"Be liberal in what you accept, and conservative in what you send".
Assignment
Please do the following (very short) reading in time for class, and be ready to discuss the good and bad implications of Postel's law.
Reading
Please read the following:
- Wikipedia entry on the Robustness Principle
- RFC 1122 Section 1.2 through subsection 1.2.2 only!
Optional reading
- You might want to take a look at the Wikipedia entry for Jon Postel
- Requiem for Jon Postel is a nice remembrance that was linked in an earlier assignment. Quoting from that obituary:
As the glue that held the Internet together for its first 30 tumultuous years, he will be sorely missed.
It's quite remarkable how much of the Internet as we know it today traces to the good work and high principles of a few individuals who cared.