alt="Photo of the Yoga 7x laptop open on a desk showing the Glass House Mountains on the desktop. To the right of the laptop is a coffee mug and a pair of glasses.",
caption="Lenovo Yoga Slim 7x Snapdragon") }}
For the last two weeks I've been testing out my new laptop, a [Lenovo Yoga Slim
7x (14", Gen 9) Snapdragon][yoga-7x]. This laptop is interesting because
it's one of the initial batch based on [Qualcomm's Snapdragon X Elite Arm
CPUs][X Elite]. In this post I aim to provide a detailed review of the device
and the experience of using it from the perspective of a software developer.
This post was written on the Yoga 7x.
<!-- more -->
<!-- toc -->
### Introduction & Purchasing
All prices are quoted in Australian dollars. You can select a
different currency, which will use exchange rates at the time I purchased the
alt="Photo of the keyboard and trackpad. On the right hand palm rest there is a Snapdragon X sticker and a tall sticker from Lenovo.",
caption="Keyboard and trackpad. Yes, free of the tyranny of Intel Inside stickers what did Lenovo do? More stickers! The tall one peeled off ok, but you could see where it had been. A quick wipe with an alcohol swab sorted it out. I left the Snapdragon one on for now. I don't know what's wrong with me.") }}
The keyboard is pleasant to type on. It has an unsurprising layout without any
weird quirks. It has a firm feel and slightly more travel than my old laptop,
which did take a moment to adjust to. It has full height left and right arrow
keys, which I find bad for positioning without looking. I would have preferred
an inverted-T layout like that on a MacBook. I also miss the dedicated Page
Up/Down Home/End keys from the HP Aero.
There is an Fn key next to the outermost Ctrl key on the left for accessing
function keys, as well as home, end, page up, and page down on the arrow keys.
The UEFI has a "Fool Proof Fn Ctrl" feature enabled by default that will "Treat
Fn as Ctrl when combined with non function key for some frequently-used
shortcut key".
#### Trackpad
The trackpad is quite large—in my opinion larger than it needs to be. The
surface is pleasant to use and motion is accurate. Multitouch gestures work as
expected. It is top-pivoting with a physical button underneath like pretty much
all PC laptops. I would have preferred a haptic action like Apple's, but I'm
used to tap-to-click at this point. I have had the odd unintentional action
from my palm or stray finger so perhaps the automatic rejection could be
better.
#### Battery & Fan
The experience of using this laptop is superior to any other PC laptop I've
owned. It runs cool and quiet and has an amazing battery life. Battery life is
hard to quantify without time-consuming tests but Lenovo claims the following
and I think they're probably in the right ballpark:
- MobileMark® 25@250nits: up to 16.4 hours
- Local video (1080p) playback@150nits: up to 23.8 hours
I think I easily get double the runtime out of the 7x compared to the Aero.
Depending on what you're doing I think it would be perfectly feasible to go a
typical work day without the need to plug in.
As I write this, the battery is down to 51% and it's reporting 7h 25m left.
While almost any activity beyond the basic would spur the fan on my HP Aero
into action the fan on the Yoga 7x pretty much only comes on when you're doing
something multicore intensive like compiling software. From what I've gathered
it does turn on more frequently than a MacBook Pro, which I've heard need
pretty strong motivation to get the fan going. I'd rate the fan pitch when it
is running at higher speeds in the middle of the road—it's not bad, but it's
not a neutral white noise type sound either.
#### Audio/Visual
The camera does not seem to be anything remarkable. In indoor conditions
without any direct lighting of the subject it produces an image that shows
alt="Photo of the laptop upside-down showing the camera privacy switch.",
caption="The camera privacy switch. This sticker was easy to remove with the little red pull tab.") }}
There is no fingerprint reader, instead Windows Hello uses the camera and IR
sensor to use your face to authenticate. The utility of the camera privacy
switch is somewhat diminished because it also prevents Windows Hello from
working. If there was a separate fingerprint reader the camera could remain
disabled unless it was specifically needed.
Waking from suspend is nearly instant. If opening the laptop it's usually
resumed and ready to go before you've finished moving the display into
position.
{{ video(video="posts/2024/yoga-7x-snapdragon-developer-review/wake-from-sleep.m4v", height=450, preload="metadata", loop=true, alt="Video showing the laptop waking from sleep quickly. Windows Hello uses the camera to grant access without having to type in a password.", caption="Video showing the laptop waking from sleep. Windows Hello uses the camera to grant access without having to type in a password.") }}
### Compatibility & Gaming
The big question with a new architecture[^2] is how much does it impact
day-to-day activities. As with most things in the tech world: it depends. For a
typical computer user the situation is quite good. Most, if not all the
software included with Windows is Arm native. I do all my browsing with Firefox
and a native Arm version of it has been [available for many
years][firefox-arm]. The note-taking tool [Obsidian] has an Arm native version,
as does [1Password] \(in preview), [Rust Rover], and [Rufus] to name a few.
However, there's still plenty of software out there that assumes Windows = x86.
For that there's the [Prism x86 emulator built into Windows][prism]. This
allows most x86 Windows applications to run seamlessly on Windows Arm, albeit
with some hit to performance. The emulation is often not noticeable, aside from
an initial delay when first launching an application.
I took note of the architecture of everything I installed. Of the 27 things I
installed 44% were native.
Most x86 software I tried such as [Inkscape] and [Handbrake] ran fine. It
wasn't all perfect though. I installed [Stardew Valley] using [GOG Galaxy],
which went fine but when clicking the Play button it never started. There was a
`stardewvalley.exe` process in Task Manager, but it never opened a window.
Curiously, if the exe is run directly from Explorer then it works fine.
I also tried [Factorio] and [Cities Skylines] installed via [Steam] (all x86
executables). Factorio ran great at the native resolution of the display and
did a constant 60fps, at least in the early game. With a reduced (from native)
resolution of 1600×900 Cities Skylines ran acceptably at 25–30fps in a city
alt="Screenshot of Factorio. The view is fairly zoomed out. There a lot of trees in the bottom left of the image and the FPS counter is showing 60 FPS.",
caption="Screenshot of Factorio taken while moving diagonally down and to the left.") }}
As you can probably guess I'm not much of a gamer and this is not a gaming PC,
but for older, or lighter games it does just fine under emulation. I didn't
find a native game to try out, but I then I didn't really try hard to find one
either.
### WSL & Virtualisation
Windows is a strange beast, an outlier in a world that has mostly settled on
UNIX/POSIX inspired systems. Being the outlier there are a plethora of ways
that Microsoft and the community have come up with to make it integrate with
the rest of the computing world. The [Windows Subsystem for Linux][wsl] (WSL)
is one of them, and it works great on this system.
I installed [Debian GNU/Linux][debian] as well as [Chimera Linux] in WSL.
Debian was installed using the built-in mechanism `wsl --install -d Debian`.
Chimera was installed manually by downloading the `aarch64` root file system,
gunzipping it and then importing it. Both distros work well. It was
particularly satisfying to `apt install x11-apps` in the Debian install, then
alt="Screen shot with an xeyes window above a terminal window showing apt output from installing x11-apps and running xeyes.",
caption="xeyes running via WSL.") }}
WSL2 uses Hyper-V virtualisation under the covers but frustratingly creating
virtual machines manually with Hyper-V requires Windows Pro and the 7x comes
with Windows Home. Through a website of dubious legitimacy I was able to
purchase a Windows Pro key for considerably less than the {{ money(amount=169)
}} Microsoft was asking on the Microsoft Store for a Home to Pro upgrade.
After the updates were applied I fired up Hyper-V Manager and tried booting the
Chimera Linux `aarch64` ISO. The grub menu is shown promptly but after
selecting an entry it seems to hang. I also tried a Debian ISO but got the same
result. Some searching online revealed that I was [not alone](https://www.reddit.com/r/Surface/comments/1dmzpzt/running_linux_in_hyperv_on_snapdragon_x/).
I let the Debian installer go for a while. It turns out that it is running,
just at a glacial pace.
This doesn't seem to be an issue with Windows on Arm in general. I also have
a [Windows Dev Kit 2023][Dev Kit 2023] WIth a Snapdragon 8cx Gen 3 CPU and
Hyper-V works fine on it. Hopefully this is just a bug/early issue that will
be resolved.
It's also worth noting that Hyper-V is the only option for Windows on Arm.
VMWare and Virtual Box only work on x86 systems.
In desperation, I managed to get [QEMU] running in the [Msys2] environment.
However, while the `qemu-system-aarch64` binary is native it is emulating a
system and there is no acceleration available. For lightweight systems such as
Chimera Linux this works, but it's not ideal.
### Development
The development experience on this laptop is a bit of a mixed bag, which I will
detail below.
#### Rust
Pretty much all my personal projects are implemented in [Rust] and for the most
part it works great. The one gotcha is that when using the MSVC toolchain on
Windows for Arm the `ring` crate requires that `clang` is installed. This is
straightforward to achieve with the Visual Studio Installer, but it's not quite
the just works experience you get on x86 Windows. `rustup` is an x86 binary but
the toolchain it installs is a native `aarch64` one.
Windows compatible Rust projects that don't have C/C++ dependencies tend to
build and run fine. I worked on a few my projects without issue and also
published some releases to [crates.io](https://crates.io/). It is more
challenging if C/C++ dependencies are involved. There's multiple ways to
approach them such as `vcpkg` but I have so far avoided the issue. If I run
into a project that has tricky dependencies I think I'll use WSL.
#### Python
I tried to install [pyinfra], which as the name suggests is implemented in
Python. Running `python` in a PowerShell session opens up the Windows Store to
the Python page if it's not already installed. Initially I installed this
version, but I noticed that it had installed the x86 version. Searching with
`winget` revealed a native version, so I uninstalled the Store version and
reinstalled via `winget`.
I then tried to install `pyinfa` into a venv and was met with failure.
Pre-built wheels were not available for some packages, so it was attempting to
build from source. I had Rust installed for my other work but `cryptography`
failed because it couldn't find OpenSSL. I installed it via `vcpkg` but it
still complained about not being able to find OpenSSL despite my attempts to
point it at it. `pynacl` also failed to build because it couldn't find `make`.
There has been [an issue open on the `pynacl` repo][pynacl-issue] since 2022
asking for Arm support. An issue requesting Arm Windows support for
`cryptography` was previously closed with the note:
> We won't ship a wheel for a platform we can't test in CI and GitHub does not
> currently offer arm64 windows runners. When they do we'll revisit this
> though!
Since [GitHub have announced Arm Linux and Windows runners][arm-runners] I
opened a new issue in `cryptography` asking for Arm Windows support. I didn't
notice that the Arm runners are currently only available to GitHub Enterprise
and Team plans though. So the `cryptography` folks are still waiting for
general availability before they are willing to tackle the issue.
It's pretty strange that Microsoft own GitHub and are making this push for
developers to support Windows on Arm but still haven't made Arm GitHub Actions
runners available to the wider open-source community.
At this point I suspected that the Microsoft Store may have been on to
something when it installed the x86 version of Python. I uninstalled Python
once again and replaced it with the Store version. This time `pyinfa` installed
and ran fine. Sadly it was at this point that I discovered that Hyper-V was
broken as described earlier, so my `pyinfra` experiments had to move to my
Linux system.
#### Node.js
I hear JavaScript is pretty popular these days. I didn't have a particular need
to run [Node.js] but wanted to try it out on this system. I installed a native
Node.js via `winget` and tried to build a couple of projects. Both failed to
build due to a change that was made to address [a security issue on Windows in
April 2024][node-security]—The joys of being on the odd-one-out OS. I then
thought I'd try building the TypeScript compiler—another Microsoft project.
This was immediately blocked by the lack of a native binary for the `dprint`
alt="Screenshot of the Copilot app with a response to a query about PowerShell. The response includes several numbered footnotes, each of which is a link.",
caption="Copilot response with links to sources.") }}
### Non-Windows Operating Systems
As I mentioned at the start of this post I intend to run Linux on the 7x as
soon as that is viable. Qualcomm has been upstreaming support to the Linux
kernel for some time and looking over the Linux kernel mailing list there is a
bunch more being proposed for Linux 6.11.
Just to be sure Linux was definitely not functional yet I tried booting a
Chimera Linux and Ubuntu-daily ISO. Perhaps worth noting that the 7x runs good
old UEFI and after turning off Secure Boot loaded up grub off these Linux
install disks just fine. However, after selecting an entry in grub it would say
loading Linux then promptly reboot… definitely not working yet.
All was not lost though. The keen eyed among you may have noticed the OpenBSD
entry in the benchmark table. Yep OpenBSD runs on it right now. After resizing
the Windows partition I was able to install a recent snapshot of OpenBSD
alt="Screenshot of OpenBSD running fvwm. There are Firefox and Alacritty windows. The Firefox window is showing the OpenBSD homepage. The Alacritty window is showing the output of neofetch.",
caption="OpenBSD running on the Yoga 7x.") }}
Now it's all still pretty bleeding edge and I can't say the experience is
particularly good at this point. It runs pretty hot with the fan going most of
the time. The built-in Wi-Fi didn't work, so I had to use a USB Wi-FI dongle.
There is no GPU acceleration and I couldn't work out how to get fvwm to honor
the X DPI settings so everything was tiny, at least Firefox honored it.
Complaints aside this is proof, only a month or so after release that
alternative OSes are pretty easy to run on these systems.