systems, many approaches have been proposed for building software that can dynamically
adapt to its environment. These adaptations involve not only changes in program flow, but
also run-time recomposition of the software itself. We discuss the supporting technologies
that enable dynamic recomposition and classify different approaches according to how,
when and where recomposition occurs. We also highlight key challenges that need to be …