Darwin is an architecture description language (ADL). It can be used in a software engineering context to describe the organisation of a piece of software in terms of components, their interfaces and the bindings between components.
Darwin encourages a component- or object-based approach to program structuring in which the unit of structure (the component) hides its behaviour behind a well-defined interface. Programs are constructed by creating instances of component types and binding their interfaces together. Darwin considers such compositions also to be types and hence encourages hierarchical composition. The general form of a Darwin program is therefore the tree in which the root and all intermediate nodes are composite components; the leaves are primitive components encapsulating behavioural as opposed to structural aspects.