I would like to thank the members of the Distributed Software Engineering group for their advice and support. In
particular I would like to thank Naranker Dulay, my supervisor, Morris Sloman, Jeff Kramer and Jeff Magee, and
ex-members of the group, Steve Crane, Kevin Twidle and Hal Fossa, for many stimulating discussions. The research in presented in this thesis was funded by British Telecom through the Management of Multiservice Networks project. I would like to thank Ian Marshall, Paul McKee and Sohail Rana of British Telecom Laboratories,
for valuable feedback about the use of Midas and the Regent run-time frameworks.
The work presented in this thesis is built upon research performed over several years within the Distributed Software Engineering Group, especially the Darwin/Regis system and the TRACTA project.
The Regis system was originally developed by Jeff Magee, Stephen Crane and Kevin Twidle. The second version
of the Regis system was developed by Stephen Crane and the author. The runtime system presented in this thesis,
Regent, differs from Regis in several ways:
• Regis does not specify component interaction protocols separately from their implementation. Regis interaction protocols are defined solely by their implementation as C++ endpoint classes.
• Regis does not separate the concerns of application and presentation-layer protocols: endpoint classes are
responsible for marshalling messages and interfacing with the transport protocol stacks. Therefore, Regis
does not support the ability to plug application-layer protocol filters into a binding.
• Regis cannot generate marshalling code because there is no separate specification of the application-layer
protocol. Programmers writing endpoint classes must implement marshalling themselves. In practice, this
means that Regis endpoints can only transmit flat data structures.
The transport framework presented in this thesis is similar to that used by Regis. However, the model of control
and event interfaces is significantly different. Regis protocol layers pass control messages up and down the stack
to notify higher layers of significant events or request control operations from lower layers. Regent protocols provide control interfaces and JavaBean events that can be queried from higher in the stack. Regent allows bindings
to specific control and event interfaces to bypass layers that have no interest in those interfaces, while Regis control
messages must pass through all intermediate layers in the stack. The Regis transport framework does not support
the implementation of composite layers – layers defined solely as compositions of other layers – or provide a registry for giving stack descriptions well-known, human-friendly names.
The Darwin language was designed by Narankar Dulay, Jeff Kramer and Jeff Magee. The FSP notation and LTSA
model checker were designed and implemented by Jeff Magee, based on the work of Dimitra Giannakopolu, Jeff
Kramer and Sing-Chi Cheung.