By: +David Herron; Date: June 29, 2019
I don't have any special insight into whether Apple really will switch to ARM for desktop and laptop computers. Apple has been talking about this for a long time. Apple has experience with switching CPU architectures - such as the PowerPC to Intel x86 switch many years ago. I lived through that switch and do not recall any issue at all.
For a general discussion see: Does the seven new MacBook models mean the ARM MacBook is on the way? In this article we'll focus on issues software developers may face with ARM-based laptop and desktop computers.
A big glaring issue is Performance, meaning will an ARM based desktop or laptop computer have the CPU and GPU performance necessary for current Mac users to be happy? The large number of smart people working for Apple have surely thought about this already, and have surely developed prototype ARM hardware already. On YouTube all the reviewers are focused on whether the device performs well with the Cinebench benchmark, to gauge performance while editing 4K video, and whether it plays various graphics-intensive video games very well.
That's a GPU-based use case and Apple has surely thought about it and can surely make sure the GPU's for ARM-based Mac desktops and laptops have the needed performance.
Most software developers have CPU-based performance needs, however.
Software developers need to know whether the machine can compile software quickly. And since Machine Learning and Data Science are becoming so important, whether libraries like TensorFlow or SciKit-Learn will exist on the system, and have GPU acceleration.
But there are some specific developer-focused things where it is really convenient for a software developer's laptop to have an x86 processor because that's the same type of processor typically used in server computers.
Obviously the compilers running on an ARM processor will natively output ARM code. That's fine if the software is developing for ARM processors. For example the developer could be developing iOS or iWatch applications and Xcode will be able to do the right thing. But what about those of us developing code for deployment to server systems?
Specifically - Docker and similar Container systems have become extremely popular.
A common task is launching an instance of the app server in Docker containers on the laptop. Does a database (e.g. MySQL) running inside Docker on an ARM system have the needed performance for a developer?
A huge advantage of developing Docker containers on the laptop for deployment to server is being assured we tested in exactly the same environment that is deployed. The environment inside a Docker container is not just similar to the server, it is identical. This should make software development just a little more robust.
In the past Mac-based developers writing software that's deployed to Linux servers relied on the environment being similar. We used MAMP or Homebrew or MacPorts to cobble together a development environment somewhat similar to the Linux used on servers. The entire set of open source developer tools is available through one of those three platforms. With that we could develop PHP or Python or Ruby or Node.js or Java code on our Mac. Since these are high-level languages we had a knock-on-wood sort of promise to ourself that the Mac-based environment was close enough to the server environment that it's all okay. Based on that we promised our managers it was good enough, and went about coding away on our cool MacBook Pro.
With Docker we don't have to rely on similar because an x86 Docker image on Mac is identical to the x86 Docker image that's deployed to Linux on the server.
But for this picture to work, we need an x86 processor on the laptop because that's the processor type used on the server. The proof for that is in our Dockerfile's:
FROM mysql/mysql-server:5.7 EXPOSE 3306 COPY my.cnf /etc/ ENV MYSQL_RANDOM_ROOT_PASSWORD="true" ENV MYSQL_USER=USERNAME ENV MYSQL_PASSWORD=PASSWORD ENV MYSQL_DATABASE=notes CMD [ "mysqld", \ "--character-set-server=utf8mb4", \ "--collation-server=utf8mb4_unicode_ci", \ "--bind-address=0.0.0.0" ]
The very first line declares the base Docker image from which this Dockerfile is derived. If you trace that back you'll find the
mysql/mysql-server:5.7 image is derived from an x86 Linux (possibly Debian).
Yes there are ARM-based Docker images available. But that would put us in the position of developing the service using an ARM-based base image on the laptop, and using an x86-based base image on the server. We'd be back to using a similar environment on the laptop to what's deployed on the server.
A few months ago I did a blog post about the need for ARM-based computers for developers because of the existence of ARM based servers. That's the flip side of the argument I've presented so far.
Yes there are companies developing ARM-based server hardware. It does exist and it is a thing. Because of those ARM based servers, some say we must have ARM-based laptop and desktop systems that are good enough for software developers to develop on.
Whatever is happening with ARM-based servers, it is a drop in the bucket compared to the x86 server market today. The vast majority of us deploy to x86 servers and therefore need x86 laptops and desktops for the reasons stated already.