Skip to content

Friday, 13 September 2024

Akademy 2024 in Würzburg – it was a blast

My second Akademy and has ended just yesterday. It was an amazing and productive time again! Apart from familiar faces I know from last year's Akademy or the Plasma sprint last year in Augsburg, I met plenty of new faces. Some of which I of course had contact in KDE before, but only in the digital world.

One of the best parts was again the day trip with the KDE Community. While it was a bit rainy, we for sure made the best of it and saw the beautiful city of “Rothenburg ob der Tauber”. The view from the town hall tower was very beautiful:

The talks were also quite interesting and highlighted how many facades the KDE Community has. Apart from the lightning talks being great again, the “QML in Qt6” talk was quite valuable, because I did not manage to follow up closely on the latest improvements.
The talks and BOFs related to the KDE goals were also quite beneficial in getting a good impression in what direction we want to go.

Since we had so many interesting talks, it was not possible to join all of them. What I will follow up on later are the talks “Pythonizing Qt” and “C++, Rust and Qt: Easier than you think”.

Albert Astals Cid and I gave a lightning talk together about JSON linting (my part) and QML linting (his part). We were only able to touch the surface in the given time, but had some productive discussions and follow-up questions afterward. I will create a post about the JSON validation/JSON schema topic in the future, since I am still working on some aspects of this.

It has been great again to also do some hacking together and discuss ideas in-person. I will miss being able to say “Let's discuss this at Akademy?” on merge requests ;).
I did quite a bit of hacking on KRunner, linting/formatting related tooling and also Clazy.
This can also be seen on my GitLab history that has turned a bit more blue and thus active:
GitLab activity

What was a great improvement over the last Akademy were the chicken noises to make sure people stay within the time of their talk! To better improve on that, we should maybe get some real chicken next year 🥚🐣🐔. The talks on how to apply for funding in KDE might contain useful info when working towards this ;) PS: My life-long profile picture on GitHub/GitLab is of the super cute chicken I had 🥰.

Chicken picture

“Heather, Heather, Heather; what did you do now!” and both me & Fenris started laughing with Till, as we’re discussing about the thunderbird snap during the conference dinner.

Yup, this is from UbuCon Asia, my

  • First conference
  • First flight journey
  • First travel out of my state
  • First solo travel out of my state
  • First solo stay at a hotel

Huhhh, a lot of first timers! I can’t think actually where to start with… I met so many people out there, got so many mentors! Thanks Till , for introducing me with so many mentors! I met Guruprasad sir (the launchpad guru 😄), Kierthana mam and Dimple didi (both are the documentation gurus). A lot of suggestions, tips, guides from them! Thanks a lot 🥹! BTW, How can I forget my OG Bhavani bhaiyaa!

Akademy 2024 is a wrap, and others have already begun to write about the conference in beautiful Würzburg, Germany, with some posts already visible on https://planet.kde.org. This year’s Akademy was fantastic, probably the best one I’ve ever attended. Other than the A/V situation (which we’ll be addressing next year, pinkie-promise), it was well-organized and smoothly run.

But more substantively, the talks and sessions were incredible, and really wove together a coherent narrative: KDE has mature and effective leaders who are pushing forward strategic projects that combine to become more than the sum of their parts. Among them:

Design

Andy Betts introduced us to the concept of the design system and how he and other VDG designers are building one to help unify layout and style across KDE software. …then Arjen Hiemstra introduced us to Union, a new styling system intended to be a single tool to style everything, and it can be informed by the design system’s semantics as well.

Apps

Nicolas Fella explained how our app development platform is lacking, inhibiting the growth of a more vibrant KDE-centric app ecosystem. This is also the topic of one of KDE’s newest high-level goals (full disclosure: I’m a co-champion of this goal along with Nicolas as primary champion). Carl Schwan laid out his “App Initiative” which is directly related, and David Edmundson talked about how we can improve the ability of our software to work in sandboxed environments.

Distribution

Harald Sitter introduced us to “KDE Linux” (tentative name), a new technologically advanced OS that will offer a radically high level of stability, security, and polish for those wishing to get KDE software directly from the source. David Edmundson’s talk about sandboxing is also heavily related here as well.

Recruitment

But how are we going to do all of this? Paul Brown, Aniqa Khokhar, and Johnny Jazeix introduced us to the “KDE Needs You 🫵” goal, aiming to reach more people to broaden the pool of potential contributors so KDE is sustainable for years to come.

Eco

And finally, some perspective on a different sustainability issue: this was the hottest year on record, breaking records set just a few years prior. Our planet’s capacity to sustain human life in certain regions is starting to be impacted, and we need to consider both how our work exacerbates it, and how we can do our part to help make it better. Accordingly, we heard from Joanna Murzyn, Cornelius Schumacher, and Joseph P. De Veaugh-Geiss about KDE’s efforts to prolong the lifespan of old hardware so it doesn’t become e-waste. And Nicole Teale gave us some concrete hope by informing us about a program to introduce German schoolkids to the idea of upcycling old computers by installing Kubuntu on them, very similar to a similar program here in the USA that I was tangentially involved with!

Hopefully the themes and synergies here are clear. KDE is becoming more professional, more comprehensive in scope, will take more initiative for the distribution of its own software, will evolve that software’s design in a way that’s supported by modern design tools and professional designers, and contributes to solving the world’s biggest problems. I find this to be super exciting, and I hope you do too!


My personal role in Akademy was a bit more behind-the-scenes this year. I did take part in two presentations: the former goal wrap-up and the KDE e.V. Board of Directors report.

In these, I described the successes and challenges of my now-concluded Automation & Systematization goal, and helped to inform the community about KDE e.V.’s activities since last Akademy.

I also participated in Many birds-of-a-feather (BoF) sessions about various topics, including:

  • A tech discussion about KDE Linux — install it today and help make it great!
  • Plasma planning and roadmap — Plasma is in a great state, and we’re going to resume Monday meetings, this time in video form. I’ve got five specific features, UI changes, or bug-fixes I want to add to 6.3, and others have even more ideas.
  • Design team decision-making process — super useful; we came up with one to enable us to make important decisions again.

Beyond the BoFs, I found myself constantly talking to people between sessions, during lunch, and in what seemed like every spare moment! Including:

  • Björn Balazs about his work to create https://privact.org, a foundation building a next-generation method to gather metrics from users with zero risk to their privacy.
  • Jos van den Oever about KDE developers applying for sponsorship from https://nlnet.nl to work on important KDE and KDE-relevent projects. Seriously, go do it!
  • Eike Hein about KDE’s history and the 100% drama-free Trinity Desktop Environment.
  • Neal Gompa about the challenges involved in shipping an immutable-base-system OS outside of single-purpose appliances (i.e. as a desktop OS for regular people, enthusiasts, and developers).
  • Xaver Hugl live-debugged an issue on my laptop that he was able to speedily conclude was a Libinput bug.
  • …and many more I didn’t have the remaining brain capacity to remember!

All of this was completely exhausting, and I had to excuse myself from a few group events and dinners to rest and process the day’s events. But Würzburg being a ridiculously beautiful city certainly helped!

This has been my favorite Akademy so far, and thank you so much to everyone who helped to make it possible — David Redondo, Kieryn Darkwater, Victoria Fierce, Lydia Pintscher, and the rest of the Akademy team! Job’s a good ‘un, and I’ll see you around the internet!

Friday, 13 September 2024

KDE today announces the release of KDE Frameworks 6.6.0.

KDE Frameworks are 72 addon libraries to Qt which provide a wide variety of commonly needed functionality in mature, peer reviewed and well tested libraries with friendly licensing terms. For an introduction see the KDE Frameworks release announcement.

This release is part of a series of planned monthly releases making improvements available to developers in a quick and predictable manner.

New in this version

Attica
Baloo
  • Set up crash handling for baloo_file. Commit.
Bluez Qt
  • MediaTransport: Added setVolume. Commit.
  • Ci: add Alpine/musl job. Commit.
Breeze Icons
  • Remove 48px draw-freehand symlink. Commit. Fixes bug #491887
  • Add info(-symbolic) icon symlinks. Commit.
  • Add new 64px dialog icons. Commit.
  • Add icon for Apple Wallet passes bundle. Commit.
  • Add battery icons with power profile emblems. Commit. See bug #483805
  • Add remaining symbolic icons required for Discover. Commit.
  • Update accessibility icons. Commit.
  • Ci: add Alpine/musl job. Commit.
  • Add system-reboot-update and system-shutdown-update icons. Commit.
  • Add a couple of missing monochrome category icons. Commit.
  • Don't generate symlinks for app icons if we not install the icons. Commit.
  • Fix issues with zoom-map icons. Commit.
  • Add Spinbox-specific decrease and increase icons. Commit. See bug #491312
  • Make list-remove look like a red X. Commit.
Extra CMake Modules
  • ECMQueryQt: don't cache QUERY_EXECUTABLE. Commit.
  • Add fallback value for SASL_PATH. Commit.
  • Add SASL_PATH to prefix.sh so that libkdexoauth2.so is found. Commit.
  • Allow qml target to be actually optional. Commit.
  • Fix FindLibExiv2 version detection from header. Commit.
  • Ci: add Alpine/musl job. Commit.
  • ECMEnableSanitizers: fix greedy linker parameter replacment. Commit.
  • Add private code option to ecm_add_qtwayland_(client/server)_protocol. Commit.
  • Add a PRIVATE_CODE option to ecm_add_wayland_server_protocol. Commit.
  • Add [PRIVATE_CODE] also to the second signature of ecm_add_wayland_server_protocol. Commit.
KAPIDox
  • Unify format string usage. Commit.
  • Avoid double assignment. Commit.
  • Remove unnecessary escape. Commit.
  • COLS_IN_ALPHA_INDEX has been deprecated. Commit.
  • Footer.html correct URL for trademark_kde_gear_black_logo.png. Commit.
KArchive
KAuth
  • HelperSupport: don't send debug message on application shutting down. Commit.
KCalendarCore
  • Export KCalendarCore namespace to QML. Commit.
  • Add read support for xCal events. Commit.
  • Add KF7 TODOs to make ICalFormat::fromString methods static. Commit.
  • Refactor libical <-> KCalendarCore enum conversion. Commit.
  • Avoid computing the next recurrence interval based on an invalid time. Commit.
KCMUtils
  • Set a QQmlEngine property on the QApplication. Commit. Fixes bug #488965
KCodecs
  • Ci: add Alpine/musl job. Commit.
  • Ensure we find test data on Windows. Commit.
KColorScheme
  • Use passkey to avoid issues with private constructor. Commit.
  • Additional public API. Commit.
  • [kcolorschememanager] Fix crash. Commit. Fixes bug #492408
  • Add KColorSchemeManager::instance in favor of public constructor. Commit.
KConfig
  • KStandardAction: Use windowIcon for AboutApp icon again. Commit.
  • Fix macro documentation. Commit.
  • Ci: add Alpine/musl job. Commit.
  • Fix warning from staterc migration when there's no "old" file to migrate. Commit.
  • Update KF6 TODO comments to KF7 given that they weren't addressed in KF6. Commit.
KContacts
  • Make the depedency to QML optional. Commit.
KCoreAddons
  • ExportUrlsToPortal: check for dbus error. Commit.
  • KDirWatch: don't try inotify again if it has already failed. Commit.
  • Relicense some files from lgpl2-only to lgpl2.1-or-later. Commit.
  • Ci: add Alpine/musl job. Commit.
  • KPluginMetaData: Avoid reading metadata from plugin loader twice. Commit.
  • Kcoreaddons_add_plugin: Fix typo in error message. Commit.
  • Fix configuring error when QtQml is not around. Commit.
KCrash
  • Document that KCrash::initialize should be called after KAboutData. Commit.
  • Drop ptrace forwarding code. Commit.
KDBusAddons
KDeclarative
  • QPixmapItem: Adjust rendering to dpr positioning. Commit. Fixes bug #481219
KDE Daemon
KDNSSD
KFileMetaData
  • UserMetadata: fix Win k_setxattr. Commit.
  • [OfficeExtractor] Do not add word/line count if nothing has been extracted. Commit.
  • [OfficeExtractor] Only try to extract content if PlainText is requested. Commit.
  • [OfficeExtractor] Remove duplicate findExecutable calls, fix debug output. Commit.
  • Cmake: Use KDE_INSTALL_FULL_LIBEXECDIR_KF instead of manual path mangling. Commit. Fixes bug #491462
  • Add missing initializer for "Empty" PropertyInfo displayName. Commit.
  • [Taglib] Use non-deprecated constructors for MPEG::File/FLAC::File. Commit.
  • [Taglib] Replace deprecated length() with lengthInSeconds(). Commit.
KGlobalAccel
KGuiAddons
  • Port towards QNativeInterface. Commit.
  • Fail at CMake configure time if xcb Qt feature is not enabled. Commit.
  • Waylandclipboard: Dont explicitly clear when transfering sources. Commit.
  • [kjobwidgets] Store window in a QPointer. Commit. See bug #491637. See bug #448532
  • Ci: add Alpine/musl job. Commit.
  • KOverlayIconEngine: Adjust to API change in Qt 6.8 in scaled pixmap hook. Commit.
  • Generate wayland code with PRIVATE_CODE. Commit.
KHolidays
KI18n
  • Spinboxdoc. Commit.
  • Formatting. Commit.
  • Ci: add Alpine/musl job. Commit.
  • Fix test to actually use a QDoubleSpinBox as intended here. Commit.
  • Unambiguous documentation of formatString. Commit.
KIconThemes
  • Allow building without breeze-icons. Commit.
  • Extend initTheme to ensure we properly follow the system colors. Commit.
  • Add path for Android to theme locations. Commit.
  • Take logical pixels in KIconEngine::createPixmap. Commit.
  • [kiconengine] Adapt to Qt behavior change in scaledPixmap. Commit. Fixes bug #491677
KIdletime
  • Ci: add Alpine/musl job. Commit.
  • Generate wayland code with PRIVATE_CODE. Commit.
KImageformats
KIO
  • Test: skip kfilewidgettest focus test in Wayland. Commit.
  • KFileWidget: Fix selecting directories. Commit.
  • [trash] Fix restoring entries with absolute paths in disk-local trash. Commit. Fixes bug #463751
  • Add missing include. Commit.
  • Also search kservices5 for service menus. Commit.
  • Accept service menus that use ServiceTypes to specify their types. Commit. Fixes bug #478030
  • Ignore application/x-kde-onlyReplaceEmpty in paste dialog. Commit. Fixes bug #492006
  • Apply 1 suggestion(s) to 1 file(s). Commit.
  • PasteDialog: hide application/x-kde-* formats from the combobox. Commit.
  • PreviewJob: remove obsolete support X-KDE-Protocols aware thumbnailer. Commit.
  • Fix documentation for ThumbnailRequest. Commit.
  • Remove dead code for changing job priorities. Commit.
  • Remove unused sslMetaData member. Commit.
  • Remove unneeded friend. Commit.
  • KFileWidget: Enable word wrapping for the message widget. Commit.
  • Add missing include. Commit.
  • Remove unused function. Commit.
  • Consistently use WITH_QTDBUS instead of USE_DBUS. Commit.
  • Previewjob: use contains instead of supportsMimetype. Commit.
  • Document variable purposes and move EntryInfo definition to the start. Commit.
  • KPropertiesDialog: Add "unknown" fallback. Commit.
  • KPropertiesDialog: Use original URL for extra fields. Commit.
  • Remove unneeded QPointer usage. Commit.
  • PreviewJob: some refactoring. Commit.
  • KUrlNavigator: Support modifiers on return similar to web browsers. Commit.
  • PreviewJob: fix warnings and a todo. Commit.
  • KDynamicJobTracker: Use widgets fallback if server says job tracker is required. Commit.
  • Correctly escape unit names. Commit. Fixes bug #488854
  • KRecentDocument: add removeApplication and removeUrl. Commit. See bug #480276
  • Gui/kprocessrunner: normalize working directory. Commit. Fixes bug #490966
  • DropJob: special-case "downloading http URLs" drop with better text. Commit.
  • Don't show "Move" item in drop menu for source files accessed using http. Commit. Fixes bug #389600
  • Set up crash handling for kiod. Commit.
  • Deprecate leftovers from HTTP cache control. Commit.
  • KUrlNavigator: Decode url title fully. Commit.
  • Make sure KCrash works for kioworker. Commit.
  • Previewjob: Use thumbnailer files for any mimetypes we don't have a plugin for. Commit.
Kirigami
  • Disable cachegen. Commit. Fixes bug #488326
  • PlaceholderMessage: Remove the icon opacity if the message is actionable. Commit.
  • ToolBarLayout: Add test for dynamic actions. Commit.
  • Read willShowOnActive value as Variant and convert to Bool. Commit.
  • PrivateActionToolButton: Replace onVisibleChanged with Connections. Commit.
  • Fix registration name for WheelEvent. Commit.
  • [icon] Only reload icon from theme if the theme has that icon. Commit. Fixes bug #491806. Fixes bug #491854. Fixes bug #491848
  • PrivateActionToolButton: Hide menu if button is hidden. Commit. Fixes bug #486107
  • Allow recoloring of Android icon theme. Commit.
  • Ci: add Alpine/musl job. Commit.
  • [icon] Fix icon colors when using Plasma platformtheme and QIcon source. Commit. Fixes bug #491274
  • ShadowedImage: Expose Image.status via a readonly alias. Commit.
  • PromptDialog: fix buttons overflow. Commit.
  • Relicense Chip to LGPL. Commit.
  • Relicense LoadingPlaceholder to LGPL. Commit.
KItemModels
  • Remove unused license text. Commit.
  • Convert license statements to SPDX. Commit.
  • Ci: add Alpine/musl job. Commit.
  • Fix build without Qml. Commit.
  • KColumnHeadersModel: Fix manual test. Commit.
  • KExtraColumnsProxyModel: port to Qt 6.8's QIdentityProxyModel::setHandleSourceLayoutChanges. Commit.
KItemViews
KJobWidgets
  • Only install D-Bus interface files when actually building with D-Bus. Commit.
KNewStuff
  • Add especially crappy magic to deal with transient parents in actions. Commit. Fixes bug #491083
  • Make staticxmlprovider (more) reentrant. Commit.
  • Make AtticaProvider reentrant. Commit.
  • Typos--. Commit.
KNotifications
  • Don't set desktop file name for XDG activation token. Commit.
KPackage
KPlotting
KQuickCharts
KStatusNotifieritem
  • Fix deprecation versions. Commit.
  • Deprecate action collection access. Commit.
KTextEditor
  • Make tests a bit faster. Commit.
  • Fix clashing and missing keyboard accelerators. Commit.
  • Add help texts for new editing commands. Commit.
  • Move sort implementation to C++. Commit. Fixes bug #478250
  • Move natsort to C++ and implement it using QCollator. Commit.
  • Move the sortuniq, uniq implementation to C++. Commit. Fixes bug #478250
  • Read and write font features to config. Commit.
  • Fix doc.text() when first block is empty. Commit.
  • Fix block splitting. Commit.
  • Try to make test more robust. Commit.
  • Restore previous indentation test mode based on individual files. Commit.
  • Store startlines in the buffer instead of block. Commit.
  • Doc: Fix code example for plugin hosting. Commit.
  • No 10 second timeouts, the CI is not that consistent fast. Commit.
  • Try to make test more stable. Commit.
  • Improve encoding detection. Commit. Fixes bug #487594
  • Fix grouping on config dialog page. Commit. Fixes bug #490617
  • Optimize cursorToOffset. Commit.
  • Dont indent on tab when in block selection mode. Commit. Fixes bug #448695
  • Fix selection printing. Commit. Fixes bug #415570
KTextTemplate
KTextWidgets
  • Fix unused-variable warning (with clang) when HAVE_SPEECH isn't set. Commit.
  • Deprecate KPluralHandlingSpinBox. Commit.
KUserFeedback
  • Tests: allow to disable testOpenGLInfoSource using envvar. Commit.
  • Ci: add Alpine/musl job. Commit.
KWallet
KWidgetsAddons
  • Hide toolbar when not need (e.g. in tabbed view). Commit.
  • FontChoose: Allow setting font features when selecting font. Commit. Fixes bug #479686
  • Expand tabbar in KPageView. Commit.
  • [kjobwidgets] Store window in a QPointer. Commit. Fixes bug #491637. See bug #448532
  • Support page headers in KPageView. Commit.
KWindowSystem
  • Generate wayland code with PRIVATE_CODE. Commit.
KXMLGUI
  • Port to KStandardActions where possible. Commit.
Modem Manager Qt
Network Manager Qt
Prison
  • Fix WITH_QUICK=OFF by moving ECMQmlModule behind the conditional. Commit.
  • Ci: add Alpine/musl job. Commit.
Purpose
QQC2 Desktop Style
  • Read Smallest font settings from the proper config. Commit. Fixes bug #490890
Solid
Sonnet
  • Revert "fail if none of the plugins can be build". Commit.
  • Fail if none of the plugins can be build. Commit.
  • Update file spellcheckhighlighter.cpp. Commit.
  • Quick: Silence valgrind warnings. Commit.
  • Fix uic warning. Commit.
  • Ci: add Alpine/musl job. Commit.
Syntax Highlighting
  • Inc version. Commit.
  • Update QFace IDL Definition to support single line comments. Commit.
  • Odin.xml: Multiple fixes to the syntax. Commit.
  • QFace: WordDetect without trailing space. Commit.
  • Bash: add \E, \uHHHH and \UHHHHHHHH String Escape, @k parameter transformation and & in string substitution. Commit.
  • Zsh: add \E, \uHHHH, \UHHHHHHHH and sinle \ as String Escape. Commit.
  • Add definition for the QFace IDL. Commit.
  • Modelines: add missing variables and delete some that don't work. Commit.
  • Add Kate Config syntax (.kateconfig file). Commit.
  • Modelines: fix spaces after remove-trailing-spaces value ; multiple values now stop parsing. Commit.
  • Modelines: fix indent-mode value and remove deprecated variables. Commit.
  • Detect-identical-context.py: add -p to show duplicate content. Commit.
  • XML: add parameter entity declaration symbol (% in ). Commit.
  • Indexer: suggest removing .* and .*$ from RegExpr with lookAhead=1. Commit.
  • PHP: add { in double quote string as a Backslash Code. Commit. Fixes bug #486372
  • Zsh: fix escaped line in brace condition. Commit.
  • Bash: fix escaped line in brace condition. Commit. Fixes bug #487978
  • Nix: fix string in attribute access. Commit. Fixes bug #491436
  • Optimize AbstractHighlighterPrivate::ensureDefinitionLoaded (highlighter_benchmark is 1.1% faster). Commit.
  • Ci: add Alpine/musl job. Commit.
  • Indexer: suggest replacing RegExpr with Int or Float when possible. Commit.
  • Add JSX as an alternative name for JavaScript React (JSX) and TSX for TypeScript React (TSX). Commit.
  • Indexer: check name and alternativeNames conflict ; update alternativeNames for generated files. Commit.
  • Optimize Repository::addCustomSearchPath. Commit.
  • Replace QList contextDatas with std::vector: implicit sharing is not useful. Commit.
  • Prefer range-based loops to loop over iterators. Commit.
  • Optimize Definition::foldingEnabled() by calculating the result during loading. Commit.
  • Replace DefinitionRef type with DefinitionData* in immediateIncludedDefinitions. Commit.
  • Remove code duplication related to context resolution. Commit.
  • Replace std::cout / std::cerr with fprintf. Commit.
  • Use QStringView as key for format. Commit.
  • Replace QStringView::mid,left,right with sliced. Commit.
  • Replace QString::split with QStringTokenizer to avoid unnecessary list construction. Commit.
  • Orgmode: add syntax highlighting to some languages. Commit.
  • Optimize Repository::definition[s]For*(). Commit.
  • Reduce QFileInfo usage. Commit.
  • Theme_contrast_checker.py: add --scores to modify rating values. Commit.
  • Theme_contrast_checker.py: displays the selected color space. Commit.
  • Theme_contrast_checker.py: fix label inversion between bold and normal text. Commit.
  • Ksyntaxhighlighter6: add --background-role parameter to display different possible theme backgrounds. Commit.
  • Ksyntaxhighlighter6: rename ansi256Colors format to ansi256. Commit.
  • Theme_contrast_checker.py: fix help of -M parameter. Commit.
  • Added a link to all available syntaxes and how to test a file in an isolated environment. Commit.
  • Python: raw-string with lowercase r are highlighted as regex. Commit.
  • JSON: fix float that start with 0. Commit.
  • JSON: add jsonlines and asciicast v2 format extensions. Commit.
Threadweaver

Thursday, 12 September 2024

I reverted my name back to Jonathan Riddell and have now made a new uid for my PGP key, you can get the updated one on keyserver.ubuntu.com or my contact page or my Launchpad page.

Here’s some pics from Akademy

KDE Akademy is meeting this week in Würzburg.

We just had a BoF session where we discussed..

  • The current progress to rebasing on Ubuntu 24.04
  • The current state of KDE neon Core our amazing forthcoming Snap based distro
  • Fixing up broken and bitrotting infrastructure
  • Moving to KDE invent
  • Issues with Plasma 6 upgrades and looking at integrating more QA tests
  • How the proposed KDE LinuxTM distro fits into the mix
 
Akademy 2024 group photo.  

This year's Akademy in Würzburg, Germany was all about resetting priorities, refocusing goals, and combining individual projects into a final result greater than the sum of its parts.

A shift — or more accurately a broadening of interest — in the KDE community has been gradually emerging over the past few years, and reached a new peak at this year's event. The conference largely focused on delivering high quality, cutting-edge Free Software to end users. However the keynote "Only Hackers will Survive" by tech activist and environmentalist Joanna Murzyn, and Joseph De Veaugh-Geiss' "Opt In? Opt Out? Opt Green!" talk took attendees down a left turn by addressing growing concerns about the impact of IT on the environment and discussed how Free Software can help curb CO2 emissions.

 
Joanna Murzyn explains the impact irresponsible IT developments have on the environment.  

KDE has always had a social conscience. The community's vision and mission of providing users with the tools to control their digital lives and protect their privacy is now combined with concern for the preservation of the planet we live on.

But KDE can do more than one thing at a time, and our software is also undergoing profound changes under the hood. Joshua Goins, for example, is working on ways to enable framework, plasma and application development in Rust. According to Joshua, Rust has many advantages, such as its memory safety capabilities, while adding a Qt front-end to Rust projects is much easier than many people believe.

This is in line with one of the new goals adopted by the community during this Akademy: Nicolas Fella, Plasma contributor and key developer of KDE's all-important frameworks, will champion "Streamlined Application Development Experience", a goal aimed at making it easier for new developers to access KDE technologies.

And onboarding new developers is what the "KDE Needs You! 🫵" goal is about. While the growing popularity of KDE software is great, growth puts more stress on the teams that create the applications, environments, and underlying engines and frameworks. Add to that the fact that the veteran developers are getting gray around the temples, and you need a constant influx of new contributors to keep the community and its projects running. The "KDE Needs You! 🫵" goal aims to address this challenge and is being spearheaded by members of the Promo and Mentoring teams. The champions aim to formalize and strengthen KDE's processes for recruiting active contributors, and to make recruiting active contributors to projects a priority and an ongoing task for the community.

These two goals aim to benefit the community and projects in general. KDE's third goal, "We care about your input", will build on their work: proposed by Jakob Petsovits, Gernot Schiller and Joshua Goins, "input" in this case refers to "input from devices". The goal addresses the fact that there are still a lot of languages and hardware that are not optimally supported by Plasma and KDE applications, and with the move to Wayland, some devices have even temporarily lost a measure of support they enjoyed on X11. Jakob, Gernot, and their team of supporters plan to solve this problem methodically, working to make KDE's software work smoothly and effortlessly on drawing tablets, accessibility devices, and game controllers, as well as software virtual keyboards and input methods for users of the Chinese, Japanese, and Korean languages.

One way to achieve the desired level of integration is to control the entire software stack, right down to the operating system. This is also in the works for KDE, as Harald Sitter is working on a new technologically advanced operating system tentatively named "KDE Linux". This operating system aims to break free of the constraints currently limiting KDE's existing Neon OS and offer a superior experience for KDE's developers, enthusiast users, and everyday users.

KDE Linux's base system will be immutable, meaning that nothing will be able to change critical parts of the system, such as the /etc, /usr, and /bin, directories. User applications will be installed via self-contained packages, such as Flatpaks and Snaps. Adventurous users and developers will be able to overlay anything they want on top of the base system in a non-destructive and reversible way, without ever having to touch the core and risk not-easily-fixable breakage.

This will help provide users with a solid, stable, and secure environment, without sacrificing the ability to run the latest and greatest KDE software.

As the proof of the pudding is in the eating, Harald surprised the audience when he revealed towards the end of his talk that his entire presentation had been delivered using KDE Linux!

The user-facing side of KDE is also changing with the work of Arjen Hiemstra and Andy Betts — and the Visual Design Group at large. Arjen is working on Union, a new theming engine that will eventually replace the different ways of styling in KDE. Up until now, developers and designers have had to deal with multiple ways of doing styling, some of which are quite difficult to use. Union, as the name implies, will end the fragmentation and provide something that is both easier for developer to maintain and more flexible for designers to interact with.

And then Andy Betts told us about Plasma Next, while introducing the audience to the concept of Design Systems -- management systems that allow all aspects of large collections of icons, components, and other graphical assets to be controlled. Using design systems, the VDG is developing a new look for Plasma and KDE applications that may very well replace KDE's current Breeze theme — and be consistently applied across all KDE apps and plasma, to boot!

 
A first look at Dolphin rocking Plasma Next icons.  

This means that in the not too distant future, KDE users will be able to enjoy a rock-solid and elegant operating system with a brilliant look to match!

In other Akademy news...

  • Kevin Ottens added another KDE success story to the list, telling us how a wine producing company in Australia has been using hundreds of desktops running KDE Plasma for more than 10 years.
  • Natalie Clarius explained how she is working on adapting Plasma to work better on our vendor partners' hardware products.
  • In the "Openwashing" panel moderated by Markus Felner, Cornelius Schumacher of KDE, Holger Dyroff of OwnCloud, Richard Heigl of HalloWelt! and Leonhard Kugler of OpenCode took on companies that call themselves "open source" but are anything but.
  • David Schlanger shared the harsh truth about AI, his wishful positive vision for the technology, and then faced questions and comments from Lydia Pintscher and Eike Hein in the keynote session on day 2.
  • Ben Cooksley, Volker Kraus, Hannah von Reth, and Julius Künzel took a deep dive into the frameworks, services, and utilities that help KDE projects get their products to users quickly and on a wide variety of platforms.

Akademy Awards

The prestigious KDE Awards were given to:

  • Friedrich W.H. Kossebau for his work on the Okteta hex editor.
  • Albert Astals Cid for his work on the Qt patch collection, KDE Gear release maintenance, i18n, and many, many other things.
  • Nicolas Fella received his award for his work on KDE Frameworks and Plasma.
  • As is traditional, the Akademy organizing team was awarded for putting on a fun, interesting and safe event for the entire KDE community.

If you would like to see the talks as they happened, the unedited videos are currently available on YouTube. Cut and edited versions with slides will be available soon on both YouTube and PeerTube.

Over 180 individual programs plus dozens of programmer libraries and feature plugins are released simultaneously as part of KDE Gear.

Today they all get new bugfix source releases with updated translations, including:

  • filelight: Update the sidebar when deleting something from the context menu (Commit, fixes bug #492155)
  • kclock: Fix timer circle alignment (Commit, fixes bug #481170)
  • kwalletmanager: Start properly when invoked from the menu on wayland (Commit, fixes bug #492138)

Distro and app store packagers should update their application packages.

Plasma Wayland Protocols 1.14.0 is now available for packaging.

This adds features needed for the Plasma 6.2 beta.

URL: https://download.kde.org/stable/plasma-wayland-protocols/
SHA256: 1a4385ecfc79f7589f07381cab11c3ff51f6e2fa4b73b78600d6ad096394bf81 Signed by: E0A3EB202F8E57528E13E72FD7574483BB57B18D Jonathan Riddell jr@jriddell.org

Full changelog:

  • add a protocol for externally controlled display brightness
  • output device: add support for brightness in SDR mode
  • plasma-window: add client geometry + bump to v18
  • Add warnings discouraging third party clients using internal desktop environment protocols

Wednesday, 11 September 2024

At Akademy 2024, during my talk KDE to Make Wines I promised there would be a companion blog post focusing more on the technical details of what we did. This is the article in question.

This is a piece I also wrote for the enioka blog, so there is a French version available.

Where we set the stage

After years of working in the service industry, one thing which doesn’t cease to amaze me is the variety of needs our customers have and how we can still be surprised by them. They sometimes lead us in unexpected directions. This is obviously something I particularly like.

Today I’ll tell you the tale of a nice relationship enioka Haute Couture built with a customer down under.

It all started with a mail on a KDE mailing list a couple of years ago. People were looking for help. It was spotted by my colleague Benjamin Port who reached out. It turned out those people were from De Bortoli Wines an Australian winemaking company. They are known for using Free Software quite a bit and contributing when they can. They even got interviewed on the KDE’s dot ten years ago!

Not much really happened after our first contact but we kept the communication open… Until last year when they reached out to us for some help with Okular, the universal document viewer made by KDE.

They wanted to get rid of Acrobat Reader for Linux in favor of Okular. They had one issue though, the overprint preview support was visibly broken in Okular. This is essential when interacting with a reprographics company which will send back PDFs based on how they layer colors (or overprinting). You need the overprint preview to simulate what the final rendering will be. We were of course motivated to help them get rid of Acrobat Reader for Linux since it is an old and stale piece of proprietary software.

Getting serious about PDF rendering

This looked at first like an easy task. Poppler (used for rendering PDFs) was exposing some API for the overprinting preview but Okular didn’t make use of it. We quickly made a patch to use the overprint preview API.

Alas, doing so uncovered another issue. As soon as we turned on the overprinting preview support the application would crash. We tracked it down one level down. Somehow the crash was hiding in the Poppler-Qt bindings.

After further exploration, it was due to the binding wrongly determining the row size of the raster images to generate. There’s a color space conversion occurring between the initial memory representation and the target raster image. The code was getting this row size before the transform occurred… and then ended up stuffing the wrong amount of data in the target raster. This couldn’t go well. Another patch was thus produced to address this.

The good news is that we managed to fix the issue in less time than the budget the customer allocated to us. So we gave them the choice between stopping here or using the remaining budget to address something else.

We used the Ghent Workgroup PDF Output suite to validate our work beyond the samples provided by our contact. While doing so we noticed Poppler was failing at properly rendering some other cases. So we proposed to investigate those as well.

After spending some time on those… we made tentative fixes but unfortunately they led to some regression. So in agreement with the customer, we wrapped up and created a detailed bug report instead as to not waste their budget. This helped the Poppler community figure out the problem and produce a fix. That’s when we realized we came really close to the right fix at some point. Clearly an expert view on how the various PDF color spaces work was required so it was a good call to create the detailed report.

With still some budget left, our contact proposed us to also bring the overprint preview support to Okular printing. This was initially left out of the scope but necessary when you want to print your preview on a regular laser printer. This required adjusting Okular and adjusting Poppler-Qt once more. It was ultimately done within budget.

CIFS mount woes

Since the customer was satisfied with the work they came back for more. We setup a budget line for them to come up with issues to fix throughout the year.

Around that time, their focus moved more to CIFS mounts which they use extensively for their remote office branches. As active users of that kernel feature, they encounter issues in user facing software that you would otherwise not suspect.

File copy failures

They were affected by a bug preventing Okular to save on CIFS mounts. It is one of those which has been lingering on for a bit more than a year without a solution in sight. Some applications could modify and save a file opened on a CIFS mount but somehow not Okular.

It turned out to be due to some code in KIO itself (the KDE Frameworks API used for network transparent file operations) interacting in an unwanted way with CIFS mounts.

Indeed, the behavior of unlink() (file deletion) on CIFS mounts can be a bit “interesting”. If the file one tries to delete is opened by another process then the operation is claimed to have succeeded but the filename is still visible in the file hierarchy until the last handle is closed. This is unlike the usual UNIX behavior, outside of CIFS mounts the file wouldn’t be visible in the hierarchy anymore. We thus were seeing the issue because Okular does keep a file handle opened on the file.

Now, KIO rightfully attempts to write under a temporary name, delete the original file and rename to the final name during its file copy operation. This would then fail as the unlink() call would succeed, but the rename would unexpectedly fail due to the lingering file in the hierarchy.

So we proposed a patch for KIO which would do a direct copy for files on CIFS mounts. Files being directly overwritten succeed and so the bug experienced with Okular was solved.

Slow directory listing

This wasn’t the end of the issues with CIFS mounts (far from it). They were also experiencing performance problems when listing folders. Interestingly, they would experience it only in the details view of the KDE file dialog.

At its core the issue was due to requesting too much information. When listing a folder known to be remote by KIO (e.g. going through an smb:// URL) the view would limit the amount of information it’d request about the sub-folders. In particular it wouldn’t try to determine the number of files in the sub-folder. This operation is fast nowadays on modern disks, but incurs extra trafic and latency over the network.

This sounded like a simple fix… but in fact it was a bit more work than expected.

Unsurprisingly we quickly found that the code would decide to go for more or less details solely on the URL. Since CIFS mounts get file:/ URLs, they’d end up treated as local files… so we went to querying a bit more agressively. There is an isSlow() method on the items in the detail view tree which we extended to check for CIFS mounts.

This wasn’t enough though, we immediately realized that the new bottleneck was the calls to isSlow() itself. It would lead to several statfs calls which would be expensive as well. The way out was thus to cache the information in the items and for children to query the cache in their parent. Indeed, if the parent is considered slow, we decided to consider the children in the folder as slow as well. This heuristic allowed us to remove all the subsequent isSlow() calls after the one on the mountpoint folder itself.

This was a very old piece of code we touched there, so some time was also used to clean things up a bit, refactor and rename things to align them better with other KIO parts.

LibreOffice backup files during save

They are such active users of CIFS mounts that they found yet another issue! This time with an old version of LibreOffice. In their version it would show up only if the KDE integration was used. I can tell you we were a bit surprised by this. The investigation wasn’t that easy but we managed to track it down.

The issue was showing up after opening a file sitting on a CIFS mount with LibreOffice. If you did a change to the file, then clicked “Save As…” and selected the same file to overwrite, you would get a “Could not create a backup copy” error and the file wouldn’t be saved if the KDE integration was active. All would be fine without this integration though.

What would be different with and without the KDE integration? Well, in one case there is an extra process! When the file dialog opens, if it is the KDE file dialog, the listing is delegated to a KIO Worker. In this particular case this would matter. Indeed, we figured that LibreOffice keeps an open file descriptor on the opened file. Not only this, it also holds a read lock on the file. The KIO Worker is being forked from LibreOffice, so it too has the open file descriptor with a lock.

This made us realize that there was a leak of file descriptor which is in itself not a good thing. So we changed KIO to cleanup open file descriptors when spawning workers, it’s always a good idea to be tidy. Also, as soon as we removed the file descriptor leak the issue was gone. Nice, this was an easy fix.

Just to be thorough, we tried again but this time with the latest LibreOffice. And even with the patched KIO we would get the “Could not create a backup copy” error! This time it would show up also without the KDE integration. And so back to hunting… without getting too much into the internals of LibreOffice, it turned out the more recent version had extra code activated to produce said backup version, and it has two file descriptors open on the same file. So we were back to the problem of two file descriptors and read locks being involved. But this time it was not due to a leak towards another process, and the architecture of LibreOffice didn’t make it easy to reuse the original file descriptor created when opening the file.

The only thing we could do at this point was to simply not lock when the file is on a CIFS mount. It is not a very satisfying solution but it did the job while fitting the allocated time.

Somehow we couldn’t leave things like this though. If you know well the very much criticized POSIX file locks (which have extra challenges over CIFS), something is still not feeling quite right. We got two processes with a file descriptor on the file to save, and yet there is a single process holding a read lock. During the save, when the failure happens, LibreOffice is still making a “backup copy”, it is not writing yet to the file only reading it… for sure this should be allowed!

We thus started to suspect a problem with the kernel itself… and our contact has been willing to explore it further. After investigation, it’s been confirmed to be a kernel bug. For that the customer hooked us up with Andrew Bartlett from Catalyst as they knew he could help us flesh out ideas in this space. This proved valuable indeed. Thanks to tests we wrote previously and conversations with Andrew, we quickly figured that depending on the options you would pass at mount time the CIFS driver would handle the locks properly or not. We’ve discussed with the maintainer of the CIFS driver for a couple of fixes. They have been merged last week (end of August 2024).

A customer who sparks joy

It’s really a joy to have a customer like this. As can be seen from their willingness to dig deeper on what others would consider obscure issues, they demonstrate they are thinking long term. It also means they come with interesting and challenging issue… and they’re appreciative of what we achieved for them!

Indeed we got the pleasure to receive this by email during our conversations:

We very much appreciate the work you’ve done, and difficulty surrounding the challenges you’re working through. Your approach/results are spectacular, and we are very grateful to be able to be a part of it.

Of course, if you have projects involving Free Software communities or issues closer to the system, feel free to reach out, and we’ll see what we could do to help you. Maybe you too can be a forward thinking customer who sparks joy!