Or do you use the Linux subsytem in Windows, emulation tools like DosBOX and WINE, or mobile device emulator/simulators?
What's your favorite ways you've used virtual machines and emulation?
We use WINE for compiling Yac for Windows...on a Mac. Outside of that I've never been a fan of Virtual machines. They always seemed slow, no matter what. Also take a huge amount of space on my machine. We often need a quick Windows environment for testing but I've found AWS WorkSpaces to be an amazing way to handle that. Runs in the cloud, I can access from an iPad, and it's crazy fast.
This might not be very common, but we're using virtual machines for isolating our customers from each other. To be more specific, we have a remote team collaboration app, Aether. (Shameless plug: https://aether.app) It handles a lot of the mail traffic and other types of discussion in the companies that use it: it acts as a neural ganglion to entire companies. This makes it so that we have higher than baseline security need from the start, but we also have a customer base that is more security-conscious due to industries they operate in, so it makes this extra important for us.
The reason this doesn't work with the regular SaaS model is that the regular model is multi-tenant. It's good for easy development and to make sure there's only one version of the app running. On the flip side, it's rough to secure, since the only thing that prevents one team's content from being visible in another is just your access control logic, nothing else. It's also hard to make sure everyone is getting their money's worth, especially if they have 'noisy neighbours', that steal performance from other teams.
This happens in almost all SaaS apps and is considered largely normal, but since our target audience is much more security conscious than usual, we had to find a way to both secure highly-privileged content and handle the load management.
Enter virtual machines. We designed our system in a way that makes all our paying teams essentially single-tenant. In other words, for every customer, we run a separate copy of the app service in a virtual machine with its own separate database — all our customers are in effect on-premises. Kubernetes handles the distribution of CPU resources and having separate VMs give us the ability to customise the software to each customer if needed, and that is a part of our enterprise offering. We have a hypervisor that sits on Kubernetes that generates virtual machine specs. It all ties to Stripe, so a new customer in Stripe automatically results in spawning a new virtual machine with the newest binary ready to go within a few seconds. We have also made it so that we can do automatic fleet upgrades, or even, for companies that want the stability, we can freeze their versions into a long-term-support release, for the duration of their contract.
This is also useful because it makes our on-premises set-up effectively the same as regular SaaS — because both are in fact on-premises, in a VM.
I've always had a fascination with trying out older software and tracing the roots backwards to see how software has evolved over time (and more often how history repeats itself, with today's minimal writing apps feeling more similar to early word processors than the first version of Word does to the latest).
So I keep VMware Fusion installed, typically with an up-to-date Windows and Ubuntu install, along with older OSes to test stuff out. When I used a PC, I'd even gotten OS X Leopard running in VirtualBox to test Mac software from Windows.
And for fun, here's a screenshot from a dozen or so years ago with XP, Ubuntu, and Dos running in virtual machines on Windows Vista—just about enough to freeze the computer (and max out the tiny 1GB of ram I had at the time).
When I was a proper techie I got a Lotus Domino email server running on the original Xbox. I've got final images stored of each personal machine I've used since virtualisation became commonplace - firing up an image from my old college desktop was pretty cool. Even more impressive that it worked instantly. Currently enjoying exploring the 16-bit gaming era on a SNES Classic Mini - it's kinda cool being able to play Sonic on a Nintendo console
Mainly we use them for POCs with repos of really old versions of JAVA... and that's about it.
I always have used Ubuntu in Windows, now on a Mac I use VirtualMachine occasionally, but I think this is mostly a Windows issue...? At least for me that is the case :)