Starting as open source alternative to the first commercial solution that Vmware was, these alternative solutions have been acquired / integrated into sophisticated commercial solutions.
The valid alternatives to Vmware are :
- XEN, one of the first paravirtualization technology incorporated into the Linux kernel, in standard, which is now part of the Citrix XenSource family of products
- QEMU which allows the emulation of different kind of processors and then running various guest operating system thru hypervisors like KVM and XEN. It allows also virtualization without emulation if you want to run a guest OS needing the same architecture as the host. QEMU can emulate x86, ARM, PowerPC, MIPS, SPARC, ... architecture.
- VirtualBox today an Oracle product but still Open Source that has a graphical environment (similar to VmWare workstation) to let run various guest OS
- OpenVZ which is the Open Source project at the fundation of the commercial product Virtuozzo. This solution implement a virtualization based on the Linux kernel (creation of containers) allowing to run different Virtual Private Servers with different Linux distribution with better performances than the other solutions (almost the same performance with or without virtualization) and a higher density (the number of virtual machine you can have on the same hardware) as the others.
- LXC which is an alternative to OpenVZ to run virtual machine in containers. The main difference between LXC and OpenVZ resides in the fact that LXC uses standard Linux kernel built-in feature (called cgroups) to build upon. OpenVZ still need its own kernel, but this will change in the future as OpenVZ developers are working hard to made their kernel modifications included upstream.
- And many more like User Mode Linux, , ...
- Linux Virtual Manager that has a graphical interface and can manage different kind of hypervisors (QEMU, KVM, XEN, LXC, ...)
- Vagrant Up which is more related to the automatic provisioning of VM of any technology using pre-defined templates (called "boxes") and provisioning tools installed into the VM (like Chef, Puppet, CFengine, ...).
- OpenStack a fully Open Source project, presented as a complete Infrastructure as a Service solution, allowing the automated deployment and provisioning of virtual server based on various technology like KVM, XEN, LXC and even Microsoft Hyper-V.
- CloudStack, project now hosted within the Apache incubator is similar to OpenStack but less mature.
- image library management
- network provisioning
Hypervisors versus containers
An hypervisor is a full emulation of a system, including its CPU, RAM, disks and I/O interfaces. Within such a "virtual machine", you can install any OS supporting the given hardware. With virtual machines, the only limitation is the family of the processor. If the CPU is from the Intel / AMD family, only OS made for Intel / AMD (x86, x86_64) can be installed. These hypervisors can be installed directly on the hardware (bare-metal or native or type 1) or in an already installed OS (hosted or type 2). With hypervisor, there will be a slight latency / overhead in the performances, compared to what that would have been using dedicated hardware equivalent to the virtualized one. Bare-metal hypervisor (like Vmware ESXi or Linux KVM) tends to add less overhead than the hosted one (like Vmware Workstation or Virtual Box).
A container or virtual private server (VPS) is an isolated environment created by the kernel of an already installed OS. Containers are also seen as fully independant virtual machines from the inside, but they all have the same kernel in common, the one running on the host OS. Meaning that containers can only contain guest OS using the same kernel as the host. OpenVZ, LXC or Solaris zones are exemple of containers implementing various level of segregation. Within Linux, comainters can be limited to use limited CPU, memory and disks ressources.
Recently, we've heard speaking about application containers. This is a further refining of the container technology. In a classic container, we run a full OS, in an application container we run only one application. The container technology is used to isolate this application and its libraries. For instance, application containers can be used to run application with base libraries (like libc) different from the one of the installed hosting OS without breaking it.