Welcome to LWN.net
The following subscription-only content has been made available to you by an LWN subscriber. Thousands of subscribers depend on LWN for the best news from the Linux and free software communities. If you enjoy this article, please consider subscribing to LWN. Thank you for visiting LWN.net!
One of the things that has historically stood between Linux and the fabled "year of the Linux desktop" is its lack of support for video games. Many users who would have happily abandoned Windows have, reluctantly, stayed for the video games or had to deal with dual booting. In the past few years, though, Linux support for games—including those that only have Windows versions—has improved dramatically, if one is willing to put the piece…
Welcome to LWN.net
The following subscription-only content has been made available to you by an LWN subscriber. Thousands of subscribers depend on LWN for the best news from the Linux and free software communities. If you enjoy this article, please consider subscribing to LWN. Thank you for visiting LWN.net!
One of the things that has historically stood between Linux and the fabled "year of the Linux desktop" is its lack of support for video games. Many users who would have happily abandoned Windows have, reluctantly, stayed for the video games or had to deal with dual booting. In the past few years, though, Linux support for games—including those that only have Windows versions—has improved dramatically, if one is willing to put the pieces together. Bazzite, an image-based Fedora derivative, is a project that aims to let users play games and use the Linux desktop with almost no assembly required.
Bazzite is part of the Universal Blue project, which aims to provide "the reliability of a Chromebook, but with the flexibility and power of a traditional Linux desktop" via immutable Linux images based on Fedora. LWN covered another Universal Blue project, Bluefin, in December 2023. Each Universal Blue project is based on bootc images from the Universal Blue project’s base images, which in turn are based on Fedora Atomic Desktops, or CentOS Stream images in the case of the long-term-support (LTS) release of Bluefin.
Bazzite is relatively new to the scene: its first release was in November 2023, based on Fedora 38. The project takes its name from bazzite: a mineral that forms small blue crystals. It is designed to be similar to Valve’s SteamOS, but more suitable for general desktop use. It is largely based on stock software from Fedora, but adds a number of packages to provide hardware drivers for gaming, including support for various game controllers, keyboards, and proprietary NVIDIA drivers.
Bazzite also provides a custom kernel: the project uses the Fedora Always Ready (kernel-ark) repository that is used to develop Fedora Linux’s kernels, and then applies a set of patches added for device support and performance optimizations for games. The project recently announced its Fall 2025 update based on Fedora 43, with support for new handheld gaming PCs and steering-wheel hardware.
Choose your character
The common wisdom for many years has been that too many choices overwhelm users who are new to Linux; the Bazzite project has largely chosen to ignore that wisdom. The biggest hurdle for getting started with Bazzite may be deciding which image to start with. The first step in the quest to install Bazzite begins with a web form that helps users choose the right image by selecting the type of hardware (desktop, laptop, handheld, tablet, or virtual machine), GPU vendor and model, desktop environment (GNOME or KDE), and whether the user wants the Steam gaming mode or not.
To add to the confusion, there is also a Bazzite Developer eXperience (DX) option for game developers. Choosing the right image for Bazzite is similar to the beginning of many video games, where users are asked to make choices about the character they will play in the game.
Once users have made their choices, they are offered two downloads: an ISO image that boots into the installer, or a live image that allows them to run a Bazzite desktop and install from there if they decide to do so. I installed Bazzite with the KDE desktop on a gaming PC that I acquired in 2022; it was not the top of the line for gaming then and has fallen further behind in the interim. However, it still has enough horsepower for current games and more than enough for the titles from the late 1990s and early 2000s that I prefer.
Installing Bazzite is simple enough; since it is based on Fedora, it uses the Anaconda installer and requires little decision-making on the part of users.
Managing software
The nice thing about image-based distributions is the ease of managing the base system; when there is an update for Bazzite, it automatically downloads the image for the update and queues the image for use on the next reboot. If there is a problem of some kind with the new image, one can revert to the previous known-good release and catch up with updates later. Like Fedora, Bazzite uses the OSTree tools for this under the hood, but Bazzite provides a helper utility to make the process as simple as possible.
Bazzite has three channels for its images: stable, testing, and unstable. Stable is, of course, the one that’s recommended for most users. The testing image has, as one might expect, changes that are expected to land in the stable branch at some point. The unstable image is described as a "playground for developers/contributors" and not recommended. Users can switch between the different channels by rebasing with rpm-ostree. For example, to move to testing, one would run this command:
rpm-ostree rebase ostree-image-signed:docker://ghcr.io/ublue-os/bazzite:testing
The project publishes new images about twice a week for its stable channel, and more often for the testing channel. These roll up any changes from Bazzite as well as Fedora. Upgrades from major Fedora releases, such as Fedora 42 to Fedora 43, are automatic. Users who are on the stable channel will simply get Fedora 43 when the project moves to that release.
A maze of twisty little passages
The downside to image-based distributions is that installing software not included with the image is a bit more complicated. The project suggests seven different ways to install software, ranked by the project from most recommended to least recommended. Again, this might be a bit confusing for users who are new to Linux. The good news is that Bazzite’s documentation is clear and current.
The project’s top-ranked choice is to use ujust, which is Bazzite’s wrapper for the just command runner. The software available via ujust is limited to a handful of just recipes to install drivers, programs, and utilities. For example, "ujust install-steamcmd" will install the Steam Console Client, "ujust install-openrazer" will install the OpenRazer drivers for Razer gaming hardware, and "ujust install-coolercontrol" adds CoolerControl for monitoring and controlling cooling devices on gaming systems.
Note that Bazzite depends on ujust for more than installing software. For example, the "ujust changelogs" command will display the changelog for the current release. That includes the packages that have changed, commits to the Bazzite repository, and instructions on how to rebase to a different image if needed. The "ujust pick" command brings up a handy text-user interface dialog with ujust recipes organized by category.
The next recommendation on Bazzite’s list is to use Flatpak to install applications. The distribution includes the Bazaar app store, along with Flatseal and Warehouse for managing Flatpak permissions and data. By default, Bazaar is pointed at Flathub as its source of applications, and there does not seem to be a way to add additional Flatpak remotes through Bazaar itself. It is possible to use the "flatpak remote-add" utility if one wishes to enable additional remote repositories, though. Once the remote is enabled, the available Flatpaks will show up in Bazaar.
Bazaar allows users to filter out applications that have stopped receiving updates, and to hide proprietary software from search results. Unfortunately, it does not have a setting to filter applications by whether they are verified as being supplied by the original developer or vendor. For example, KDE applications on Flathub like Okular have a checkmark and note that Flathub has verified the application is from KDE. One of the first things I do when using GNOME Software on Fedora is to turn off the Fedora Flatpak repositories and to filter out unverified applications. It’d be reassuring if Bazaar also allowed filtering unverified applications.
If one wants to install Google Chrome, for example, it seems like a good idea to get a package directly from Google rather than a third-party Flatpak that may well be out of date with the upstream release. The current Flathub version is the 142.0.7444.175 from November 17, while the most recent release from Google is 143.0.7499.40; that release has 13 security fixes that users no doubt would like to have immediately. Google provides Debian packages and RPMs, but it does not provide a Flatpak; users are left with the unofficial package. That’s fine if users understand that it’s not coming from Google, but many users will not know to check whether software is verified or not.
There is not a lot to say about using Bazaar itself, really. It has a simple app-store interface that should be immediately intuitive for long-time Linux users as well as folks fresh to Linux from macOS and Windows.
Whether Flatpaks are the best option, however, is a matter of taste. The project also recommends using Distrobox, though it’s only ranked fifth. Users can employ Distrobox to create a container with their preferred Linux distribution (or distributions) and install applications in the container. Distrobox integrates with the host system so that it is largely transparent to the user that the application is running in a container. DistroShelf, a graphical interface for managing Distrobox containers, is included with Bazzite and makes setting up the containers and exporting applications from the container a breeze.
I have found that I prefer using Distrobox on Bazzite in lieu of Flatpaks. For one thing, I prefer using APT or DNF to install applications over the app-store model. Flatpaks also have a number of limitations and irritations due to sandboxing that can usually be overcome, but Distrobox has fewer of those problems. For example, the Kid3 audio tagger can only access a few directories when running as a Flatpak. One could use Flatseal to modify this, but running Kid3 in a Fedora container with Distrobox avoids the problem entirely. It is also apparent where an application’s configuration files are when installed from a distribution package. Admittedly, this may also be a reluctance to adapt to a new technology on my part. However, my suggestion to those trying Bazzite after using a package-based Linux distribution would be to take the Distrobox route.
Homebrew is also included with Bazzite, and it is the third-choice option suggested by the project. LWN covered Homebrew in November 2025. Homebrew is easy enough to use, but its package selection is mostly limited to command-line applications; if a user wants LibreOffice or to use Emacs with a GUI, Homebrew is not an option.
In order to set up a service on Bazzite, the project recommends using Podman to set up a Quadlet. This is a method of orchestrating a container or set of containers using systemd without the overhead of Kubernetes.
If those methods aren’t suitable for some reason, the project recommends the AppImage format or (as a last resort) using rpm-ostree to layer packages onto the image. The project warns that layering packages "can be destructive and may prevent updates as well as other issues until the layered packages are uninstalled". Note that some ujust tasks that the project includes with Bazzite do make use of package layering, though one presumes that those operations are tested extensively. As a rule, though, users should probably avoid package layering unless it’s necessary to add packages with drivers.
The obvious problem with mixing and matching multiple methods of application installation, compared with a single package manager to rule them all, is that keeping software up to date could be a hassle. However, Bazzite makes this simple; it has a "ujust update" recipe that uses the Topgrade utility to take care of updating the base image, Flatpaks, distroboxes, and Homebrew packages all at once. Users are still on their own when it comes to maintaining AppImages, though.
Playing games
There are some games, proprietary and open source, that have native builds for Linux; but the number of native Linux ports is eclipsed by the number of popular PC games that are still exclusively for Windows. However, many of the Windows-native games will play on Linux thanks to the work that has gone into projects like Wine and its vkd3d project for Microsoft’s Direct3D version 12 API, as well as the DXFK project, which is a Vulkan-based translation layer for Direct3D versions 8 through 11.
Those projects are used by Proton, which is incorporated in the proprietary Steam Client, as well as the Lutris open-gaming platform for Linux; both of these are pre-installed with Bazzite. The Steam package is provided via a third-party repository since it cannot be included with Fedora. The Lutris package comes from Bazzite’s repository on Fedora’s Copr build service.
If one purchases games through Steam, the Steam Client is obviously the best choice. I spent several hours over the past few weeks, especially during the US Thanksgiving holiday, trying out a number of different games, ranging from games released for Windows nearly 20 years ago to "Doom: The Dark Ages", which was released in May 2025. In all, I tried about ten different games with Steam on Bazzite; some I played for about 20 minutes, and others I’ve logged several hours with over that time period. There are still some games that do not work well on Linux—but I did not encounter any problems during my testing. Not with the games themselves, anyway—I cannot say the same for my video-game skills, which have clearly deteriorated from disuse.
Lutris, on the other hand, proved to be frustrating. It supports games from the Steam library but works with other vendors like Battle.net, Epic Games, and Humble Bundle. In addition, it lets users install Windows games that were not acquired through one of the online stores, and acts as a launcher for gaming emulators, which it calls "runners", as well. For example, Lutris claims support for DOSBox for MS-DOS games, the MAME arcade-game emulator, and more than 50 others. It even allows users to install runners directly from Lutris rather than having to find and install them separately.
I tried installing a few Windows games from CD-ROM; each time the install seemed to work perfectly, but the games failed to launch. Unfortunately, Lutris does not have much in the way of documentation: it has a forum and Discord channel, but little in the way of actual documentation. The forum, alas, seems currently to be overwhelmed with spam about customer-service-contact numbers for airlines. The Bazzite project has some minimal documentation for Lutris, but it did not address the problems I was seeing.
Lutris was the only real sour note I had using Bazzite; I can imagine that users coming from Windows would be equally disappointed if their experience matches mine. My experience may have been an outlier and others might have better success.
I had better luck with PortProton, which is more limited in scope than Lutris but worked well at what it offers. It lets users install various game launchers written for Windows, and then use those to install games. PortProton is not installed by default with Bazzite but is available as a Flatpak. I was able to easily install games from other services, like Itch.io, whether they were Windows-only or Linux-native. It was also easy to get MAME running with PortProton, though I did not spend a lot of time (yet) finding ROMs to test it out with.
It’s not all fun and games
All work and no play may make one dull, but all play and no work can have undesirable effects when it comes time to pay the bills. Unless a user has a dedicated machine for gaming, they’ll want the distribution to be good for regular desktop use as well. Since Bazzite is basically Fedora under the hood it serves perfectly well as a desktop for productivity use (e.g., using LibreOffice or web-based work tools), as well as a platform for Linux development or for system administrators. It took no time at all to set up a Fedora 43 Distrobox container with my usual set of applications.
The missing piece, for me, was the choice of desktop. KDE is fine, but I’ve come to prefer using the niri Wayland compositor. Installing applications in a Distrobox is a piece of cake, but installing a desktop is a bit trickier. It may be possible, but it is not supported.
Since Bazzite is built using bootc, though, it is possible to create a custom image with a different selection of software. The Universal Blue project even provides an image template with instructions on how to do so, and encourages users to share examples.
Using that template, it was relatively easy to set up a custom image with niri and additional packages included so that I could use my preferred desktop. The downside is that the template and tools depend on GitHub Actions to build the image, which may not be optimal for some users. It is possible to build containers locally and use those, but I’m still tinkering with that workflow. When using the template and GitHub actions, by default, new images will be created on a schedule—those will include updates to Bazzite plus any additional packages.
Overall, Bazzite seems to be a good choice for users who prioritize PC gaming and are coming from Windows to Linux—especially those users who use Steam heavily, which seems to be the case for most of the gaming enthusiasts in my social circles.