Modern computing technology is creating a growing infrastructure for high performance, nearly ubiquitous computing and communication. This infrastructure extends the reach of computation and information beyond the traditional framework of a computer application running on a fixed set of machines. The architectures that suffice for such traditional software systems that depend on resources controlled by someone other than the developer. I will discuss the architectural challenges of this new setting, describe some promising approaches to handling those challenges, and suggest some research strategies for exploring and developing solutions.