Stable and dependable IT services and infrastructures are nowadays of paramount
importance not only for modern enterprises but also for home users. However, as
distributed information infrastructures continue to spread and grow, resulting in
Internet-based, wireless and mobile systems, traditional solutions for managing and
controlling the software that sustains them appear to have reached their limits. As
a result, new challenges in software engineering have arisen demanding reliable,
robust and scalable software systems operating in extremely dynamic and unstable
environments, able to take care of themselves with a minimum of user intervention.
The main issue is that engineers of contemporary software systems and services
can now only seldom rely on centralised control or management, high reliability of
devices, or secure execution environments. For example, high-speed Internet connections,
ad hoc sensor networks and ubiquitous computing devices have made possible
to embed millions of sophisticated software components into interconnected
and dynamically changing local environments. In such cases, centralised and deterministic
control is practically impossible or at best prohibitively expensive. As a
result, a natural solution to the problem can be building software systems capable of
efficiently adapting to failures, component replacements and changes in the environment,
without human intervention or centralised management. In other words, such
systems should be able to autonomously change their organisation, or self-organise,
as and when needed until they achieve, or emerge to, a satisfactory or selected state.
Self-organisation and emergence phenomena have long been observed in numerous
natural systems, both living and non-living. Examples are the social order observed
in human and animal social systems and the ordered orientation of magnetic
spins appearing with lowering temperature in magnetic materials. As of recently,
the idea that self-organisation and emergence can be harnessed for the purpose of
solving tricky engineering problems inherent in modern IT systems has become increasingly
popular. Researchers working in many diverse IT fields, such as computer
networks, distributed software systems, operating systems and software agents, have
begun to apply these ideas in a variety of problems with quite promising results.