The convergence between telecommunications and computing offers new opportunities and challenges for a large market of innovative network-wide services. However, most assumptions about traditional asynchronous distributed services over Local Area Networks are being challenged over the Internet by technological advances along two lines. On one hand, the growth and pervasiveness of the Internet is enabling novel asynchronous services to a much larger community of users; this calls for a sharper attention to issues related to fault tolerance, flexibility, and customizability. On the other hand, the recent advances in the area of wireless and ad hoc networks and the availability of powerful portable info appliances at a reasonable price is fostering the diffusion of mobile computing, which provides support to nomadic users; and this calls for software architectures including context-aware components.

Software design methods for the new architectures are different not only for scalability, connectivity, heterogeneity, and autonomy, but specifically for the ability of dealing with dynamic and unpredictable changes of their underlying network environment relatively to the sites where applications are executed (e.g. with respect to network connectivity, lack of resources, node failures, network reconfigurations and so on). The essential point is that these applications must be capable of reacting and adapting to dynamic changes of their network environment.

Our goal is to identify proper tradeoffs to relieve the programmer as much as possible from the burden of dealing explicitly with low-level events taking place in the distributed system. Our researches concern three areas:

These three areas are indeed a comprehensive framework for network-aware programming that provides both methods and patterns to develop applications and certify their properties.