How to design systems in which modules can be changed on the fly

``How to design systems in which modules can be changed on the fly'' by R. S. Fabry. In Intl. Conf. on Software Engineering, 1976.
Annotation: [by Steven Richman] Fabry introduces many of the basic concepts of dynamic upgrades. He proposes the use of pointer indirection to resolve code and data references to current versions. Data structures are upgraded lazily and can have their representations transformed arbitrarily during an upgrade. Because upgrades can introduce incompatibilities between code and data of different versions, data structures are tagged with version numbers. These numbers are checked before the execution of data access routines: if a data structure's version is not what a routine expects, then the out of date data or code is upgraded. Fabry makes no mention of quiescence or valid times at which upgrades can be safely applied; instead, he relies upon synchronization on data structure locks to control the progress and ordering of an upgrade's modifications. This scheme requires the restart of code segments that are older than the data they are trying to access, and therefore seems to not work if a side effect precedes a data structure access in a flow of execution.

BibTeX entry:

@inproceedings{fabry76design,
   author = {R. S. Fabry},
   title = {How to design systems in which modules can be changed on the fly},
   booktitle = {Intl. Conf. on Software Engineering},
   year = {1976}
}

Also see software upgrades publications by date.

Sameer Ajmani