An infrastructure for runtime evolution of software systems