04 Jan 2026

feedPlanet GNOME

Jussi Pakkanen: Converting Chapterizer from Cairo + Pango to CapyPDF

Chapterizer (not a great name, I know) is a tool I wrote to generate books. Originally used Cairo and Pango to generate PDF files. It works and was fairly easy to get started but has its own set of downsides:

I have also created CapyPDF to generate "proper" PDF. Over the holidays I finalized porting Chapterizer to use CapyPDF. The pipeline is now surprisingly simple. First you read in the source text, then it is shaped with Harfbuzz and then written to a PDF file with CapyPDF.

It was grunt work. Nothing about it was particularly difficult, just dealing with the same old issues like the fact that in PDF the page's origin is at bottom left, whereas in Cairo it is at the top left.

Anyhow, now that it is done we can actually test the performance of CapyPDF with a somewhat realistic setup. Currently creating a 40 page document takes 0.4 seconds which comes down to 0.01 seconds per page. Which is fast enough for me.

04 Jan 2026 8:56pm GMT

02 Jan 2026

feedPlanet GNOME

Jussi Pakkanen: New year, new Pystd epoch, or evolving an API without breaking it

One of the core design points of Pystd has been that it maintains perfect API and ABI stability while also making it possible to improve the code in arbitrary ways. To see how that can be achieved, let's look at what creating a new "year epoch" looks like. It's quite simple. First you run this script

Then you add the new files to Meson build targets (I was too lazy to implement that in the script). Done. For extra points there is also a new test that mixes types of pystd2025 and pystd2026 just to verify that things work.

As everything is inside a yearly namespace (and macros have the corresponding prefix) the symbols do not clash with each other.

At this point in time pystd2025 is frozen so old apps (of which there are, to be honest, approximately zero) keep working forever. It won't get any new features, only bug fixes. Pystd2026, on the other hand, is free to make any changes it pleases as it has zero backwards compatibility guarantees.

Isn't code duplication terribly slow and inefficient?

It can be. Rather than handwaving about it, lets measure. I used my desktop computer which has an AMD Ryzen 7 3700X.

Compiling Pystd from scratch and running the test suite (with code for both 2025 and 2026) in both debug and optimized modes takes 3 seconds in total (1s for debug, 2s for optimized). This amounts to 2*13 compiler invocations, 2 static linker invocations and 2*5 dynamic linker invocations.

Compiling a helloworld with standard C++ using -O2 -g also takes 3 seconds. This amounts to a single compiler invocation.

02 Jan 2026 11:00am GMT

This Week in GNOME: #230 Happy New Year!

Update on what happened across the GNOME project in the week from December 19 to January 02.

GNOME Core Apps and Libraries

Image Viewer (Loupe)

Browse through images and inspect their metadata.

Sophie (she/her) announces

Image Viewer (Loupe) 48.2 and 49.2 have been released with the following fixes:

  • Considerably increased speed for listing other images in folders, especially for remote locations. This allows for switiching to other images to become available much quicker.
  • Fix panics, probably occuring when using an action like 'copy', and then closing the window. The crash causes all other windows to close.
  • Fix the creation date for images that don't provide a timezone. It was displayed as if the recorded date and time was in UTC.
  • Fix zooming in not working via the zoom menu if the resulting zoom state would still fit the image inside the window.
  • Check if the is-hidden property is available before reading it. This avoids warnings being printed when browsing images on remote locations.
  • Fix the missing beginning of user comments in the metadata.

Loupe 50.alpha has been released as well with better error messages when files cannot be read, design fixes for always visible scrollbars (a11y), and added a limit to the zoom-out, such that the image is still visible.

Glycin 2.1.alpha was released with XPM and XBM support, making it possible to remove the last unsandboxed image loader on Fedora.

Maps

Maps gives you quick access to maps all across the world.

mlundblad says

Maps has seen some redesigns for GNOME 50. Place information is now shown in the sidebar (which has moved to the left) on desktop, and using a bottom sheet on mobile (using an AdwMultiLayout). Also public transit itinerary displaying has seen a redesign, using flow boxes for the overview list (with possibly multiple lines displaying long journeys with many legs), and "track segments" when showing details about a trip, displayed using the line colors

GNOME Circle Apps

Ignacy Kuchciński (ignapk) announces

Constrict by Wartybix was accepted into GNOME Circle!

It compresses your videos to your chosen file size - useful for uploading to services with specific file size limits.

Congratulations and welcome! 🎉

https://flathub.org/apps/io.github.wartybix.Constrict

Third Party Projects

vallabhvidy announces

Happy new year 🥳🥳 The first minor release (v0.2.0) of Cube Timer was released on 1st January 🥳 Since the last TWIG update, the app has received a number of improvements and new features:

  • Support for 2×2, 4×4, 5×5, 6×6, 7×7, Skewb, Megaminx, Pyraminx, and Clock.

  • The user interface is now responsive and adapts to phone size.

  • New preferences were added to customize timer behavior and interface.

Alexander Vanhee reports

Just before the new year, the Bazaar app store received its 0.7.0 update, bringing features like Flathub account support and a category with apps for your desktop environment.

Flathub account support allows you to log in using any login method supported by Flathub. You can then bookmark apps on their pages for easy access in the future, which is ideal for keeping track of apps you want to hold onto after a reinstall.

On the category page, you will now find a new tile for either "Adwaita" or "KDE". The Adwaita tile allows you to view all the apps listed on arewelibadwaitayet, while the KDE tile shows all apps published by the KDE project.

Later in the week, I looked into adding support for displaying app permissions, helping you better understand how apps break the sandbox.

Lastly, we switched our app icon after hearing that the old "tag" icon was confusing for new users on distros where the app is preinstalled, with the added benefit that the new icon better fits the idea of a bazaar.

Gir.Core

Gir.Core is a project which aims to provide C# bindings for different GObject based libraries.

Marcel Tiede says

GirCore development update: First Bits for GTK composite template support just landed. See sample. Binding for template children is still missing and more support from source generators will be added. Stay tuned for more updates along the way.

Miscellaneous

Guillaume Bernard reports

Merge Requests pushes are now available in GNOME Damned Lies! We recently updated the workflow in Damned Lies and you can now set the type of push of each module (direct push [the original way], GitLab Merge Request, GitHub Pull Request). At the moment, you will have to ask one of the coordinators to change the type of push for each module.

What will happen to the original workflow? Nothing for translators and/or reviewers but a very small change for commiters. When committing, if the module's configuration requires a Merge Request or a Pull Request, a new branch will be creating from the branch you're translating. For instance, a new branch update-translation-fr-from-gnome-48 is created, push to the repository and a merge request is then opened through the command line. We retrieve the link to the merge request and post it as a comment in the workflow. Workflow now has another, new, state: « Merge Request is Waiting Approval ».

There are more things to do with this feature: automatically archive the workflow when the commit is merged, track all the merge requests for a module, allow module maintainers to update this setting themselves, etc. But it requires more changes and, as usual, contributions are welcome!

Sophie (she/her) says

I wrote a blog post with some fun numbers about GNOME: GNOME in 2025: Some Numbers

Events

Kristi Progri reports

We are happy to announce that GUADEC 2026 will be held in A Coruña, Spain! For more information, please check the link: https://discourse.gnome.org/t/guadec-2026-to-be-held-in-a-coruna-spain/33193

That's all for this week!

See you next week, and be sure to stop by #thisweek:gnome.org with updates on your own projects!

02 Jan 2026 12:00am GMT

30 Dec 2025

feedPlanet GNOME

Lennart Poettering: Mastodon Stories for systemd v259

On Dec 17 we released systemd v259 into the wild.

In the weeks leading up to that release (and since then) I have posted a series of serieses of posts to Mastodon about key new features in this release, under the #systemd259 hash tag. In case you aren't using Mastodon, but would like to read up, here's a list of all 25 posts:

I intend to do a similar series of serieses of posts for the next systemd release (v260), hence if you haven't left tech Twitter for Mastodon yet, now is the opportunity.

My series for v260 will begin in a few weeks most likely, under the #systemd260 hash tag.

In case you are interested, here is the corresponding blog story for systemd v258, here for v257, and here for v256.

30 Dec 2025 11:00pm GMT

27 Dec 2025

feedPlanet GNOME

Sam Thursfield: Musical update

Like many software engineers, I sometimes see my career as 20 years of failing to become a professional musician. Although its true that in the software industry we get to stay in better hotels than most independent musicians can afford. And we rarely have to work Saturday nights.

Its difficult to combine two passions sometimes, but I am thankful for these opportunities to part of great independent music projects… it's always fascinating to make music and see people connecting with it, however that is.

Here are some highlights from 2025.

Note: the embedded videos below seem to disappear in RSS feeds.. thanks WordPress.

Muaré

If you like funk, then here's a tune for you by Muaré. Available on all streaming platforms and also here on Bandcamp. Despite being a trombonist, on this tune you can hear me playing Hammond organ Yamaha Reface YC organ… one of the word's most fun instruments to play.

URL: https://youtu.be/ml9DIaIMwik

Brais Ninguén and Couto 90

If you're after reggae then have a whole new album, which just came out yesterday, by Brais Ninguen and Couto 90. That's myself on trombone. First time I've participated in a full album project, and the first time I've made noises that will be scratched onto a vinyl record. Decades of listening to ska and reggae finally put to good use!

The full album is out on Spotify and other streaming platforms, or you can hear a couple of tunes on Bandcamp under the name "Phase II".

URL: https://youtu.be/8NsMjjsM2ls


This was recorded in the amazing Escusalla Sonora studio in the Galician mountains, with Javier Vicalo who is something of a legend in the reggae scene. Check out his discography for more great reggae.

Rafael Briceño

Finally here's a tune from Rafael Briceño, a talented musician from Venezuela who is recording an entire album in video form, under the name "Ensarta". This one was a challenge. I've been doing my best to listen to Willie Colon and Ruben Blades but I don't have decades of salsa experience to draw on. You don't make great art without leaving your comfort zone though!

URL: https://youtu.be/sHxPwsCIMcc

If you like Rafa's music.. which is likely… you can find a whole album named "De Regreso A Casa" on Spotify from a few years ago.

Here is to more music in 2026. Go make some art!!

27 Dec 2025 8:15pm GMT

Sophie Herold: GNOME in 2025: Some Numbers

As some of you know, I like aggregating data. So here are some random numbers about GNOME in 2025. This post is not about making any point with the numbers I'm sharing. It's just for fun.

So, what is GNOME? In total, 6 692 516 lines of code. Of that, 1 611 526 are from apps. The remaining 5 080 990 are in libraries and other components, like the GNOME Shell. These numbers cover "the GNOME ecosystem," that is, the combination of all Core, Development Tools, and Circle projects. This currently includes exactly 100 apps. We summarize everything that's not an app under the name "components."

GNOME 48 was at least 90 % translated for 33 languages. In GNOME 49 this increased to 36 languages. That's a record in the data that I have, going back to GNOME 3.36 in 2020. The languages besides American English are: Basque, Brazilian Portuguese, British English, Bulgarian, Catalan, Chinese (China), Czech, Danish, Dutch, Esperanto, French, Galician, Georgian, German, Greek, Hebrew, Hindi, Hungarian, Indonesian, Italian, Lithuanian, Persian, Polish, Portuguese, Romanian, Russian, Serbian, Serbian (Latin), Slovak, Slovenian, Spanish, Swedish, Turkish, Uighur, and Ukrainian. There are 19 additional languages that are translated 50 % or more. So maybe you can help with translating GNOME to Belarusian, Catalan (Valencian), Chinese (Taiwan), Croatian, Finnish, Friulian, Icelandic, Japanese, Kazakh, Korean, Latvian, Malay, Nepali, Norwegian Bokmål, Occitan, Punjabi, Thai, Uzbek (Latin), or Vietnamese in 2026?

Talking about languages. What programming languages are used in GNOME? Let's look at GNOME Core apps first. Almost half of all apps are written in C. Note that for these data, we are counting TypeScript under JavaScript.

C: 44.8%, Vala: 20.7%, Rust: 10.3%, Python: 6.9%, JavaScript: 13.8%, C++ 3.45%.
Share of GNOME Core apps by programming language.

The language distribution for GNOME Circle apps looks quite different with Rust (41.7 %), and Python (29.2 %) being the most popular languages.

C: 6%, Vala, 13%, Rust 42%, Python 29%, JavaScript 10%, Crystal 1%
Share of GNOME Circle apps by programming language.

Overall, we can see that with C, JavaScript/TypeScript, Python, Rust, and Vala, there are five programming languages that are commonly used for app development within the GNOME ecosystem.

But what about components within GNOME? The default language for libraries is still C. More than three-quarters of the lines of code for components are written in it. The components with the largest codebase are GTK (820 000), GLib (560 000), and Mutter (390 000).

Lines of code for components within the GNOME ecosystem.

But what about the remaining quarter? Line of code are of course a questionable metric. For Rust, close to 400 000 lines of code are actually bindings for libraries. The majority of this code is automatically generated. Similarly, 100 000 lines of Vala code are in the Vala repository itself. But there are important components within GNOME that are not written in C: Orca, our screen reader, boasts 110 000 lines of Python code. Half of GNOME Shell is written in JavaScript, adding 65 000 lines of JavaScript code. Librsvg and glycin are libraries written in Rust, that also provide bindings to other languages.

We are slowly approaching the end of the show. Let's take a look at the GNOME Circle apps most popular on Flathub. I don't trust the installation statistics on Flathub, since I have seen indications that for some apps, the number of installations is surprisingly high and cyclic. My guess is that some Linux distribution is installing these apps regularly as part of their test pipeline. Therefore, we instead check how many people have installed the latest update for the app. Not a perfect number either, but something that looks much more reliable. The top five apps are: Blanket, Eyedropper, Newsflash, Fragments, and Shortwave. Sometimes, it needs less than 2 000 lines of code to create popular software.

And there are 862 people supporting the GNOME Foundation with a recurring donation. Will you join them for 2026 on donate.gnome.org?

27 Dec 2025 1:10pm GMT

22 Dec 2025

feedPlanet GNOME

Asman Malika: Everybody Struggles

There's a quiet assumption that once you're accepted into a program, an internship, or a new opportunity, things are supposed to click. That confidence should come automatically. That the struggle somehow ends at the door.

It doesn't.

Lately, my struggle has been feeling like I should already know more than I do.

I'm an intern working with a large codebase that was unfamiliar at first. On the surface, everything looked final, I read the documentation, followed discussions, and tried to understand the flow. But when I began contributing, I realized that understanding a codebase and working inside it are two very different things. Functions referenced other functions I had not seen. Libraries behaved in ways I didn't fully understand yet. I spent hours chasing what seemed like a simple issue, only to realize I misunderstood something basic.

What makes this harder isn't just the technical difficulty, it's the voice in my head. The one that says, "Everyone else gets this faster." The one that whispers, "You're behind." The one that asks, "What if I disappoint the people who believed in me?"

That voice is convincing. Especially when you're surrounded by smart people who ask sharp questions and navigate complex topics with ease. It's easy to compare your confusion to their clarity and conclude that the problem is you.

But here's what I'm slowly learning: struggling is not a sign of failure. It's a sign of being in the right place.Every time I get stuck, I'm forced to read more carefully. Every time I ask a question, I learn something I wouldn't have learned alone. Every mistake shows me how the system actually works, not how I assumed it worked. The struggle is uncomfortable, yes, but it's also doing real work on me.

I'm also learning the difference between struggling silently and struggling with support. When I finally ask for help, the response is rarely judgment. More often, it's reassurance: "Yeah, that part is confusing." Or, "I struggled with that too." Moments like that remind me that nobody arrives fully formed.

Everybody struggles. Even the people who look confident. Even the people whose code you admire. The difference isn't who struggles and who doesn't, it's who keeps going despite it.

So if you're in a place where things feel hard, where progress feels slow, where doubt shows up uninvited: you're not alone. This is part of learning. This is part of growing. And this, too, counts as progress.

22 Dec 2025 8:48pm GMT

21 Dec 2025

feedPlanet GNOME

Marcus Lundblad: Xmas & New Year's Maps


It's that time of year again in (Norther Hemisphere) winter when year's drawing to an end. Which means it's time for the traditional Christmas Maps blogpost.

Sometimes you hear claims about Santa Claus living at the North Pole (though in Rovaniemi, Finland, I bet they would disagree…). Turns out there's a North Pole near Fairbanks, Alaska as well:


😄

OK, enough smalltalk… now on to what's happened since the last update (for the GNOME 49 release in September).

Sidebar Redesign

Our old design when it comes to showing information about places has revolved around the trusted old "popover" menu design which has served us pretty well. But it also had it's drawbacks.

For one it was never a good fit on small screen sizes (such as on phones). Therefore we had our own "home-made" place bar design with a separate dialog opening up when clicking the bar to reveal full details.

After some discussions and thinking about this, I decided to try out a new approach utilizing the MultiLayout component from libadwaita which gives the option to get an adaptive "auxillary view" widget which works as a sidebar on desktop, and a bottom sheet on mobile.

Now the routeplanner and place information views have both been consolidated to both reside in this new widget.

Clicking the route button will now open the sidebar showing the routeplanner, or the bottom sheet depending on the mode.

And clicking a place icon on the map, or selecting a search result will open the place information, also showing in the sidebar, or bottom sheet.

Route planner showing in sidebar in desktop mode


Routeplanner showing in bottom sheet in mobile/narrow mode


Routeplanner showing public transit itineraries in bottom sheet


Showing place information in sidebar in desktop mode


Showing place information in bottom sheet in mobile mode


Redesigning Public Transit Itinerary Rendering

The displaying of public transit itineraries has also seen some overhaul.

First I did a bit of redesign of the rows representing journey legs, taking some queues from the Adwaita ExpanderRow style. Improving a bit compared to the old style which had been carried over from GTK 3.

List of journey legs, with the arrow indicating possibilty to expand to reveal more information


List of journey legs, with one leg "expanded" to show intermediate stops made by a train


Improving further on this Jalen Ng contributed a merge request implementing an improvement to the overview list utilizing Adwaita WrapBoxes to show more complete information the different steps of each presented itinerary option in the overview when searching for travel options with public transit.

Showing list of transit itineraries each consisting of multiple journey legs


Jalen also started a redesign of rendering of itineraries (this merge request is still being worked on).

Redesign of transit itinerary display. Showing each leg as a "track segment" using the line's color


Hide Your Location

We also added the option to hide the marker showing your own location. One use for this e.g. if you want to make screenshots without revealing your exact location.

Menu to toggle showing your location marker


And that's not All…

On top of this some other things. James Westman added support global-state expressions to libshumate's vector tile implementation. This should allow us to e.g. refactor the implementation of light and dark styles and language support in our map style without "recompiling" the stylesheet at runtime.

James also fixed a bug sometimes causing the application to freeze when dragging the window between screens when a route is being displayed.

This fix has been backported to the 49.3 and 48.8 releases which has been tagged today as an early holiday gift.

And that's all for now, merry holidays, and happy new year!

21 Dec 2025 9:56pm GMT

Aryan Kaushik: Introducing Open Forms

Introducing Open Forms!

The problem

Ever been to a conference where you set up a booth or attempt to get quick feedback by running around the ground and felt the awesome feeling of -

Meme showcasing wifi fails when using forms

While setting up the Ubuntu booth, we saw an issue: The Wifi on the Linux tablet was not working.

After lots of effort, it started to work, but as soon as we log into the captive portal, the chip fails, and no Wi-Fi is detected. And the solution? A trusty old restart, just for the cycle to repeat. (Just to be clear, the wifi was great, but it didn't like that device)

Meme showing a person giving their a child a book on 'Wifi drivers on linux' as something to cry about

We eventually fixed that by providing a hotspot from mobile, but that locked the phone to the booth, or else it would disconnect.

Now, it may seem a one-off inconvenience, but at any conference, summit, or event, this pattern can be seen where one of the issues listed listed above occurs repeatedly.

So, I thought, there might be something to fix this. But no project existed without being reliant on Web :(

The solution

So, I built one, a native, local first, open source and non-answer-peeking form application.

With Open Forms, your data stays on your device, works without a network, and never depends on external services. This makes it reliable in chaotic, un-reliable, or privacy first environments.

Just provide it a JSON config (Yes, I know, trying to provide a GUI for it instead), select the CSV location and start collecting form inputs.

Open Forms opening page

No waiting for WiFi, no unnecessary battery drains, no timeouts, just simple open forms.

The application is pretty new (built over the weekend) and supports -

Open Forms inputs Open Forms inputs continued

Planned features

But, any software can be guided properly only by its users! So, If you've ever run into Wi-Fi issues while collecting data at events, I'd love for you to try Open Forms and share feedback, feature requests, bug reports, or even complaints.

The repository is at - Open Forms GitHub The latest release is packaged as a flatpak.

21 Dec 2025 12:00am GMT

20 Dec 2025

feedPlanet GNOME

Engagement Blog: GUADEC 2026 will be held in A Coruña, Spain

We are happy to announce that GUADEC 2026 will take place in A Coruña, Spain, from July 16th to 21st, 2026.
As in recent years, the conference will be organized as a hybrid event, giving participants the opportunity to join either in person or online.

The first three days, July 16th-18th, will be dedicated to talks, followed by BoF and workshop sessions on July 19th and 20th. The final day, July 21st, will be a self-organized free exploration day.

While the GUADEC team will share ideas and suggestions for this day, there will be no officially organized activities. The call for proposals and registration will open soon, and further updates will be shared on guadec.org in the coming weeks.

Organizations interested in sponsoring GUADEC 2026 are welcome to contact us at guadec@gnome.org.

About the city:
Hosted on Spain's Atlantic coast, A Coruña offers a memorable setting for the conference, from the iconic Tower of Hercules, the world's oldest Roman lighthouse still in use, to one of Europe's longest seaside promenades and the city's famous glass-fronted balconies that give it the nickname "City of Glass."

20 Dec 2025 4:09pm GMT

19 Dec 2025

feedPlanet GNOME

Allan Day: GNOME Foundation Update, 2025-12-19

Welcome to this, the final GNOME Foundation update of 2025! This is an especially large update - there's been a huge amount happening recently, and it's also been three weeks since the last update. I hope you'll agree that, with this final update of the year, there's plenty to celebrate, as well as look forward to in the year ahead.

GNOME.Asia 2025!

Last week we had a very successful GNOME.Asia 2025 conference in Tokyo, Japan. Having been busy providing organizational support in the run up to the event, Kristi flew out to help the local team on the ground. The Foundation also provided travel sponsorship for 11 attendees, with help from the Travel Committee. I've heard that it was a great event with good attendance. For those who didn't attend I'm hoping that we'll have a more detailed report soon.

GNOME.Asia is an amazing success story. It's incredible to think that this event has been running for 17 years now, reaching out to communities and new audiences all over Asia. Huge thanks to the local organizing team for making this year's edition a success.

Also, thanks to our donors! GNOME.Asia receives funding from the Foundation in order to continue operating, and this event is therefore only possible due to the financial support that the GNOME Foundation receives.

Fundraiser

The GNOME Foundation had its first fundraising campaign in a long time this month. You can read the announcement here, and Cassidy wrote a great followup post. The campaign was relatively small in scope and was intended as a trial balloon for bigger efforts in the future, but it still did some good and resulted in an increase in donations. Huge thanks to the newly formed fundraising committee for working on this.

Those of us at the GNOME Foundation are deeply appreciative of each and every donation we receive, and are working hard to ensure that every dollar is put to good use. The funds we're receiving are making a real difference, allowing us to do things like increase the community travel budget for the current financial year, and plan new support programs that we would like to launch in the coming year.

Audit preparation

The GNOME Foundation is scheduled to have its first audit in early 2026. This is a routine event triggered by our relatively high income in the previous financial year, and there is currently a lot of activity happening in preparation. This includes new and revised policies that are currently in draft, a lot of work to improve the organization of our records, plus filling in a lot of forms that have been sent to us by the auditors. The written submissions for the auditors is due by mid-February so this is going to be a high priority for us until then.

I'm personally looking on the audit as a great opportunity to improve our processes and documentation, and the audit process is already feeding into other internal improvements that are underway.

Digital Wellbeing

The parental controls work that Philip, Ignacy and Sam have been working on is in the very very final stages now. I'm pleased to report that some of the last few elements of the screen time limits feature have been merged in the past few weeks, and the final remaining changes are currently in the merge queue. This is a vital feature for children and their carers, so it's excellent to see it being added to GNOME. Congratulations to the team on completing this project on time and on budget!

FOSDEM 2026 preparations

FOSDEM will happen in Brussels at the end of January, and the Foundation has a number of activities scheduled to happen around it. There will be a booth, which director Maria Majadas is in the process of organizing. There will also be one of our biannual Advisory Board meetings, for which we've booked the room and confirmed attendance. The Board is also planning to have a short hackfest prior to the conference, giving us an opportunity to meet face-to-face.

More things!

In addition to those larger items, there's good list of other notable events from the last three weeks:

That's it for another GNOME Foundation update, and also for 2025! I'm personally very happy with the Foundation's recent progress and achievements, and I'm looking forward to this work bearing fruit in 2026. Thanks for reading and for your interest, and please feel free to ask questions in the comments.

I'll be taking a break for a couple of weeks over Christmas and New Year, so the next update will likely be on January 9th.

19 Dec 2025 5:10pm GMT

This Week in GNOME: #229 Good Rhythm

Update on what happened across the GNOME project in the week from December 12 to December 19.

Third Party Projects

revisto reports

Drum Machine: Add Your Own Sounds!

Drum Machine 2.0.0 brought custom samples, you're no longer limited to the default sounds. Drag and drop your own audio files and they show up as new drum parts. You can reorder them by dragging, and each one can be mapped to a specific MIDI note so when you export to MIDI, it's clear which sound is which note.

The latest release adds a Reset to Defaults option that restores everything back to factory settings. The old Reset button is now called Clear and just clears the pattern while keeping your custom samples.

https://flathub.org/apps/io.github.revisto.drum-machine

https://github.com/Revisto/drum-machine

Gir.Core

Gir.Core is a project which aims to provide C# bindings for different GObject based libraries.

Marcel Tiede says

The final version of GirCore 0.7.0 got released. There are more APIs generated, bugs got fixed, dotnet 10 support was added, GdkWin32 bindings were added and more. See the release for an overview of all changes.

Shell Extensions

Mahyar Darvishi reports

Yet Another Radio, the GNOME extension for streaming internet radio directly from your panel, has been updated with a range of QoL improvements, including:

  • Search thousands of stations via the Radio Browser network API
  • Favorites system for quick access to your preferred stations
  • Song metadata display showing album art, artist, title, and bitrate
  • Media key support for play/pause/stop controls from your keyboard
  • Volume control integrated directly in the panel menu
  • Import/Export functionality for sharing station lists across devices
  • Custom station support for adding your own radio URLs manually

The extension also features localization support. If you are interested, you can checkout the Github Repo.

You can get it from GNOME Extensions website

GNOME Foundation

Allan Day announces

Another GNOME Foundation update is available, covering highlights from the last three weeks. It's a particularly full update, covering the recent GNOME.Asia summit, audit preparation, digital wellbeing progress, and much more.

Digital Wellbeing Project

Ignacy Kuchciński (ignapk) reports

As part of the Digital Wellbeing project, sponsored by the GNOME Foundation, there is an initiative to redesign the Parental Controls to bring it on par with modern GNOME apps and implement new features such as Screen Time monitoring, Bedtime Schedule and Web Filtering.

Recently the 'time is almost up' notification inside child session has been implemented and merged in GNOME Shell, while preventing children from unlocking after their bedtime and allowing parents to extend their screen time are being polished up. You can track the progress at their merge requests at !3980 and 3999 respectively.

That's all for this week!

See you next week, and be sure to stop by #thisweek:gnome.org with updates on your own projects!

19 Dec 2025 12:00am GMT

17 Dec 2025

feedPlanet GNOME

Andy Wingo: in which our protagonist dreams of laurels

I had a dream the other evening, in which I was at a large event full of hackers-funny, that this is the extent of my dreams at the moment; as a parent of three young kids, I don't get out much-and, there, I was to receive an award and give a speech. (I know, I am a ridiculous man, even when sleeping.) The award was something about free software; it had the trappings of victory, but the vibe among attendees was numbness and bitter loss. Palantir had a booth; they use free software, and isn't that just great?

My talk was to be about Guile, I think: something technical, something interesting, but, I suspected, something inadequate: in its place and time it would be a delight to go deep on mechanism but the moment seemed to call for something else.

These days are funny. We won, objectively, in the sense of the goals we set in the beginning; most software is available to its users under a free license: Firefox, Chromium, Android, Linux, all the programming languages, you know the list. So why aren't we happy?

When I reflect back on what inspired me about free software 25 years ago, it was much more political than technical. The idea that we should be able to modify our own means of production and share those modifications was a part of a political project of mutual care: we should be empowered to affect the systems that surround us, to the extent that they affect us.

To give you an idea of the milieu, picture me in 1999. I left my home to study abroad on another continent. When I would go to internet cafés I would do my email and read slashdot and freshmeat as one did back then, but also I would often read Z magazine, Noam Chomsky and Michael Albert and Michael Parenti and Arundhati Roy and Zapatistas and all. I remember reading El País the day after "we" shut down the World Trade Organization meeting in Seattle, seeing front-page pictures of pink-haired kids being beat up by the cops and wishing I were there with them. For me, free software fit with all of this: the notion that a better world was possible, and we could build it together.

I won't lie and say that the ideals were everything. I think much of my motivation to program is selfish: I like to learn, to find out, to do. But back then I felt the social component more strongly. Among my cohort, though, I think we now do free software because we did free software; the motive sedimented into mechanism. These are the spoils of victory: free is the default. But defaults lack a sense of urgency, of the political.

Nowadays the commons that we built is the feedlot of large language models, and increasingly also its waste pond. The software we make is free, but the system in which it is made is not; Linux Magazine 1, Z magazine 0.

All of this makes me think that free software as a cause has run its course. We were the vanguard, and we won. Our dreams of 25 years ago are today's table stakes. Specifically for my copyleft comrades, it seems that the role of copyright as a societal lever has much less purchase; taken to its conclusion, we might find ourselves siding with Disney and OpenAI against Google.

If I had to choose an idea from the 90s to keep, I would take "another world is possible" over the four freedoms. For me, software freedom is a strategy within a broader humanist project of liberation. It was clever, in that it could motivate people from a variety of backgrounds in a way that was on the whole positive for the humanist project. It inspired me as a meaningful way in which I could work towards a world of people caring for each other. In that spirit, I would like to invite my comrades to reflect on their own hierarchy of principles; too often I see people arguing the fine points of "is this software free" according to a specific definition without appreciating the ends to which the software freedom definition is a means.

Anyway, it turns out that I did win something, the Award for the Advancement of Free Software, for my work on Guile over the years. My work on Guile has waxed and waned, and in these last few years of parenthood it has been rather the latter, but I am proud of some of the technical hacks; and it has been with a heart-warming, wondrous delight that I have been a spectator to the rise of Guix, a complete operating system built on Guile. Apart from its quite compelling technical contributions, I just love that Guix is a community of people working together to build a shared project. I am going to the Guix days in a month or so and in past years it has been such a pleasure to see so many people there, working to make possible another world.

In my dream, instead of talking about Guile, I gave a rousing and compelling impromptu invective against Palantir and their ilk. I thought it quite articulate; I was asleep. In these waking hours, some days later, I don't know what I did say, but I think I know what I would like to have said: that if we take the means of free software to be the ends, then we will find ourselves arguing our enemies are our friends. Saying that it's OK if some software we build on is made by people who facilitate ICE raids. People who build spy software for controlling domestic populations. People who work for empire.

What I would like to say is that free software is a strategy. As a community of people that share some kind of liberatory principles of which free software has been a part, let use free software as best we can, among many other strategies. If it fits, great. If you find yourself on the same side of an argument as Palantir, it's time to back up and try something else.

17 Dec 2025 10:42pm GMT

Sam Thursfield: Status update, 17/12/2025

Welcome to mid-December! Where I am this month is a pretty cold affair… at night it's 2 or 3 degrees above freezing. Maybe you're in a tropical place and the nights are 30 degrees warmer. Or maybe you're somewhere that drops down to 20 or 30 below freezing. The world is a big place! (Or maybe you're in one of those 10 remaining countries that use fahrenheit to measure temperature.. if so, I'm sorry for you ; -)

I didn't do much in the world of open source this month besides reviewing a few patches.

I am still using GNOME and Fedora every day for my work… at zero cost! If I'd paid for Microsoft Windows I'd be down almost 200€. So I made a few one off donations split between:

Thanks to Hari's blog post for reminding us how important it is to donate.

Who did I miss that is contributing to making excellent desktop software in difficult times?

(I know that regular donations are more helpful… I have a few dozen of those already, listed here. The list can always change : -).


17 Dec 2025 7:01pm GMT

Matthew Garrett: How did IRC ping timeouts end up in a lawsuit?

I recently won a lawsuit against Roy and Rianne Schestowitz, the authors and publishers of the Techrights and Tuxmachines websites. The short version of events is that they were subject to an online harassment campaign, which they incorrectly blamed me for. They responded with a large number of defamatory online posts about me, which the judge described as unsubstantiated character assassination and consequently awarded me significant damages. That's not what this post is about, as such. It's about the sole meaningful claim made that tied me to the abuse.

In the defendants' defence and counterclaim[1], 15.27 asserts in part The facts linking the Claimant to the sock puppet accounts include, on the IRC network: simultaneous dropped connections to the mjg59_ and elusive_woman accounts. This is so unlikely to be coincidental that the natural inference is that the same person posted under both names. "elusive_woman" here is an account linked to the harassment, and "mjg59_" is me. This is actually a surprisingly interesting claim to make, and it's worth going into in some more detail.

The event in question occurred on the 28th of April, 2023. You can see a line reading *elusive_woman has quit (Ping timeout: 2m30s), followed by one reading *mjg59_ has quit (Ping timeout: 2m30s). The timestamp listed for the first is 09:52, and for the second 09:53. Is that actually simultaneous? We can actually gain some more information - if you hover over the timestamp links on the right hand side you can see that the link is actually accurate to the second even if that's not displayed. The first event took place at 09:52:52, and the second at 09:53:03. That's 11 seconds apart, which is clearly not simultaneous, but maybe it's close enough. Figuring out more requires knowing what a "ping timeout" actually means here.

The IRC server in question is running Ergo (link to source code), and the relevant function is handleIdleTimeout(). The logic here is fairly simple - track the time since activity was last seen from the client. If that time is longer than DefaultIdleTimeout (which defaults to 90 seconds) and a ping hasn't been sent yet, send a ping to the client. If a ping has been sent and the timeout is greater than DefaultTotalTimeout (which defaults to 150 seconds), disconnect the client with a "Ping timeout" message. There's no special logic for handling the ping reply - a pong simply counts as any other client activity and resets the "last activity" value and timeout.

What does this mean? Well, for a start, two clients running on the same system will only have simultaneous ping timeouts if their last activity was simultaneous. Let's imagine a machine with two clients, A and B. A sends a message at 02:22:59. B sends a message 2 seconds later, at 02:23:01. The idle timeout for A will fire at 02:24:29, and for B at 02:24:31. A ping is sent for A at 02:24:29 and is responded to immediately - the idle timeout for A is now reset to 02:25:59, 90 seconds later. The machine hosting A and B has its network cable pulled out at 02:24:30. The ping to B is sent at 02:24:31, but receives no reply. A minute later, at 02:25:31, B quits with a "Ping timeout" message. A ping is sent to A at 02:25:59, but receives no reply. A minute later, at 02:26:59, A quits with a "Ping timeout" message. Despite both clients having their network interrupted simultaneously, the ping timeouts occur 88 seconds apart.

So, two clients disconnecting with ping timeouts 11 seconds apart is not incompatible with the network connection being interrupted simultaneously - depending on activity, simultaneous network interruption may result in disconnections up to 90 seconds apart. But another way of looking at this is that network interruptions may occur up to 90 seconds apart and generate simultaneous disconnections[2]. Without additional information it's impossible to determine which is the case.

This already casts doubt over the assertion that the disconnection was simultaneous, but if this is unusual enough it's still potentially significant. Unfortunately for the Schestowitzes, even looking just at the elusive_woman account, there were several cases where elusive_woman and another user had a ping timeout within 90 seconds of each other - including one case where elusive_woman and schestowitz[TR] disconnect 40 seconds apart. By the Schestowitzes argument, it's also a natural inference that elusive_woman and schestowitz[TR] (one of Roy Schestowitz's accounts) are the same person.

We didn't actually need to make this argument, though. In England it's necessary to file a witness statement describing the evidence that you're going to present in advance of the actual court hearing. Despite being warned of the consequences on multiple occasions the Schestowitzes never provided any witness statements, and as a result weren't allowed to provide any evidence in court, which made for a fairly foregone conclusion.

[1] As well as defending themselves against my claim, the Schestowitzes made a counterclaim on the basis that I had engaged in a campaign of harassment against them. This counterclaim failed.

[2] Client A and client B both send messages at 02:22:59. A falls off the network at 02:23:00, has a ping sent at 02:24:29, and has a ping timeout at 02:25:29. B falls off the network at 02:24:28, has a ping sent at 02:24:29, and has a ping timeout at 02:25:29. Simultaneous disconnects despite over a minute of difference in the network interruption.

comment count unavailable comments

17 Dec 2025 1:17pm GMT

Gedit Technology blog: Mid-December News

Misc news for the past month about the gedit text editor, mid-December edition! (Some sections are a bit technical).

(By the way, the "mid-month" news is especially useful for December/January, when one thinks about it ;-) ).

gedit now refuses to load very large files

It was part of the common-bugs, and it is now fixed! New versions of gedit will refuse to load very large files or content read from stdin.

The limit is configurable with the GSettings key: org.gnome.gedit.preferences.editor max-file-size

By default the limit is set to 200 MB. The setting is not exposed in the Preferences dialog (there are a few other such settings).

There are technically two cases:

It is planned to improve this and offer to load the content truncated.

Windows improvements

I've fixed some compilation warnings and unit tests failures on MS Windows, and done some packaging work, including contributing to MINGW-packages (part of MSYS2).

Other work in libgedit-gtksourceview

Various work on the completion framework, including some code simplifications.

Plus what can be called "gardening tasks": various code maintenance stuff.

gspell CI for tarballs

AsciiWolf and Jordan Petridis have contributed to gspell to add CI for tarballs. Thanks to them!

17 Dec 2025 10:00am GMT