But there are so many different virtualization technologies readily available today. Which one is the best for your needs?
In this infographic, I summarize some common needs and use cases to help you in choosing the right virtualization method for your project.
The key technologies I mention are:
Hardware-based virtualization (aka, "Virtual Machines"). This is the technology that replicates the more closely a real machine by software. So you will have a great freedom on the OS to run while still ensuring near-native performances since the core CPU will directly execute most of the program’s instructions.
OS-level virtualization (aka, "Containers"). In that case, all the virtual guest are sharing the same kernel. Obviously, this prevents you from running different operating systems on the same hardware. That being said, you are still free to run several flavors of the same OS, like different Linux distributions. And the performances are even better than with hardware-based virtualization since it avoids even the overhead of running an hypervisor.
Application-level virtualization, allows you to run on some OS a software written for a different OS (but build for the same Instruction Set Architecture). Application-level virtualization achieves that goal by providing a thin adaptation layer mapping the foreign OS system calls to native ones. The typical example of that technology is Wine. In some sense, "abstract machines" like the Java Virtual Machine can be considered as being part of that category.
Emulation. In that case, you can run software written for arbitrary architectures. But, the host system has to interpret or re-compile all the instructions before being able to execute them. Obviously, this has performances implications. However given the power of modern computers, emulated slow or legacy systems can actually run faster than on their original hardware.
If you want to know more about the various virtualization technologies, I encourage you to take a look at the companion mini-course in video: What is Virtualization?