Most people who use computers understand at least the basics of how they work. There's the hardware, that actually does the computing; an operating system, that sits on top and serves as an interface between the computer hardware and the programs run by users, and then the actual applications we use which sit on top of that.
Sometimes, though, it's a little more complex than that simple abstraction.
You can also run an operating system inside of a special program called a virtual machine. A virtual machine essentially emulates the functions normally provided by hardware, such that you can essentially run an entire computer system (or multiple computer systems) on top of your existing operating system. For the end user, this might let you try out a new operating system easily without giving up your old one (or worrying about accidentally messing something up by trying to set your computer up to dual-boot). Or it might let you finally make the switch to an open source operating system like Linux by knowing you can still access a must-have application that's Windows- or Mac-only in a virtual environment.
Of course, for people who work in information technology fields, this is old news.
The entire cloud computing paradigm depends on virtual machines, and many if not most of the websites and online applications you use every day are running inside of a virtual machine. Cloud computing platforms like OpenStack are designed to make it easy to spin up new virtual machines, allocate virtual machines between many owners, and handle the virtual connections between them, all while abstracting the hardware beneath from the operating systems on top. This brings many advantages, from simplifying management, to making best use of available resources, to ensuring that workloads can move easily from one location to another.
Developers regularly use virtual machines as well, for testing out applications in environments that more closely match the machine where the application will actually be deployed in production. Tools like Vagrant make it easy to create virtual machine environments which closely match actual production environments, and the code which defines the environment can be backed up and managed under version control to make sure they stay consistent.
So how about you? Are virtual machines old news to you, something you use from time to time or even every day in your job? Or have you even ever tried one out? Take our poll, and let us know in the comment below.