Skip to content

Saturday, 28 March 2026

Welcome to a new issue of This Week in Plasma!

This week saw a large variety of improvements in fields as diverse as better support for multi-screen and multi-GPU setups, support for new portals, performance improvements, UI improvements, crash fixes, and more! Lots to get excited about this week:

Notable new features

Plasma 6.7

Implemented a feature that lets you record yourself with your microphone and play it back, making it easy to tell when the recording level is too high or too low. Then you can adjust the level until it’s just right. (Ramil Nurmanov, KDE Bugzilla #435256)

Reworked how the notifications portal is implemented, which, among other things, allows configuring the notifications sent by Flatpak and other portal-using sandboxed apps in the same way that you can configure notifications for traditionally-packaged apps. (Kai Uwe Broulik, plasma-workspace MR #6312)

Frameworks 6.25

KRunner-powered searches can now convert to and from the “momme” unit, which measures weight for silk textiles. (Nate Graham, kunitconversion MR #82)

KRunner converting from 22 momme to 2.816 ounces per square yard and 95.48 grams per square meter

Notable UI improvements

Plasma 6.6.4

The bouncy app launch feedback animation by the pointer now looks better when using a fractional scale factor. (Vlad Zahorodnii, KDE Bugzilla #489403)

Sped up the process for selecting a weather station for the Weather Report widget using the keyboard. (Nate Graham, kdeplasma-addons MR #1016)

You can now drag recent items in launcher menus onto the desktop. (Christoph Wolk, plasma-workspace MR #6431)

The Networks widget now instantly reports the last-used network, rather than only after restarting Plasma. (Aviral Singh, KDE Bugzilla #512951

The Task Manager widget now instantly updates the icon of a pinned or running app whose icon you’ve changed, rather than only after restarting Plasma. (Kai Uwe Broulik, plasma-workspace MR #6443)

Plasma 6.7

The screen chooser UI (e.g. for screen sharing/casting) now features fancier visualizations for screens, showing their wallpapers in the background. (Harald Sitter, xdg-desktop-portal-kde MR #532 and plasma-workspace MR #6409)

Fancier screen chooser dialog

The super-custom folder chooser dialog, seen throughout KDE software, has been removed; now choosing a folder uses the standard “Open” dialog, and it only shows folders. (Akseli Lahtinen, KDE Bugzilla #197938)

Locked Plasma Vaults now have their mountpoints made read-only and badged with a lock icon, so it’s clearer what they are, and you or your apps can’t accidentally save files in there, which would block mounting the vault. (Matthias Pleschinger plasma-vault MR #72)

You can now limit the Wi-Fi band for networks in infrastructure mode. (Piotr Balwierz, plasma-nm MR #536)

Frameworks 6.25

Various message dialogs throughout KDE software now wrap their text at around 70 characters instead of at a point based on the screen width. (Thomas Friedrichsmeier, kwidgetsaddons MR #339)

Notable bug fixes

Plasma 6.6.4

Fixed a case where Plasma could crash when connecting another screen. (Harald Sitter, KDE Bugzilla #477941)

Fixed a case where Plasma could crash when the underlying services for apps with System Tray icons went away. (Nicolas Fella, KDE Bugzilla #518128)

Fixed a case where Spectacle could crash under certain circumstances when using multiple screens. (Vlad Zahorodnii, layer-shell-qt MR #95)

Fixed an issue that could make OBS crash on quit under certain circumstances. (Nicolas Fella, KDE Bugzilla #517599)

The Digital Clock widget’s feature to copy the current date and time to the clipboard in various formats now uses the correct time from your local time zone, not the UTC time. (David Edmundson, KDE Bugzilla #517692)

Fixed some cases of missing transparency in certain apps’ System Tray icons. (Qiancheng Sun, plasma-workspace MR #6427)

Fixed an issue uncovered by the upgrade to Qt 6.11 that applied the wrong color to the window snapping overlay. (Nicolas Fella, KDE Bugzilla #518178)

Plasma 6.7

Fixed an issue that made the System Monitor app and widgets show the wrong names for CPU cores on systems where there’s more than one physical CPU. (Kevin Tipping, KDE Bugzilla #515435)

Notable in performance & technical

Plasma 6.6.4

Blur in Konsole now plays nicely with the Wobbly Windows effect. (Jérôme Lécuyer, KDE Bugzilla #474196)

Plasma 6.7

Screen recordings made using Spectacle and other KPipeWire-using software now use the correct render device with multi-GPU systems, so the resulting recordings are always correct and valid. (Marsh Land, KDE Bugzilla #518008)

Implemented a “multi-GPU swapchain” for KWin, which unlocks future performance gains with multi-GPU use cases and Vulkan support. (Xaver Hugl, kwin MR #8926)

Improved the System Monitor app and widgets’ ability to detect multiple GPUs. (Michael Bauer, ksystemstats MR #130 and #132)

Made the System Monitor app and widgets no longer ignore fully-encrypted disks and RAID elements for the purposes of gathering disk I/O statistics. (Christoph Cullmann, ksystemstats MR #86)

Improved performance for the Alt+Tab switcher while the “Highlight Window” effect is on (as it is by default) and there are a lot of minimized windows. (Sushi Trash, kwin MR #8997)

Wayland 1.48

After over 6 years in development, the Wayland session restore protocol is complete and merged! KWin already has a draft implementation, so we should start to see some serious movement on this long-standing topic soon. (Jonas Ådahl and many others, wayland-protocols MR #18)

How you can help

KDE has become important in the world, and your time and contributions have helped us get there. As we grow, we need your support to keep KDE sustainable.

Would you like to help put together this weekly report? Introduce yourself in the Matrix room and join the team!

Beyond that, you can help KDE by directly getting involved in any other projects. Donating time is actually more impactful than donating money. Each contributor makes a huge difference in KDE — you are not a number or a cog in a machine! You don’t have to be a programmer, either; many other opportunities exist.

You can also help out by making a donation! This helps cover operational costs, salaries, travel expenses for contributors, and in general just keeps KDE bringing Free Software to the world.

To get a new Plasma feature or a bug fix mentioned here

Push a commit to the relevant merge request on invent.kde.org.

Friday, 27 March 2026

Let’s go for my web review for the week 2026-13.


New York Bill Would Force Age ID Checks at the Device Level

Tags: tech, law, surveillance

This keeps escalating… It needs to be stopped.

https://reclaimthenet.org/new-york-bill-would-force-age-id-checks-at-the-device-level


Zero Days: Electric Motorcycles are a Security Nightmare

Tags: tech, automotive, security

Clearly those are new and the vendors need to put in place proper security practices. Still those are on the road…

https://persephonekarnstein.github.io/post/zero-days/


Wine 11 rewrites how Linux runs Windows games at the kernel level, and the speed gains are massive

Tags: tech, linux, windows, wine, performance

Looks like an important Wine 11. Well done to them!

https://www.xda-developers.com/wine-11-rewrites-linux-runs-windows-games-speed-gains/


GitHub: We are going to train on your data after all

Tags: tech, data, surveillance, ai, machine-learning, copilot

Unsurprisingly, they need to find new data to feed the monster…

https://www.theregister.com/2026/03/26/github_ai_training_policy_changes/


Moving from GitHub to Codeberg, for lazy people

Tags: tech, git, github, forgejo, self-hosting

A reminder that this is an easy migration. Can also be towards you own instance of Forgejo of course.

https://unterwaditzer.net/2025/codeberg.html


Humanity in CS & PL, now more than ever

Tags: tech, science, research, community

Interesting call, our field like anything undertaken by mankind is worthless without community. Also community can’t sustain if you got an anti human agenda.

https://koronkevi.ch/posts/humanity.html


I’m OK being left behind, thanks!

Tags: tech, hype

Indeed, there’s no rush. No need to be first to jump on every new fashion.

https://shkspr.mobi/blog/2026/03/im-ok-being-left-behind-thanks/


How LLMs Distort Our Written Language

Tags: tech, ai, machine-learning, gpt, language, culture

Not peer reviewed as far as I can tell. That said if confirmed by other studies this feels like an important paper. The language flattening might be real and this will have lasting cultural impacts.

https://arxiv.org/abs/2603.18161


Is the Future of AI Local?

Tags: tech, ai, machine-learning, gpt, research, business, foss, ethics

I personally think this is where it’ll head after the bubble pops. We should be able to recover enough material to have something viable to run locally. The question will be “where the updated models come from?”, it might be the public sector helping there and hopefully those will be truly FOSS and ethical (like Apertus).

https://tombedor.dev/open-source-models/


Don’t trust, verify

Tags: tech, foss, tests, security

You’d wish more projects would put such measures in place.

https://daniel.haxx.se/blog/2026/03/26/dont-trust-verify/


Markdown Ate The World

Tags: tech, microsoft, libreoffice, standard, markdown, complexity

A brief history of word processor formats and how Markdown came to prevail…

https://matduggan.com/markdown-ate-the-world/


Wild RSS

Tags: tech, rss, tools

Interesting tool to test your RSS feeds.

https://wildrss.com/


SSH certificates and git signing

Tags: tech, tools, version-control, git, security

Interesting trick in Got, using SSH certificates to prove the origin on commits. This feels a bit rough though, tooling has room for improvement.

https://codon.org.uk/~mjg59/blog/p/ssh-certificates-and-git-signing/


Debunking zswap and zram myths

Tags: tech, linux, memory, system

Long and comprehensive look at how zswap and zram work. They each bring their own tradeoffs, it’s important to understand them to choose.

https://chrisdown.name/2026/03/24/zswap-vs-zram-when-to-use-what.html


Shell Tricks That Actually Make Life Easier (And Save Your Sanity)

Tags: tech, shell, tools

Good list of lesser known tricks in shell uses.

https://blog.hofstede.it/shell-tricks-that-actually-make-life-easier-and-save-your-sanity/


Windows Native App Development Is a Mess

Tags: tech, system, windows

Indeed, it looks like Windows gave up on having a nice experience for native app development a while ago…

https://domenic.me/windows-native-dev/


The Good, the Bad, and the Leaky: jemalloc, bumpalo, and mimalloc in meilisearch

Tags: tech, system, memory

Interesting story on how sometimes you can be betrayed by your memory allocator.

https://blog.kerollmops.com/the-good-the-bad-and-the-leaky-jemalloc-bumpalo-and-mimalloc-in-meilisearch


Guideline: Rust Style

Tags: tech, rust, programming

Good guidelines for Rust code indeed.

https://epage.github.io/dev/rust-style/


Maximally minimal view types

Tags: tech, rust, type-systems

Interesting proposal for rust borrow checker. I wonder if it’ll get any traction.

https://smallcultfollowing.com/babysteps/blog/2026/03/21/view-types-max-min/


The Three Pillars of JavaScript Bloat

Tags: tech, javascript, complexity, tools

Most JS projects end up incredibly bloated indeed. Luckily there are ways to improve the situation.

https://43081j.com/2026/03/three-pillars-of-javascript-bloat


A rant about resolutions

Tags: tech, graphics, video, marketing

Yes the naming of resolutions is a mess… Couple that with marketing and it becomes misleading quickly.

https://blog.brixit.nl/rant-about-resolutions/


Lines of code are useful

Tags: tech, metrics, engineering, productivity, complexity

A bit more nuance in the “how to use the lines of code metric?” debate. Indeed it’s not the same if you look at complexity or productivity.

https://entropicthoughts.com/lines-of-code


Choose Boring Technology and Innovative Practices

Tags: tech, innovation, organisation

Definitely makes sense, you can be more innovative in your practices and processes than with the tech your depend on. The cost of changing is definitely not the same.

https://buttondown.com/hillelwayne/archive/choose-boring-technology-and-innovative-practices/


A Japanese Glossary of Chopsticks Faux Pas

Tags: japan, culture

Be warned! This is a long list.

https://www.nippon.com/en/japan-data/h01362/



Bye for now!

Hi all! Just finished up the last bit of work for my Season of KDE task of automating data collection for the KDE promotional team.

Since the midterm blogpost I've been assigned no new tasks. That means my final deliverables are a follower/post count scraping script for specific social media websites, a Reddit Insights page scraper that totals weekly insight data for a given subreddit, and an article evaluation script that reads articles found by the Google Alerts system and evaluates their sentiment on KDE and its software.

Follower and post counts scraper

Nothing much has changed here outside of some better error handling, consistency in argument help strings, and improved readability of log messages. The script has run well on its weekly timer and seems to show no signs of giving up. I do think I can improve it by making it more extensible to accommodate the scrubbing of new websites and accounts, but as of now it functions well for the links we're most worried about.

Reddit Insights page scraper

In the prior blogpost I mentioned worries about getting the script to run on a headless server. The script has since been made capable of running headlessly through use of a Docker image which wraps the program run with an Xvfb display server. Xvfb enables this by running display requirements in virtual memory, allowing for the use of headful software in a headless environment.

Shoutouts to Sean Pianka's repo containing dockerfiles used to run Xvfb-wrapped Selenium scripts and Selenium's own Docker images used for Selenium Grid server project. Without those resources it would have taken me a lot longer to hack together the requirements for a Docker image that could run Selenium headfully.

Along with the headless runs being solved, I also implemented plenty of bug fixes and improvements to user-facing messages. Many of the bugs came from not properly exiting Selenium during handled errors which I found out from the server having hundreds of open Firefox instances. Hopefully I've cleaned all those up.

Google Alerts evaluator

This task was a fairly large undertaking involving plenty of research and implementation steps. There were three major requirements:

  • Develop a pipeline to take in Google Alerts emails and pre-process them into articles the model can read.
  • Evaluate lightweight sentiment analysis models that can run on a server for their ability to analyze articles on KDE products.
  • Parse model output into a human-readable and easy to work with data format.

The final result is a pipeline that

  1. Reads Google Alerts emails
  2. Pre-processes the articles into Markdown files for model reading
  3. Feeds them to a local LLM configured to provide sentiment analysis output
  4. Takes the LLM output and sends it into a CSV file (if possible)

You can see how this task could take a lot of time out of people, so hopefully this pipeline can significantly alleviate that time spent.

Google Alerts email reading and processing

This was no issue as Google Alerts are all sent through Gmail and Google itself provides a very useable Gmail API for extracting emails from Gmail accounts. After generating the required credentials, fetching emails was as easy as using tools built specifically for this job in a Python package that contained bindings for the Gmail API in Python. The emails were all formatted in XML, so past experience with webscraping from the last two tasks played a part in making fetching article links from the emails painless to implement. After the article links were extracted from the emails, their contents were then fetched in Markdown format for use with the decided model.

Model evaluation

We very quickly looked towards some local large-language models (LLMs) to serve the sentiment analysis task. There were more than a few sentiment analysis fields that would be difficult for more basic models and it simplified implementation greatly. After the evaluation of some small-footprint models, by far the best at both conforming to the desired output format and performing sentiment analysis on the articles was Qwen3 with 4 billion parameters. It is lightweight enough to run on an older CPU in decent time, and while it doesn't agree amazingly with human judgement it more often errs on the side of caution, such as deciding more articles are related to KDE than aren't which wastes time but doesn't exclude relevant articles.

Designing model output and post-processing

It turns out that LLMs come in different flavors, and some, specifically instruct models, are much better at conforming to instructions than others. Many attempts were made to make other types of models provide output in a strict format and, if you need specific output, it's a headache you should definitely consider avoiding by choosing instruct models from the start.

An instruct model coupled with a well-constructed system prompt (the meta prompt that sets initial instructions for the model) and grammar file written in GBNF format can cause model output to be very predictable. The system prompt written for this task is specifically constructed to bound model output by asking it to output sentiment analysis features in a Python formatted array of strings. Even with the above methods, instruct models still do botch output occasionally, so the script contains plenty of post-processing and error handling steps before model output is processed into the output CSV file.

Experience and lessons learned

I've learned a significant amount about web scraping and how to navigate data troubles. I'm definitely a lot more confident about using developer webtools, HTML processing, and browser automation frameworks as a result of my SoK experience. Also after working on the Google Alerts sentiment analysis task, and I certainly feel more educated on AI topics and how they are used and deployed.

My project was a little unusual in that I wasn't working on an existing KDE software but utility scripts that were built from ground-up for KDE community members. This made things fun through the freedom I had with implementing solutions, but I feel the scripts are not fully developed or as problem-free as possible. I'd hate to just leave them as is while feeling that way, so I'll continue working on the already made scripts as well as new ones so long as I can help out.

Huge thanks to Paul Brown for mentoring me through this project and being a pleasure to work with, as well as the KDE community for hosting this great event. I had a lot of fun working on these scripts and am glad I could help out by contributing something to this awesome community.

Framework machine with logo

Framework supports free open-source software and becomes KDE's latest patron!

Framework manufactures and sells modular computers that are easy to maintain, repair and upgrade. By sponsoring FLOSS projects like KDE, Framework further confirms their commitment to to putting users in control of their machines.

"KDE is extremely popular in the Framework community, and we're excited to help support KDE's efforts to make the best possible Linux desktop." says Nirav Patel, Founder of Framework.

"I am excited to see Framework become a KDE Patron," says Aleix Pol, President of KDE e.V.. "It's a good continuation to our collaboration with different hardware manufacturers and distributors to ensure we can deliver systems to our users with an experience up to our expectations. Furthermore, Framework’s commitment to repairability strongly aligns with our values and is vital for building a more sustainable industry."

Framework joins KDE e.V.'s other patrons: Blue Systems, Canonical, g10 Code, Google, Kubuntu Focus, Mbition, Rocky Linux, Slimbook, SUSE, Techpaladin, The Qt Company and TUXEDO Computers, who generously support FOSS and KDE's development through KDE e.V.

Eight weeks in and it's time for the Season of KDE wrap-up - somehow survived the university exams, the KXMLGUI docs, and a dead motherboard to get here.

For the past couple of months, I've been working on KDE's computer-aided translation tool, Lokalize, under the mentorship of Finley Watson. What started as a menubar bug turned into XML configs, C++ backends, a bookmark manager, and somehow a new laptop.

Fixing the "Jumping" Menubar

If you use Lokalize, you’ve probably run into this bug: the menubar reshuffles every time you switch tabs. Go from the Editor to the Project Overview, and suddenly the Edit, Go, and Sync menus disappear or swap places. It totally breaks muscle memory. As part of my Season of KDE project, my task was to fix it.

I restructured how Lokalize handles its menus globally. I created a "Global Skeleton" layout that reserves a permanent spot for every menu, regardless of which tab is open. I then wrote logic that hooks into the application's tab-switching events. Now, if a menu isn't needed for your current tab, it simply greys out instead of disappearing completely. The result is a much more predictable UI!

Image

Ghost Actions & The Bookmark Manager

While exploring the codebase, i discovered a graveyard of 'ghost actions' features that were defined in the underlying XML files but had zero C++ code behind them, meaning they never actually showed up in the menubar. After surveying the KDE translators' mailing list to understand their daily workflows, i got to work building them:

  • Core Editing & Batch Actions: I built the backend logic to make Cut, Copy, Paste, and Alternate Translations work seamlessly. I also implemented batch actions (Save All, Close All, Revert All), complete with a safe shutdown sequence that prompts users for unsaved changes so they never lose their work.
  • The Bookmark Manager (In Review): There was no way to actually see what you had bookmarked - you could toggle them and jump between them, but that's it. I built a standalone dialog that lists all bookmarked entries with text previews and checkboxes so you can clean them up properly. It's currently in UX review with the KDE Visual Design Group (VDG).

What I Learned

The technical work was a lot, but honestly not even the most interesting part. Two things stuck with me:

  • Read before you touch anything: My first instinct in Week 1 was to blindly shuffle tags around and hope the UI fixed itself. That went nowhere. It took a few days of actually digging into the KXMLGUI docs and tracing how the merge worked before things started making sense, but once they did, the fix became obvious.
  • Talk to the actual users: Emailing the KDE translators' mailing list before implementing the ghost actions was really useful, i had assumptions about which ones mattered that turned out to be wrong. Their responses shaped a lot of what i actually built.

List of Contributions

Merged:Pending Review / Ongoing:

What's Next?

SoK is over but i'm not done with Lokalize. The Bookmark Manager still needs to land, and while testing my last MR i found another bug in "Revert All" that i want to fix. Also working on my GSoC proposal right now.

Special Thanks

Huge thanks to my mentor, Finley Watson. The code reviews were incredibly detailed, you were patient when i was going in circles, and you gave me an extension when my laptop decided to die at the absolute worst time. Really appreciate it Also thank you to the translators on the mailing list who actually responded to my email - that shaped a lot of what i ended up building. And to the KDE community in general for being so welcoming to a first-time contributor.

See you in the KDE Git logs! 👾

---

P.S. Read my weekly SoK work here: Week 1 | Week 2 | Week 3 | Weeks 4 & 5 | Week 6 | Week 7, 8 & Extension

Wednesday, 25 March 2026

Greetings!

As we're nearing the end of SoK 2026, I am writing to share my experience and progress since my previous blog.

The second half of my SoK project has been a real learning experience for me, about how contributions to KDE and open-source communities in general work. I also learnt the importance of thorough testing, bug fixing, and polishing that is required before shipping any software.

Technical update and challenges faced

Till the halfway mark, I was able to complete a rough working version of the source mode editor. But after feedback from my mentor, I realized that a lot of work was still left to be done.

Firstly, there were a lot of repeated lines of code in my solution, as I had essentially split the existing editor into two - the rich editor and the raw editor. This meant that a lot of the functionality was common between the two editors, and I had re-used existing code for that. This was true for both the QML pages and the C++ document handlers. As I now realize, that would have been a nightmare for maintainability, as any single fix or change would have to be made in two places.

The fix for the C++ part seemed to be obvious: to use inheritance. So I decided to make the RichDocumentHandler and RawDocumentHandler inherit from a common parent, the DocumentHandler. DocumentHandler now contained all the common methods, significantly reducing repeated lines of code.

Similarly on the QML side, I made a parent component, EditPage, and made the Rich and Raw edit pages inherit from it. This caused some issues (mostly related to property sharing between components) that were eventually fixed.

A major issue I faced was caused by the fact that my MR essentially removed the existing EditPage.qml and documenthandler.cpp (although files with the same name are still present, they serve different purposes). Their contents were divided into two files - the rich and raw versions respectively. But while I was working on my feature, other contributors were still modifying the old files. Git can't handle this automatically, because the old file is in a way completely changed. This meant that I had to manually go through each commit to the old files, and move the changes accordingly to the new files. This proved to be a major headache, and caused me (and even Carl) to spend considerable time manually rebasing. So when finally the feature was merged, it was a sigh of relief, as we wouldn't need to manually maintain it anymore!

Apart from this, I also added a spell-checking capability to the editor, using Sonnet.

Demo

Learning and experience

I was grateful to see my work get published in Marknote 1.5 - and also felt a responsibility at the same time. Source mode is an asset for the app, but at the same time any bugs in my work are also a liability!

I learnt how a professional application is different from a hobby project, and how the quality and rigour of work should reflect that.

It was a really fun experience working with the KDE community and I'd like to thank my mentor Carl Schwan for always being there to help!

SoK has been a great first stepping stone to introduce me to the community, and I'm looking forward to contributing to Marknote and other apps even after the program!

Tuesday, 24 March 2026

Global objects are one of the core abstractions in Wayland. They are used to announce supported protocols or announce semi-transient objects, for example available outputs. The compositor can add and remove global objects on the fly. For example, an output global object can be created when a new monitor becomes available, and be removed when the corresponding monitor gets disconnected.

While there are no issues with announcing new global objects, the global removal is a racy process and if things go bad, your application will crash. Application crashes due to output removal were and still are fairly common, unfortunately.

The race

Let’s start from the start. If the compositor detects a new output, it may announce the corresponding wl_output global object. A client interested in outputs will then eventually bind it and receive the information about the output, e.g. the name, geometry, and so on:

A new wl_output announcement.

Things get interesting when it is time to remove the wl_output global. Ideally, after telling clients that the given global has been removed, nobody should use or bind it. If a client has bound the wl_output global object, it should only perform cleanup.

The preferred way to handle wl_output global removal.

However, it can happen that a wl_output global is removed shortly after it has been announced. If a client attempts to bind that wl_output at the same time, there is a big problem now. When the bind request finally arrives at the compositor side, the global won’t exist anymore and the only option left will be to post a protocol error and effectively crash the client.

A wl_output global removal race.

Attempt #1

Unfortunately, there is not a lot that can be done about the in-flight bind requests, they have to be handled. If we could only tell the clients that a given global has been removed but not destroy it yet, that would help with the race, we would still be able to process bind requests. Once the compositor knows that nobody will bind the global anymore, only then it can destroy it for good. This is the idea behind the first attempt to fix the race.

The hardest part is figuring out when a global can be actually destroyed. The best option would be if the clients acknowledged the global removal. After the compositor receives acks from all clients, it can finally destroy the global. But here’s the problem, the wl_registry is frozen, no new requests or events can be added to it. So, as a way around, practically all compositors chose to destroy removed global objects on a timer.

That did help with the race, we saw a reduction in the number of crashes, but they didn’t go away completely… On Linux, the monotonic clock can advance while the computer sleeps. After the computer wakes up from sleep, the global destruction timer will likely time out and the global will be destroyed. This is a huge issue. There can still be clients that saw the global and want to bind it but they were not able to flush their requests on time because the computer went to sleep, etc. So we are kind of back to square one.

Attempt #2

The general idea behind the first attempt was sound, the compositor only needs to know the right time when it is okay to finally destroy the global. It’s absolutely crucial that the Wayland clients can acknowledge the global object removal. But what about the wl_registry interface being frozen? Well, it’s still true, however we’ve got a new way around — the wl_fixes interface. The wl_fixes interface was added to work around the fact that the wl_registry interface is frozen.

With the updated plan, the only slight change in the protocol is that the client needs to send an ack request to the compositor after receiving a wl_registry.global_remove event

After the compositor receives acks from all clients, it can finally safely destroy the global.

Note that according to this, a client must acknowledge all wl_registry.global_remove events even if it didn’t bind the corresponding global objects. Unfortunately, it also means that all clients must be well-behaving so the compositor can clean up the global data without accidentally getting any client disconnected. If a single client doesn’t ack global remove events, the compositor can start accumulating zombie globals.

Client changes

The client side changes should be fairly trivial. The only thing that a client must do is call the wl_fixes.ack_global_remove request when it receives a wl_registry.global_remove event, that’s it.

Here are some patches to add support for wl_fixes.ack_global_remove in various clients and toolkits:

Compositor changes

libwayland-server gained a few helpers to assist with the removal of global objects. The compositor will need to implement the wl_fixes.ack_global_remove request by calling the wl_fixes_handle_ack_global_remove() function (it is provided by libwayland-server).

In order to remove a global, the compositor will need to set a “withdrawn” callback and then call the wl_global_remove() function. libwayland-server will take care of all other heavy-lifting; it will call the withdrawn callback to notify the compositor when it is safe to call the wl_global_destroy() function.

Conclusion

In hindsight, perhaps available outputs could have been announced differently, not as global objects. That being said, the wl_output did expose some flaws in the core Wayland protocol, which unfortunately, were not trivial and led to various client crashes. With the work described in this post, I hope that the Wayland session will become even more reliable and fewer applications will unexpectedly crash.

Many thanks to Julian Orth and Pekka Paalanen for suggesting ideas and code review!

SWHID is an open ISO standard with transparent governance and free access to its specification. It includes a reference implementation and several tools that developers can use or extend. The community is open, and anyone can join the discussion to help shape the next version of the standard. Read more in this new blog post

Today is the simultaneous release of Krita 5.3.0 and Krita 6.0.0!

Depending which version of Qt and KDE Frameworks you build, the same source will result in one of the other. Both versions are almost functionally identical, with 6.0.0 having more Wayland functionality.

But note that since Krita 6 is still considered rather experimental, since it's our first release based on Qt 6, and there were many complicated changes between 5 and 6.

For real work, please use 5.3.0! We expect 6.0 to become the main version of Krita before the end of the year, though.

What's New

Video courtesy of David Revoy.

Krita 5.3/6.0 is the result of many years of work by the Krita developers. Some features have been rewritten from the ground up, others make their first appearance.

Enjoy the completely new text feature: on canvas editing, full opentype support, text flowing into shapes. It is now easier than ever to create vector-based panels for comic pages. Tools got extended: for instance, the fill tool now can close gaps. The liquify mode of the transform tool is much faster. There are new filters: a propagate colors filter and a reset transparent filter. Support for HDR painting has been improved. The recorder docker can now work in real time. There is improved support for file formats, like support for text objects in PSD files. And much, much, much more!

For a complete overview of everything, check out our extensive release notes!

5.3.0 Download

Windows

If you're using the portable zip files, just open the zip file in Explorer and drag the folder somewhere convenient, then double-click on the Krita icon in the folder. This will not impact an installed version of Krita, though it will share your settings and custom resources with your regular installed version of Krita. For reporting crashes, also get the debug symbols folder.

[!NOTE] We are no longer making 32-bit Windows builds.

Linux

Note: starting with recent releases, the minimum supported distro versions may change.

[!WARNING] Starting with recent AppImage runtime updates, some AppImageLauncher versions may be incompatible. See AppImage runtime docs for troubleshooting.

MacOS

Note: minimum supported MacOS may change between releases.

Android

Krita on Android is still beta; tablets only.

Source code

For source archives, please download the 6.0.0 archives and build with Qt5.

md5sum

For all downloads, visit https://download.kde.org/stable/krita/5.3.0/ and click on "Details" to get the hashes.

Key

The Linux AppImage and is signed. You can retrieve the public key here. The signatures are here (filenames ending in .sig).

6.0.0 Download

Windows

If you're using the portable zip files, just open the zip file in Explorer and drag the folder somewhere convenient, then double-click on the Krita icon in the folder. This will not impact an installed version of Krita, though it will share your settings and custom resources with your regular installed version of Krita. For reporting crashes, also get the debug symbols folder.

[!NOTE] We are no longer making 32-bit Windows builds.

Linux

Note: starting with recent releases, the minimum supported distro versions may change.

[!WARNING] Starting with recent AppImage runtime updates, some AppImageLauncher versions may be incompatible. See AppImage runtime docs for troubleshooting.

MacOS

Note: minimum supported MacOS may change between releases.

Android

Krita 6.0.0 is not yet functional on Android, so we are not making APK's available for sideloading.

Source code

md5sum

For all downloads, visit https://download.kde.org/stable/krita/6.0.0/ and click on "Details" to get the hashes.

Key

The Linux AppImage and the source tarballs are signed. You can retrieve the public key here. The signatures are here (filenames ending in .sig).

Hello again! Welcome to another bugfix release. This update is highly recommended, as it tackles a few critical issues to keep the app running smoothly.

  • Resolved a crash that occurred when creating your first notebook.
  • Fixed an issue that prevented notebooks from being removed.
  • Corrected a glitch allowing notes to be drag-and-dropped through quick sketches.
  • Note sorting is functioning as intended now.
  • Restored the undo and redo buttons when a single note is open.
  • Added the "Clear" button to allow removing content from the quick sketches.
  • Added several minor background improvements for better overall stability.

Get Marknote

We encourage everyone to update as soon as possible. You can grab the latest version via Flatpak, or your favorite package manager.

Packager Section

You can find the package on download.kde.org and it has been signed with Carl Schwan's GPG key.