Virtual PC software, or desktop virtualization, is an end-user implementation of virtual computing in which a desktop application (rather than a server) is used to emulate a PC. The emphasis here is on direct interaction with the virtualized machine as if it were a local PC, rather than simply emulating computing power for the sake of server-based apps.
Some of the common uses for virtual PC software include:
Software testing / sandboxing. A user may want to try out a piece of software in an isolated fashion, to ensure that production systems or data aren’t compromised. Previously, this might have involved setting up a whole separate physical machine to do the testing, or creating a separate instance of an OS on the same machine (accessed via a dual-boot). A virtual machine can run software—a single program, an entire OS, or both—in isolation, so that any activity is confined to the VM.
Virtual appliances. Many server-side applications are available in virtual-appliance versions. These are VM images that include an OS (Linux, typically) and a copy of the application pre-loaded, so the whole thing can be deployed and run by simply booting the VM and connecting to it over the network. WordPress, SugarCRM, Joomla! and Drupal, just to name a few such apps, all exist in virtual-appliance editions.
Backwards compatibility. Some apps written for a current version of an operating system may not work in earlier versions, or vice versa. Running the app in a VM allows it to be run on the exact revision of OS needed. Windows 7’s XP Mode uses this: a full copy of Windows XP runs in a VM, letting you use applications or device drivers that cannot run in Windows 7.
Over the past decade, as the cost of the hardware needed to perform virtualization has dropped, the number of end-used/desktop VM programs has grown. Here are the most common and widely used, with some discussion of their feature sets. (Not included here are server-level virtual-machine subsystems like Xen, which have no direct desktop incarnation.)
VMware. The first and most widely-recognized VM solution has since spawned a whole family of incarnations, from server-virtualization systems to a variety of desktop editions designed for different uses. VMware Player, the most basic version, does little more than let you create and run virtual machines, either newly-created ones or pre-packaged VM images, but for most people it provides enogh functionality to get by.
The higher-end product VMware Workstation adds professional features: 3D graphics, support for more processors (virtual or physical), in-machine debugging for software developers, machine-state snapshots, and so on. Player is free to use; Workstation is US$189 a seat.
VirtualBox. Oracle’s (formerly Sun’s) personal VM solution includes much of the functionality of VMware Workstation, but in a free-to-use / open source implementation that runs on and hosts multiple OSes. It is not quite as polished as VMware in some respects, but each successive revision has added functionality (e.g., multicore guests), speed and improved native compatibility with a wide range of operating systems. It also includes in its free-to-use version a number of features that aren’t available in VMware Player, such as snapshotting. Among the add-ons and extensions available for VirtualBox are a web interface written in PHP that allow remote control of headless servers.
Virtual PC. Originally a VMware-like app produced by Connectix for both the PC and Mac, it’s since been purchased by Microsoft and no longer exists as a standalone product. Its current incarnation is as an add-on for Windows 7 to power Windows XP Mode, available only to users of Windows 7’s higher-end SKUs (Business and Ultimate).
Parallels. This company is best known for their Mac product Parallels Desktop—one of the most common ways Windows is run in emulation on the Mac—but they also produce Windows and Linux versions of the same program. Its feature set isn’t as sophisticated as VMware or VirtualBox—e.g., it doesn’t support emulation of multiple CPUs.
QEMU/DOSBox/Bochs. A slew of independently-written and open source virtual-machine and machine-emulation apps also exist, although they are mainly used only by experts, tinkerers, or as part of another product. QEMU emulates a whole variety of processor architectures—not just the x86 family but also architectures like ARM, PowerPC and many others. DOSbox is for running legacy DOS apps—typically games, but also business software that was never ported to other platforms. Bochs emulates all the x86 instructions and devices found in a typical PC and is used mainly for debugging new operating systems under development than for running end-user apps.
Using a virtual machine requires that the host PC has enough spare memory and disk space to be used by the virtual machine. If you wanted to create a virtual PC with 1GB of RAM and 200 GB HD space, you’d need at least that much memory and that much storage, free and clear, on the host machine. This was one major reason why it wasn’t until relatively recently that desktop virtualization started becoming more commonplace. Memory and storage are now cheap enough that virtualization is now possible even on a midrange-PC budget.
Virtual PC solutions either require or benefit enormously from hardware-assisted virtualization. This means a user will get the best results by running the virtual PC on certain varieties of processor, which sport instruction sets designed for virtualization. Intel processors that support the VT-x extensions and AMD chips that have AMD-V are two such lines of CPUs. Not every current CPU includes these extensions, so anyone interested in performing virtualization with a given PC should check that the included processor has them.
VMs are designed to run most operating systems without modification. The user can typically boot the installation media and install the OS as if all this were taking place on an actual computer. That said, after the installation is complete, the user can also install a set of tools (essentially a device driver package) that allows better integration between the guest OS and its host.
Such tools are available for Windows and Linux when running in VirtualBox or VMware, and include such functions as two-way clipboard sharing, enhanced graphics (including support for the host’s 3D hardware acceleration features), and more tightly-integrated networking. These add-ons are not vital, since the guest OS will usually run decently well without them, but they enhance day-to-day use of the guest and make certain tasks easier—e.g., network integration between the guest and host for the sake of copying files in or out.
Because virtualization has become such a cornerstone technology, especially in the server world, it’s bound to evolve in ways that influence computing in any number of other realms. Here are a few future trends that are worth looking out for.
Virtualization mostly works right now as something supported by the OS and the hardware—that is, it's something the operating system and the underlying processor have the native capacity for, but which is only used when an application specifically asks for it.The next step up is for virtualization to be the default—for all OSes to run under a hypervisor as standard behavior, or to have the OS itself use a similar partitioning scheme to keep different user contexts separate. The hardware and OSes in question would talk to each other through an industry-standard set of interfaces, so it wouldn’t matter what hardware or OS was being used.
Another aspect of this will be tighter integration of I/O-intensive resources such as network or disk hardware. Those advances require close cooperation with hardware makers, but it’s ultimately in their best future interest to create hardware that virtualizes well, that is performs well under virtualization, and can offer a virtualization environments features that wouldn't be possible in an unvirtualized environment -- for instance, automatically creating a differenced version of the same physical disk between two or more virtualized OSes.
This in turn means virtualization solutions of different scales will be everywhere. Not just in the server, but on the desktop—especially now that the desktop routinely has enough storage, memory and CPU power to support virtualization solutions. It’s not clear how much further native support the desktop OS of the future will provide for virtualization or in what form (Windows 7’s XP mode comes to mind as a first step), but once the capacity is there, it’s bound to be used. Virtualization on mobile devices shouldn't be dismissed either, especially with the appearance of products like VMware MVP, which allows multiple mobile OSes on a single device via virtual machines.
Finally, it’ll be come more crucial for software makers to think about virtualization as a common element of the computing environment, much as they have been previously pressured to think about and plan for using multiple cores. An app that’s aware it’s running in a virtual container can intelligently activate or deactivate functions that complement such an environment—for instance, to talk to standard virtualization interfaces when applicable.