I got a new laptop one week ago and I've been investigating different ways of setting up our dev environment. Here are my findings
Virtual Machines
There are different options
- Virtual Box doesn't work as of today in Apple M1
- Parallels, nice but you have to buy a license
- UTM, very nice UI on top of QEMU. My preferred choice
If you run ARM virtual machines, it's fast as hell, feels like a native app, probably having a M1 Max with 10 cores and 64Gb of RAM helps bit :) but I wanted to use mainly x86 VMs and they are not so fast. I'll definitely use UTM in the future for running ARM based VMs.
Docker
If you run everything inside Docker, it works out of the box. I didn't experience any issues.
Apple's Rosetta
It turns out that the best virtualisation software comes already with you default MacOS installation and it's called Rosetta!
Here's how I set up my dev laptop
Duplicate your Terminal or iTerm app and give it a different name
I ended up with
In the x86 terminal, get info details (CMD + i) and check "Open using Rosetta"
That's it. Yes, really, that's all you need. Open your x86 terminal and you have an emulated x86 environment that just works.
If you install Hombrew in both envs it will be installed in different folders, the traditional /usr/local/Cellar
for Intel based and the new one opt/hombrew/Cellar
I have a check in my .zshrc
to load paths based on the arch. With that approach you need to be mindful about the arch you are running and loading the proper paths or executing the right code after login.
if [ $(arch) = 'arm64' ]; then
...
else
...
fi
I also added $(arch)
to my prompt to know in which environment I am
Caveats
If you install the same app or library in both environments they may clash. Let's say you install MySQL in both ARM and x86 using Homebrew and you want to link the binary, you should choose on what env you do it. Just be careful about that.
For me hasn't been a problem because I mainly use x86 so I didn't install anything in the ARM env. Just avoid installing the same stuff in both envs.
If you really need to use both arches, an alternative could be using Rosetta to emulate x86 and UTM to run ARM based VMs so you don't risk messing with duplicated libraries or apps.
Top comments (0)