The focus of computing has been continuously shifting from programs to systems over the past decades. Programs can be represented as relations independent from the physical resources needed for their execution. Their behavior is often terminating, deterministic and platform-independent. On the contrary, systems are interactive. They continuously interact with an external environment. Their behavior is driven by stimuli from the environment, which, in turn, is affected by their outputs.
Modern computing systems break with traditional systems, such as desktop computers and servers, in various ways: 1) they are instrumented in order to interact with physical environments; 2) they are interconnected to allow interaction between people and objects in entirely new modes; 3) they must be smart to ensure predictability of events and optimal use of resources. Currently, we lack theory methods and tools for building trustworthy systems cost-effectively.