While work has been done on connectivity, mobility and general rendezvous systems for ubiquitous computing environments, research has been hampered by the lack of higher level application abstractions. To identify what these might be, we constructed a prototype ubiquitous computing environment which we call an Interactive Workspace, and observed how application writers attempted to use its facilities. We also identify system support issues for ubiquitous computing that differ from their counterparts in "traditional" single-node computing, and use them to guide the design of a set of abstractions to support ubiquitous computing applications deployed in spaces such as ours. Our implemented prototype meta-operating-system, iROS, and several applications in daily use on top of it, suggest that we have made progress toward the goal of pro-viding support for application-level ubiquitous computing abstractions in a way that is robust to transient failures, extensible, portable across installations, and easy to program. Finally, as we consider future work, we argue that the abstractions we identified—moving data around, moving interfaces around, and coordinating the behavior of existing monolithic applications—are fundamental to this style of ubiquitous computing generally.