Hacker News new | past | comments | ask | show | jobs | submit login
Run a macOS VM on Apple Silicon from a double-click with Vimy (eclecticlight.co)
146 points by akyuu on Aug 20, 2023 | hide | past | favorite | 79 comments



This is absolutely awesome and something I always wanted (I’m in a 8GB M1 though which I regret often not going to a 16GB). I just want to sandbox some of the applications I need to use but don’t trust on my computer (looking at you Bambu studios). I tried using the sandbox feature on macOS but it’s unusable for me on Ventura.


> I’m in a 8GB M1 though which I regret often not going to a 16GB

You can always upgr.. no, wait


with Chrome/Arc/Edge being what they are, being able to get 24GB was a game changer for me - it allowed me to go back to an Air, which is definitely my preferred form factor.

I never regret money spent on RAM....


> I never regret money spent on RAM....

That's kind of Apple's tiered upselling plan, isn't it? ;-/

But as an Apple user I concur completely. The awful experience of bloated apps (or multiple VMs) slowing your system to a crawl isn't worth the few hundred dollars you saved by opting for a lower memory SiP.


$400 to upgrade 8GB to 24GB is a significant jump and more than a "few hundred"


$400, while indeed a significant jump, absolutely is "a few hundred," given that $200 is "a couple hundred." In my reckoning, "a few hundred" starts around $250 and arguably runs up to $750, where "almost a thousand" could be said to start.


To me (neither of us is right, or wrong), 200 - couple, 3 or 400 - few, 500+ - several, 750+ - almost a thousand.


Anyone have recommendations for devs looking to run a dev environment on a Mac without installing a bunch of dev dependencies on the local machine?

My plan right now is to buy a 2nd mac and use VS Code remote development over ssh.


I've tried a few things:

- Docker, but the docker on mac experience has never been great (even if Colima or Orbstack makes that much better)

- A VM running on my mac where I install whatever I need. Tried debian, silverblue, and used the opportunity to properly learn Nix and use NixOS

- My current setup, especially for hairy projects with dependencies I dislike: an intel NUC running in my local network that I set up with NixOS which runs everything I need. Because I install Tailscale everywhere, I can use it even when working from outside my home.


Depends on what you are trying to solve. If you don't like the fragmentations of dependencies on your system, this won't go away on a second machine. Also, I'd point you to hosted VS Code environments such as GitHubs code spaces or Gitpod.

You may use something that encapsulates your dev dependencies. Some use containers like docker, others use Nix (can be run on MacOS ). As Nix has quite a steep learning curve, there are abstractions such as devenv or devbox, which I haven't used.


Microsoft's Dev Containers [0] is pretty slick, especially when used with GitHub Codespaces [1] if you want remote development.

[0] https://containers.dev [1] https://github.com/features/codespaces


Does nix or devbox [1] do what you want? Technically installing on the local machine, but not in any way that effects you unless you ask for it?

[1] https://www.jetpack.io/devbox


Current setup on my M1 for dev is to use docker with containers for mysql, localstack, rabbitmq, redis, and ruby (debian bullseye), all arm64 images, and then VS Code with the remote container extension. Was pretty rough going when the M1 first came out but is now flawless and lightning fast. Onboarding new devs takes an hour instead of a day.


VS Code remote so you don’t have to pay the cost of volume mount? Is performance that much better? I’m not a VS Code user, do you need things like the lsp server baked into your image to get intellisense to work?


Raspberry pi or other compact linux machine with code-server running in docker. Gets you a web UI that works from anything (ie iPad) and you can do docker-in-docker for other containers.

SBCs have less horsepower but you can always run them from a USB battery bank, letting you dev on the go.


+1 for VSCode Remote.

I've been coding for the past 2 years almost exclusively through VSCode remote on Linux servers with few complaints.

Get a seperate SFTP/network file client as the built-in VSCode one is slow and unstable but otherwise everything works great. If you're considering using any Jetbrains IDE over a network connection however, I'd encourage you to think again.


I would use a VM. You could also use Vagrant in that VM to make it easy to setup that environment again in another VM (or machine) later:

https://developer.hashicorp.com/vagrant/intro


Would UTM be an option?

https://mac.getutm.app/


Works great for me, I run an ARM64 Linux VM using the Apple native framework. macOS is configured to get out of the way, I only need Firefox, iterm2, and some custom shortcuts. I code and do pretty much everything on the VM. As a Linux user this has made the work-issued M1 Pro a great laptop, which I wasn't sure about.


I kind of like this option. Running the front end/client natively and the back end/server in a VM works great.

In the future Asahi or a native Ubuntu port might be a good option, but a VM is almost better in some ways since it's portable/migratable, has easy snapshots, has better isolation, etc.


Utm is just qemu, and qemu is actually open source. Utm hides an enormous amount of what they do (just saying not open source again in a different way), and that's definitely not what you want in a base system.

So it would likely be much better to simply install qemu instead.


UTM is open source (Apache2). You can also add any argument supported by the bundled version of QEMU using the GUI.

https://github.com/utmapp/UTM/blob/main/LICENSE


UTM uses qemu or Apple's own virtualization framework, which runs macOS.


Does UTM not use Hypervisor.framework through QEMU? QEMU has built-in support for HVF: https://wiki.qemu.org/Features/HVF


There's the Hypervisor framework, which is the low-level framework that replaces the need for a kernel extension for type 2 hypervisors, and then there's the more recent Virtualisation framework which is a more high-level framework for running VMs. QEMU's HVF uses the Hypervisor framework, and UTM also supports running VMs with the Virtualization framework (which is what Vimy and Viable also use). Note that the Virtualization framework also has support on Apple Silicon for running macOS guests as well as Linux guests.


UTM is open source.

Also, running UTM instead of Qemu has some benefits. e.g. bridged networking


Why not just have everything you need on your local machine?

(I'm not a Mac user)


So, Mac doesn't come with a package manager. There are things you can do with port and brew, to alleviate some pain.

Me personally, I fool around with a lot of languages, and sometimes I don't quite keep every project up to date with the latest version. For work, the situation is even more challenging, because I don't have the authority to go tell teams to upgrade or not upgrade, but sometimes I need to build their projects.

None of this is really Mac specific. I used to use virtual box for this, which worked pretty well. I could set up a baseline environment and snapshot new boxes with new language revs.

Docker can kind of cover this, but I tend to over do it, breaking things out into the one you build with, and the one you run with, and it's fine, but it's a lot to keep in my head. So, I'm kinda flakey about that.

Now, I'm slowly building up some proficiency with nix. I think this is what I really want, to swap out the whole chain of system dependencies, and build docker containers or vms out of that if I need them.

Perhaps I'm a poor sysadmin. _everything_ locally installed makes things real weird after a while (years).


> Perhaps I'm a poor sysadmin. _everything_ locally installed makes things real weird after a while (years).

Same experience here (years). Because it’s something that creeps up over time, the problems aren’t obvious overnight.


My path was vm -> containers -> nix. With nix flakes and the direnv extension in vscode you can get a clean per-project dev environment with zero docker overhead and without dev tools cluttering up your global environment and causing issues.


This is one of the good reasons to use Qubes OS.


Use orbstack, install things in their own container, Mount local volumes


That looks really nice. I'm sure it's a great solution for lots of developers.

I think I'm going to stick with nix. VM's, docker, orbstack and nix all seem to let me make a machine that looks like "X". The thing is, docker and VM's provide an abstraction that works 95% of the time, but that last 5% is awful (I don't know about orbstack).

Nix, by all appearances (and my limited experience) is much much worse up front. there's a lot to learn. But in exchange I get to keep control. This abstraction is wrong, we're not doing that, we're doing this. I'm not asking, I'm telling.


I am a Mac user and I’m curious to know too


Depends on why you're a mac in the first place. For me it was iOS adjacent dev, and that meant upgrading the building stack every year, uncluding straight OS upgrades. And thus screwing my other dependencies every year.

After the third or fourth time, I switched to a VM that will stay stable basically whatever happens to the system.


Executing a bunch of npm modules locally, having a Mongo and Redis database running 24/7.

I don’t have a great answer. One thing I’ve noticed on Mac is that, using Activity Monitor, before installing all the dev dependencies for local dev nearly all processes seem to run under the local user’s user space, but after installing a bunch of stuff (with sudo) a ton of processes default to running as “system”

I haven’t had time to research whether this actually has a meaningful impact on security, but TLDR I trust Mac’s out of the box security, but I instantly stop trusting it the moment I start installing a bunch of stuff via Homebrew and NPM.


You generally shouldn’t ever use sudo with either Homebrew or NPM.

Homebrew is specifically designed to be used without elevated privileges. This has the downside that packages are owned by the user which first ran the install (which might lead to those packages running with elevated privileges after a sudo install as well? I don’t know, and I’m not eager to find out).

NPM packages are typically either project local (and these definitely shouldn’t be installed with sudo), or “global” (which should be global in the sense of being installed on the user’s PATH, and thus shouldn’t require sudo for any normal setup either).

You’re right to be cautious about the security implications of this.


> This has the downside that packages are owned by the user which first ran the install

This is a bit of a security problem if Homebrew's .../bin is on your sudoers secure_path, because now your normal user can overwrite something that might be invoked via a simple `sudo whatever`, which doesn't specify the full path to whatever

> which might lead to those packages running with elevated privileges after a sudo install as well? I don’t know, and I’m not eager to find out

No, definitely not by any normal mechanism. Maybe there are some exception, like packages that set up LaunchAgents or LaunchDaemons, or which run the install scripts of .pkg installers which ask for elevated privileges. But those can set up programs that run with elevated privileges anyway.


Brew will prompt for elevated privileged when necessary, or at least formulae should conform to that design


Strong rec to avoid use of sudo for brew or (p)npm, not sure why you'd want to do that.


sudo or not makes very little difference, unless you actually use multiple user accounts with different privileges on your Mac.


it makes a big difference if you don't want to practice poor security hygiene and form a bad habit of constantly entering your password for no reason.


The nice thing about the Mac is that you can run a lot of unix tools natively.

But of course, anything that runs on your Mac is a potential security hole. Obviously all 3rd party apps that you use can compromise security. But it can also be your own code: If eg. your rails app has a security vulnerability, which is common during development, and you run it with your local user, as is common during dev, then that vulnerability can potentially compromise all your data.

So if you want to be safe, run all your dev stuff in VMs or on a separate device, or in a container or something.

Of course, that is cumbersome, and whether it is necessary or not depends on what kind of threats you expect...


nvm for Node + use containers for database services?


tangent: fnm https://github.com/Schniz/fnm is faster than nvm and much cleaner in its shell integration.


nvm doesn’t stop npm modules from installing locally. many npm modules have pre/post install scripts that execute binaries and such that I’d rather not execute locally

Docker for Redis/Mongo is reasonable, but npm dependencies creeping into the system is something you can’t really easily undo other than a full wipe and reinstall of the OS. Especially when certain modules require sudo to install


Docker volumes might help with the module management too through executing npm i side a container.

YMMV as performance can sometimes be an issue.


Setup a remote server anywhere. Install ThinLinc. Done.


> ThinLinc is a software that enables organizations to implement a Linux server-based computing (SBC) infrastructure. - https://www.cendio.com/thinlinc/what-is-thinlinc/

Back to terminal server again.


Are you building apps for Mac/iOS? If not, I have a 12 core Ryzen with a 3090 that was the same price as a higher ram Mac mini ($1K). I recommend that over another Mac if you’re ok running *nix.


The OP is clearly asking about setting up a Mac dev environment, so suggesting that they buy a non-Mac machine is not helpful.


It isn't so clear to me. As I read it, OP might be asking about a dev environment on Mac, not necessarily for Mac-only development.


It is clear that they want a "dev environment on a Mac". They don't have to be necessarily developing for Mac.

I don't develop for Mac yet I prefer a Macbook.


The only thing clear to me is they are on a Mac and want a dev environment of some unspecified kind.


There are multiple ways to interpret the OP's statement.


Not sure if PP was using a desktop or a laptop. MacBook Air isn't a gaming rig but it's a nice, quiet, power-efficient laptop.


VirtualBuddy is my favorite mac vm thanks to their file sharing folder

https://github.com/insidegui/VirtualBuddy


FTA, Vimy has "folder sharing enabled, with the Custom shared folder as the user’s Home folder".

So does big brother Viable:

https://eclecticlight.co/virtualisation-on-apple-silicon/


This looks very cool.

Since it is Eclectic Light, shipping it, I will bet it's great.


Is it possible to run asahi Linux inside this or any other hypervisor on macos?


It's designed to make future linux easier to run out of the box on Mac silicon, not really intended to be run as linux in a VM. If you want vms, use UTM https://mac.getutm.app/


Tart is also very cool. It's not F/OSS but it is source-available and its license is liberal about non-commercial and small-scale commercial use:

https://github.com/cirruslabs/tart

The very cool thing about Tart is how it uses OCI for OS images, so you can use your existing image registry infrastructure to host and pull down OS images.

Cilicon is a compatible F/OSS clone that currently only supports a subset of that functionality: https://github.com/traderepublic/Cilicon

These are more CI-oriented but I like how that makes it easy to manage state with them.

If you're focused on Linux VMs and maybe not on GUI stuff (although I'm sure you can make that work), Lima seems to be the go-to in the user 'community', as it were: https://github.com/lima-vm/lima

If you use ARM guests on Apple Silicon, you should get good perf just like with stuff in the OP. (Like UTM, Lima is based on QEMU.)


Yes, played with Tart, forgot about it actually until you mentioned it again and not heard of the F/OSS one, so thanks for that :)


You mean qemu.

Utm is qemu, but they just removed the open source part. So it's just definitely worse.


You can use UTM with Apple's Virtualisation backend too, have been for a while and works fine for me https://docs.getutm.app/settings-apple/settings-apple/


UTM is open source too though: https://github.com/utmapp/UTM#license


Asahi linux made for apple hardware. For virtual hardware you can run almost any popular distro like Ubuntu, Fedora.


I'm aware, but considering this provides virtual apple hardware to run macos inside the vm, I'm curious if this can also be used to install/run asahi inside the vm.

My motivation here is exploring asahi on my MacBook inside a vm without needing to install it on the metal and modify partitions on the disk


I think you can still take advantage of paravirtualization without running an OS built for Apple Silicon specifically. You can emulate peripherals and the motherboard and stuff without emulating the CPU, so you would probably do better just to run the regular ARM variant of whatever distro.

Both Arch and Fedora, which some releases of Asahi are based on, have regular, shmegular ARM variants.


Has anybody managed to run a Mac Intel env within a Mac Arm?

I am working on that project that needs to be built and packaged for both Arm & Intel.


Can’t you just use Rosetta?


Well there's no easy way to make it work. I need to compile to Intel, not run Intel code. I would need to setup a whole toolchain + homebrew. No idea how to have all of that setup correctly.


Any example use-cases?


In theory running a different version of the OS for testing. Be aware MacOS VMs cannot use iCloud services though, so if your goal is CI/CD in the VM none of your tests for iCloud will work.


Be aware MacOS VMs cannot use iCloud services though

I believe it needs extra work but can be done. It's a relatively common question in the Hackintosh community and they've figured it out.


It works. You just need a legit serial number from a device. I have used one from my mac and it worked.


Check out docker-osx. They have instructions on generating a serial number and getting it to work iirc


Not using Virtualization.framework.


Annoys me more than it should: it’s something operated with the mouse, and was named Vimy? SMH




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: