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.

Overview

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.

Teaser


Media Coverage

Our research on Mx was covered by the New Scientist.

Research Support

This project has received funding from the UK Engineering and Physical Sciences Research Council through a CDT studentship, and from the European Research Council under the European Union’s Horizon 2020 research and innovation program (grant agreement 819141).

Publications