Technology solutions are becoming utterly and increasingly dependent on software. Today, the functionality as well as economical value of most industrial systems and products such as cars, smartphones, and medical devices are realized in software as embedded systems. The reliability of these systems is fundamental to the functioning of our society, as evidenced by horric accidents reported inrecent years, e.g. involving auto-driving Tesla cars controlled by software. The current trend is that embedded systems will serve as an open platform to integrate an expanding number of software components, each or several jointly implementing a functionality. To be sustainable, future systems must support dynamic updates on demand over their operational life-time, e.g. in order to defend against upcoming security threats with software patches, and to enhance and customize their functionality according to the varying needs of individual users. To be feasible and to ensure the resulting systems stay safe, software updates must be performed in a component-wise and incremental manner without demanding re-designing or updating the whole system. As an example, cars offer a shared computing platform enabling new applications to be deployed over multiple smart sensors and electronic control units for better performance and new functionalities (e.g. more fuel-efcient engine control, lane following, pedestrian detection). For trips in Northern Europe, we may want to install applications for black ice- and elk-detection to drive safely; whereas, for trips in Southern Europe, software that optimizes regenerative breaking with hot batteries in humid conditions would be more useful. Another example is pacemaker. Over time (e.g. due to aging), a patient carrying such a medical device may develop a new heart problem. To treat the emerging disease, doctors may propose installing a new application instead of replacing the device with a new one, which may require an expensive surgery.
Unfortunately current design methodologies for embedded systems offer only limited support for software updates on systems in operation. Such updates are not possible today for systems like aircrafts since the resulting systems can not be guaranteed to stay safe. A crucial obstacle is that embedded systems built today are often impossible to modify or extend with new components after deployment due to their inadequate system architectures not prepared for updates. Any changes may crash the original system and/or jeopardize the safety of the resulting system. For smart phones, one may simply uninstall the new components. A car, on the other hand, is a highly safety-critical system, which must satisfy crucial safety and timing requirements on braking, driver assistance, etc. A single instance of violating such requirements may result in serious accidents or loss of human lives. While re-designing the system is not a feasible option, the existing approach today to extensively re-test the entire resulting system conguration in the lab for updates will not scale for future systems. The sheer number of possible system states and congurations prohibits testing them all. The mission of CUSTOMER is to change the way how today’s embedded systems are developed and provide the missing design paradigm and technologies for constructing embedded systems on composable architectures prepared for future (component-wise) modications, that can be updated on demand after deployment dynamically, safely and securely over their operational life-time.