Many important applications must run continuously and without interruption, yet must be changed to x bugs or upgrade functionality. To date, no existing dynamic updating system has achieved a practical balance between
exibility, correctness, ease-of-use, and low overhead. We present a new approach that provides type-safe dynamic updating of native code in an extremely
exible manner (functions and types may be updated, and at any time) and permits the use of automated tools to aid the programmer in the updating process. Our system is based around dynamic patches made up of proof-carrying code that both contain the updated code and the code needed to transition from the old version to the new. We discuss how patches are generated using a semiautomatic tool, how they are applied using dynamic-linking technology, and how code is compiled to make it updateable. To concretely illustrate our system, we have implemented a dynamically-updateable web server, FlashEd. We discuss our experience building and maintaining FlashEd. Performance experiments show that updateable FlashEd runs between 2 % and 6 % slower than a static one.
|
854
|
Proof-carrying code
– Necula
- 1997
|
|
730
|
The Java Programming Language
– Arnold, Gosling
- 1998
|
|
501
|
From system F to typed assembly language
– MORRISETT, WALKER, et al.
- 1998
|
|
401
|
Extensibility, safety and performance in the SPIN operating system
– Bershad, Savage, et al.
- 1995
|
|
287
|
Extended static checking for Java
– Flanagan, Leino, et al.
- 2002
|
|
266
|
A type-theoretic approach to higher-order modules with sharing
– Harper, Lillibridge
|
|
152
|
PLAN: A packet language for active networks
– Hicks, Kakkar, et al.
- 1998
|
|
138
|
An API for Runtime Code Patching
– Buck, Hollingsworth
- 2000
|
|
133
|
Program fragments, linking, and modularization
– Cardelli
- 1997
|
|
129
|
TALx86: A realistic typed assembly language
– Morrisett, Crary, et al.
- 1999
|
|
118
|
Decentralized model for information flow control
– Myers, Liskov
- 1997
|
|
109
|
O'Toole Jr. Exokernel: An operating system architecture for application-level resource management
– Engler, Kaashoek, et al.
- 1995
|
|
73
|
What is a recursive module
– Crary, Harper, et al.
- 1999
|
|
72
|
Flexible type analysis
– Crary, Weirich
- 1999
|
|
71
|
Concurrent Programming in Erlang
– Virding, Wikstrom, et al.
- 1996
|
|
69
|
Type-Safe Delegation for Run-Time Component Adaptation
– Kniesel
|
|
61
|
PLANet: An active internetwork
– Hicks, Moore, et al.
- 1999
|
|
54
|
Runtime Support for Type-Safe Dynamic Java Classes
– Malabarba, Pandey, et al.
- 2000
|
|
43
|
A secure PLAN
– Hicks, Keromytis
- 1999
|
|
42
|
Dynamic C++ Classes: A Lightweight Mechanism to Update Code in a Running Program
– Hjalmtysson, Gray
- 1998
|
|
41
|
A formal framework for on-line software version change
– Gupta, Jalote, et al.
- 1996
|
|
39
|
On dynamically updating a computer program: From concept to prototype
– Segal
|
|
39
|
The development of Erlang
– Armstrong
- 1997
|
|
33
|
Dynamic Module Replacement in a Distributed Programming System
– Bloom
- 1983
|
|
32
|
Type-based hot swapping of running modules
– Duggan
- 2001
|
|
28
|
Reconfiguration and module replacement in Argus: Theory and Practice
– Bloom, Day
- 1993
|
|
26
|
A Web navigator with applets in Caml
– Rouaix
- 1996
|
|
21
|
Towards flexible and safe technology for runtime evolution of java language applications
– Dmitriev
- 2001
|
|
20
|
Dynamic ML without dynamic types
– Gilmore, Kirli, et al.
- 1997
|
|
20
|
On-line Software Version Change
– Gupta
- 1994
|
|
18
|
Extending the scope of syntactic abstraction
– Waddell, Dybvig
- 1999
|
|
17
|
DITools: Applicationlevel Support for Dynamic Extension and Flexible
– Serra, Navarro, et al.
- 2000
|
|
17
|
mod-a language for distributed programming
– Cook
- 1980
|
|
13
|
Adding new code to a running C++ program
– Dorward, Sethi, et al.
- 1990
|
|
7
|
Active networking means evolution (or enhanced extensibility required
– Hicks, Nettles
- 2000
|
|
7
|
An experimental telephony switching language
– Armstrong, Virding
- 1991
|
|
6
|
Principled dynamic code improvement
– Peterson, Hudak, et al.
- 1997
|
|
6
|
Linking programs in a single address space
– Deller, Heiser
- 1999
|
|
5
|
Monsters in a box
– Pescovitz
- 2000
|
|
4
|
Scalable certi for typed assembly language
– Grossman, Morrisett
- 2000
|
|
4
|
Safe and dynamic linking of native code
– Hicks, Weirich, et al.
- 2000
|
|
3
|
Hot-sliding in ML
– Appel
- 1994
|
|
3
|
Recon and module replacement in Argus: Theory and practice
– Bloom, Day
- 1993
|
|
3
|
Reppy. Concurrent Programming in ML
– John
- 1999
|
|
3
|
An abstract machine for module replacement
– Walton, Kirli, et al.
- 1998
|
|
2
|
On-the- program modi Systems for Dynamic Updating
– Segal, Frieder
- 1993
|
|
2
|
Java distributed run-time updating management system. http: //www.ida.liu.se/~jengu/jdrums
– JDRUMS
- 2003
|
|
1
|
DYMOS: A Dynamic Modi System
– Lee
- 1983
|
|
1
|
Flash: An ecient and portable webserver
– Pai, Druschel, et al.
- 1999
|
|
1
|
3] Typed assembly language homepage
– Alexander
- 1999
|