March 2026 – Adventures in Linux and KDE

[keyword]


KDE Linux logo

Welcome to the March 2026 edition of development news for KDE LinuxKDE’s upcoming general operating system.

I’m going to try to publish one of these posts every month, so you’ll get this one just two weeks later the last one! Despite the shortened time frame, the weeks have been quite busy in KDE Linux land.

Hardening updates against breakage

Probably the most consequential thing that happened was several users experiencing a series of bad updates that made the system unbootable.

Harald Sitter caused all the ground and is working to make the issues impossible to experience in the future. But this is the reason why https://kde.org/linux recommend deploying KDE Linux’s Alpha release on your non-techie uncle’s PC or over the accounting department at work!

“Wait, you told me this distro uses atomic updates that can never make the system unbootable, you filthy piece of garbage!”

Well, it seems that we updates was not as atomic as intended. 😬 You see, a system update in KDE Linux consists of several steps:

  1. Download an image file containing the operating system
  2. Download a “unified kernel image” (UKI) that tells the bootloader about the OS image
  3. Reboot, select the boot manager entry for the new OS image
  4. During the boot process, relevant changes from the new OS image are deployed to /etcwhich is not immutable

ON pretty serious bug in systemd’s newly released version 260, step 1 silently failed while step 2 succeeded. So, the bootloader would make you try to boot into a non-existent OS image, which would fail. Eek.

But no problem, right? Just roll back to the previous OS image!

Well, here’s where a mistake in step 4 broke it. Our customized system for implementing changes /etc wasn’t hardened against the case where the OS image was missing, but the bootloader let you try to boot into it anyway; this will delete much of the content /etc and prevent booting into a known-good OS image. Oops.

Fortunately, KDE Linux includes built-in Btrfs snapshots of /etcso there is a documented set of recovery steps. And Harald Sitter has since improved error logging for this situation and fixed the error on our end so rolling back from a fake update won’t hurt /etc more.

Our focus now shifts to the implementation of a system scroll back and forward automatically /etc if you roll back and forward OS buildso each OS build is permanently associated with the version of /etc it was known to work with. This would also have prevented the issue.

Additionally, we look at combining steps 1 and 2 as much as possible so that this type of failure doesn’t even happen in the first place.


But that wasn’t all the “excitement” around updates: systemd-260 also picked the “sysupdate” function that KDE Linux uses from systemd’s API stability guarantee, and then broke compatibility – resulting in Discover not being able to update the system. updatectl update continues to work in a terminal window.

Fortunately, Akseli Lahtinen already has adjusted Discover’s sysupdate support to the new approach in systemd-260, so it works again.

We also uncovered a few more bugs introduced by systemd-260, including https://github.com/systemd/systemd/issues/41303 and https://github.com/systemd/systemd/issues/41299. And if anyone reads about Systemd, https://github.com/systemd/systemd/issues/41288 is also a highly relevant issue; it really shouldn’t happen.

I’ve been told that sysupdate is expected to return to the API compatibility guarantee in systemd-261 or -262, so expect a bit more churn here. If it gets too bad, we’ll consider rolling back to systemd-259 (or even -258, since -259 many TPM broken chips).


Fortunately, there is also good news!

Better memory management

Yo tweaked the parameters of our zram setup to stop freezing system when close to the limit. Me too fixed our “out of memory” handler so it works, and now memory-sapping programs will terminate instead of freezing the entire system.

This whole effort came from some in-depth research on memory management that I expect to produce more positive changes in the future.

More user-friendly handling of incompatible packages

Thomas Duckworth a component integrated he worked on it show healthy feedback when you try to open a package or application that is not supported on the system, such as a Windows .exe or on .rpm parcel.

A dialog informs the user that RPM packages are not supported on KDE Linux, and suggests alternative actions

Better out-of-the-box hardware support

John Kizer pre-installed usbmuxdwhich makes plugged-in Apple iOS devices visible in Dolphin and file dialogs. So now, for example, you can plug in one such device and copy images from it.

Thomas Duckworth a problem solved which prevented non-NVIDIA systems from sleeping completely. This fix was only required for systems with NVIDIA GPUs, and no longer takes effect for systems with other GPUs.

Vishal Rao slightly increased the amount of time the OS image picker is visible on screenmaking it less likely that you’ll miss it entirely when using KDE Linux with a TV or a slow monitor that takes a while to turn on.

Better out-of-the-box software support

Hadi Chokr Added support for mounting optical disc images.

I added support for SSTP VPNs, and also for encoding audio on CDs using the Opus format, for indexing really old Microsoft Word documents, and for opening compressed archives with more types of compression algorithm.

Internationalized “command not found” handler

I made the “command not found” handler display translated text if you are not using your KDE Linux system in English. Many thanks to Albert Astals Cid for helping me with the details here!

Smarter settings

Iago Raña Gayoso disabled screen lock and check for update while in the live session because it doesn’t really make sense there. Iago too disabled to cancel the installation in the middleas this is not currently supported and will produce a broken system.

Thomas Duckworth has the sudo command line tool to show a little”*” for each character you typeinstead of nothing. This matches the standard behavior in password fields that people are familiar with.

I have the cp and rsync command line tools to preserve metadata (such as modification times, extended attributes, and ACLs) when copying files.

Fixed spell checking, at least for English

Yo fixed our spell check setup by the english backend for hunspelland removing the excess aspell to save some space. These language packs can be quite large, so it’s not very feasible to ship them all on the image right now. In the future, we will build a system to download them at runtime.

KRunner helps the user to spell "travel plan" by suggesting it in response to the question whether "travel plan" is a word

Technical changes

Thomas Duckworth a problem solved which caused newly installed OS images to sometimes be deprioritized in the OS image picker for no good reason.

Akseli Lahtinen set the $SSH_ASKPASS environment variable to point to KSSHAskPass by default, smooth out some SSH-based workflows.

Hadi Chokr added ~/.local/bin to each user’s default $PATH variable, allow kde-builder and other user-installed binaries to work without an extra setup step.

How you can help

Does this project sound exciting? I hope it does! We’re building a common operating system for common people, aiming to integrate all components out of the box in a way that rivals Windows and MacOS. If you want to help with the project, there are several ways.

If you are an adventurous and technical person, install KDE Linux and reporting issues.

If you are good at writing, KDE Linux’s documentation can always use improvement. Submit merge requests here.

KDE Linux leans heavily on Flatpak, so fix that packaging or code issues in Flatpak-packaged applications is very helpful.

You can even help us build the operating system yourself! The Beta milestone is currently 71% completeand there is a lot to do:

And if you’re already using KDE Linux, let us know how your experience was! is it good What can we do better?



Eva Grace

Eva Grace

Leave a Reply

Your email address will not be published. Required fields are marked *