Theseus

We explore in this project a novel approach to dynamically update server applications without restarting them (live updating).

In our approach, different versions of the code coexist in the system, but are isolated into distinct contexts. Contexts are first-class. The server can switch from one context to another incrementally in order to process incoming requests. Eventually, the update terminates when the old context is not used any longer and can be garbage collected.

The name of the project comes from Theseus’ paradox, which raises the question of whether an object that has had all its component parts replaced remains fundamentally the same object. In our case, is the software running merely a new version of the same application, or another application?