  Software that cannot evolve 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 software systems we
have defined an active software architecture to be: dynamic in that the
structure and cardinality of the components and interactions are changeable
during execution; updatable in that components can be replaced; decomposable in
that an executing system may be (partially) stopped and split up into its
components and interactions; and reflective in that the specification of
components and interactions may be evolved during execution. 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 that can be used for
introspection; a decomposition operator to incrementally break up executing
systems; and structural reflection for creating new components and binding them
into running systems.
