Foreword
As everyone knows, running a computer operating system on ARM64 hardware comes with plenty of compatibility headaches. Thanks to Microsoft's long-term efforts, Windows on ARM has become increasingly usable — even x86_64 applications run smoothly through translation with relatively low performance overhead, while delivering noticeably better battery life. For example, the Surface Pro X can achieve an impressive 6–7 hours of screen-on time when running purely ARM-native programs, whereas the Surface Pro 9 Intel version, with roughly 20% more battery capacity, barely lasts 3.5 hours or less (without battery saver mode enabled). What's more, even though the Pro X was released a full three years before the Pro 9, its day-to-day performance experience is virtually indistinguishable — in fact, under heavy load the Pro 9's fans spin up wildly and the system stutters, making its performance release experience arguably worse than the second-generation Surface Pro X released back in 2020. So, running a computer operating system on ARM chips holds growing potential for portable devices.
However, none of the Linux distributions currently on the market have been adapted for Snapdragon chips, especially the 8cx Gen 1 and Gen 2. I initially thought I'd start with the distributions themselves, but after trying to boot seven or eight of them, every single attempt failed. I searched through nearly all available resources (in Chinese, English, and other languages) and found that no one had written an installation guide for the Surface or other 8cx devices. This posed a significant challenge to my hands-on experiment.
So if Windows on ARM laptops are this good, why was I so determined to get Linux running on one?
That brings us to the much-maligned WeChat, which doesn't offer an ARM64 Windows build. The battery life I just mentioned assumes that all the software you run fully supports ARM64. Throw in a few x86-64 programs running simultaneously and battery life drops back to around 4 hours — a loss of 1–2 hours. Still not worth it. So, I decided to install Linux on this machine.
The Arduous Process
The Reason
First of all, running an operating system on an ARM device isn't inherently difficult. As long as the BIOS is as straightforward as on a regular computer, the chip is supported, and the OS kernel can accommodate the machine's critical drivers, your ARM64 computer can basically run. A typical Linux kernel includes most common open-source drivers, which is why when you install Linux on a regular computer, you usually don't have to deal with the annoying driver installation process — just boot into the live environment, click install, wait for the installer to finish, and the computer is ready to use. But this is a Surface. Never mind that the Surface itself differs from ordinary computers — its touchscreen, keyboard, speakers, and so on aren't the common plug-and-play products you find on the market, making those drivers hard to come by. The Snapdragon 8cx2 chip alone is incompatible with almost all Linux distributions, and the chip in this machine isn't even the original 8cx2 — it's a Microsoft-modified version named Microsoft SQ2. So, we can only wait for experts to adapt it.
The Process
On the first day, naive as I was, I tried starting with the distributions themselves: from Ubuntu to Debian, from CentOS to deepin. Among them, Debian 13's non-free hardware edition successfully booted to the system installation screen, but the USB ports, Surface keyboard, and touchscreen were all unusable. I began to realize that a generic kernel alone simply can't handle installation on hardware like the Surface.
On the second day, I turned to the linux-surface project. But this project has a misleading aspect. The device support list on the homepage clearly doesn't mention Surface Pro X support (all supported devices listed are x86-chip machines), which is why I initially dismissed this project and was only searching for Linux systems that could boot on Snapdragon 8cx chips. Going back to the project's homepage, there's a very inconspicuous project further down: aarch64-arch-mkimg. I discovered this is a bootable image (ArchLinuxARM — I had considered it initially, but there was no official adaptation), essentially a USB boot image that can only boot into a live environment. To my pleasant surprise, after flashing it to a USB drive, the display worked, USB worked, and even the Surface keyboard and WiFi were properly supported. With this image, even if you can't use it to install Linux directly onto the hard drive, at least you've obtained the necessary kernel programs.
My idea was to follow the AI's instructions step by step through disk partitioning and installation. But the ant-sized letters displayed on the screen were agonizing to read. After working through the entire morning, I felt like my eyesight had actually improved... but it didn't succeed — the system didn't boot into Linux properly. But I made a wrong decision: to study the Debian that had successfully booted to a graphical interface. I won't go into detail — just another few hours wasted... Just when I was at my wit's end, a thought suddenly struck me: since it can connect to WiFi normally, why not use an agent to SSH into my computer and let the AI do the work? No sooner said than done. I connected to the Surface using Mimo Code on my computer and got to work (actually, connecting via SSH is also a laborious task — every failure meant rebooting into the live environment, connecting to WiFi, switching to root, and starting SSH, each time a torment for my eyes, brain, and fingers). After seven or eight consecutive reboots and errors, I worked from 1 PM straight through to 4 PM.
But I realized I was being a complete idiot. Because I was too lazy to log in, I had been using Xiaomi's free basic model the whole time, thinking any small model could handle this kind of task. But the turning point came around 4–5 PM, which is peak AI usage time — the free model was lagging terribly. So I just logged into Mimo and had it try again. When I gave the AI my final instruction, it succeeded. The system booted into the Linux command line! Even though it was still a bare shell, this was a huge step toward success. You might not believe it, but I even saved a one-take video — the moment I switched to the Pro model, it worked on the first try. Tell me, what exactly was I doing those two days? Wasn't I just torturing myself?!
On the third day, it was time to furnish the bare shell. Decorating it was a real hassle — thankfully the AI helped, otherwise it would have taken a full week or two. The difficulties were: first, the system's drivers were incomplete, WiFi wouldn't connect, and I couldn't SSH in directly. The weirdest part was that I didn't even have a username and password. So first I solved the login problem (a minor issue the AI could handle too). Then came the hard part: there was still no network access. Even plugging in Ethernet didn't help. At this point, we needed to format the USB drive we'd been using as the boot device and have the AI write scripts based on the previously downloaded image containing the useful kernel, install networking tools, install openssh, and automatically display the IP address. This step also required some patience — you have to face the errors head-on. I'll summarize the key points and post them later.
The next step was getting SSH connected again. The timeline reached the afternoon again. But at least the hard parts were now solved. We continued to free our hands and let MimoCode install GNOME for me (you can also choose KDE according to your preference, but I wanted to apply Nyarcher — a patch that makes ArchLinux feel as anime-infused as Nyarch), the Linux ARM64 versions of WeChat and QQ, and other common software. (Of course, WiFi and Bluetooth drivers sometimes dropped out and might need fixing.) Then came the most relaxing moment of these three days: drinking tea. No wait, that's you guys — I still had to go study the videos for Subject 1 of the driving test, so the computer just sat there. (Sigh, it's already been a month since the college entrance exam ended, but every day feels like work — I haven't given myself a break at all!)
And with that, the Linux installation on the Surface is complete. Screenshots and detailed tutorials will have to wait for the next installment!