Run-time Evolution for Embedded Component-Oriented Systems Yves Vandewoude Department of Computer Science KULeuven Celestijnenlaan 200A B-3001 Leuven, Belgium email: Yves.Vandewoude@cs.kuleuven.ac.be Yolande Berbers Department of Computer Science KULeuven Celestijnenlaan 200A B-3001 Leuven, Belgium email: Yolande.Berbers@cs.kuleuven.ac.be ABSTRACT This position paper describes ongoing work in which the Java-based SEESCOA component system is extended with functionality for run-time evolution. First, an assessment is made of the state-of-the-art in dynamic updating, and the applicability of existing systems for dynamic updating is ex- amined. Then a new approach is presented, in which the concept of ports is used to redirect messages between com- ponents. The problem of class-file reloading in the JVM is avoided by modification of the classes at load-time to in- clude version information. The predictability requirement of embedded systems is assured by updating all component instances at once. KEY WORDS Dynamic Updating, Embedded Systems, Component Sys- tems 1 Introduction Run-time evolution is defined as the ability to change part of the system’s functionality or structure during its execution. Changing a program without stopping it opens up a wide range of opportunities such as fixing bugs, adding function- ality, software distribution to name a few. In addition, live updates can lead to significant performance enhancements through run-time optimization. Since run-time change is far from trivial to accomplish, designers traditionally sought alternatives to circumvent the need for it: regularly scheduled downtimes and redundancy are frequently used. However, in many cases redundant hardware is not present since they add to cost and complex- ity. In particular, embedded devices (characterized by their long life cycle) often require, and can always benefit from seamless upgrading of their software. Dynamic software evolution would allow the system to adapt its functionality in response to frequent changes in the device’s context. Although embedded systems have a history of low level design in which reuse and maintainability often are sac- rificed for speed and efficiency, research on component- oriented development of embedded software is a hot topic. For software engineers, component-oriented development integrates the object-oriented mechanisms for composition and reuse with other features as concurrency, persistence and distribution. Users benefit from tailor made function- ality through adaptation of ready-made components. Per- haps the intention of Nokia to release 100 million Java- enabled units by the end of 2003 ([14]) illustrates best that in the near future embedded applications are not necessarily low-level applications. After all, the significantly reduced time-to-market and development costs, fit extremely well in the context of large-scale distributed systems and are excel- lently suited for mass deployment. However, genuine reuse requires a formal definition of a component. In the context of SEESCOA 1 , a cooperation project between the KULeuven and other Belgian universi- ties, a component architecture was developed for embedded systems. One of the merits of SEESCOA is establishing a formal definition of a component and introducing an ap- proach on the connection of different components ([15]). In addition, a tool to support component-oriented design (the CCOM tool: [16]) and a run-time environment were developed. A final objective of the project is to extend the component-architecture to support dynamic reconfigu- ration. In the context of run-time evolution, a distinction is made between functional and structural changes. Whereas func- tional changes include the addition of new code to a run- ning system in order to modify its functionality, structural changes refer to reconfigurations that change the relation- ship between different components of the system, or repli- cate portions of the application for execution on a different machine. Further distinctions are made between programmed mod- ifications (foreseen during design-time) and unanticipated changes (discovered after the deployment of the system). For the SEESCOA component system, we are mainly inter- ested in functional and unanticipated changes. 1 SEESCOA stands for Software Engineering for Embedded Systems using a Component-Oriented Approach. The project is funded by the Bel- gian IWT.