Trialling the MacBook Pro with Apple Silicon
Updated: Jul 1, 2021
After six years it was time to retire my old MacBook Pro (Retina, 13-inch, Early 2015). I maxed it out at the time to make it last as much as possible (3.1 GHz Dual-Core Intel Core i7, 16 GB), but six years is still a long time for a work laptop. I am pretty happy with the MacBook Pro concept so I wanted to stay in the same realm, the main question was: Intel or Apple Silicon? After hearing some positive feedback on the latter I decided to give it a go, and here are my first impressions.
First of all, I might be biased due to my previous laptop being objectively slow, but the MBP M1 is fast. Pretty fast. One anecdotical benchmark is the time it takes to run one of our heaviest builds using different machines (as it happens several people in my team have different versions of MBP). Here are some comparative numbers:
MBP (Retina, 13-inch, Early 2015, 3.1 GHz Dual-Core Intel Core i7, 16 GB 1867 MHz DDR3): 15 min
MBP (16-inch, 2019, 2.4 GHz 8-Core Intel Core i9, 32 GB 2667 Mhz DDR4): 8 min
MBP (13-inch, M1, 2020, Apple M1 Chip, 16 GB): 6 min
One could say that this is to be expected, newer laptops should be more powerful, but it's good to have something to back up the assumption. Graphical transitions feel really sleek, probably due to the fact that memory is now unified, so there is no more copying of data between main memory and graphic memory.
Migrating from the old to the new laptop is incredibly smooth using Apple's migration tool; it takes very long, so you probably want to set it up in the evening and let it run overnight. However, when you wake up in the morning, your new laptop will have all the data, applications, and configurations that your old laptop had, it's almost like you had upgraded your old laptop rather than getting a new one.
Applications and compatibility
Here is where I started to stumble upon the first glitches, although in my case they weren't big deals:
Homebrew: for some reason, the base installation for Homebrew must be in a different location for Apple Silicon. This means that, if you used Apple's migration tool to set up your new laptop from an Intel-based one, then your Homebrew installation will have been copied to what is now the wrong location. The best thing to do is uninstall Homerew and reinstall it (this time to the correct place).
PATH settings: it is not uncommon for tools installed via Homebrew to require you add some PATH settings to your .bash_profile. Since now Homebrew is in a different location, all applications installed via Homebrew also are in a different location, so you'll have to update all those settings.
Scala: it would appear that it simply doesn't support Apple Silicon, at least when trying to install via Homebrew. Too bad, but I'm not working on any Scala projects at the moment so I'm fine with that. Some reports indicate that it may be possible to use Scala with M1, so YMMV.
Docker: there is no native support but Docker can be run through the x86 emulator Rosetta. You'll be prompted to install this the first time you need and it will work transparently, so transparently that you might forget which applications are running natively and which ones through Rosetta.
Node: some software (for instance older versions of the frontend-maven-plugin) will get confused about the particular package that it needs to install to match the target architecture, but a bit of tinkering usually gets you there. To me Node and npm always felt rather flimsy and unreliable anyway 😛
This, to me, is MBP M1's Achilles heel. The new MBP with Apple Silicon is only available in two memory configurations: 8 and 16 GB. This is compared to the Intel-based MBP that can have up to 32 GB in the 13-inch version or up to 64 GB in the 16-inch version. Apple claims that, thanks to memory unification, people won't need as much memory because the new architecture makes memory utilisation more efficient.
I beg to differ.
Let's look at my four main memory consumers.
IntelliJ: no surprise here, open a few different projects and you can easily go past the 8 GB mark.
avconferenced: this is the process used to handle Sidecar, or using your iPad as an extra screen for your laptop. It's a nice feature, but boy is it hungry.
qemu-system-aarch64: aka Rosetta, the x86 emulator. One could argue that once applications go native you won't have this any more, but then you'll have the memory cost of the native application (in my case this was mostly Docker, also known for being memory-intensive). This might go down with time but I don't expect it to change much.
WindowServer: the graphic system.
Those four alone, pretty basic to a software developer, amount to more than 20 GB of memory, which means using a significant amount of swap (and feeling some sluggishness every now and then). Sure, you can close the projects in IntelliJ that you're not using and maybe sacrifice your iPad-based extra screen to save memory, but I think this proves that the MBP M1 is indeed short in memory.
In my opinion, this is a nice machine, indeed very fast and well designed. Compatibility problems are the usual teething issues and are expected to disappear as developers add support to Apple Silicon. The main issue, in my view, is memory: 16 GB is simply not enough. Once Apple manages to break that barrier this is going to be unbeatable.