top | item 38803746

(no title)

tbenst | 2 years ago

Does anyone know the state of running Windows / Linux x86-64 virtualization on Apple Silicon? This article is super interesting but dances around the most important application for VMs on Mac.

discuss

order

tecleandor|2 years ago

For Linux, and if you only need to run CLI tools, I've been very happy with Lima [0]. It runs x86-64 and ARM VMs using QEMU, but can also run ARM VMs using vz [1] (Apple virtualization framework[2]) that is very performant. Also, along with the project colima [3] you can easily start Docker/Podman/Kubernetes instances, totally substituting Docker Desktop for me.

For desktop environments (Linux/Windows) I've used UTM [4] with mixed success. Although it's been almost a year since last time I used it, so maybe it runs better now

There's also Parallels, and people say it's a good product, but it's around USD/EUR 100, and I haven't tested it as I don't have that need.

And there's VMWare Fusion but... who likes VMWare? ;)

  [0] - https://lima-vm.io
  [1] - https://lima-vm.io/docs/config/vmtype/#vz
  [2] - https://developer.apple.com/documentation/virtualization?language=objc
  [3] - https://lima-vm.io/docs/faq/colima/
  [4] - https://mac.getutm.app/
  [5] - https://www.parallels.com/products/desktop/

vaxman|2 years ago

A correct solution is to remote into instances on dedicated (bare metal) servers (use ECC memory and SSH with a good cipher for your transport, even across your local or VPN/WireGuard.. network!), perhaps using KVM/QEMU for macOS VMs (yep, requires a MacPro to be legal) and KVM/Firecracker for Linux VMs. You could do Windows VMs in KVM/QEMU, but will have less friction remoting into an alternate (HyperV) box for that (using Windows-specific security products). RDP-over SSH for Windows, MPEG-VNC-over-SSH for macOS (and Wayland).

Why? Did you checkout the Privacy Policy for Parallels? The last time I checked, it allowed them to remotely take anything from your systems that they want. If I wanted that, I would just use a VPS running on someone else's machine in a cage somewhere.

VMware, by the way, is now Broadcom, as in they reportedly replaced the staff and ripped up the perpetual licensing model (subscription only now)... Even before that, the Fusion product development had been shifted overseas, presumably to avoid paying higher wage software engineers in Silicon Valley (what a brilliant way for a software company to innovate) --now a company in Singapore is wearing their skin and the C-suite are out of jobs too.

cangeroo|2 years ago

Parallels has a bad desktop user experience using Linux because of poor support for continuous scrolling. Lots of users have complained on their forums for years, but they refuse to do anything about it. I bought it for one year, and regretted the experience. It works well with Windows though.

Generally, the experience with MacOS is mediocre thanks to Apple and their Virtualization Framework, with many basic features missing for years.

jiveturkey|2 years ago

> who likes VMWare?

I do!

I abandoned Parallels when they crippled the perpetually licensed version. "Pro" is only available via subscription for a few years now. Even before then, their store was disgusting with forced bundling of additional hostile products, and later they became optional but were still added to your cart by default.

dada78641|2 years ago

My personal experience is that Windows 11 for ARM runs extremely well on Parallels. It includes an emulation layer for x86 apps that's completely invisible and just works. I can even still run Cakewalk, a program originally from the 90s, on my M1 Mac to edit midi files.

With that being said, this is just my view as someone who uses simple consumer oriented programs, and I'm not sure how well it'll work for more serious purposes.

sydbarrett74|2 years ago

Have you tried any Windows games on Apple Silicon? What kinds of Windows apps do you tend to run? I've used the macOS version of World of Warcraft on my '20 Mac Mini (16GB RAM) and even with utilities that adjust the mouse acceleration curve, I still find game play clunky. I was hoping I could run WoW under a VM and have it be somewhat performant.

timenova|2 years ago

YMMV, but from my own experiments, on an M1 Macbook Air, it did not work well for me. I was trying to compile an Elixir codebase on x86-64 Alpine Linux. Elixir does not have cross-compiling. I tried it in a Docker container, and in a Linux VM using OrbStack. Both approaches fail, as it just segfaults, even on the first `mix compile` of a blank project.

This problem does not exist in ARM containers or VMs, as the same project compiles perfectly in an ARM Alpine Linux container/VM.

It's definitely not plug-and-play for all scenarios. If anyone knows workarounds, let me know.

cschmatzler|2 years ago

That’s an underlying QEMU bug, which is used by Lima [1]. Add `ENV ERL_FLAGS="+JPperf true"` to your Dockerfile and it will build just fine cross platform. The flag just changes some things during build time and won’t affect runtime performance.

[1] https://gitlab.com/qemu-project/qemu/-/issues/1034

thejosh|2 years ago

For anything that doesn't need a UI, you're FAR better off having some remote server than trying to emulate, it's far to slow for ARM64<>x86-64 in both directions..

Many things are just so much easier with a remote server/workstation somewhere than trying to deal with VM shenanigans.

ARM64 visualised on the otherhand (Linux works great, macos seems good(?), haven't tried Windows) with UTM is pretty great.

travisgriggs|2 years ago

I’ve been able to do this (build x86/ubuntu targeted elixir) with UTM on my M1 Mac. It ain’t fast, that’s for sure. But it works. Which is interesting because sibling responses to your Lima experience claim it’s because of a qemu “bug”, but utm runs qemu as well.

toast0|2 years ago

> Elixir does not have cross-compiling.

Elixir compiles to beam files, like Erlang, right?

I was pretty sure beam files are bytecode and not platform specific?

kamilner|2 years ago

I regularly use Orbstack to develop for x64 Linux (including kernel development). It works transparently as an x64 linux command line that uses Rosetta under the hood, so performance is reasonably good.

It can also run docker containers, apparently faster than the normal docker client, although I haven't used that feature much so I'm not sure.

deergomoo|2 years ago

You can use Rosetta to run x86 Linux binaries with good performance under a virtualised ARM Linux [0], but if you want to run fully x86 Windows or Linux you’ll need to emulate, not virtualise. It’s possible, but there’s a big performance hit as you might expect.

[0] https://developer.apple.com/documentation/virtualization/run...

kamilner|2 years ago

I'm not sure how OrbStack does it, but it can run a fully x64 Linux using Rosetta with quite good performance.

outcoldman|2 years ago

I do my work on Apple Silicon laptops since the first M1 came out.

I use Docker Desktop that can run for me amd64 images as well.

I do run Splunk in it (which is a very enterprise product, written mostly in C++), I was so shocked to see that I was able to run it on Rosetta pretty much from day 1. Splunk worked on macOS with Rosetta from day 1, but had some issues in Docker running under QEMU, now Docker uses Rosetta for Linux, which allows me to run Splunk for Linux in Docker as well.

I use RedHat CodeReady Containers (local OpenShift), which works great as well.

And I use Parallels to run mostly headless Linux to run Kubernetes. And sometimes Windows just to look at it.

In a first two years of Apple Silicon architecture I definitely had to find some workaround to make things work. Right now I am 100% rely only on Apple Silicon, and deliver my software to large enterprise companies who use it on amd64/arm64 architectures.

donatj|2 years ago

Your mileage may vary, but I've been quite happy running x86-64 software in an ARM build of Windows 11 in UTM.

Nothing graphical or all that intensive though, just some productivity tools I can't live without.

hypercube33|2 years ago

What hardware are you running this on out of curiosity?

avidphantasm|2 years ago

I run full AMD64 containers using Docker Desktop, which uses Rosetta under the hood. On my M1 Pro they were a bit slow (maybe 25% slower than my work laptop, which is a 12th gen. i9), but good enough in general. I have since upgraded to an M3 Max and AMD64 VMs seem to be a lot faster, maybe even faster than my 12th gen. i9. I really hope Apple doesn’t get rid of Rosetta support in VMs, ever. It’s just too useful.

vbezhenar|2 years ago

Very slow using qemu. You can run arm64 Linux and run x86_x64 apps inside using Rosetta, if your virtual machine uses Virtualization.Framework (does not work with qemu, AFAIK). I suppose you can do the same with arm64 Windows and Microsoft x86_64 translation technology, but not really sure.

rincebrain|2 years ago

You can use qemu -accel hvf.

nxobject|2 years ago

I wish there was a good GUI-based solution for Windows emulation via Rosetta. My use case isn’t development - it’s running software with an x64-only proprietary driver! (The Oculus remote link drivers, FWIW.) Fusion and Parallels don’t have that feature, so I’m wondering whether there are technical difficulties/blockers there.

fulafel|2 years ago

The article is about virtualization, not emulating x86-64, so I'd disagree it's dancing around that. (Also, Windows and Linux have their own x86 emulations - if you boot virtualized Windows/ARM or Linux/ARM, you can get to the native emulation functionalities)

maldev|2 years ago

I'm a big windows guy, pretty much windows only. Recently bought a macbook. I love windows so much that I set up my shell on the mac to be powershell and use Windows Terminal to SSH into the mac.

I'm REALLY happy with parallel desktop. It runs any productivity or programming app I've needed. It also makes it as if it's running natively on the mac, you can just open up some windows app and it pops up like a mac one. It works amazingly fast, and I can develop both x64, x32, ARM apps in visual studio on my VM. Games don't work because of DRM, but I just use Parsec to stream my desktop if I want to game anyways, so it doesn't affect my workflow. And any game I would actually play while traveling is on the mac natively.

For linux I only emulate Kali, and it works good, I love how the VM's pop up as a "Virtual desktop" so I can side swipe it, but linux vm's don't have the native integration like Windows. Once nested virtualization is enabled, i'll probably stick it in WSL, I personally don't use Linux that much since I think it's shit.

The only downside is some asshole at Apple won't put in nested virtualization for the VM's, even though M2 and M3 have support for it on linux.

freedomben|2 years ago

If you don't mind me asking, why did you buy a macbook?

LASR|2 years ago

I was able to get a fully functional Windows 11 install using UTM on my M1 MBP. This really helped with some Windows-only android tools with USB passthrough.

I've not tried Linux.

Note: I am not associated with UTM in any way, just a satisfied user.

[1] https://mac.getutm.app/

xvector|2 years ago

I've always wondered what the security posture is of UTM, QEMU, etc. Is an escape trivial or is there thought put into security?

jxdxbx|2 years ago

ARM Windows runs well with Parallels. And it can run x86 apps.

stephen_g|2 years ago

Yes, this is the best way to do it if possible in my experience. I use some fairly heavy x86_64 apps in the Arm for Windows in Parallels, using Windows’ translation system (rosetta 2 equivalent), and it’s been quite good.

Trying to emulate the whole x86_64 version of an OS (I tried some Docker images that only came in x86 before finding instructions to rebuild them on the ARM base OS) has been super slow on the other hand. This is on a quite decent M2 Pro.

cangeroo|2 years ago

Some x86 apps refuse to run on ARM, having platform detection built-in to their installer.