Few real software systems are built completely from
scratch nowadays. Instead, systems are built
iteratively and incrementally, while integrating and
interacting with components from many other systems.
Adaptation, reconfiguration and evolution are
normal, ongoing processes throughout the lifecycle
of a software system. Nevertheless the platforms,
tools and environments we use to develop software
are still largely based on an outmoded model that
presupposes that software systems are closed and
will not significantly evolve after deployment. We
claim that in order to enable effective and graceful
evolution of modern software systems, we must make
these systems more amenable to change by (i)
providing explicit, first-class models of software
artifacts, change, and history at the level of the
platform, (ii) continuously analysing static and
dynamic evolution to track emergent properties, and
(iii) closing the gap between the domain model and
the developers' view of the evolving system. We
outline our vision of dynamic, evolving software
systems and identify the research challenges to
realizing this vision.