  Software that cannot change is condemned to atrophy: it cannot accommodate
the constant revision and re-negotiation of its business goals nor intercept
the potential of new technology. To accommodate change in such systems we have
defined an active software architecture to be: dynamic in that the structure
and cardinality of the components and interactions are not statically known;
updatable in that components can be replaced dynamically; and evolvable in that
it permits its executing specification to be changed. Here we describe the
facilities of the ArchWare architecture description language (ADL) for
specifying active architectures. The contribution of the work is the unique
combination of concepts including: a {\pi}-calculus based communication and
expression language for specifying executable architectures; hyper-code as an
underlying representation of system execution; a decomposition operator to
break up and introspect on executing systems; and structural reflection for
creating new components and binding them into running systems.
