Developing on Windows on Arm: Surface Pro 9 or DevKit, or maybe a Mac?

Microsoft is making a push, of sorts, for Windows Arm64 – the latest in a number of attempts, but the most serious yet. Evidence of this can be seen in the drive to get Visual Studio 2022 built natively for Arm64, the release of a Dev Kit for Arm development on Windows (also known as Project Volterra), and the launch of premium Surface devices with optional Arm configuration, the latest being the Surface Pro 9.

The Dev Kit includes a Qualcomm Snapdragon 8cx Gen3 processor whereas Surface uses SQ processors, but there is likely not a huge difference.

Inside Microsoft’s Dev Kit (image: Microsoft)

Why the focus on Arm? The core reason is efficiency, whether that is presented as longer battery life in a laptop, more cost-effective servers, or a green option in an age where energy efficiency has never been more important. Arm has come to Microsoft’s Azure cloud as well, in the form of Ampere Altra VMs, generally available since September 1 this year.

There are therefore at least two reasons for developers to code on Arm devices. First, because they are more efficient for developers too; and second, to test functionality and performance on the same processor architecture as will be used for deployment.

The influence of Apple Silicon, also Arm-based, is significant. Apple’s M1 devices perform remarkably well, mitigating the premium price for the hardware. Microsoft needs Arm processors to compete, and developers wielding Apple M1 laptops may also want to install Windows in a VM, which requires an Arm64 build. Both Parallels and VMWare now run Windows nicely on an M1 processor.

We got our hands on a loan Surface Pro 9 to sample the latest Windows on Arm experience. Curiously the PR company supplied it without a keyboard cover, which is worth noting only insofar as it shows what a poor experience Windows 11 offers for pure tablet users. As it turned out, we could not even log on without plugging in a keyboard; and most Surface devices seem to be used like laptops most of the time, despite the clever engineering behind the detachable keyboards.

Developers can expect some friction. The first steps for us were to download and install Visual Studio, VS Code, and git. Git is interesting because there is no Windows Arm build on offer from the official site. There is a build but with some issues, for example with the credential manager, as discussed here. Git compiled for x86 will work of course; but native code is preferable. Windows on Arm has struggled in part because it is a minority choice, hence the effort to better establish it and improve the ecosystem.

That discussion include reference to Arm64EC which makes it possible to compile “emulation compatible” code that is Arm-native but follows x64 calling conventions and data structure layout, among other things, to interoperate smoothly with DLLs running under emulation. We are also told that “the Windows 11 on Arm operating system itself relies heavily on Arm64EC’s interoperability to enable running x64 applications.”

There is a touch of “uncanny valley” about Windows on Arm, where the compatibility with Windows on x64 is good enough that you forget about it, and then it reminds you. Developing with .NET for example all goes well until interop with native code is needed, then along comes “Error: an attempt was made to load a program with an incorrect format.”

The Surface Pro 9 is an attractive device with battery life up to 19 hours of “typical device usage” claimed (improving on 15.5 hours for the Intel variant, though the battery is the same) and support for a nano SIM with 5G connectivity. That said, it is in the shadow of Apple’s M1 and the Microsoft/Qualcomm SQ 3 processor seems to be no match for Apple’s chipset. We pitted it against a 2021 14” MacBook Pro with 16GB RAM. The Surface 9 Pro is £1440.82 + VAT once a basic keyboard is added, versus £1582.50 +VAT for the MacBook Pro at today’s UK prices; not a huge difference. Apple’s M1 Pro has 8 cores and runs at 3.22 GHz, where the SQ 3 has 8 cores and runs at 3.00 GHz.

Similar? Geekbench 5 gave a score of 1740 single core and 9729 multi core for MacBook Pro, versus 1078 single core and 5351 multi core for the Surface Pro 9.

We also ran up Windows on Arm in emulation on the MacBook, using VMWare’s excellent Fusion 13 which even provides a minimal virtual TPM so that Windows 11 installs without fuss – we did have a slight problem with the network drivers not being loaded, which trips up the install, but a quick Shift-F10 fixes it and once the VMWare tools are installed everything is fine. Notably, the Geekbench 5 single core score under emulation on the MacBook Pro was 1343, faster than the Surface Pro 9 native score, though multicore was well behind at 2037.

Developers in search of Windows on Arm for testing though may find that the MacBook Pro is all they need – or a Mac Mini.

There is also the Dev Kit to consider, a fraction of the price of a Surface Pro 9 at £482.50 + VAT (cheaper than a Mac Mini) and with better core specifications: 32 GB RAM, 512GB NVM2 SSD. This a cost-effective route to Windows on Arm, unless one manages to get it working on a Raspberry Pi or similar, and a good offer though early tester Jeff Geerling reported that “the innards are a bit of a mess. It seems obvious the guts were basically a Surface Pro X-style main board rearranged to fit inside a desktop case.”

Two big issues with Windows on Arm are first, that the hardware needs to improve to something closer to what Apple can deliver, and second, that it has to be sufficiently mainstream that the friction, whether for developer or other users, disappears. The latter at least is getting closer, and if Windows on Arm is good enough to get work done, there is always that energy saving to consider.