Living with M1 Mac

Living with M1 Mac

These are my current account of roadblocks and workaround in using the tools I frequent within Apple Silicon Mac. Mostly I'll try my best to make native works before falling back to using rosetta.

I'll keep this page updated as things improves. I'll note the PR waiting on the fix if applicable

Brew

(Brew Mostly works now)

Java

Many things in this category.

SDKMan – The gateway to Java installation. To install the Azul native M1 JDK, change the flag sdkman_rosetta2_compatbile=true in .sdkman/etc/config. The JDK will then Shows up

IntelliJ - Just Works!

Gradle - Works, but the output fallback to legacy mode. Fixed in 7.0 nightly

Java Packages with Native Extensions - E.g. Netty using NIO. They provides an Arm binary, but you'd need to grab the latest versions

Python

PyEnv - Works. Preferred way to install Python anyway. Python 3.9.1, which is the official version supporting Apple Silicon compiles and works. 3.8.6 does not work though.

Data Science Libs - NumPy, a foundation package of anything data science, would not install via Pip. A fix is in the unreleased Numpy 1.20. The workaround is to install MiniForce (Miniconda) which provides a precompiled version of the libs. Then we can use conda install numpy for now.

pyenv install miniforge3-4.9

conda install pandas

Docker

(Mostly works now)

Keep in mind that while most popular projects provides an arm64  images, many doesn't. Docker will run the x64 images under qemu emulation and is much much slower. If you have a precompiled images you use and share with your team. You may need to build another one

It is possible to use buildx to cross build arm64 docker image from Intel machines. This is very useful for CI. I may do a separate blog for this.

Terraform

(Mostly works now)

Misc Things that Just Works

These can be install normally via brew

  • XCode – Works very very well. Faster than any Macs you've run it on.
  • Fish Shell
  • GoLang – v1.16 beta for now
  • iTerm2
  • Visual Studio Code
  • 1Password
  • NodeJS - Works

Things to Try / Don't work yet