For many modern software systems, constant availability is a key requirement. At the same time, such systems are often subject to frequent updates, including security patches and feature improvements. Applying such updates by stopping, patching, and restarting the system results in an unacceptable loss of availability. Dynamic Software Updating (DSU) is a general-purpose technique for patching stateful software without shutting it down, which enables both timely updates and non-stop service. Over nearly 20 years, we have been researching how to build practical, general-purpose DSU systems, which are safe, efficient, and easy to use. We have been exploring semantic foundations, analyses, and implementation techniques toward meeting this challenge in a variety of domains.

We have developed two general-purpose frameworks, Kitsune and Rubah, for expressing dynamic updates to C and Java applications, respectively. Recently, we have been looking at dynamic updating support for the co-evolution of databases and the applications that use them. Previously, we developed Kvolve, a framework to support upgrades to Redis databases. We are currently developing Bullfrog, a relational database management system based on Postgres that supports dynamic schema migration.

Selected publications related to this project (see Michael Hicks’ publications for a complete list):