The goal of ubiquitous environments and applications is to simplify our interaction with interconnected software and hardware entities, and to allow the exploitation of the information that they gather and generate. The behavior of ubiquitous applications depends on the state and the availability of the software and hardware entities that compose the ubiquitous environment in which they are constantly evolving, as well as, the preferences and locations of users. Developing and executing ubiquitous applications is a difficult challenge that our approach attempts to address with the creation of the ApAM execution environment. Knowing that the execution environment is unpredictable, we believe that ubiquitous applications require a large amount of flexibility in choosing the components that compose the application, and that the composition should be automated. We propose an abstract and implicit description of the composition, where components and bindings are not explicitly described. This allows to incrementally building an application at runtime. The ApAM execution platform implements the mechanisms to achieve incremental composition and uses them to provide ubiquitous applications with the resilience and adaptability necessary to face unpredictable changes that originate in the execution environment. Resilience is a core property of our approach because it allows developers to easily build applications without the need to either describe nor predict the multiple adaptations required to support environmental disturbances which the applications will encounter. Our proposal offers the means of developing and executing applications with a high level of resilience in regards to their continuously evolving context. This is possible thanks to the mechanisms described in this dissertation that allow building and changing, at runtime, ubiquitous applications. These mechanisms are generic but can be extended or specialized in order to solve domain or application-specific issues.
APAM: An environment for the development and the runtime of ubiquitous applications