Butler W. Lampson
Hints for Computer System Design
Ninth ACM Symposium on Operating Systems Principles
in Operating Systems Review 17,5 (October 1983) pages 33-48.
Later republished, but with less satisfactory copy editing,
in IEEE Software 1,1 (January 1984) pages 11-28.
(C) 1983 ACM 0-89791-115-6/83/010/0033 $00.75
[BibTeX versions at end of page.]
| WHY? | Functionality Does it work? |
Speed Is it fast enough? |
Fault-tolerance Does it keep working? |
| WHERE? | |||
| Completeness | Separate normal and worst case | Safety first Shed load End-to-end |
End-to-end |
| Interface | Do one thing well: Don't generalize Get it right Don't hide power Use procedure arguments Leave it to the client Keep basic interfaces stable Keep a place to stand |
Make it fast Split resources Static analysis Dynamic translation |
End-to-end Log updates Make actions atomic |
| Implementation | Plan to throw one away Keep secrets Use a good idea again Divide and conquer |
Cache answers Use hints Use brute force Compute in background Batch processing |
Make actions atomic Use hints |
Experience with the design and implementation of a number of computer systems, and study of may other systems, has led to some general hints for system design which are described here. They are illustrated by a number of examples, ranging from hardware such as the Alto and the Dorado to applications programs such as Bravo and Star.
There probably isn't a best way to build the system, [...]
much more important is to avoid choosing a terrible way.
From this experience come some general hints for designing successful
systems.
I claim no originality for them; most are part of the folk
wisdom of experienced designers. Nonetheless, even the expert often
forgets [...].
These [...] are just hints. Some are quite general
and vague; others are specific techniques which are more widely applicable
than many people know. [...] oversimplified [...] controversial.
Perfection is reached, not when there is no longer anything to add, but when there is no longer anything to take away. (A. Saint-Exupery)An interface should capture the minimum essentials of an abstraction. Don't generalize; generalizations are generally wrong.
@ARTICLE{ LampsonHints83,
author = "Lampson, Butler W.",
title = "Hints for Computer System Design",
journal = "Operating Systems Review",
publisher = "ACM",
year = 1983,
month = October,
volume = 17,
number = 5,
pages = 33-48,
note = "{\em Ninth ACM Symposium on Operating Systems Principles}.
Later republished, but with less satisfactory copy editing,
in {\em IEEE Software} 1,1 (January 1984) pages 11-28."
}
@ARTICLE{ LampsonHints84,
author = "Lampson, Butler W.",
title = "Hints for Computer System Design",
journal = "IEEE Software",
year = 1984,
month = January,
volume = 1,
number = 1,
pages = 11-28,
note = "This is republished, with less satisfactory copy editing, from
{\em Ninth ACM Symposium on Operating Systems Principles} in
{\em Operating Systems Review} 17,5 (October 1983) pages 33-48."
}
History: 1999.Mar.03 Noticed Butler now has it online. 1997.Jan.02 Written.