A week ago I returned home from KDE Akademy in Thessaloniki, Greece. If you count online attendance in the recent years this would have been my 20th Akademy, and I had no idea how much I had missed doing this in person for the past four years.


Akademy 2023 group photo, by Andy Betts.
Photo by Andy Betts

There have been several blog posts by others about Akademy already, as well as a Dot post.

Akademy is not only invaluable for team cohesion and a massive motivational boost, it’s also immensely productive to have people from all areas around to get things sorted out and done.

I’m very thankful to everyone who helped to make Akademy happen. This is also something where your donations are put to good use.


Energy use and sustainability

My talk on energy measurement of software followed right after the goals panel, which had already set the stage for the topic with several interesting questions raised there.

The energy measurement BoF was also well attended, and we handed out two more Wi-Fi power plugs repurposed as cheap energy meters there to hopefully get more people digging into that subject.

A disassembled Wi-Fi power plug with a USB-serial adapter connected for firmware flashing.
Tasmota being installed on to a Wi-Fi power plug for energy measurements. (photo by Andreas Cord-Landwehr)

Kai’s lightning talk on obtaining data from his solar power system also got quite some attention. As he pointed out though, this will only achieve its full potential once we get a proper framework for working with such data from multiple sources, and to influence energy consuming devices or processes.

Overall I’m very happy to see how many people are interested in this topic.

KF6 and Qt 6 porting

The KF6 status talk Alex, Nico and I did together probably touched one of the most widely BoF-covered topics this year. We had sessions on porting application to Qt 6 and KF6, on Plasma 6, on KF 6 itself, on release scheduling and release management, etc.

  • The final piece of missing Qt 6 API to make KF6 build without relying on Qt6::Core5Compat has finally been integrated.
  • Allan gave me some input on how to possibly deal with the remaining KHTML to QtWebEngine porting challenges in Okular, let’s see if we get further with that.
  • The port of KIO away from its aging custom and incomplete HTTP implementation is progressing, something I had long wished for.
  • We made some progress on laying out a release schedule for 6, with the next decision point in September, as well as plans for how to start KF6 pre-releases in the near future.
  • We got a decision to finally promote KUserFeedback to KDE Frameworks as well, simplifying its release process and the dependency handling for its consumers once done.
  • Andreas is already working on a Yocto layer for KDE Frameworks 6.

Packaging, distribution and CI/CD infrastructure

We also got a bit closer to retiring Jenkins, which is currently still used instead of Gitlab for the binary factory package builds as well as Craft cache builds.

There’s two big remaining obstacles:

  • Package/binary signing. The signing process itself isn’t particularly hard, but sufficiently securing the private keys is, so that they cannot be extracted by anyone able to run a CI job. Ingo is working on an isolated service for that, which is sufficiently generic to possibly also handle source tarball signing in the future.
  • Craft cache builds. On Windows those depend on signing, but that is just an optimization to speed up signing of the final package. Work is now ongoing to reshuffle/refactor the existing scripts and configurations to move this to Gitlab.

Somewhat related we also got the Tokodon APK builds finally working again, and the Tokodon Android CI is close to being restored as well, thanks to help from Craft’s award-winning maintainer.

Accessibility and automated GUI tests

One of the most ingenious recent developments is Harald’s AT-SPI Selenium bridge, doing GUI testing via the accessibility interface. That’s hitting two giant proverbial birds with one easily manageable sized stone, so to say.

Setup of this for an application is quite easy and well documented. At least for QML apps you are then likely going to hit a big wall, in form of the rather poor state of the accessibility tree. But that’s exactly the point, we need to fix that anyway, it just now also becomes visible to people not usually relying on it.

Plasma Mobile and Android

Various topics around KDE’s mobile story were also discussed.

  • Yes, I need to get moving on the push notification Flatpak portal API. Help appreciated, in particular if you can write Glib D-Bus code without having to look up every single command like I have to.
  • We need to find a better way to do proper APK releases with a manual approval step, proper permanent download locations and a dedicated F-Droid repository, as opposed of the current fully automatic “nightly” release builds. While it’s quite clear what we want there I think, the details on how to do this practically still need to be worked out.
  • There was some preliminary look into the font size issue all our apps have on Android, which might be down to Qt determining the physical screen size wrongly on some devices. More research needed though.
  • Carl started work on allowing us to ship the Breeze QQC2 style also with Qt 5 without pulling in QtWidgets. That will reduce the APK size for the apps using this already quite a bit, and will allow others such as Itinerary to use that style in the first place.


While we had a dedicated PIM sprint not too long ago, there were still a few topics that we had missed there for KF6 readiness, or new developments that had happened meanwhile.

  • A possible retirement plan for KPeople, replacing it with a similar platform plugin approach as has been added for calendaring, in KContacts directly.
  • Review the existing QML wrappers for basic PIM data types in KDE Frameworks and upstream those.
  • Get rid of the *Label() properties in KContact types.
  • Prepare the email foundation libraries (KMime, KIMAP, KSmtp) for moving to KDE Frameworks.
  • Carl is working on unifying the various MIME tree parser implementations/copies/forks into a dedicated library.

KDE Itinerary

And of course Akademy wouldn’t have been a proper KDE event without some Itinerary debugging of the various trips to and from Thessaloniki. Those having taken the land/sea route proved most challenging, with strikes in Italy forcing spontaneous trip adjustments. Excellent test cases though.

We also got onboard API captures for SBB and Trenitalia, a ferry operator and an airline. Kai has already added a script to handle Aegean Air, the rest has yet to be implemented though.

Combining that with Matrix live location sharing revealed that this requires elevated privileges in most Matrix rooms (expected to be resolved once the corresponding MSCs are approved), something we don’t properly handle yet. Itinerary’s Matrix integration was also prominently featured in Carl’s and Tobias’s talk on Matrix and ActivityPub.

The customary last minute app update before boarding had to happen as well, resulting in the first ever observed boarding delay notification received via Apple Wallet pass update API.

Android notification from KDE Itinerary informing about a change in boarding time.
Boarding time change notification on Android.

A frequent topic of feedback about Itinerary was how it deals with past entries and how it does trip grouping. We’ll therefore look into making trips a more prominent concept, with more manual control over the currently fully automatic trip grouping.

Instead of a single timeline we’d then have a list of trips, which when selected would show the timeline of just that trip. Together with even more compact timeline entries this should make it harder to get lost in long trips then.

Remote participation

As it’s the new standard meanwhile, Akademy was also open for remote participation. For the presentations this went quite well from what I can tell, most talks got a few questions via chat, so apparently people were able to follow that.

For the BoFs things got more messy unfortunately. The biggest challenge was the poor Wi-Fi performance, and worse, most Wi-Fi networks blocking whatever BBB needs to establish an audio connection. There were only few sessions where this worked, and a few where we improvised with 5G connections (thank you EU roaming regulation!).

The sessions where this worked best used just a simple headset microphone to stream the audio of the entire room, and used chat as a return channel for remote participants. BoF room 1 was probably the one best suited for that, due to room acoustics and the table mics, the latter allowing to scale this up even for a large session (that’s a rather rare/non-standard setup though).

Independent of the approach and equipment, this needs a dedicated person in each session who feels responsible for the remote participants, managing the audio/video part and raising input coming in via chat. Just like taking notes it’s not a big task, and if enough people help out you only have do it once or twice a day. In any case it’s not something the people moderating/leading a session should do on the side.

We can still do a lot better, and I very much appreciate that we try to do that. Last year the remote access (regardless of how bad it was) was my main connection to Akademy, and it softened the pain of not being able to be there in person due to COVID. Let’s not forget our fellow contributors who cannot be there for whatever reason!

The way back

A week with so many nice people might let some of the ugly realities out there briefly fade into the background (it does for me at least), the way home abruptly ended that though.

There were two of us on the same trip, same destination, same general type of luggage (if at all I probably had the more unusual equipment in my bag), same general type of clothing, living in the same city, etc. Apart from two times shortly waving my passport I got the full Schengen experience, as it should be.

My travel companion did not. Not even close. Obnoxious questions, passport checks by random plain clothe dudes without any insignia or id, searches by a bunch of police officers, in Greece and in Germany.

It is unbelievable and infuriating how much difference a slight variation in skin tone makes here. Here, not in some other country we like to conveniently point to when that topic comes up. And not the first time I have seen shit like this happening either, even if this was the most blatant and pervasive case I have witnessed so far.