  We study the dynamic software update problem for programs interacting with an
environment that is not necessarily updated. We argue that such updates should
be backward compatible. We propose a general definition of backward
compatibility and cases of backward compatible program update. Based on our
detailed study of real world program evolution, we propose classes of backward
compatible update for interactive programs, which are included at an average of
32% of all studied program changes. The definitions of update classes are
parameterized by our novel framework of program equivalence, which generalizes
existing results on program equivalence to non-terminating executions. Our
study of backward compatible updates is based on a typed extension of W
language.
