TL;DR

  • The Surface Pro X is not a device meant as an optional supplementary companion
  • ARM64 is currently planned to be the next big shift in the Computer space from x86_64
  • This device was mandatory for the shift to begin
  • Apps are starting to get recompiled and optimized for this new platform
  • The current situation relates a lot like Apple shift from PowerPC to Intel
  • Microsoft should have done better communication about the fact that the x86 emulation layer is not designed to be your primary means of running applications for both the press and consumers.
  • Developers should have the ability to get cheaper options to develop for the platform
  • This is not Windows RT again
  • Chromium / Chrome is currently getting ported to ARM64, but not yet publicly available, Firefox is however.
  • Electron the framework used by many “web” apps like Slack of Visual studio code is already available for ARM64, Edge based on chromium has private builds daily for ARM64 as well

For publications

I respect your work, and I agree with some of what you said, but not all of it or not how most presented it to people. I also understand some of you may not have thought of what I’m explaining here, because we don’t have the same point of view on this situation. This is why I decided to write this piece.

A few tips however for future reviews of any ARM64 device running Windows if that happens again:

  • Benchmarking software is generally only for AMD64 and X86. There’s one exception and it’s Geekbench 4, not 5 but 4. Use Geekbench 4 if you want to benchmark the device.
  • UPDATE: it looks like Geekbench 5 recently added support back for Windows 10 ARM64 last week and I’ve missed this update, here’s a link to the changelog https://www.geekbench.com/blog/2019/11/geekbench-504/
  • Benchmarking the x86 subsystem is indeed useful, but don’t post the results as this is the native performance of the SoC, it isn’t.
  • There’s no current benchmark to know how good an ARM64 GPU performs on Windows
  • Driver compatibility is indeed an issue currently, and I wouldn’t expect non current hardware that require third party drivers to get updated for ARM64, as drivers generally don’t even get any update from most vendors, even for amd64 or x86 after the first release.
  • Firefox is currently the only browser along with Edge UWP to run natively. Electron technically also is, Chromium and Chrome and Edge based on Chromium are yet to come as of 11/12/2019
  • Developers do have access to all required Software Development kits and Hardware development kits for ARM64 Windows and can build apps that run freely on these devices with no restrictions.

The actual post

Microsoft released its Microsoft Surface Pro X product to consumers in fall 2019. Starting with the first week of its debut, multiple publications started reviewing the device, and for some of them going as far as criticizing the product, sometimes very harshly. This review isn’t meant to be an overall review of the surface, as you can read up on that in other places, but is meant to be a reaction to the criticism voiced by many in the journalism space and an answer to most of these concerns that I do not agree with.

Here’s a little bit of context about myself, for those who may not know who I am. My name is Gustave Monce, and I’m a computer science and networking engineer. I have experience in programming applications for a variety of platforms and architectures, and I tend to hack around hardware during my free time at home.

I’ve spent a good chunk of the past 2 years with a group of max 10 people working with Windows 10 on ARM related projects during my free time (the variant of Windows 10 designed for the armv8a ARM64 processors). I have thus a bit more experience in regards to this platform than most did when reviewing this device and the Operating System it runs.

This is my point of view, and no it is not just composed of positive things about Windows 10 for ARM64 processors nor negative things.

I was surprised when reading the first reviews about the press criticizing the device for being a poor performer at most applications, and here’s why:

Sure Windows 10 on ARM64 is a new architecture but it does have one particularity for a new OS port, it can run intel x86 applications. I think the first misunderstanding lies here, the compatibility layer for running Intel x86 applications on such a platform is certainly not meant to be used as a primary subsystem to run applications. It is not designed for doing this. It is designed however to help consumers transitions easily from the older architectures. And that’s key. ARM64 is not a “baby” architecture, it is not meant as a cheaper option (and pricing certainly suggests the same). It is where computing is going in the future.

As a reminder, in the early 2000s Apple made the decision to transition from PowerPC processors to Intel Processors. This decision is relatable to what is currently happening here with the Surface Pro X, if not identical. Apple had to ship in its Intel port of Mac OS X an emulation layer to run old PowerPC applications. It certainly didn’t run them as well as on real hardware, but it was provided as an help for the consumers while the developers start building applications for Intel. We have the same situation here, but most people do not seem to understand it. And that might be because back in the days the performance wasn’t really different compared to today’s very powerful chips and it might also be due to people thinking this kind of platform isn’t meant to be the next big thing in computing (or planned to be).

Some journalists may have thought the device is slow because no internet browser other than Microsoft Edge UWP application is ready for this architecture, and that’s a bit false right now. Firefox is already released for windows on arm and runs quite well. Other browser vendors such as Google or Microsoft are also actively working on bringing chromium to ARM64, with daily compiles being built. But they’re not out to the public yet which is a shame and could have created some of the valid performance criticisms of the x86 emulation layer.

And that’s the first issue I have with some of Microsoft choices, personally I would have waited to release such a device until at least most first party applications from Microsoft are available for the platform. Office right now for example is not a true ARM64 application on the surface pro x it’s an hybrid application with x86 and ARM64 code.

I think what should have been done on the OS as well, would have been displaying a warning when an user attempts to launch an x86 application, saying that while the application will run on this device, it is not well optimized for the platform and you may want to ask the developer for an optimized version. This has two benefits, firstly the user will know that the version he downloaded isn’t optimized (iOS used to do the same thing back when the iPhone 5S was released with an ARM64 soc and people understood it well), secondly I, as a developer, will be able to get informed that the user is not using an ARM64 version of my application. And that’s very important. As a developer I would want to know if the bugs I get reported to me about my application are due to the incorrect version installed or not, otherwise how would I know without some kind of telemetry system that can detect if the computer is really ARM64 from an x86 context? And I’m not going to talk about the potential issues of updating users of an x86 version of my application to an ARM64 one without ugly workarounds.

I’ve seen media criticize the device for feeling exactly like the Surface RT, it is not for me as a developer, far from it. The Surface RT was an ARM32 device running a NVIDIA Tegra processor which wasn’t the fastest on the market either, and notably not as performant natively as Intel or AMD. But the main issue simply was not here. Windows RT which is what this device really ran, didn’t let you run apps on it. Yes, even if us developers wanted to make a classic application for the platform, even if it’s built as ARM32, we wouldn’t be able to run it. And that’s very different from ARM64 Windows.

Windows for ARM64 certainly needs time for developers to catch up, and I agree with that opinion. Many application vendors (including Adobe) announced the availability of their apps optimized for the platform. Electron, which is an application platform used by many apps like Visual Studio Code, Slack and others just got released for ARM64. Things are certainly moving.

So yes perhaps the platform didn’t have many optimized applications for it, and I understand this, but it’s normal and expected for a brand new platform.

Some may ask then, why not shipping an actual device with two processors, one amd64, one ARM64? That may sound like a good idea but in fairness you will lose all the benefits the ARM design brings to the table, and the amount of engineering and resources required to make that work seamlessly don’t match up with the end result. People would also get confused, and the price certainly would be even higher. While I can’t comment on if some company already attempted this, I can say that it doesn’t sound like a good idea. And honestly when you switch to an entirely new platform, there will be a time where you’ll get a massive shift from what exists today, perhaps a bit brutal, but it is inevitable.

And then comes the issue of the price. Earlier I’ve said that this wasn’t meant to be a “baby” platform, and that’s true. And while most devices were premium for that platform, I do think there’s a need for some sort of “developer kits”. For apps to become available for the platform and work well, this platform must get into the hands of developers first and/or quickly. Most of us don’t earn an extraordinary amount of money to buy one every month, I think there’s a need for a cheaper solution allowing us to develop for the platform and test our apps, even if it has to be remotely virtualized from the cloud.

I spent the last year helping shape a port of this platform to an old 2015 phone, and I’ve noticed some developers (and even engineers at Microsoft) used the port because it was the cheapest and only option they had on hand to develop for Windows ARM64. For example the Sysinternals team managed to make a port of some of their utilities (like procmon) thanks to that, which shows the need for such an option.

So yes, I sort of disagree with the press opinion on the device as I think the current situation was largely misunderstood by some due to some mistakes from both Microsoft and consumers, and this platform is here to stay, at least that’s the plan. But I also think better solutions should also come from Microsoft to help the platform take shape, and certainly more communication as well.

Currently, yes the Surface Pro X is not the device most consumers should get because apps have not fully transitioned to ARM64 yet. But clear signs of this happening are present today, and it’s just a matter of time for things to settle down. But this certainly isn’t such a reason to outright bash the product right away as there’s clearly a potential in this platform in the future, and without this product the platform would never be able to develop itself either. I sympathize with everyone that did say that the device needs the app ecosystem to move forward to be successful, but I just wanted to remind the rest who may have not remembered about that fact.

I hope this post clarified some concerns, and feel free to share this post around on the internet.

G