Chisel

My PhD research:

"Completely Unanticipated Dynamic Adaptation of Software"

Dynamic adaptation of software behaviour refers to the act of changing the behaviour of some part of a software system as it executes, without stopping or restarting it. It is difficult to dynamically adapt software if the need for adaptation arises while the software is executing, and especially so if the program is compiled and the source code is unavailable. Ideally, it would be possible for adaptations to be applied to a running application without any anticipation of the adaptation itself, preparation of the location for that adaptation, or even anticipation of the need for some adaptation. Even with the best planning and foresight it is virtually impossible to anticipate at design and production stages all of the dynamic behaviour adaptations that may be required for a piece software, especially if the need for adaptation is triggered by unpredictable and erratic changes in the operating context, the application's resources and demands, and the users’ requirements.

The need for dynamic adaptation arises in various circumstances, from the very simple desire to dynamically customise a piece of software to suit current needs, through to a necessity to continually evolve a long-running program as its requirements and operating context change. These adaptations may simply involve pre- or post-processing of operations, for example, to support consistency checking, through to dynamically adapting the core behaviours of an application as its operating context or requirements change, for example to support dynamic upgrading or repair of the system. While it may be necessary to adapt the core functional behaviours of an application, it may also be necessary to change or insert new non-functional behaviours that do not change what the software does, but rather how it does it. Examples here include dynamically inserting debugging or tracing statements, through to making some object in an application persistent or remotely accessible. To perform these changes it should not be necessary to restart the application, or indeed have access to the source code of the application since the core problem domain being modelled by the application has not changed. If dynamic adaptation is to be completely unanticipated, the management and control of the adaptation process must also be dynamically adaptable. It is unrealistic to expect an adaptation framework using a hard-coded, static, or inflexible approach to adaptation management, to perform adequately in a generalised manner. Only by decoupling the adaptation mechanism from the adaptation control, and dynamically specifying and adapting the adaptation control strategies, can completely unforeseen dynamic adaptation of running software become a realistic goal.

The PhD thesis presented the Chisel adaptation framework, and demonstrated that a general-purpose, context-aware dynamic adaptation framework was achievable. This system could be used to perform almost any unforeseen behavioural adaptation without stopping the application, without changing the application itself, and indeed without access to the application's source code. In this system a human-readable, dynamically updatable policy script was chosen as the favoured approach to drive the adaptation mechanism in a responsive manner by monitoring changes in the user, application, and environmental context. The Chisel framework also demonstrated that behavioural reflection, using the managed but unforeseen dynamic selection of reflective behavioural changes, remains a valid and powerful technique for completely unanticipated dynamic software adaptation. To evaluate Chisel and validate our claims, a number of examples and case studies were used, including the use of the Chisel framework to dynamically adapt an off the shelf network application, as it ran, to use ALICE, a middleware for mobile computing environments, and how, using behavioural reflective techniques to implement a snap-on non-functional behaviour to implement a naming mechanism for individual objects, those named objects could be individually adapted or queried as unanticipated context sources.