Programming languages are notations for the representation of algorithmic information, they are tools for 'programming-in-the-small' (DeRe76). System description languages are notations for 'programming-in-the-large'. Because software systems often exist in several versions simultaneously, a system description language must accomodate parallel versions of systems and permit the natural expression of the information sharing among those versions. The construction of software systems involves sequences of construction processes such as text editing, compilation, document production, linkage editing, and cross-reference generation. Automation of these processes has been impeded by the use of inadequate models of software construction and maintenance. As a result, the enforcement of design decisions described in a system description language has been left to human agencies.