I’ve been a Mac user for all my life, but with Apple’s latest MacBook Pro, I’m pondering switching to PC/Linux. Here’s why.
The first computer we had at home was a Macintosh SE 1/20. The 1 stands for 1 MB RAM, the 20 for 20 MB of disk space. I only ever owned a PC once when I couldn’t afford a Mac in high school and quickly bought a Powerbook as soon as I earned some money making websites during my studies.
I had one very bad experience with a 2008 MacBook Pro (the first unibody design) that was locking up all the time, but besides that, I’ve been a happy customer. I’m currently owning a MacBook Pro Late 2013 that features a 2.6 GHz i7-4960HQ and 16 GB RAM. The Nvidia GeForce GT 750M is powerful enough to drive the retina display and a 34 inch LG wide-screen (3440x1440 pixels) simultaneously, and runs games from a couple of years ago perfectly fine, and even current games like Shadow of Mordor run very playable on medium settings under Bootcamp.
I’m a self-employed software engineer, and in Germany computers are written off over three years. Since this is also my main work tool and customers obviously don’t pay me to wait for compilation cycles to finish, I’m typically buying a new machine every three years and max it out completely.
The last MacBook Pro updates were minor speed bumps and I was also a bit disappointed that Apple had switched to Radeon. So like many other people, I was looking forward to the new MacBook Pro that would hopefully solve a couple of my current issues.
Professional Software Development in 2016
Distributed is the new normal. In most of my data engineering projects, I’m using software like Apache Spark, Kafka, ZooKeeper, Cassandra, and ElasticSearch - in combination that is. Each of these is typically operating in a cluster. During local development, I would previously use embedded versions in integration tests. For example you can start Spark in local mode which then runs in a single JVM, or find embedded versions of Kafka, ZK and ElasticSearch on GitHub. These embedded versions take a long time to start up, don’t always work reliably, and also don’t realistically simulate a distributed cluster environment. Installing the software locally using Homebrew doesn’t allow me to use multiple versions in parallel and is seperate from the continuous integration process.
Along comes Docker and solves all of these issues1. You can start services in isolation, easily test different versions and configurations, and use the exact same setup for development and both local and continuous integration testing.
Docker for Mac unfortunately is not very efficient, because Docker is mostly an API and UI around Linux namespaces and control groups, concepts which don’t exist on macOS. When I run Kafka and Cassandra as well as a couple of services, the Mac is swapping itself to death. It’s no longer possible to compile at an acceptable speed.
Running a data center on my laptop must be possible, and my colleague’s low-voltage dual core 32 GB RAM machine running Fedora Linux does this with ease.
Machine Learning (ML) is another big topic that is already important as of today and increasingly becoming part of many software and real-world products. It’s only fair to assume that many projects over the next couple of years will incorporate some sort of Machine Learning algorithms just to stay competitive. ML algorithms typically calculate their results on purely numeric features which can be computed much faster by GPUs. Nvidia is pretty active in this space with their CUDA API.
So to stay up-to-date and capable to do my work over the next three years, what I need is a machine with 32 or even better 64 gigabytes of RAM, a fast multi-core CPU, and a decent GPU.
MacBook - PRO?
So finally Apple unveiled their latest MacBook Pro - featuring an underwhelming 16 gigabytes of memory, just like my current 2013 MacBook Pro. Remind you, I’d keep this machine for at least three years. Is Apple seriously suggesting that 16 gigabytes of RAM will still cut it in 2019/2020?
For Machine Learning, I’d prefer an Nvidia GPU with at least good performance. Even a higher voltage GPU would be ok since most of the time you only use the discreet GPU when on a socket. On mobile you only use the integrated GPU. The Radeon Pro 450 only has 2 GB RAM and doesn’t seem to perform that well in benchmarks, and upgrading to the 460 to get 4 GB is extremly expensive and still not competitive with Nvidia.
So the only thing that really seems to have improved is the SSD with its impressive read speeds, benchmarked around 3 GB/s read speed (for large files, small files are more around 2 GB/s). PCIe/NVM is of course available in PC laptops as well. This also doesn’t completely solve the swapping issues as RAM is still operating at an order of magnitude faster.
The touch bar looks interesting, but when coding I’m using an external keyboard and mouse, so I’d only use this when I’m on the go. When coding it doesn’t seem very useful anyway because you’d have to change context between code and touch bar2. Keyboard shortcuts are more efficient, and losing a haptic esc-key will make me look on the keyboard even more3. Maybe it will be useful for debugging or profiling once tools start to support it.
The same goes for the improved screen (which apparently seems to draw a lot of power) - the screen is nice when you’re on the go, but when you working in a professional environment, you are using a big external display.
When I max out the machine at 1 TB SSD and the Radon 460, it’d cost me nearly 4100€. You wouldn’t even be able to buy a PC notebook that expensive.
The case for Linux
Docker on Mac uses HyperKit, a hypervisor based on macOS’ Hypervisor.framework, to run a thin virtualization layer. So in essence you’re running a Linux VM which also means you can’t inspect processes running inside Docker. Creating custom networks is also not supported. Docker for Mac might improve over time, but it will certainly take a while, and will always be a virtualized solution.
Linux is the operating system that powers all of the servers I ever deploy software to. So when switching between my Mac and a server (logging in via ssh or writing shell scripts) I’m dealing with a different environment. Many tools are similar, but not identical. For example, to generate a UUID, on Linux you have to call
cat /proc/sys/kernel/random/uuid, on the Mac
uuidGen. Here the Mac version is simpler, but often times the Linux tools have more capabilities, and the arguments do different things.
Finally, cyber attacks have been increasing lately. Apple has never put a big focus on security, so Linux is way more secure than macOS. Of course you still have to know what you are doing, but on macOS you are very dependant on Apple to fix certain security bugs, which can take a while4.
The case against Linux
Linux has a lot of user interface issues when you compare it with the Mac, where everything is integrated and supported. Switching between a discreet and an integrated GPU might not work, even switching or dis-/reconnecting displays sometimes doesn’t work. If your laptop is a little too new and there are no drivers yet, you’re out of luck.
In general, macOS has much better usability and stability than Linux. Even though Apple’s software quality has declined over the last few years, the issues you encounter on the many flavors of Linux and desktop managers are mind-boggling.
And no, I don’t want to update my Kernel all the time hoping it will fix some obscure bug with newer hardware or other instabilities.
So this is the first time in my life I’m considering leaving macOS and Apple hardware behind. But what PC hardware is out there? In researching available notebooks, here is a short list of what I found.
Dell XPS 15 - Appears like a solid and ok looking choice with enough configuration options. Right now the graphics card might be a bit outdated, hopefully the next refresh will update to a Nvidia 10xx. Dell’s support has an excellent reputation, so this seems like a good candidate to me.
Alienware - Dell’s gaming laptop line. These machines seem to be powerful beasts, but they don’t look like anything I would use at a customer’s site. They also don’t seem very mobile.
Razer Blade - This machine looks pretty cool and runs a powerful GeForce GTX 1060. It is however limited to 16 GB memory, and what from I’ve read the support doesn’t seem to be very good.
Tuxedo Computers - As an honorable mention, Tuxedo computers offer about any configuration one might want and is specialized in Linux machines. But they are ugly as hell and I’m not sure if they’re really quality machines.
I intend to wait for either an updated Dell XPS 15 with a newer GPU and maybe Kirby Lake CPU. Or if Apple change their mind and offer a reasonably priced machine with plenty RAM and good GPU, I would probably buy Apple again. We shall see.
If you’re in the same situation - what will you? What laptop are you buying, and to what Linux flavor are you switching?