From inter-connected medical devices, traffic lights and autonomous vehicles, to air-traffic control systems, data centres and large-scale enterprise applications, software systems of varying levels of complexity are increasingly being used to either control or support essential business services and operations. Ongoing advances in various edge-oriented computing paradigms, inclusive of the Internet of Things (IoT), Edge computing, Fog computing and others, have served to significantly increase the complexity and ubiquity of these software systems (indeed, the IoT paradigm can be seen as an evolution of ubiquitous computing from the 1990s), and, as a result of this, to make them more critical. Given their criticality, in addition to being able to resist malicious attacks (security) and handle accidental failures (reliability), the resilience of such systems, namely, their ability to `bounce back’ from both attacks and failures and autonomously maintain operation, is becoming increasingly important. Going beyond resilience, in some situations (e.g. in highly dynamic, unpredictable environments) it is also desirable, and sometimes even essential, for software systems to have the ability to improve their own functionality and `bounce back’ even more resilient than before. This characteristic is termed antifragility.
Both resilience and antifragility can be achieved through a variety of means, but one particularly promising approach is to apply techniques from autonomic and/or self-adaptive computing – realizing various self-* properties via adaptation, including the special property of self-improvement via meta-adaptation – in conjunction with AI and other research areas such as distributed computing and software engineering.