open
design? The hint is "Keep secrets". But open design teaches
us to expose everything. Start with examples of ebstraction:
- TCP hides reordered delivery and packet duplication and loss.
- Client/server hides the implementation
- atomicity hides the compositeness.
And examples of open design (or where it should have been used):
- Open Source: Emacs, Linux, Apache, etc.
- IBM PC and SCSI were both open designs
- Crypto systems need it
- safety-critical systems need it (Therac)
- reverse: British law surrounding ATM's
From Frans Kaashoek: Another fun thing to do is to construct
a list of failed computer systems, and figure out why they
failed. In some cases the failed systems "violated" some of
Butler's hints; in other cases, the reason of failure is more
complicated. Nevertheless, making such a list is an interesting
exercise.
From Dawson Engler: A possibly missing hint: use indirection. Go through an intermediary to an object. Examples:
- High-level language is a kind of indirection between the program
and the underlying architecture
- Naming. Decouples identity from implementation.
- Virtualization--virtual memory, threads. Goes from physical/small-limits
to virtual and unlimited.
- Emulation. Use indirection to emulate old on new or vice-versa.
Forward compatibility--encapsulate new protocols inside old. Backward
compatibility--emulate new instructios on old architectures.
Aside: Is this paper mistitled? Just what is a hint, anyway?
See Hints versus Caches.
Comments and suggestions: Saltzer@mit.edu