Virtualization separates hardware from software. The opportunities presented by this separation are startling. Long ago, engineers conceived virtualization as a tool for supporting multiple users on a single computer. A side effect of this separation was the possibility of providing significantly different and separate environments for each user. Eventually, virtualization came to support a rich environment for entire ecosystems of applications and services and became the foundation for cloud computing.