A novel multi-version execution technique for surviving buggy software updates, whose key insight is to run the new software version in parallel with the old one.


Software systems are constantly evolving, with new versions and patches being released on a continuous basis. Unfortunately, software updates present a high risk, with many releases introducing new bugs and security vulnerabilities.

We tackle this problem using a simple but effective multi-version based approach. Whenever a new update becomes available, instead of upgrading the software to the new version, we run the new version in parallel with the old; by carefully coordinating their executions and selecting the behavior of the more reliable version when they diverge, we create a more secure and dependable multi-version application.

We have implemented this technique in Mx, a system targeting Linux applications running on multicore processors, and show that it can be applied successfully to several real applications such as GNU Coreutils, a set of user-level UNIX applications; lighttpd, a popular web server used by several high-traffic websites such as Wikipedia and YouTube; and Redis, an advanced key-value data structure server used by many well-known services such as GitHub and Flickr.


Media Coverage

Our research on Mx was covered by the New Scientist.

Research Support

This research project is generously sponsored by Google through a PhD Fellowship.