Luís Pina

Practical Dynamic Software Updating

| PDF | slides |

Luís Pina
PhD Dissertation, Instituto Superior Técnico, University of Lisbon
February, 2016


Updating a program is unavoidable to fix bugs, add features, or improve performance. This is, however, a disruptive operation that involves stopping and restarting the running program, with the side-effect of service downtime and data loss. The ability to update a program without stopping it — to perform a Dynamic Software Update — is thus increasingly important in a world where service downtime and data loss map directly to loss of revenue. There are, of course, highly-available systems that simply cannot stop and already support dynamic updates. These systems, however, rely on redundant hardware, already present for fault tolerance, to incrementally update some machines while others keep providing the service. These approaches employ complex and domain-specific algorithms that restrict the flexibility of updates. The research community has focused on this problem and produced a vast body of work. However, to date, there is no practical solution for dynamic software updating. In this work, I propose the first practical solution for Dynamic Software Updating for languages that run in a managed environment, in particular, Java. The approach I propose supports unrestricted changes between successive program versions and does not limit the updatable program from using any language or runtime feature. Moreover, it does not add any steady-state overhead and requires only a short pause in program execution to perform an update (that is not proportional to the size of the program state). I propose updates to be supported explicitly as program features. Therefore, the developer needs to change their application to support updating it. The solution I propose minimizes the required manual changes and automates most of the code that describes each update. Furthermore, given that the developer may inadvertently introduce errors, only visible during the update process, the approach I propose provides a way for the developer to re-use existing system tests, and write new ones, that ensure that the updated program behaves as expected after an update.


  title     = {Practical Dynamic Software Updating},
  author    = {Pina, Lu\'{\i}s},
  school    = {Instituto Superior T\'{\e}cnico, University of Lisbon},
  year      = {2016},
  month     = FEB,
  location  = {Lisbon, Portugal},