Three Months Into the M1 Switch: What Still Doesn't Work

Three Months Into the M1 Switch: What Still Doesn't Work

Tutorials apple-silicon docker homebrew m1-mac python

So it's been about three months now since I moved my daily driver over to the M1 MacBook Air, and I keep telling people it's basically fine, which is true, except for the parts where it very much is not fine. I wanted to write down where things actually stand right now for anyone who's still holding off on the switch, because half the blog posts from November are already out of date and the other half are Apple marketing copy with a stopwatch in them.

The good news first, because there is some. Native apps are stupid fast. Safari, Mail, Xcode, all the Apple stuff plus anything that's shipped a universal binary, just flies, and the battery life thing is not exaggerated even a little. I left this thing unplugged on a Saturday doing actual work (writing, some light Python, way too many Chrome tabs) and it was still alive Sunday morning. My old 2017 Intel Air couldn't survive a long lunch.

Homebrew is mostly there but "mostly" is doing work in that sentence. As of right now brew itself runs natively if you install it fresh into /opt/homebrew instead of the old /usr/local path, which trips people up constantly because tons of blog posts and Stack Overflow answers still assume the Intel path. But a chunk of formulas still don't have ARM bottles built, so brew falls back to compiling from source, and some of those source builds just fail outright. I lost about forty minutes last week to a librdkafka dependency that wouldn't build clean. Ended up just running that one install through Rosetta.

Speaking of which: the arch -x86_64 zsh trick is basically load-bearing infrastructure at this point. If something refuses to build natively, open a new terminal tab, run that command to drop into an x86 shell under Rosetta 2, and try again there. It's not elegant but it works more often than not. I've got one terminal profile that's permanently pinned to Rosetta mode just for the stuff that hasn't caught up yet.

Docker is the rough one. Docker announced a tech preview of Apple Silicon support back in January and it's usable now, but "usable" means occasional weirdness with volume mounts and CPU spikes that make the fan spin up for no obvious reason. If your job involves spinning up a lot of containers all day I would honestly still keep an Intel machine around, or at least not sell your old one yet. I haven't, mostly out of laziness, and I'm kind of glad about that now.

Python is a mixed bag depending on what you're pulling in. Base Python 3 stuff, fine. The second you need psycopg2 or lxml or anything that wants to compile a C extension against a library that hasn't been rebuilt for ARM, you're back to the Rosetta terminal trick, or you're digging through GitHub issues for the specific package looking for someone's fix from three weeks ago. I've started keeping a little text file of exact commands that worked, because I do not trust myself to remember the right incantation next time.

One thing nobody warned me about: VS Code extensions. The editor itself runs natively now, which is great, but some extensions bundle their own native binaries (certain linters, a couple of the remote-dev tools) and those can silently fall back to Rosetta or just error out with a message that doesn't tell you why. If an extension is acting weird on M1 and everything looks configured right, check whether it's actually one of these binary-bundling ones before you burn an hour on your own config.

None of this is a complaint about the hardware, to be clear. The chip is genuinely great and I'm not going back. It's more that "it just works" isn't quite true yet if your workflow touches anything with native dependencies, and I think it's worth saying that plainly instead of pretending the transition is already finished because the keynote made it sound finished. Give it another six months probably. I'll update this if the Docker situation gets better, because right now that's the one still costing me actual time most weeks.

If you're on the fence and your work is mostly browser, editor, and terminal for scripting: buy it, you'll be happy. If you're doing heavy Docker or a lot of niche Python packages: maybe wait, or budget some annoyance into your week.