1 Introduction
In the software maintenance phase, programs are updated to correct faults, improve functionality, and adapt the software to changes in its execution environment. The typical software-update process consists of stopping the system to be updated, performing the update of the code, and restarting the system. Many applications, however, must run continuously and have maximum downtime requirements on the order of a few minutes per year [16]. For example, banking and telecommunication software systems have a prohibitive downtime cost. The situation is even worse for systems such as air-traffic controllers and life-support software, for which the interruption of the service is in general not an option. Furthermore, the number of application domains in which systems must deliver continuous reliable service during update is growing, and dynamic software updating is thus becoming an increasingly important issue.