I’ve spent a bit more than a week with my new Surface Pro X. What follows is review of my experiences with it as a try to set it all up for it to become my main machine. Be aware dear reader that this is not a review with benchmarks, graphs, and comparisons with alternative machines. This is a personal account and ecosystem commentary of how it has been working for a single person and what this person (me!) is feeling about it. That being said, read on for the nitty and gritty details. I’m providing you with a handy table of contents in case you want to go directly to topics that you’re curious about.
Most people consuming tech news are already aware of what this device is so I will spare you from having a lengthy section about its hardware. Suffice to say that it is a sleek, black metal, thins, 2-in-1 machine with a neat custom ARM chip and LTE always-on connection. The fact that it is running a new custom processor that is not based on x86 ISA is important and will play a role later in this review.
This device is aimed at digital nomads, which is more of a marketing term and a hashtag to post photos from fancy coffee shops with your laptop in the frame, than a real thing. Still, many people working in tech jobs or corporate environments are increasingly mobile working from anywhere and everywhere. The way gig economy is spreading all over the globe and more and more people are employed in a per project basis, it makes total sense for Microsoft to release a machine aimed at ultimate mobility.
Now, do I fit in this category? I think so because for the past 16 years I’ve been working from coffee shops all over the globe. My past and current work includes being a software developer for a Hindu Monastery in Hawaii, coordinating a digital literacy social program in vulnerable areas of Rio de Janeiro for Mozilla, and being part of a Scotland-based team developing a kick-ass cross-platform programming language which has all the fun of HyperCard and all the power a programming language built in the 21st Century.
Surface Pro X on a Coffee Shop.
Even though my work has been remote and mobile for all these years, the amount of time I spend working away from home increased a lot in the past seven years or so when I became a volunteer for Mozilla and part of the Mozilla Tech Speakers program. In the end of 2018, I moved to London. Being is safe country gave me the freedom to explore working from parks, museums, coffee and book shops, etc. As a new Londoner, I don’t have the extended circle of friends that Brazilians often do in their home towns causing me to fill some of my free time with small trips to all the historical and cultural apparatus the city offers. I am now more mobile than I ever was.
My former daily driver: the Surface Go at the British Library.
Up till now, my daily driver has been a Surface Go 128gb and I have nothing but praises to say about this device. I brought it because my older Surface Pro 4 broke and I didn’t had the money at the time to buy a Pro Surface device. The Go was supposed to be a stopgap device, enabling me to work while saving money to buy a beefier device later. Still, I liked it so much that I spent almost all of 2018 with it and if Microsoft released a Surface Go with LTE and the SQ1 processor, I’d buy it in zero time. Ten inches is my ideal form factor for my daily driver. It is small enough to fit in any bag or table. The only reason I decided to migrate away from it is that my current workload is stressing the little Pentium CPU a bit and it is annoying and that I wanted to check out how the always connected PC proposition felt like.
It is my own personal and biased belief that most of the Surface Pro X early adopters are not corporate people who need a mobile machine for their office work, which is the value proposition Microsoft is selling for this machine, but instead are tech-savvy fans of new technology who overlap a lot with developers (specially web developers). But then, I am biased since I am a fan of new stuff and a developer.
As mentioned above, this machine is not using the x86 ISA and is instead based on ARM64 which is closer to what you’re probably running on your phone or iPad than what your laptop is carrying inside. The reason to build ARM based devices is easy to understand, they are more power efficient than their x86 cousins which leads to machines which last longer and requires less moving parts (as in fans and heat dissipation stuff).
The problem is that applications built for one ISA don’t usually work on another ISA. Microsoft knows what it is to ship a system that has no apps available for it so they worked hard to provide some compatibility layer with x86 apps. The new Surface Pro X is able to run applications compiled for x86 if and only if they are 32 bits applications. Most of the current applications on Windows are 64 bits but many vendors still ship the same apps compiled for 32 bits as well to maximize their reach as there are still many 32 bits machines out there. So in the new machine you can either run native ARM64 Windows applications or emulated x86-32 Windows applications. The keyword is emulated here. By running x86-32 win32 applications, you’re adding layers of translation into the computing load of your machine that impact its battery life. So in the end, using those apps lead to shorter battery life and an experience that is not as snappy as native ARM64 applications since they are all running through emulation.
This emulation layer is needed because without it the availability of apps for the new machine would be severely limited and we all know that without apps no one will join the platform. This is the first flagship device running Windows on ARM, it is meant to show the world what ARM64 is able to do. The fact that most of the journalists reviewing the device focus their attention on the performance of emulated applications is a complete disservice to the platform and, in my humble opinion, an indication that the reviewer didn’t understand the place of emulation in this category. It is as if we were back in early 2000s with Apple releasing Mac OS X and all the reviewers were talking about Mac OS Classic emulation and how to run your classic apps instead of focusing on what Mac OS X was actually offering.
Microsoft must up their game regarding being a developer on a Surface Pro X. The experience of using VS2019 and trying to cross-compile from x86-32 to ARM64 has a lot of friction. Until a developer can buy this device and be productive with some minimal steps, this thing will not catch on.
There needs to be a VS package for people who are developing for ARM under ARM.
Finding applications that are compiled for Windows on ARM is hard. It is early days for this platform and not all pieces are yet in play. Many programming languages are yet to ship under this platform which prevents software vendors from shipping their products for the platform. The current challenge in my view is having working development tools without which no app can be recompiled. While we’re waiting for a better dev tools story, we make do with 32 bits apps.
The only reason I am actually able to use this machine effectively is because, as a web developer, most of my workload happens inside a browser and Mozilla already ships a version of Firefox compiled for Windows on ARM. I am a Firefox user and a Mozilla volunteer, I can’t actually work without Firefox and running an emulated one 24/7 would be so bad that I’d probably just keep using my Surface Go.
Firefox Developer Edition running on ARM 64-bits
I don’t use Microsoft Office much. The only application I really use is OneNote and that is also running fine even though all the Microsoft Office apps appear to be running under a combination of ARM and x86-32 code. For example I can see two processes for OneNote, one is x86-32 and the other is native ARM. Even if it is running partially under emulation, the apps still feel fast enough for daily use.
The other apps that I keep open all the time are the Windows Terminal, which runs as native ARM even though the powershell process inside it is running as x86-32, and Telegram which is x86-32 as well. So thanks to the emulation layer, I am able to keep my daily apps working while the developers figure out how to compile stuff for ARM and the few applications which are already running natively provide a fantastic experience.
The turning point for the Windows 10 story when it comes down to its developer experience has definitely being the release of the Windows Subsystem for Linux which enables a Windows 10 user to launch a full copy of the Linux userland from a terminal. The side-effect of this is that we can all use most of the development tools provided for Linux without actually running Linux. I’m using WSL1 which is quite different than WSL2 (which is currently available only to testers in the insiders program). I’m happy with WSL1 and running Ubuntu, which is as common as a Linux can be, allows me to benefit from all the Web Development experience I know from Linux (and Macs).
WSL is running as native ARM64 on the Surface Pro X so using little Linux apps doesn’t incur the costs of x86-32 bit emulation. You still pay the costs for Linux syscall emulation but those are cheaper than the x86-32 bits one (not a scientific fact, more like my own subjective experience). So if you can do your development stuff from inside WSL, you’re going to have a good experience.
Ubuntu on Windows 10 on ARM64
Language-wise I enjoy doing desktop apps using:
Besides being a web developer, I enjoy doing desktop applications as well and that is where the 32bit emulation is most noticeable for me as none of the languages I enjoy using have been compiled for ARM64 yet. I can still use their 32bits version though, it is just a bit slower.
For my web work, I can remain under WSL but I still miss a ARM64 version of NodeJS because I am involved with some FOSS projects which use Electron. I have a prebuilt unofficial build for it here, and another for Electron but since the plumbing for node-gyp is not yet working with ARM64 under Windows, I can’t work on any of the Electron-based projects I am a part of from a native ARM perspective. I can still work on them through x86-32 emulation (which means running NodeJS, Electron, VS, and everything else under emulation). It works but I can’t wait for the ARM stuff to be ready.
Besides that, what I really miss and it impacts my work every day is a native editor. I’m running Visual Studio Code through emulation and although it works, it uses to much power for my taste. I’d love to have Sublime Text or VS Code running under ARM, that would improve my experience a lot.
In essence, I’m only missing a good native editor...
I’d wake up and go to a coffee shop. I’d use the shops wifi if it was good but if it isn’t it doesn’t bother me as I can usually get good LTE reception. Most of the working hours are spent running Firefox, Linux tools under WSL and VS Code. The screen is gorgeous, the machine gets out of the way in the way good tech does when it is designed well.
My battery life is not up to the advertised standard but I blame the amount of apps that I tend to run under emulation. It is still better than my Surface Go though. When I am running out of power, I recharge using a mophie powerstation similar to this one, this way I don’t need to concern myself with coffee shop territorial disputes to place my butt near power sockets.
In this week I tried to use my free time to explore Windows on ARM as a developer more. To try to port some stuff I enjoy to the platform. Using Visual Studio 2019 under 32bit emulation to cross-compile to ARM64 has been hard. I am happy that this is possible but I wish Microsoft spent more time making this experience more pleasant. I’m not a C/C++ or Windows developer. This is the first time I am actually using Visual Studio so I am sure I am quite lost. But I managed to both compile Lua which is a programming language dear to my heart and the Fossil SCM which is a self-contained version control system that offers more features than GIT or HG. I’ve placed binaries for them at this sourcehut repository in case anyone wants them.
Moving from a slow machine such as the Surface Go to the Surface Pro X has the positive side-effect of making everything feel fast for me, even the emulated stuff. All in all this has been a fun week and I am really happy with this machine.