Bazzite delivers the SteamOS experience Windows handhelds need – and it’s terrific
Every time we review a Windows PC gaming handheld, the inadequacies of Microsoft’s OS just can’t be ignored, but what if Steam OS could run on systems like the popular Asus ROG Ally? That’s the dream for a lot of players and while Valve has made encouraging noises about expanding its OS to run on other handhelds, there is a free solution you can try now. Bazzite offers Linux builds similar to SteamOS for popular Windows handhelds, providing the pick-up-and-play ease of the Steam Deck in combination with the power of AMD’s fastest mobile chips. So is this solution as seamless as it seems? What’s the install process like? And can it match Windows performance?
My overall impressions of Bazzite are very positive. This is more or less exactly what you’d expect out of a ROG Ally running SteamOS natively. The interface is almost identical to SteamOS, and operates with a similar level of responsiveness and general polish. You get the same console-centric interface, with smooth controller navigation and actual working suspend/resume functionality – something Windows struggles with. It’s also remarkably stable – about as stable as SteamOS on my Decks.
For those who don’t have experience with SteamOS, imagine an operating system with the Steam Big Picture mode front and center, and you’ll have a decent impression of how it functions. Technically, Bazzite is based on a different version of Linux – Fedora and not Arch Linux – but you’d be hard pressed to tell the difference in typical use. In fact, Bazzite’s interface is so similar to SteamOS that it’s a lot faster to outline the ways in which they differ than the ways in which they are the same. One difference is that there’s a new menu to control certain ROG Ally-specific features, like the various TDP modes and lighting options, which are accessible by pressing the right back button. I’d say it’s superior to Asus’ own options here, as configuring the lighting requires entering the actual Armoury Crate app on Windows.
I could go through specific areas where I’ve encountered the occasional bit of bugginess but the Universal Blue team – the makers of Bazzite – have addressed a lot of them since I first started work on this project back in August. There are some remaining quirks, like how the menus can be slightly slower to respond on Bazzite, along with some shared issues between Bazzite and SteamOS, like how the audio slider misbehaves. In general, expecting the operating system to be about as fast – and about as convenient – as SteamOS is on Steam Deck is a reasonable assumption.
Speaking of updates, VRR has been a point of some concern since I started using Bazzite. The ROG Ally’s support for this feature is one of its key advantages, of course. In the initial build I tested, VRR didn’t work at all, but a subsequent revision in September enabled it. Unfortunately though, this came without low frame-rate compensation support, which meant that it only operated above 48fps, even though the ROG Ally has a 120Hz screen. As of the latest Bazzite build, this issue has been resolved and the Ally can do low frame-rate compensation with VRR on its internal display, which is best experienced with the display at 120Hz. Bazzite also has a very similar unified frame-rate slider to Steam Deck, which is something that’s also recently improved. It’s now possible to go down all the way to 10fps if you so choose, with the maximum refresh rate multiple set for every frame-rate.
The only substantial caveat to my eyes at the moment is that the frame-rate capping system doesn’t work with VRR, so as soon as you enter the realm of refresh-rate multiple frame-rate caps, the VRR content will just run as if you had no cap imposed at the refresh rate of the display. So at 55fps, your game will run up to the 110Hz maximum, blowing past that notional 55fps cap. Gamescope, which is used for frame-rate capping under SteamOS and Bazzite, doesn’t work properly with VRR at the moment, which is an issue that Valve needs to solve. That said, the Universal Blue team is planning an update that should drop in the next few days by simply lowering the refresh rate to the desired frame-rate with VRR enabled, which should essentially fix this issue down to a minimum of 48Hz.
Ultimately, Bazzite is effective and surprisingly stable and feature-complete, at least when running on the ROG Ally I used for testing. The question is the extent to which running Windows games on Linux presents any kind of performance reduction or compatibility problems. The good news is that I had no particular issues running games on the ROG Ally with good frame-rates, above and beyond typical issues that SteamOS may have with features like anti-cheat. Game compatibility was good, the built-in controller worked well (including rumble) and performance was basically in line with my rough expectations.
Comparing the same games running on Bazzite side-by-side with Windows, there are similar results. In general, games run similarly enough to the point where it’s not that easy to tell the difference in seat-of-your-pants gameplay. However, it’s not a clean sweep: Bazzite can lag significantly behind in some scenarios, with some more affected games like Dead Space and Sniper Elite 5, where I saw a 22 percent performance penalty. These games are all DirectX titles, so there may be some significant performance penalties associated with the DirectX translation available through Proton. We may also be losing the benefit of Steam Deck-specific optimisations that may be available in SteamOS, but when playing a large majority of games on Bazzite, I would expect the results to be basically on par with Windows.
And Bazzite does something Windows does not – there is mitigation for #StutterStruggle. When loading up Final Fantasy 7 remake, for example, there are shader compilation stutters on the Microsoft operating system – which still haven’t been fixed years on from release. While there are some dropped frames running the game in Bazzite, the massive stutters are gone. Valve uses a program called Fossilize to capture and play back a render sequence on your machine when you first boot a game, to precompile the Vulkan shaders that the game uses. Critically, this doesn’t require someone with your specific hardware configuration to have played the game before – it is hardware agnostic. That means no shader compilation stutter for the Ally-wielding end user. Even games infamous for shader compilation issues, like the Ghostrunner demo, are perfectly fine, despite running with awful lurches on Windows.
I did some battery life testing as well. Here, the results were similar to Windows, albeit with a small Bazzite edge. We’re looking at a couple extra minutes in the silent TDP mode, with a more substantial six minute gain in the high-performance turbo mode. The problem here is that Bazzite performance dramatically slows once it hits the mid to low single digit battery percentage, while Windows performance was more consistent throughout, making like for like testing challenging. Putting the Ally to sleep and waking it seems to solve the issue. I did a round of battery tests in September and October and encountered a similar problem on both occasions. Overall though, there’s not much to separate Bazzite and Windows. Of course, Steam Deck OLED offers greater battery life than the Ally, delivering over two hours of battery life in the same test despite massively outperforming the Ally in its silent mode. If the Steam Deck still offers better battery life then, why would you go for the Ally?
Firstly, it can deliver more performance, even under Bazzite. The gain can be tremendous in some titles in the Ally’s turbo mode, with more moderate gains elsewhere. The Ally also has a more console-centric offset stick controller layout that I personally find more comfortable in a lot of games, like racers and shooters. And the Ally comes packed with a 120Hz screen that is capable of VRR, which helps when frame-rate capping falls short. That enhanced refresh rate comes in handy with game streaming in particular, which I’ve taken quite a liking to recently. The Moonlight streaming software can beam games to the Ally at a blistering 120fps with only very rare dropouts, at least with my setup. Bazzite makes this combination even better as Moonlight works without some of the frame-pacing annoyances I’ve observed under Windows.
The installation process for Bazzite isn’t that difficult – but we’ll get to that in a moment, because that’s not what I started with. A standard Bazzite install requires you to partition your internal storage, and my ROG Ally’s 512GB SSD didn’t seem like enough space divided two ways. So I bought a 2TB M2-2230 SSD and went from there. It’s really not too hard, but there were a couple of complications. Removing the Ally’s back screws is painless enough, but prying the device shells apart is challenging and really requires a good tool like a thick guitar pick or the classic iFixit ‘spudger’. Removing the SSD is done by removing a single screw, but the screw in my unit was very tight. To get enough torque, I needed to use a different phillips #00 screwdriver with a shallower bit, which would have been pretty annoying if I didn’t have one on hand. After putting in the new SSD and performing the process in reverse, there’s a cloud recovery system which worked well enough and gave me a fresh install of Windows to work with.
I’m not going to go over the entire Bazzite install process, because it’s fairly lengthy. I will say that it’s not much more difficult than installing Windows on the Steam Deck, if you’ve done that before, and takes some of the same steps. I’d recommend ROG Ally users check out RetroGameCorp’s video outlining the process for a hands-on video guide, as well as the resources on the Bazzite website. Essentially, you configure the internal drive into two partitions for Bazzite and Windows, download the Bazzite image for ROG Ally, flash Bazzite onto a USB drive, restart the device and go into the BIOS, and from that point onwards boot into Bazzite and go through the OS installation process, which isn’t quite self-explanatory but isn’t especially challenging. There’s a lot of waiting involved for sure, but I didn’t encounter any problems. It is worth noting that other users have had some significant issues though, so headaches are certainly possible here.
After installing, you boot into Windows by turning the device off, turning it on again and repeatedly pressing the volume up switch until you see a boot screen. Bazzite only adds options for your ROG Ally experience, it doesn’t take them away. If you do want to return to Windows the option is there – and you can still boot into Windows by default by changing boot priority in the BIOS.
My number one takeaway from this whole experience is that Windows on a device like the ROG Ally isn’t really fit for purpose. Microsoft has abandoned the mass-market Windows tablet since the days of Windows 8 and the Metro UI, and trying to run Windows 11 on essentially a very small tablet with largely vestigial controllers can be an exercise in frustration. When it works, it’s almost in spite of itself, and relies on faintly ridiculous solutions like using thumbsticks to control the mouse cursor. The level of actual software accommodation from Microsoft is very minimal.
To be fair, Asus puts up a valiant fight with its Armoury Crate software package. As a unified game launcher, I don’t think the Crate is successful, but at least it provides a pretty good, controller-centric interface to change Ally settings. The Command Center is decent too, providing some ability to tweak settings at-a-glance, though SteamOS is more capable here as well. Among Windows handheld OEMs, I think Asus has probably done the best job, but I don’t think any single hardware vendor is going to solve this problem. The Ally does suffer from some bugs though – like recurrent issues with waking from sleep – that might lie at Asus’ feet.
The utility of SteamOS doesn’t lie in Linux necessarily – it’s more about taking the existing PC gaming paradigm and transforming it to match console expectations, without giving up the flexibility that PC gamers expect. Valve has developed a fast and fluid controller interface that is remarkably polished, performant, feature-rich, and stable. There are so many important technologies behind the scenes that make SteamOS possible – like Proton – but that basic user-facing interface is key.
To make Windows work for gaming handhelds, Microsoft needs to do something similar – to build an interface that basically works as an end-to-end gaming solution, without actually ever needing to dip into a desktop OS interface. It also needs to smooth out driver annoyances, shader compilation problems, and other common Windows and Xbox Game Pass issues that often require frustrating troubleshooting. And if Microsoft’s future console plans involve heavier Windows integration, that could prove crucial for the home console experience as well. Right now though, Bazzite is a great solution to that problem on the ROG Ally, albeit one that does involve jumping through a few hoops. It also involves accepting a frame-rate drop in some games, though shader compilation is much less of a concern, and accepting that some fraction of games don’t work well outside of Windows.
Valve itself is also preparing an official SteamOS offering for Windows handheld use, which also seems quite interesting. A smoother onboarding process and backing from Valve’s SteamOS group could eliminate the few remaining hangups with Bazzite, and prompt more players to make the jump. I’d also be curious to see how Bazzite fares on a full-fledged gaming PC for more living room oriented play. So, a Windows gaming handheld sans Windows – it’s a weird concept, but one that works surprisingly well. Bazzite provides a great SteamOS-like experience for Windows handheld users.