Many real-world systems are deeply embedded in the physical world and their operational behavior is determined in large part by a tight coupling between the system components and the physical environment. This project seeks to establish the scientific principles governing software for such physically-coupled systems by focusing on four challenges in the context of distributed sensing and control applications: 1) Support for physical context in the form of programming structures that enable application software to explicitly capture the state of the physical world as an observable in an embedded computation; 2) Formal methods for composing software modules that indirectly interact with each other through the physical world, and a run-time safety supervisor that provably enforces correctness of composition; 3) Programming structures to enable design and verification of applications with resource provisioning that is driven by and adapts to physical-world dynamics; 4) System software support for sharing physically-coupled sensor and actuator resources in distributed settings. In addition, educational techniques targeting the teaching of topics in physically-coupled computational systems are being explored by creating shared educational content in the form of self-contained reusable modules.