How will the sensors and actuators be composed with each other, with networks, and with software services? More interestingly, how will they be continuously recomposed when resources, demand for services, and priorities change dynamically? Today, programming models rely on testing for validation--but testing is not an option for on-line reconfiguration. The only viable alternative is formal design techniques; changes made to a design, either before or after deployment, must have predictable consequences. This task broadens the notion of a "programming model" to encompass physical components, rather than just logical functionality, and will provide programming models that operate on sensors, actuators, network resources, and computational resources (memory and processors) as components in the programming model, together with formalisms for composing these components to build (and rebuild) applications.