When I handed in my company MacBook Pro a few months ago on my last day as an employed software engineer, I had a choice to make. Now that I was pursuing my own ventures, I could choose any laptop on the market. I had used an Apple laptop of some sort for the last 5 years, and I couldn’t imagine leaving behind the Unix environment and bash (or zsh, in particular), but I hadn’t been impressed with the meager speed bumps Apple had just released in July for its laptops and had some complaints:
- The keyboard. I had constant issues with keys sticking, with dust and little crumbs getting into the keys. Now, I’ll be honest, I probably didn’t help that I was prone to eating delivery pizza while coding at the time, but my last MacBook had handled my sanitary habits just fine.
- The Touch Bar. I tried really hard to like the Touch Bar, but it really didn’t contribute value to me as implemented by Apple, all while destroying the reliable and tactile position of the function keys
- Memory. I wanted a laptop with 32 gigabytes of memory. This one is Google’s fault. More and more these days new tools for developers are opting to be written with web technology, meaning Google Chrome and various Chromium wrappers take up a huge amount my available memory.
- Customization. I was fed up with Apple’s limited APIs for window management and workspace management. My logic was, perhaps if I bought a good Windows laptop, threw a good Linux installation on, and hacked a little, I could finally get the task-oriented window management I had been dreaming of.
The Dell XPS 15 had caught my eye already with it’s small, very 2018 bezels and GTX 1050 TI and the latest Intel. After reading through reviews of various laptops on the markets, I decided to give it shot, even though I’d have to compromise on the memory requirement since the XPS also didn’t offer 32-gigabyte memory option, nobody else seemed to offer it within my portability and price range either.
I placed an order for a Dell laptop and broke the stereotype of the startup founder with his coffee and MacBook ready to take on the world. Once my new laptop had arrived and I cracked it open for the first time, the slow process of my return to Apple began.
Once Windows was set up on the laptop, I immediately began the process of replacing it with NixOS. As a functional programmer, the core idea of a declarative code being the source of truth for the OS configuration immediately appealed, and I had been reading up on success stories of NixOS as your personal operating system. Unfortunately, about three months later, I ended up switching back to Windows with WSL (Windows Subsystem for Linux) as my primary terminal.
Why NixOS and Linux didn’t work for me,
NixOS and the Nix programming language and package manager are fascinating, and very well designed tools. NixOS allows you to define your global operating system configuration as code, including setting up shells, packages, drivers and power management. Setting up the optimum configuration for my laptop appeared pretty simple, there was a dedicated nix configuration I simply had to import that configuration as my hardware config for NixOS.
NixOS goes beyond the global system configuration though, Nix shells allow you to build encapsulated environments for your projects to run inside. A nix shell can be thought of almost like a Docker container, but due to the nix build system far more reliably reproducible.
However, the reason Nix didn’t work for me has little to do with Nix, it’s more an issue with Linux as a personal desktop operating system, particularly on a laptop. The lesson that was cemented here is that the biggest driver of the stability and ease of use of a tool is its popularity. Even though Nix is built on great technology, its relative obscurity meant that I had a more difficult experience with basics including driver setup, power management, and sound cards and video than I would have had on Ubuntu, and those experiences are of course significantly smoother for mainstream operating systems including macOS and Windows.
My largest issues were:
- Availability of quality software
- Battery life. 2 - 4 hours of battery life coming from Apple wasn’t an easy transition.
- Proper GUI scaling for the 4k screen. I spent hours trying and failing to setup usable GUI scaling for values between 1 and 2.
- Trackpad support.
- Freezes. As much as we like to talk about the stability of Linux, every X11 setup I ever used was plagued with the occasional complete computer freeze up of the UI, often without the ability to switch into another TTY, requiring a restart
- Lack of users struggling with the same issues I was. Popularity == Support
The reality: while I wanted to be a “hardcore developer” and own or use free software for my whole development stack, I’m too busy to put in that effort at this point in my career.
Could WSL make Windows an option?
Okay, so after a couple of months of pain I booted back into the Windows installation that was still on the SSD. I had heard about WSL, an ubuntu environment integrated into Windows, the day it was announced in 2016, and was very impressed with Microsoft’s change of heart since the days of Steve Ballmer. Before I gave up entirely, maybe Windows wasn’t so scary after all?
After running a few power shell commands to set up WSL and pulling in my dotfiles, I was back to the comfort of my customized oh-my-zsh shell I knew and loved. Setting up VSCode on Windows with WSL took a couple of extra hours of research, but it was surprisingly seem-less. I still don’t know how list a directory or remove a file with the Windows CMD shell after being on Windows for 2 months.
Then, it began. The same struggle I ran into with on NixOS. Any deviation from the most popular platforms in your industry, and you’ll have to make sacrifices. You can get pretty much anything you’d expect to work on macOS working with WSL, but it’s going to take you longer to set up. Again, I started to have the feeling that I was putting in extra effort for no reason.
Okay, but we’re software engineers, we’re all about trade-offs. How was the rest of the experience, outside of the shell?
- I have yet to use a single trackpad that can touch Apple in either hardware or software, the Dell XPS trackpad is no exception. The XPS does have a touch screen, but my conclusion is that Apple is pretty much right about touchscreens on laptops. I’m shocked that it’s become almost compulsory for Windows laptops to have a touchscreen, I couldn’t find a purpose for it outside the occasionally using to close Windows, though I’m sure less keyboard-centric designs and artists would find it more valuable.
- While I assumed Windows would have the advantage in terms of software quality, Windows seems to have a huge variety of crappy free software. In terms of tools for designers and developers, I quickly grew tired of all the “Coming soon for Windows” messaging
- After my 5 year hiatus with Windows, I wondered if complete Windows lockups had reduced. In my own experience, they haven’t. About every week I had to restart my computer due to the non-responsiveness.
- Speakers on the XPS 15 are just okay. They’re placed under the laptop and are often hard to hear on full volume. This is another hardware aspect that Apple leads the pack on, particularly with the 15-inch models.
- The XPS was noisy and often felt slow. I found that I would start playing music not because I needed the motivation but to escape the noise of the fans blowing. The laptop would occasionally get to a particular point where the fan would toggle on and off every 10 - 20s.
- I hate to admit this, but I also just felt out of place with the design of the Dell XPS, even if it’s just Apple brainwashing me into what a laptop should look like. I started to wonder why it seems that nobody in the laptop market besides Apple and Microsoft with the surface lineup seems to be able to design a beautiful, minimalist, industrially designed laptop. One comment my Dad made to me while visiting surprised me, as a long-time Windows user, “It’s funny seeing you lugging around that big ‘ole dell”
Perhaps the XPS was tampering my experience of the Windows laptop market, but this was the most expensive configuration of the best 15” laptop according to most reviewers I’ve followed. I was pretty disappointed.
At this point, I was making all these tradeoffs to… stick it to Apple for not catering to my needs as a developer? For 2 full USB ports instead of only USB-C?
Returning to the MacBook
As I’m wrapping up this post, it almost feels like this article is a hit piece on Dell sponsored by Apple. I swear it is my experience, however as much as I struggled with all the above, when I wasn’t setting up a new tool or changing configuration, the day to day of using macOS vs Windows with WSL was very similar.
I visited an Apple store and tried the updated butterfly keyboards Apple had released in July 2018. Surprisingly I liked the keyboard this time, and it felt oddly faster than the deep presses on the XPS. So I caved, bought a Mac, and am selling my XPS. With a few customizations to the Touch Bar with BetterTouchTool, I’m also finding it useful as a glanceable display. While I was excited about the open-source and highly customizable nature of the Linux desktop environment when I started the transition to the Dell, but unfortunately that’s not something I have time for quite yet.
There’s been quite a bit of dissatisfaction on hacker news and Mac to Windows conversions on hacker news lately, but for me I still think Apple provides the best experience for web and mobile app developers, and I’m hopeful that we’ll get some interesting results when Apple introduces its own chips as replacements for Intel within the next couple of years.