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 think using containers is the next step beyond VMs, and your application sounds like a good use case.
I have also seen containers used a lot in online editors or anywhere that code needs to be executed. To allow arbitrary code execution but mitigate security risks, you can just execute the code in its own container/VM.
Yeah — containers make sense in a lot of applications but there's quite a lot upfront cost in building the infrastructure for it that can reliably issue new containers on demand. For our specific high-security use case it makes sense to pay the premium, since our customers do pay us the premium for that feature. I wouldn't do this for an app that is just starting out though.
We also have containers inside containers for user-provided JS code in sandboxes, so that they can program their own triggers. 🙂
Very neat that you're fully isolating companies in your product and that focused on security from the start. I would have assumed the overhead would be far too high, but sounds like your team's managed to automate it. Also fascinating how that enables you to offer older versions of your software to users if they don't want to upgrade. That's incredibly rare with SaaS, and Basecamp is one of the very few I know who keeps older versions running for customers who don't want to switch.
PS: Aether looks like a very neat idea, email crossed with a forum almost. Will have to check into that more. Would love to hear more about your team's inspiration behind the app!
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).
Oh and another amazingly fun one: Archive.org has old DOS software that you can run from your browser, including Word 5.0. So 30 years after it was released, you can emulate what was then a state-of-the-art PC in your browser.
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
Wow that's super impressive. Why did you want it on the Xbox—just to use as an always-on home server? (side note: somehow still amazes me that home servers never found a full market, and that smart TV devices ala Apple TV or game consoles like Xbox never morphed into that).
Keeping an image of every computer is quite a commitment. Running those from external hard drives I assume?
So you modified the SNES Mini to run other game ROMs?
Mainly we use them for POCs with repos of really old versions of JAVA... and that's about it.
That's a great reason to use them—similar to why I keep most old versions of Windows around to test older software when needed (and for the increasingly rare site where you need to use Internet Explorer).
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 :)
What Windows software do you typically need to use in a virtual machine?
We have 15k newsletter subscribers, and have around ~2k of them in a Slack group. We're starting to encounter issues in terms of community management - specifically, it's hard to pin content like c...
Google lets you subscribe to a calendar using a URL - although when using an Outlook 365 Calendar link, events are copied over once, and then the syncing stops. This seems to be a relatively new is...
Three major considerations I have been using to evaluate the plethora of options available: 1. Effortless/non-intrusive: It shouldn't feel like a video call 2. Price: As this app would be complime...
That is super cool—though I'd imagine compiling in a virtual machine is very slow.
AWS Workspaces is amazing, especially since you can pay per hour. And the latency doesn't feel much worse if any than the general slowness of a virtual machine on your local computer. That definitely feels like the future. They just need a way to spin up a Workspace with any random disk image.