Status update, 22/05/2025

Hello. It is May, my favourite month. I’m in Manchester, mainly as I’m moving projects at work, and its useful to do that face-to-face.

For the last 2 and a half years, my job has mostly involved a huge, old application inside a big company, which I can’t tell you anything about. I learned a lot about how to tackle really, really big software problems where nobody can tell you how the system works and nobody can clearly describe the problem they want you to solve. It was the first time in a long time that I worked on production infrastructure, in that, we could have caused major outages if we rolled out bad changes. Our team didn’t cause any major outages in all that time. I will take that as a sign of success. (There’s still plenty of legacy application to decommission, but it’s no longer my problem).

A green tiled outside wall with graffiti

During that project I tried to make time to work on end to end testing of GNOME using openQA as well… with some success, in the sense that GNOME OS still has working openQA tests, but I didn’t do very well at making improvements, and I still don’t know if or when I’ll ever have time to look further at end-to-end testing for graphical desktops. We did a great Outreachy internship at least with Tanju and Dorothy adding quite a few new tests.

Several distros test GNOME downstream, but we still don’t have much of a story of how they could collaborate upstream. We do still have the monthly Linux QA call so we have a space to coordinate work in that area… but we need people who can do the work.

My job now, for the moment, involves a Linux-based operating system that is intended to be used in safety-critical contexts. I know a bit about operating systems and not much about functional safety. I have seen enough to know there is nothing magic about a “safety certificate” — it represents some thinking about risks and how to detect and mitigate them. I know Codethink is doing some original thinking in this area. It’s interesting to join in and learn about what we did so far and where it’s all going.

Giving credit to people

The new GNOME website, which I really like, describes the project as “An independent computing platform for everyone”.

There is something political about that statement: it’s implying that we should work towards equal access to computer technology. Something which is not currently very equal. Writing software isn’t going to solve that on its own, but it feels like a necessary part of the puzzle.

If I was writing a more literal tagline for the GNOME project, I might write: “A largely anarchic group maintaining complex software used by millions of people, often for little or no money.” I suppose that describes many open source projects.

Something that always bugs me is how a lot of this work is invisible. That’s a problem everywhere: from big companies and governments, down to families and local community groups, there’s usually somebody who does more work than they get credit for.

But we can work to give credit where credit is due. And recently several people have done that!

Outgoing ED Richard Littauer in “So Long and Thanks For All the Fish” shouted out a load of people who work hard in the GNOME Foundation to make stuff work.

Then incoming GNOME ED, Steven Deobald wrote a very detailed “2025-05-09 Foundation Report” (well done for using the correct date format, as well), giving you some idea about how much time it takes to onboard a new director, and how many people are involved.

And then Georges wrote about some people working hard on accessibility in “In celebration of accessibility”.

Giving credit is important and helpful. In fact, that’s just given me an idea, but explaining that will have to wait til next month.

canal in manchester

Andy Wingo

@wingo

whippet lab notebook: guile, heuristics, and heap growth

Greets all! Another brief note today. I have gotten Guile working with one of the Nofl-based collectors, specifically the one that scans all edges conservatively (heap-conservative-mmc / heap-conservative-parallel-mmc). Hurrah!

It was a pleasant surprise how easy it was to switch—from the user’s point of view, you just pass --with-gc=heap-conservative-parallel-mmc to Guile’s build (on the wip-whippet branch); when developing I also pass --with-gc-debug, and I had a couple bugs to fix—but, but, there are still some issues. Today’s note thinks through the ones related to heap sizing heuristics.

growable heaps

Whippet has three heap sizing strategies: fixed, growable, and adaptive (MemBalancer). The adaptive policy is the one I would like in the long term; it will grow the heap for processes with a high allocation rate, and shrink when they go idle. However I won’t really be able to test heap shrinking until I get precise tracing of heap edges, which will allow me to evacuate sparse blocks.

So for now, Guile uses the growable policy, which attempts to size the heap so it is at least as large as the live data size, times some multiplier. The multiplier currently defaults to 1.75×, but can be set on the command line via the GUILE_GC_OPTIONS environment variable. For example to set an initial heap size of 10 megabytes and a 4× multiplier, you would set GUILE_GC_OPTIONS=heap-size-multiplier=4,heap-size=10M.

Anyway, I have run into problems! The fundamental issue is fragmentation. Consider a 10MB growable heap with a 2× multiplier, consisting of a sequence of 16-byte objects followed by 16-byte holes. You go to allocate a 32-byte object. This is a small object (8192 bytes or less), and so it goes in the Nofl space. A Nofl mutator holds on to a block from the list of sweepable blocks, and will sequentially scan that block to find holes. However, each hole is only 16 bytes, so we can’t fit our 32-byte object: we finish with the current block, grab another one, repeat until no blocks are left and we cause GC. GC runs, and after collection we have an opportunity to grow the heap: but the heap size is already twice the live object size, so the heuristics say we’re all good, no resize needed, leading to the same sweep again, leading to a livelock.

I actually ran into this case during Guile’s bootstrap, while allocating a 7072-byte vector. So it’s a thing that needs fixing!

observations

The root of the problem is fragmentation. One way to solve the problem is to remove fragmentation; using a semi-space collector comprehensively resolves the issue, modulo any block-level fragmentation.

However, let’s say you have to live with fragmentation, for example because your heap has ambiguous edges that need to be traced conservatively. What can we do? Raising the heap multiplier is an effective mitigation, as it increases the average hole size, but for it to be a comprehensive solution in e.g. the case of 16-byte live objects equally interspersed with holes, you would need a multiplier of 512× to ensure that the largest 8192-byte “small” objects will find a hole. I could live with 2× or something, but 512× is too much.

We could consider changing the heap organization entirely. For example, most mark-sweep collectors (BDW-GC included) partition the heap into blocks whose allocations are of the same size, so you might have some blocks that only hold 16-byte allocations. It is theoretically possible to run into the same issue, though, if each block only has one live object, and the necessary multiplier that would “allow” for more empty blocks to be allocated is of the same order (256× for 4096-byte blocks each with a single 16-byte allocation, or even 4096× if your blocks are page-sized and you have 64kB pages).

My conclusion is that practically speaking, if you can’t deal with fragmentation, then it is impossible to just rely on a heap multiplier to size your heap. It is certainly an error to live-lock the process, hoping that some other thread mutates the graph in such a way to free up a suitable hole. At the same time, if you have configured your heap to be growable at run-time, it would be bad policy to fail an allocation, just because you calculated that the heap is big enough already.

It’s a shame, because we lose a mooring on reality: “how big will my heap get” becomes an unanswerable question because the heap might grow in response to fragmentation, which is not deterministic if there are threads around, and so we can’t reliably compare performance between different configurations. Ah well. If reliability is a goal, I think one needs to allow for evacuation, one way or another.

for nofl?

In this concrete case, I am still working on a solution. It’s going to be heuristic, which is a bit of a disappointment, but here we are.

My initial thought has two parts. Firstly, if the heap is growable but cannot defragment, then we need to reserve some empty blocks after each collection, even if reserving them would grow the heap beyond the configured heap size multiplier. In that way we will always be able to allocate into the Nofl space after a collection, because there will always be some empty blocks. How many empties? Who knows. Currently Nofl blocks are 64 kB, and the largest “small object” is 8kB. I’ll probably try some constant multiplier of the heap size.

The second thought is that searching through the entire heap for a hole is a silly way for the mutator to spend its time. Immix will reserve a block for overflow allocation: if a medium-sized allocation (more than 256B and less than 8192B) fails because no hole in the current block is big enough—note that Immix’s holes have 128B granularity—then the allocation goes to a dedicated overflow block, which is taken from the empty block set. This reduces fragmentation (holes which were not used for allocation because they were too small).

Nofl should probably do the same, but given its finer granularity, it might be better to sweep over a variable number of blocks, for example based on the logarithm of the allocation size; one could instead sweep over clz(min-size)–clz(size) blocks before taking from the empty block list, which would at least bound the sweeping work of any given allocation.

fin

Welp, just wanted to get this out of my head. So far, my experience with this Nofl-based heap configuration is mostly colored by live-locks, and otherwise its implementation of a growable heap sizing policy seems to be more tight-fisted regarding memory allocation than BDW-GC’s implementation. I am optimistic though that I will be able to get precise tracing sometime soon, as measured in development time; the problem as always is fragmentation, in that I don’t have a hole in my calendar at the moment. Until then, sweep on Wayne, cons on Garth, onwards and upwards!

Jakub Steiner

@jimmac

Scavengers Reign

Scavengers Reign

I savored every episode, knowing this was going to be one of those rare shows — like Severance season one — that you only get to experience for the first time once. It pulls you into a vivid, immersive world that’s equal parts mesmerizing and unsettling. A place you’re fascinated by, but would never want to be put in. The atmosphere seeps into you — the sound design, the environments, the way it all just lingers under your skin. You can’t shake it off.

And now I’ve watched the final episode — twelve in total — and I already miss it. So I need to say: watch it. It’s something special.

The series is a full-length expansion of the short Scavengers by Joseph Bennett and Charles Huettner (With visible improvements across the board). They’ve cited Nausicaä as a major influence, but if you’re into Akira, you’ll catch a few visual nods there too. It’s brutal. It’s gorgeous. And honestly, I haven’t been this excited about an animated series in a long time.

Neither Netflix nor HBO wanted to greenlight the second season. But the show has come to a very satisfying closure, so I’m not complaining.

★★★★★

Michael Meeks

@michael

2025-05-21 Wednesday

  • Mail chew, early call, sync with Dave.
  • Published the next strip around how private initiative can smooth roads:
    The Open Road to Freedom - strip#19 - private initiative can smooth roads
  • More catch-up, sales team call.

Steven Deobald

@steven

Join the GNOME Board!

The past two weeks have gone by too quickly. I’ve had so many wonderful conversations with so many of our contributors and community friends at this point that I couldn’t be more confident that I’m in the right place. The next year is going to be a lot of fun and I’m looking forward to working with many more of you.

This next year will be fun. But it is also going to be a lot of work. I’d like to take a minute to talk about some of the work we need to do, and how you can help. Because the 2025 election cycle has begun.

 

## Governance

Being on the GNOME Foundation Board is, first and foremost, about governance. If you join the Board, you will probably do your onboarding with Rob. He’s good at it. He’ll walk you through a slide deck and the very first slide will contain this quote in 480pt font:

Governance is not management.

The full quote, from the second page of Kenneth Dayton’s book is:

Governance is not management. In my opinion, one of the worst sins of charitable organizations is that too often they do not distinguish between the two. Rather, they confuse the two responsibilities and in the process hamper the mission of the institution.

This is an important distinction. Joining the Board does not mean you’ll be managing staff. The Board exists to perform the functions you’ll see in the source material for the remaining 30 slides:

These include (but are not limited to) responsibilities like:

  • Oversight
  • Making high-level decisions
  • Long-term strategy
  • Fiduciary responsibility
  • Ensuring the right ED is in place
  • Reviewing budgets
  • Deciding policy
  • Understanding the structure and duties of a 501(c)3 nonprofit

Riveting, I know. But! This isn’t everything. And if you’re still awake, I will tell you that we don’t just need policy wonks and 50-year strategists. There’s some hands-dirty work associated with the GNOME Foundation Board, too. Even though the Board is not designed to manage, it can help execute. Once upon a time, the Board member were the people who scrambled to arrange GUADEC every year. It helps to be a little scrappy and we could learn to reclaim a bit of that history.

 

## Finance

We could really use help with our finances. Our bookkeepers are absolutely metal and we’re very lucky to have them. Our Ops staff are super hard-working. But the Board rotates continuously. Not every Board will be able to read a balance sheet. We need to present the Board with a continuous view of finances — not just quarterly reports, but monthly reports which clearly describe our positions, our trajectory, and our best case / likely case / worst case. Financial clarity is paramount for an effective Board… but it’s also easier said than done.

If you love spelunking through spreadsheets, tying together multiple data sources, documentation, automation, or doing a wee bit of data science and visualization on Small Data, the Board might be for you! Know that this effort will take time and patience, though. You won’t find clarity overnight. Determination — to the point of stubbornness, perhaps — will be your best ally, here.

 

## Executive

In addition to finances, there are a number of committees in the Foundation. Some of these are Board committees and some are delegated committees. Committees, whether Board committees or not, all have some executive powers.

The most obvious of these is the aptly-name Executive Committee. A lot of work gets done here and it’s safe to say meaningful participation in the Exec Committee is almost a daily commitment in 2025. But there are other committees that could certainly use help (or even rebooting) and don’t require a daily commitment as a volunteer:

  • Governance Committee (see Governance)
  • Finance Committee (see Finance)
  • Travel Committee
  • Internship Committee
  • etc.

Committee participation doesn’t specifically require that you join the Board. It’s also possible for the Board to appoint Officers … and we’ll do that! But if you really want to get stuck in, I strongly suggest standing for election. It doesn’t matter if you’re a lawyer, an accountant, a designer, or developer.

But beyond roles, who should stand for election? Let’s dig into that for a second.

 

## Representation

The GNOME community is massive. I still have so many people to meet. And there seem to be people from every walk of life, every community, every corner of the planet, every cultural background, every linguistic background. If you’re one of the unlucky people I’ve forced one of my excited 3-hour sermons upon, you probably know by now I’m a huge fan of Network Resilience. I gave a keynote once that talks about this (among many other things). The Foundation, and the Board in particular, is more resilient when it’s more diverse. If we all think the same way, all have the same upbringing, same background, same weaknesses in our thinking… this weakens the Foundation.

Someone recently told me they’ve thought about standing for elections for years but feel some Imposter Syndrome. I was shocked. This person has been contributing to GNOME for decades. They’re clearly very smart, hardworking, and talented. If such a strong candidate is just waiting there in the wings, I can’t help but believe there are other strong potential Board members just waiting for the right moment.

The right moment is now.

We have 2SLGBTQIA+ folks on the Board. We do have folks with disabilities, different language backgrounds, different continents. But we have only one woman (who also happens to be our only lawyer). We have no one from east of Europe. We can do better. I’m not worried any of you are going to apply to the Board because of your background. I worry that you, like my new friend mentioned above, might fight the temptation to stand for election because you think you don’t belong here.

You absolutely belong here. Bring your talent, your energy, your tenacity. Help us kick ass.

 

## No Nonsense

I’d like to take a minute to discuss some of the reasons not to join the Board.

First, we need Board members who will help paddle our wee canoe in the same direction. GNOME, both the Project and the Foundation, have experienced some real hardship in recent years. If it’s your intention to join the Board only so you can paddle sideways (or backwards), please put that thought on hold for a couple years. We just can’t support that level of disruption right now. We will have our disagreements but we all need to be on the same page.

Second, if everything above bores you but you have a single issue that you’re really dreaming of hammering home… that’s also a recipe for ineffective Board participation. If elected, you will be on the Board for TWO YEARS. That’s a long time. Make sure you want to be there to work with us for the entire two years. It will be hard work. And it will be worth it.

 

## Hard Work

While talking to Maria (@marimaj) today — one of my favourite contributor conversations so far — she said something that resonated with me: “Almost no one appreciates just how much work is required! The Foundation requires so, so much work to function properly.” She then proceeded to name a bunch of folks who contribute day and night. Her hard-won understanding is built upon experience. She’s been a part of the community for a long time, and she’s seen how hard staff and volunteers work to keep the Foundation moving.

If you want to know how much work the Foundation requires, ask her. Ask me. Ask any Board member.

If you want to put in the work, I want you to stand for election. I’m looking forward to seeing your nomination. 🙂

To announce your candidacy, read Andrea’s post and follow the instructions. (Thanks Andrea!)

 

libinput and Lua plugins

First of all, what's outlined here should be available in libinput 1.29 but I'm not 100% certain on all the details yet so any feedback (in the libinput issue tracker) would be appreciated. Right now this is all still sitting in the libinput!1192 merge request. I'd specifically like to see some feedback from people familiar with Lua APIs. With this out of the way:

Come libinput 1.29, libinput will support plugins written in Lua. These plugins sit logically between the kernel and libinput and allow modifying the evdev device and its events before libinput gets to see them.

The motivation for this are a few unfixable issues - issues we knew how to fix but we cannot actually implement and/or ship the fixes without breaking other devices. One example for this is the inverted Logitech MX Master 3S horizontal wheel. libinput ships quirks for the USB/Bluetooth connection but not for the Bolt receiver. Unlike the Unifying Receiver the Bolt receiver doesn't give the kernel sufficient information to know which device is currently connected. Which means our quirks could only apply to the Bolt receiver (and thus any mouse connected to it) - that's a rather bad idea though, we'd break every other mouse using the same receiver. Another example is an issue with worn out mouse buttons - on that device the behavior was predictable enough but any heuristics would catch a lot of legitimate buttons. That's fine when you know your mouse is slightly broken and at least it works again. But it's not something we can ship as a general solution. There are plenty more examples like that - custom pointer deceleration, different disable-while-typing, etc.

libinput has quirks but they are internal API and subject to change without notice at any time. They're very definitely not for configuring a device and the local quirk file libinput parses is merely to bridge over the time until libinput ships the (hopefully upstreamed) quirk.

So the obvious solution is: let the users fix it themselves. And this is where the plugins come in. They are not full access into libinput, they are closer to a udev-hid-bpf in userspace. Logically they sit between the kernel event devices and libinput: input events are read from the kernel device, passed to the plugins, then passed to libinput. A plugin can look at and modify devices (add/remove buttons for example) and look at and modify the event stream as it comes from the kernel device. For this libinput changed internally to now process something called an "evdev frame" which is a struct that contains all struct input_events up to the terminating SYN_REPORT. This is the logical grouping of events anyway but so far we didn't explicitly carry those around as such. Now we do and we can pass them through to the plugin(s) to be modified.

The aforementioned Logitech MX master plugin would look like this: it registers itself with a version number, then sets a callback for the "new-evdev-device" notification and (where the device matches) we connect that device's "evdev-frame" notification to our actual code:

libinput:register(1) -- register plugin version 1
libinput:connect("new-evdev-device", function (_, device)
    if device:vid() == 0x046D and device:pid() == 0xC548 then
        device:connect("evdev-frame", function (_, frame)
            for _, event in ipairs(frame.events) do
                if event.type == evdev.EV_REL and 
                   (event.code == evdev.REL_HWHEEL or 
                    event.code == evdev.REL_HWHEEL_HI_RES) then
                    event.value = -event.value
                end
            end
            return frame
        end)
    end
end)
This file can be dropped into /etc/libinput/plugins/10-mx-master.lua and will be loaded on context creation. I'm hoping the approach using named signals (similar to e.g. GObject) makes it easy to add different calls in future versions. Plugins also have access to a timer so you can filter events and re-send them at a later point in time. This is useful for implementing something like disable-while-typing based on certain conditions.

So why Lua? Because it's very easy to sandbox. I very explicitly did not want the plugins to be a side-channel to get into the internals of libinput - specifically no IO access to anything. This ruled out using C (or anything that's a .so file, really) because those would run a) in the address space of the compositor and b) be unrestricted in what they can do. Lua solves this easily. And, as a nice side-effect, it's also very easy to write plugins in.[1]

Whether plugins are loaded or not will depend on the compositor: an explicit call to set up the paths to load from and to actually load the plugins is required. No run-time plugin changes at this point either, they're loaded on libinput context creation and that's it. Otherwise, all the usual implementation details apply: files are sorted and if there are files with identical names the one from the highest-precedence directory will be used. Plugins that are buggy will be unloaded immediately.

If all this sounds interesting, please have a try and report back any APIs that are broken, or missing, or generally ideas of the good or bad persuation. Ideally before we ship it and the API is stable forever :)

[1] Benjamin Tissoires actually had a go at WASM plugins (via rust). But ... a lot of effort for rather small gains over Lua

Engagement Blog

@engagement

Call for Participation

Call for Participation – Promo Team for endof10.org

We are putting out a call for participation to create a small team to promote End of 10. Supporting the endof10 gives us a unique opportunity to reach disaffected Windows users who are forced to buy a new computer to use the latest Windows 11.

What

This team will work on promoting the End Of 10 Project (and its website) and encourage migration from Windows to GNOME or a sister desktop project. Most important is to grow our user base and grow our app ecosystem.

Who

We are looking for a diverse global team 4-5 people who can help with creating a promotion and coordinating with the KDE and End Of 10 teams.

Why

The promotion will be used to educate the public on re-using their windows 10 computers in new ways by running on a community supported operating system.

How

You can participate by reaching out to us on :gnome.org on Matrix.

If you are interested in End Of 10 but don’t feel you can commit to the Promo Team, you are welcome to join -en:kde.org on Matrix.

Christian Hergert

@hergertme

Simplifying LSP Selection

With Foundry I want to make LSP management much easier than it currently is in Builder.

We have the foundry lsp run python3 command where python3 can be replaced with any language for which there is an installed LSP plugin. This will start an LSP using all the abstractions (including cross-container execution) and provide it via stdin/stdout.

But what happens when you have a half-dozen language servers for Python with new ones added every week? There is a simple builtin tool now.

Keep in mind the language identifiers should match GtkSourceView language identifiers.

# Make clangd the preferred LSP for C
foundry lsp prefer clangd c

# Make sourcekit-lsp preferred LSP for C++
foundry lsp prefer sourcekit-lsp cpp

# Make ruff the preferred LSP for Python3
foundry lsp prefer ruff python3

If there is a clear LSP that your project should be using by all contributors, add --project and it will update the value in the projects settings.

Jakub Steiner

@jimmac

Ode to HTML

I’m not a professional web designer. I’ve been making websites for decades, but I haven’t kept up with the latest browser quirks and common approaches. What I do have is a solid grasp of the web’s foundations—thanks to my time teaching IP networking at the university.

My journey with Linux started when I struggled to get PHP running on Windows. (To my surprise, my student side project autoroku.cz kept running in production for years.)

At SUSE I’ve tasted the DRY principles while working on a Rails project, SUSE Studio. I left PHP behind and embraced static site generators like Middleman, then Jekyll as it integrated into GitHub. But over time, maintenance fatigue pushed me further—back to basics. No SASS. No site generators. Just clean, modern HTML and CSS.

Javascript no thank you

People are often surprised to see major projects like gnome.org, brand.gnome.org, circle.gnome.org and my own jimmac.eu built with plain HTML. Yes you do repeat yourself and inconsistencies creep in. But with integrated version control and web based editors, fixes are a click away. More people can edit plain HTML than any bespoke stack.

Do I miss some form of include()? Sure. Would I reach for Jekyll+markdown when someone else is responsible for the content? Probably. But for focused, small sites, nothing beats good old HTML.

Michael Meeks

@michael

2025-05-20 Tuesday

  • Up in the night, caught up with admin; checked-out, another day of interesting talks to partners & friends at the OS Founders Summit, good to hear about progress left & right.
  • Worked on the Eurostar home, got back rather late, late call with a friend.

Jussi Pakkanen

@jpakkane

Optimizing page splits in books

Earlier in this blog we looked at how to generate a justified block of text, which is nowadays usually done with the Knuth-Plass algorithm. Sadly this is not, by itself, enough to create a finished product. Processing all input text with the algorithm produces one very long column of text. This works fine if you end result is a scroll (of the papyrus variety), but people tend to prefer their text it book format. Thus you need a way to split that text column into pages.

The simplest solution is to decide that a page has some N number of lines and page breaks happen at exact these places. This works (and is commonly used) but it has certain drawbacks. From a typographical point of view, there are at least three things that should be avoided:

  1. Orphan lines, a paragraph at the bottom of a page that has only one line of text.
  2. Widow lines, a paragraph that starts a new page and has only one line of text.
  3. Spread imbalance, where the two pages on a spread have different number of lines on them (when both are "full pages")
Determining "globally optimal" page splits for a given text is not a simple problem, because every pagination choice affects every pagination choice that comes after it. If you stare at the problem long and hard enough, eventually you realize something.

The two problems are exactly the same and can be solved in the same way. I have implemented this in the Chapterizer book generator program. The dynamic programming algorithm for both is so similar that they could, in theory, use shared code. I chose not to do it because sometimes it is just so much simpler to not be DRY. They are so similar, in fact, that a search space optimization that I had to do in the paragraph justification case was also needed for pagination even though the data set size is typically much smaller in pagination. The optimization implementation turned out to be exactly the same for both cases.

The program now creates optimal page splits and in addition prints a text log of all pages with widows, orphans and imbalances it could not optimize away.

Has this been done before?

Probably. Everything has already been invented multiple times. I don't know for sure, so instead I'm going to post my potentially incorrect answer here on the Internet for other people to fact check.

I am not aware of any book generation program doing global page optimization. LibreOffice and Word definitely do not do it. As far as I know LaTeX processes pages one by one and once a page is generated it never returns to it, probably because computers in the early 80s did not have enough memory to hold the entire document in RAM at the same time. I have never used Indesign so I don't know what it does.

Books created earlier than about the mid eighties were typeset by hand and they seem to try to avoid orphans and widows at the cost of some page spreads having more lines than other spreads. Modern books seem to optimize for filling the page fully rather than avoiding widows and orphans. Since most books nowadays are created with Indesign (I think), it would seem to imply that Indesign does not do optimal page splitting or at least it is not enabled by default.

When implementing the page splitter the reasons for not doing global page splitting became clear. Computing both paragraph and page optimization is too slow for a "real time" GUI app. This sort of an optimization really only makes sense for a classical "LaTeX-style" book where there is one main text flow. Layout programs like Scribus and Indesign support richer magazine style layouts. This sort of a page splitter does not work in the general case, so in order to use it they would need to have a separate simpler document format.

But perhaps the biggest issue is that if different pages may have different number of lines on each page, it leads to problems in the page's visual appearance. Anything written at the bottom of the page (like page numbers) need to be re-placed based on how many lines of text actually ended up on the page. Doing this in code in a batch system is easy, doing the same with GUI widgets in "real time" is hard.

Cassidy James Blaede

@cassidyjames

Elect the next GNOME Foundation Board of Directors for 2025!

It’s everyone’s favorite time of year, election season! …Okay, maybe not the most exciting thing—but an extremely important one nonetheless.

For anyone who doesn’t know, GNOME is comprised of many parts: individual contributors and maintainers, adhoc teams of volunteers, a bunch of open source software in the form of apps and libraries, a whole bunch of infrastructure, and—importantly—a nonprofit foundation. The GNOME Foundation exists to help manage and support the organizational side of GNOME, act as the official face of the project to third parties, and delegate authority when/where it makes the most sense. The GNOME Foundation itself is governed by its elected Board of Directors.

If you contribute to GNOME, you’re eligible to become a member of the GNOME Foundation, which gets you some perks (like an @gnome.org email address and Matrix account, blog hosting and syndication, and access to Nextcloud and video conferencing tools)—but most importantly, GNOME Foundation members vote to elect the Board of Directors. If you contribute to GNOME, I highly recommend you become a member: it looks good for you, but it also helps ensure the GNOME Foundation is directly influenced and governed by contributors themselves.

I’m Running for the Board!

I realized today I never actually announced this on my blog (just via social media), but this past March I was appointed to the GNOME Foundation Board of Directors to fill a vacancy.

However, the seat I filled was up for re-election in this very next cycle, so I’m happy to officially announce: I’m running for the GNOME Foundation Board of Directors! As part of announcing my candidacy, I was asked to share why I would like to serve on the board. I posted this on the GNOME Discourse, but for convenience, I’ve copied it below:

Hey everyone,

I’m Cassidy (cassidyjames pretty much everywhere)! I have been involved in GNOME design since 2015, and was a contributor to the wider FreeDesktop ecosystem before that via elementary OS since around 2010. I am employed by Endless, where I am the community architect/experience lead.

I am particularly proud of my work in early design, communication, and advocacy around both the FreeDesktop color scheme (i.e. dark style) and accent color preferences, both of which are now widely supported across FreeDesktop OSes and the app ecosystem. At elementary I coordinated volunteer projects, lead the user experience design, launched and managed OEM partnerships, and largely maintained our communication by writing and editing regular update announcements and other blog posts. Over the past year I helped organize GUADEC 2024 in Denver, and continue to contribute to the GNOME design team and Flathub documentation and curation.

I was appointed to the GNOME Foundation board in March to fill a vacancy, and I am excited to earn your vote to continue my work on the board. If elected, I will continue my focus on:

  • Clearer and more frequent communication from the GNOME Foundation, including by helping write and edit blog posts and announcements

  • Exploring and supporting fundraising opportunities including with users, OEMs, and downstream projects

  • Ensuring Flathub continues to be recognized as the premier Linux app store, especially as it moves to enable financially supporting the developers of FOSS apps

  • More widely communicating the impact, influence, and importance of GNOME and Flathub to raise awareness beyond the existing contributor community

  • Helping ensure that the Foundation reflects the interests of the contributor community

I feel like the GNOME Foundation is at an important transformation point, and I look forward to helping steer things in the right direction for an effective, sustainable organization in support of the GNOME community. Regardless of whether I am elected, I will continue to contribute to design and communication as much as I’m able.

Thank you for your consideration!

Become a Member, and Vote!

Voting will be open for two weeks beginning June 5, 2025. If you contribute to GNOME, now is a great time to ensure you’re a member so you can vote in time; check the GNOME Discourse announcement for all of the specific dates and details. And don’t forget to actually vote once it begins. :)

Book club, 2025 edition

It’s strange being alive while so much bad shit is going on in the world, right? With our big brains that invented smartphones, quantum computers and Haskell, surely we could figure out how to stop Benjamin Netenyahu from starving hundreds of thousands of children? (Or, causing “high levels of acute food insecurity” as the UN refer to it).

Nothing in the world is simple, though, is it.

Back in 1914 when European leaders kicked off the First World War, the collective imagination of a war dated back to an era where the soldiers wore colourful jackets and the most sophisticated weapon was a gun with a knife attached. The reality of WWI was machine guns, tanks and poison gas. All that new technology took people by surprise, and made for one of the deadliest wars in history.

If you’re reading this, then however old or young you are, your life has been marked by rapid technological changes. Things are still changing rapidly. And therein lies the problem.

In amongst the bad news I am seeing some reasons to be optimistic. The best defense against exploitation is education. As a society it feels like we’re starting to get a grip on why living standards for everyone except the rich are nosediving.

Lets go back to an older technology which changed the world centuries ago: books. I am going to recommend a few books.

Technofeudalism (by Yannis Varoufakis)

Cover of Technofeudalism

The book’s preface outlines the theory: capital has mutated into a much more powerful and dangerous form of itself. Two things caused it: the “privatization of the internet”, and the manner in which Western governments and central banks responded to the financial crisis of 2008. The strongest part of the book is the detailed telling of this story, from the beginnings of capitalism and its metamorphoses during the 20th century, to the panicked central banks keeping interest rates near zero for over a decade, effectively printing money and giving it to the wealthy, who in turn decided it was best to hang onto all of it. Out of this he declares capitalism itself is dead, replaced by a more powerful force: technofuedalism.

Yanis’ concept of technofuedalism is this:

Markets, the medium of capitalism, have been replaced by digital trading platforms which look like, but as not, markets and are better understood as fiefdoms. And profit, the engine of capitalism, has been replaced with its feudal predecessor: rent. Specifically, it is a form of rent that must be paid for access to those platforms and to the cloud more broadly.

Many people depend on cloud platforms for basic needs. For example, access to work. Think about how many people earn a living through apps: Uber drivers, food delivery couriers, freelancers advertising via Google or Meta, and so on. But it’s not just individuals. Many capitalist businesses now rely on sites like Amazon.com for most of their sales. Everyone has to pay cloud rent to the overlord.

Yanis likens this to a colonial town where all the shops are owned by the same guy, who happens to be named Jeff. This isn’t your traditional monopoly, though — because cloud platforms also “personalize” your experience of the site. You get recommendations perfectly tailed to your needs. For consumers, the platform owners control what you see. For participants, they control who is paying attention. This he calls cloud capital.

The concept of cloud capital needs better definition in the book, but I think the attention economy is the most interesting aspect, and it is what leads to the other counterintuitive side effect: many people creating value for cloud platforms do it for little or no money. Apple doesn’t pay you to make app store apps. Tiktok don’t pay you to upload videos. The book claims that capitalist companies like General Motors pay about 80% of their income to workers as salary payments, while Big Tech companies tend to spend less than 1% of their income paying workers.

In my last status update I mentioned some disillusionment with open source projects in the age of AI. Here’s another perspective: contributing to some open source projects now feels like giving free labour to cloud platform owners.

The Free Software movement dates from the 1980s, when operating systems were a source of power. Microsoft created an illegal monopoly on operating systems in the 90s and became the richest and most powerful company in the world; but today, operating systems are a commodity, and Microsoft makes more money from its cloud platform Azure.

It’s great that we maintain ethical, open computing platforms like GNOME, but the power struggle has moved on. I don’t expect to see huge innovations in desktop or mobile operating systems in the next decade.

Meanwhile, maintaining ethical cloud platforms is still a minority pursuit. Writing software doesn’t feel like the difficult part, here. The work needed if we have the will to climb out of this technofuedal hole is community organization and communication. The most valuable thing the major cloud platforms have is our attention. (And perhaps the most valuable thing we have in the open source world, is our existing communities and events, such as the Linux App Summit).

Why does this book give me hope? It gives a structure to the last 18 years of fucked up goings on in the world of power and politics. And it helps us analyze exactly what makes the big tech companies of the USA and China so powerful.

If the cloudalists got to you already and you don’t have the attention span to buy and read a book any more, don’t worry! There’s also a video.

The Trading Game (by Gary Stevenson)

Cover of The Trading Game

I’m late to the party with this one. Gary started a blog ten years ago (wealtheconomics.org), and now runs a online video channel (GarysEconomics).

He knows a lot about money and the super-rich. He knows that people are addicted to accumulating wealth and power. He knows that living standards for working people are getting worse. He knows that politicians won’t admit that the two things are linked. And he has over a million subscribers to his channel who know that too.

Why does it give me hope? First, he’s focused on helping us understand the problem. He does have a clickbait solution — “Tax wealth, not work” — but he also acknowledges that it’s slow, difficult and messy to affect national politics. He’s realistic about how difficult it is to tax the super-rich in a world of tax havens. And he’s been going at it for 10 years already.

Careless People (by Sarah Wynn-Williams)

I listened to long discussion of this book on a podcast called Chisme Corporativo, run by two chicas from Mexico working to demystify the world of big business and USA power that controls much of the world.

The fact that Chisme Corporativo exists makes me very happy. If we’re going to live in a world where US corporations have more power than your own government — particularly the case in Latin America — then it makes a lot of sense to learn about US corporations, the people who run them, and why they make the decisions they do.

The book review quotes a part where Mark Zuckerberg finally realized that Facebook was instrumental in the first Tromp election campaign, and just how much power that endows the company with.

And he digested this bombshell for three hours, and his thought process led him to this: “Maybe I should run for president!”

That’s the type of person we are dealing with.

What’s next

Inequality keeps rising and living standards are getting worse for everyone except the super rich. But we are learning more and more about the people and the processes responsible. Information is a seed for bringing society into better balance again.

I’m going to leave you with this quote I stole blatantly from Gary Stevenson’s website:

“If we can really understand the problem, the answer will come out of it, because the answer is not separate from the problem.”
― J. Krishnamurti

Have you read any of these books? What else would you add to this list?

Thibault Saunier

@thiblahute

gst-dots-viewer: A New Tool for GStreamer Pipeline Visualization

We’re happy to have released gst-dots-viewer, a new development tool that makes it easier to visualize and debug GStreamer pipelines. This tool,  included in GStreamer 1.26, provides a web-based interface for viewing pipeline graphs in real-time as your application runs and allows to easily request all pipelines to be dumped at any time.

What is gst-dots-viewer?

gst-dots-viewer is a server application that monitors a directory for .dot files generated by GStreamer’s pipeline visualization system and displays them in your web browser. It automatically updates the visualization whenever new .dot files are created, making it simpler to debug complex applications and understand the evolution of the pipelines at runtime.

Key Features

  • Real-time Updates: Watch your pipelines evolve as your application runs
  • Interactive Visualization:
    • Click nodes to highlight pipeline elements
    • Use Shift-Ctrl-scroll or w/s keys to zoom
    • Drag-scroll support for easy navigation
  • Easily deployable in cloud based environments

How to Use It

  1. Start the viewer server:
    gst-dots-viewer
    
  2. Open your browser at http://localhost:3000
  3. Enable the dots tracer in your GStreamer application:
    GST_TRACERS=dots your-gstreamer-application
    

The web page will automatically update whenever new pipeline are dumped, and you will be able to dump all pipelines from the web page.

New Dots Tracer

As part of this release, we’ve also introduced a new dots tracer that replaces the previous manual approach to specify where to dump pipelines. The tracer can be activated simply by setting the GST_TRACERS=dots environment variable.

Interactive Pipeline Dumps

The dots tracer integrates with the pipeline-snapshot tracer to provide real-time pipeline visualization control. Through a WebSocket connection, the web interface allows you to trigger pipeline dumps. This means you can dump pipelines exactly when you need them during debugging or development, from your browser.

Future Improvements

We plan on adding more feature and  have this list of possibilities:

  • Additional interactive features in the web interface
  • Enhanced visualization options
  • Integration with more GStreamer tracers to provide comprehensive debugging information. For example, we could integrate the newly released memory-tracer and queue-level tracers so to plot graphs about memory usage at any time.

This could transform gst-dots-viewer into a more complete debugging and monitoring dashboard for GStreamer applications.

Demo

Steven Deobald

@steven

2025-05-16 Foundation Report

Whew. How is it Friday already? Here’s my attempt at a more concise Foundation Report for my second official week at the Foundation. Spoiler: If I had more time I would have written you a shorter letter.

 

## Opaque Things

I wasn’t expecting to interact with external organizations in such a way that I can’t mention them directly in these reports this early in my time here. But that’s a part of the job, and it’s begun already.

To provide some context on where those opaque interactions sit on the ol’ transparency spectrum, here is a wildly unscientific breakdown of transparency levels of material I (sometimes) have access to:

  1. The thoughts in my head
  2. The paper notes on my desk
  3. My unshared, private git repo
  4. Restricted conversations with third parties, shared with the relevant Board members
  5. My “ED Notes” repo, shared with the Board
  6. My .plan file, shared with the Board
  7. The Executive Session from the monthly Board meeting (I leave the room for these, as do all other Foundation Staff who might be attending the Board meeting for some reason)
  8. Confidential items from the monthly Board meeting
  9. Restricted GitLab repos/issues
  10. Shared drives
  11. Matrix
  12. Discourse
  13. GitLab
  14. Social Media
  15. Blogs

Most of the Foundation’s and the project’s activity happen in those last 5 locations. It’s actually very manual and inconvenient to create a private GitLab repo on gitlab.gnome.org. And so it should be! Public and published should be the first option, always… but there are clearly times when privacy or confidentiality is warranted.

Note that most of the Very Private things aren’t private because they’re top secret. The paper on my desk isn’t shared with anyone because, well, it can’t be. I don’t keep sensitive information on my desk. If I need to record something sensitive, it goes in a private git repo. There’s almost nothing in there and I don’t expect to see that grow much. The “ED Notes” directory is mostly a kludge and a scratchpad. Ultimately, my kludgey notes make their way into GitLab issues. Some of these are public, but not all. Board discussions frequently go on inside GitLab issues. It’s a good permanent record.

As for the opaque conversations mentioned in the first paragraph above, I can say this: they’re not particularly sexy or exciting. [edit] One is bureaucratic, in the most literal and boring sense: just the usual compliance requirements of a 501c3. The other was meeting with a third party about a safety issue. (Thanks to Rob and Allan for suggesting these edits.) [/edit] Both of these conversations directly benefit GNOME and its community. There’s no secret society stuff going on, as much as that may disappoint some folks outside the community. 😉

 

## Transparency

(How meta.) So, many conversations this week have been about transparency: how do we be more transparent? How do we condense the firehose of information in GitLab, Matrix, Discourse, and calls into something digestable? Who wants to see what? Who thinks transparency (or general communication) mistakes have been made in the past and what were those mistakes? What can we learn from them? How can we help each other learn more transparent communication methods, processes, and practices?

Almost everyone I spoke to this week (and last) has something to say on this topic. Most people have a pretty clear idea about what they want out of transparency in the project and from the Foundation. Most people are largely in agreement.

Every organization is different. Everyone’s habits are different. We’ll keep iterating.

 

## Spreadsheets

I sat with Pablo on the 12th to take a look at some of our accounts and to get a handle on our cash position. Rosanna does a better job of this stuff than I do and I sat with her on the same day to look at similar numbers. She also introduced me to the bookkeeper (yay!), our contacts at CommitChange, and our friends over at GNOME Nepal.

 

## Email

GNOME Email lives on a vanilla IMAP server with no server-side filtering or rules. Since I’m a giant pain in the ass who refuses to either (a) just use Thunderbird rules and suck it up when my laptop is closed or (b) run a server in my living room, Andrea set me up with a box in the GNOME OpenShift cloud to run imapfilter. So far, it works a treat. Praise be to SREs.

Andrea also has other very fun ideas for the future. [edit] BUT THEY’RE SECRETS. I was advised this wasn’t a fun tease. It’s not really secret: Andrea and I are both just way too excited about fundraising. A diverse donor portfolio will make for a healthy Foundation. [/edit]

 

## Executive Meeting

The Exec Committee meets on mondays to Get Things Done. We discussed the need for a Treasurer, chatted about what the Staff was doing (which, on some level, is self-referential when embedded in this report), discussed ways we can be more transparent and also how to talk about transparency.

This may sound like a self-indulgent thought exercise but take a second to mull it over. What, precisely, do you want out of transparency from the GNOME Foundation? I can tell you that you 100% do not want the firehose because I’m spending all day on the firehose and I can’t even keep up. The information has to be sliced, somehow. How do you want it sliced?

You can just tweet your answers to this question directly at me on Mastodon. Please don’t shout.

Once we understand what the expectations of the community are, we can replay them back to you (ie. “does this approach seem right to you?”) which is talking about transparency. A conversation.

 

## Flathub

I met Rob and some other Flathub folks. We had some lively banter about telemetry. 😉 That wasn’t the primary focus, but it’s fun to imagine it was. In actuality, we discussed the Flathub organization, its relationship to GNOME, and how much we can accomplish in terms of standing up Flathub on its own terms by the fall of 2025. That’s a high bar but there are some great people involved.

I’d love to say something like “Flathub is the future of the Linux desktop” but Flathub is the Today of the Linux Desktop. I probably tell this story too much, but I’m running Debian Stable on a 2011 MacBook Air in my living room. Debian Stable. I can’t even switch bluetooth devices without opening settings because it’s GNOME 43 but I can install an app released yesterday. As someone who ran Debian a lot as a kid, I can’t tell you just how weird and delightful that is.

 

## Matrix Spam

If you use Matrix to work on GNOME, or to watch GNOME development, or for just about any other reason, really… you know about the spam. “Spam.”

Let’s please have a moment of silence for the mods, admins, devs, and SREs who are fighting to bring peace back to our little village.

Thank you everyone on the front lines. I’ve only spoken to a few of you so far but you’ve provided me tremendous reassurance. I hope I can proxy some of that reassurance:

This situation is truly awful but please know just how seriously and competently the people behind the scenes are working to resolve it.

 

## The Board

Cassidy and I got a Board orientation! Thanks Rob. Even if a lot of this is known, I think it might be helpful to publish some of the onboarding material so folks inside (and outside) the community know what is involved in running a 501c3.

The GNOME Project Handbook is a great resource to start with, if governance is your jam.

 

## The Board Meeting

The Board meets every second Tuesday of the month. We looked at finances, talked about GUADEC, talked about ways to get more money in the hands of developers, and discussed the option of a “hackfest” to axe some of the pending tasks on the Foundation’s project wall. I think that’s Allan’s way of trying to make administrivia sound fun. 😀

 

## Digital Wellbeing

Allan kindly invited me to a DW design meeting. I learned that it’s not just my Location Services that are broken… that’s just apparently a very global bug. That realization was in the context of a discussion about how the modern desktop may find itself increasingly reliant on networked services, and how to mitigate the risks posed by that situation. Design goes all the way to the bottom of the stack, and across the network.

 

## Safety

I have a lot to say on this topic. I’ve had a lot of conversations on this topic already. It’s too much to cram into a weekly Foundation Update, but expect more once I’ve done more research.

 

## History

I got some history lessons from Federico, Cassidy, and Adrian Vovk. We talked about tensions in the community, Pride month in 2024, significant past events under other EDs, the history of in GNOME, the brand, the logo, the Brand-in-the-Large (otherwise known as “the product”), the STF grant, YouTubers, podcasters, burnout, and GNOME OS.

In my conversation with Adrian, I began to understand that GNOME OS is a much, much bigger idea than what he laid out in his blog post, A Desktop for All. Not bigger in terms of implementation… bigger in terms of the dream. That conversation took, uh, a while. The excitement that people feel for the GNOME project is really unlike I’ve ever seen for any other product.

In my conversation with Cassidy, he brought up the concept of the difference between the GNOME Community (the devs, the designers, the translators, the infra folks, the ops folks, everyone who builds GNOME) and the GNOME Fandom (the stans, the users, the news, the pundits, the peanut gallery, the haters). I think this distinction matters. I’ve been stanning GNOME for two decades. I’ve only been a community member for two weeks. This isn’t to say that one group is more important than the other … just that there are two distinct groups.

Side note: I’d love to see the “U” back in GUADEC. If you’re someone who simply loves a universal free desktop, and you happen to choose GNOME, I’d encourage you to come to GUADEC this summer and stan with me.

 

## Treasurer

[edit] I misspoke — Michael is still our Treasurer, but we do need a new Treasurer to replace him. Thank you Rosanna for pointing out my mistake! [/edit] We could really use a new Treasurer… but we could also really use a dedicated person who’s borderline obsessed with the intersection of finances and freie software. And maybe a dash of data science.

If you know someone you think would be a good fit, please email me.

 

## Elections

Board elections are coming up! Have you ever wanted to be involved in f/oss governance? Have you ever felt the burning urge to get your hands dirty with a 501c3 non-profit? Do you love accounting? Law? Taking minutes? Following rules? The GNOME Board might be for you!

Stay tuned for an announcement of the schedule and the publication of some 501c3 infographics and/or slide decks. 🙂

 

## Accessibility

The Foundation has been speaking to Georges and the Engagement folks about how we might fund development more directly. This conversation began before I want to love Linux. It Doesn’t Love Me Back. hit the streets. This conversation isn’t reactionary; the Fireborn blog is serendipitous. The author of that blog is right: the teams do have limited resources and they do experience years of neglect. Yet? They keep fighting. There are plenty of individuals, companies, and governments in this world to support the creation of a completely accessible computer and it is up to us to find that support. While it’s romantic to imagine a scrappy team of volunteers creating an accessible desktop, this isn’t the reality. If teams aren’t funded, the work can’t keep up.

One line caught my attention in particular:

This isn’t inconvenience.
It’s exclusion.

This is what we mean when we say an environment for everyone. We do not mean you’ll get a switch to make your window borders look like BeOS. There is software that does that already. The goal is to ensure no one is excluded.

If we aren’t doing that, that’s a problem we need to solve.

Yesterday was Global Accessibility Awareness Day. It’s an excellent time to intentionally reflect on how we can improve the situation. But matters just as much today. And tomorrow.

Until we have a fundraising program in place, I strongly suggest reading Georges’ In celebration of accessibility and Matthias’ An Accessibility Update for GTK. There are people out there doing this work already. Thank them. Celebrate them. Support them.

 

## Conclusion

I wrote this on Friday morning. Today I’ll meet Anisa, Jef Spaleta (of Fedora fame), and Matthias.

Was this more concise? Probably not. But at least I sliced it a different direction than last week. 😉 If you and I did something fun together this week and I forgot, please forgive me. I almost forgot Andrea and he was the last person I saw before I started typing this thing.

Alley Chaggar

@AlleyChaggar

Hi GSoC and GNOME

Hey GNOME and GSoC! 👋

This is my first blog post on Planet GNOME and actually, my first blog post ever! I’ll be using this space to share updates on my Google Summer of Code 2025 project and other GNOME contributions I make along the way or even after GSoC ends. Of course, most posts for now will focus on my GSoC work.

🛠️ My GSoC Project: Improving JSON, XML, and YAML Integration in Vala

My GSoC project is about improving how Vala handles JSON, XML, and YAML. Right now, working with these formatting languages in Vala can be tedious. I’ll be contributing improvements to make parsing and emitting data in these formats easier and more intuitive for developers.

I’ll also be diving into some compiler design topics and exploring Vala projects that already use these formats, to better understand current pain points and use cases.

Thanks 🙏

Also, big thanks to Felipe Borges for maintaining Planet GNOME, and to my mentor Lorenz Wildberg, who will be mentoring me on this project. 💙

This Week in GNOME

@thisweek

#200 Two Hundred

Celebrating 200 Weeks of This Week in GNOME! 🎉

What a milestone! We’re thrilled to celebrate the 200th post of This Week in GNOME - that’s nearly four years of showcasing the amazing work, features, and people that make GNOME thrive.

  • 200 weeks of curated updates
  • 2.051 individual news entries
  • 1.527 images showcasing the latest features
  • 259 people who are part of the TWIG community

From new features, fresh designs, bug fixes but also exciting app launches — TWIG has become a vital pulse of the GNOME community.

Whether you’re a reader, contributor, or part of the community behind the scenes — thank you for being a part of this journey! ❤️

Launching TWIG 2.0

Nearly four years after its launch, I’m delighted to unveil a completely revamped thisweek.gnome.org! Welcome to TWIG 2.0 — featuring a modern technical foundation, a refreshed design, exciting new features, and so much more!

  • Modernized design, now in line with the fabulous gnome.org redesign
  • New dedicated landing page showing the latest numbers
  • Beautiful autogenerated cover images for each post
    • Showcasing a featured project from the week
    • Include a screenshot in your update — with a bit of luck, it’ll appear on the post’s cover!
    • Each screenshot is dynamically decorated with the latest Adwaita wallpaper
  • Revamped posts page, feel nostalgic when you scroll through 200 weeks of GNOME history
  • New post filter make it easy to find updates on specific projects
  • Click on a contributor name to see their past TWIG submissions
  • Click-and-hold images in posts to view them in full size
  • Extended Open Graph protocol support, so posts look great when shared on social media
  • Improved RSS/Atom feed with richer metadata and better formatting
  • Rebuilt with Astro, offering a faster and more modern experience
  • …and many more improvements!

Have fun with TWIG 2.0, I’m looking forward to your feedback!

And now, as usual, to the happenings across the GNOME Project in the week from 09 May to 16 May 😉.

Accessibility

Georges Stavracas (feaneron) says

Today (May 15th) is the Global Accessibility Awareness Day. To celebrate it, I wrote about the unsung heroes that keep on fighting against all adverse conditions around the Linux desktop in order to improve its accessibility. You can read more here.

GNOME Core Apps and Libraries

Mutter

A Wayland display server and X11 window manager and compositor library.

jadahl says

Mutter, GNOME’s compositor framework that GNOME Shell is built on top of, got a new developer tool this week, the “Mutter Development Kit”. This new development kit provides a new way to run a nested GNOME Shell instance inside a GTK app which will provide various tools useful for compositor and shell development. The tool it has so far is touch emulation, but more will come.

Maps

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

mlundblad announces

Labels such as street names and house numbers can now be clicked to show the place information (and easily add them to favourites) in Maps. Pictures here: https://gitlab.gnome.org/-/snippets/7004 https://gitlab.gnome.org/-/snippets/7005

GNOME Circle Apps and Libraries

Izzy (she/her) says

Binary 5.3 has just been released as a small update. It comes with many translation updates and a few small updates.

Development hasn’t been too active lately due to uni work and personal issues. I’m hoping to work on it a lot more over the summer and hopefully past that. In the mean time, get it now on flathub: https://flathub.org/apps/io.github.fizzyizzy05.binary

NewsFlash feed reader

Follow your favorite blogs & news sites.

Jan Lukas reports

Newsflash 4.0 enters beta which can be checked out in the flathub beta channel. In this release most of the UI code has been refactored to make use of all the Gtk & rust binding goodies that were added over the years. Image, Audio and Video attachments are now all featured more prominently. More can be read here: https://blogs.gnome.org/jangernert/2025/05/12/newsflash-4-0-beta/

Déjà Dup Backups

A simple backup tool.

Michael Terry says

Déjà Dup Backups just landed two big changes, to be released in 49.0:

  • A UI refresh to align better with the HIG
  • Restic is now the default backend for all builds (not just the flathub one)

Third Party Projects

vallabhvidy announces

Really happy to announce release of version 0.1.3 of Cube Timer🥳. Cube Timer is a tool to time your Rubik’s Cube solves. It tracks your solve time and maintains averages of previous solves. Solves can be organized into different practice sessions as well. It also has a basic scramble generator. The design of Cube Timer was inspired by cstimer.net.

It can be installed from Flathub.

Also Congratulations to TWIG for its 200th edition! 🥳🎉🎉.

Märt Põder says

Nautilus Compare, the context menu diff extension for Nautilus file manager (aka GNOME Files) is back in Debian repositories after five year hiatus. Although updated for Python 3 and GTK 3 already in 2020, the extension using Meld diff and merge tool by default and with localisations for 14 languages was only uploaded and approved about a week ago after months of intensified user demand and with support for latest GTK 4 and Nautilus 43. Extension is still available for earlier releases of Debian family distros in the Launchpad PPA, but can be conveniently installed from default repositories in current development and anticipated official releases.

francescocaracciolo reports

Newelle, AI assistant for Gnome, got updated to 0.9.6, introducing selective profiles and reasoning support for OpenRouter provider.

It can be installed from Flathub

Parabolic

Download web video and audio.

Nick says

Parabolic V2025.5.2 is here! This release contains a bunch of new features that users have been requesting.

Here’s the full changelog:

  • Added the ability to pause/resume running downloads
  • Added the ability to specify save folder paths in a batch file
  • Added the ability to exclude a download from history in advanced download options
  • Added a Preferred Audio Codec option to downloads preferences
  • Added audio codec information to audio formats
  • Added an ETA to downloads’ progress
  • Fixed an issue where generic videos would not download correctly

Fractal

Matrix messaging app for GNOME written in Rust.

Kévin Commaille announces

Due to a pesky bug that makes Fractal crash when our users attempt to start a verification, we are releasing Fractal 11.1 only 2 weeks after Fractal 11. And while we’re at it we also backported a few fixes for smaller paper cuts!

This version is available right now on Flathub.

If you want to help us avoid regressions like that in the future, you could use Fractal Nightly. You could even get rid of our remaining bugs yourself!

Miscellaneous

Georges Stavracas (feaneron) announces

Flatpak 1.16.1 is out! It’s the first bugfix release of the 1.16 series. Some highlights of this release:

  • Apps with the dri permission can now access /dev/udmabuf too. This may allow for better memory sharing and performance improvements in apps
  • Don’t propagate the Wayland socket from host into sandbox if access to the Wayland socket has been denied
  • Flatpak now looks for TLS certificates at /etc/containers/certs.d when interacting with OCI registries
  • Fix intermittent flatpak-portal crashes by avoiding unnecessary multi-threading. This should help apps and libraries that heavily use the Flatpak portal, such as WebKit and glycin.
  • When using parental controls, allow a child account to update existing apps by default, to ensure that security and bugfix updates can be installed
  • Make systemd scopes easier to match to Flatpak app instances
  • A couple of performance improvements in some specific situations

GNOME Foundation

steven reports

The Foundation Report is out for the week of May 12-16! It’s not any shorter! We’re sorry! ;)

Give it a gander.

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!

Victor Ma

@victorma

Introducing my GSoC 2025 project

I will be contributing to GNOME Crosswords, as part of the Google Summer of Code 2025 program. My project adds construction aids to the Crosswords editor. These aids provide hints, warnings, and data that help the user create better crossword puzzles.

I have three mentors:

  • Jonathan Blandford
  • Federico Mena Quintero
  • Tanmay Patil

GNOME Crosswords

The GNOME Crosswords project consists of two applications:

My project focuses on the Crosswords editor.

To learn more about GNOME Crosswords, check out this GUADEC presentation that Jonathan Blandford, the creator of Crosswords, gave last year.

Crossword construction

Constructing a crossword puzzle is tricky. Constructing a good crossword puzzle is even trickier. The main difficulty lies in finding the right words to fill the grid.

Initially, it’s quite easy. The grid starts off completely empty, so the first few words that you add don’t have any restrictions on them (apart from word length). But as you fill the grid with more and more words, it becomes increasingly difficult to find words to fill the remaining rows/columns. That’s because a remaining row, for example, will have a few of its cells already filled in by the words in the intersecting columns. This restricts the list of possible words for that row.

Something you can run into is that halfway through the construction process, you realize that one or more rows/columns cannot be filled at all, because no word meets the constraints imposed on it by the prefilled cells! In that case, you would need to backtrack and delete some of the intersecting words and try again. Of course, trying to replace a word could lead to other words on the grid needing to be replaced too—so you can get a domino effect of groups of rows/columns on the grid needing to be redone!

And that’s just what you have to deal with to create a valid crossword puzzle. To create a good crossword puzzle, there are many more things to consider, some of which impose further restrictions on the words that you can use. For example:

  • Are the words interesting?
  • Are there any words that are so uncommon as to feel unfair?
  • Does the puzzle have a good variety of parts of speech?
  • Is the grid rotationally symmetric?
  • Are there any unchecked cells?

To learn more about the crossword construction process, check out How to Make a Crossword Puzzle by The New York Times, as well as How to Create a Crossword Puzzle by Wired.

Suffice it to say, creating a good crossword puzzle is difficult. Thankfully, crossword construction software can make this process easier—certainly not easy—but easier. For example, the GNOME Crosswords editor gives you a list of possible words for each row/column, taking into account any cells in the row/column that are already filled with a letter. We can consider this feature a “construction aid.”

The goal of my GSoC project is to add additional construction aids to the Crosswords editor. These aids will help the user create better crossword puzzles.

Construction aids

Here’s a list of potential construction aids that this project can add:

  • Warning for unches (unchecked cells).
  • Warning for non-dictionary-words.
  • Warning for words with low familiarity.
  • Indicator for average familiarity of words.
  • Warning for crosswordese (overused crossword words).
  • Heat map for hard-to-fill cells.
  • Parts-of-speech distribution graph.

Right now, we are in the community bonding period of the GSoC program (May 8 to June 1). During this period, I will work with my mentors to determine which construction aid or aids this project should add, what they should look like, and how they should be implemented. By the end of the month, I will have created some design docs laying all this out. That will make it much easier to hit the ground running, once the coding period starts, in June.

Mini crossword

Here’s a mini crossword that I made! You can try it out by using the Crosswords player.

My mini crossword

Andy Wingo

@wingo

guile on whippet waypoint: goodbye, bdw-gc?

Hey all, just a lab notebook entry today. I’ve been working on the Whippet GC library for about three years now, learning a lot on the way. The goal has always been to replace Guile’s use of the Boehm-Demers-Weiser collector with something more modern and maintainable. Last year I finally got to the point that I felt Whippet was feature-complete, and taking into account the old adage about long arses and brief videos, I think that wasn’t too far off. I carved out some time this spring and for the last month have been integrating Whippet into Guile in anger, on the wip-whippet branch.

the haps

Well, today I removed the last direct usage of the BDW collector’s API by Guile! Instead, Guile uses Whippet’s API any time it needs to allocate an object, add or remove a thread from the active set, identify the set of roots for a collection, and so on. Most tracing is still conservative, but this will move to be more precise over time. I haven’t had the temerity to actually try one of the Nofl-based collectors yet, but that will come soon.

Code-wise, the initial import of Whippet added some 18K lines to Guile’s repository, as counted by git diff --stat, which includes documentation and other files. There was an unspeakable amount of autotomfoolery to get Whippet in Guile’s ancient build system. Changes to Whippet during the course of integration added another 500 lines or so. Integration of Whippet removed around 3K lines of C from Guile. It’s not a pure experiment, as my branch is also a major version bump and so has the freedom to refactor and simplify some things.

Things are better but not perfect. Notably, I switched to build weak hash tables in terms of buckets and chains where the links are ephemerons, which give me concurrent lock-free reads and writes but not resizable tables. I would like to somehow resize these tables in response to GC, but haven’t wired it up yet.

Anyway, next waypoint will be trying out the version of Whippet’s Nofl-based mostly-marking collector that traces all heap edges conservatively. If that works... well if that works... I don’t dare to hope! We will see what we get when that happens. Until then, happy hacking!

In celebration of accessibility

Accessibility in the free and open source world is somewhat of a sensitive topic.

Given the principles of free software, one would think it would be the best possible place to advocate for accessibility. After all, there’s a collection of ideologically motivated individuals trying to craft desktops to themselves and other fellow humans. And yet, when you look at the current state of accessibility on the Linux desktop, you couldn’t possibly call it good, not even sufficient.

It’s a tough situation that’s forcing people who need assistive technologies out of these spaces.

I think accessibility on the Linux desktop is in a particularly difficult position due to a combination of poor incentives and historical factors:

  • The dysfunctional state of accessibility on Linux makes it so that the people who need it the most cannot even contribute to it.
  • There is very little financial incentive for companies to invest in accessibility technologies. Often, and historically, companies invest just enough to tick some boxes on government checklists, then forget about it.
  • Volunteers, especially those who contribute for fun and self enjoyment, often don’t go out of their ways to make the particular projects they’re working on accessible. Or to check if their contributions regress the accessibility of the app.
  • The nature of accessibility makes it such that the “functional progression” is not linear. If only 50% of the stack is working, that’s practically a 0%. Accessibility requires that almost every part of the stack to be functional for even the most basic use cases.
  • There’s almost nobody contributing to this area anymore. Expertise and domain knowledge are almost entirely lost.

In addition to that, I feel like work on accessibility is invisible. In the sense that most people are simply apathetic to the work and contributions done on this area. Maybe due to the dynamics of social media that often favor negative engagement? I don’t know. But it sure feels unrewarding. Compare:

Picture of a Reddit thread titled "An accessibility update - GTK Development Blog" with just 1 comment and 28 upvotes
Picture of a Reddit thread titled "Wayland: An Accessibility Nightmare" with just 327 comment and a thousand upvotes, published 12 hours before the GTK accessibility update thread

Now, I think if I stopped writing here, you dear reader might feel that the situation is mostly gloomy, maybe even get angry at it. However, against all odds, and fighting a fight that seems impossible, there are people working on accessibility. Often without any kind of reward, doing this out of principle. It’s just so easy to overlook their effort!

So as we prepare for the Global Accessibility Awareness Day, I thought it would be an excellent opportunity to highlight these fantastic contributors and their excellent work, and also to talk about some ongoing work on GNOME.

If you consider this kind of work important and relevant, and/or if you need accessibility features yourself, I urge you: please donate to the people mentioned here. Grab these people a coffee. Better yet, grab them a monthly coffee! Contributors who accept donations have a button beneath their avatars. Go help them.

Calendar

GNOME Calendar, the default calendaring app for GNOME, has slowly but surely progressing towards being minimally accessible. This is mostly thanks to the amazing work from Hari Rana and Jeff Fortin Tam!

Hari recently wrote about it on Mastodon. In fixing one issue, Hari accidentally fixed at least two other issues. Jeff, as an exemplary product manager and co-maintainer, was the one who noticed and also blogged about these collateral fixes.

If you consider this kind of work important, please consider getting them a coffee!

Jeff Fortin Tam

@jfft

Elevado

Back when I was working on fixing accessibility on WebKitGTK, I found the lack of modern tools to inspect the AT-SPI bus a bit off-putting, so I wrote a little app to help me through. Didn’t think much of it, really.

But the project started getting some attention when Bilal Elmoussaoui contributed to it while testing some accessibility work in GNOME Shell. After that, Matthias Clasen – of GTK fame – and Claire – a new contributor! – started sending some nice patches around.

In preparation for the Global Accessibility Awareness Day we have made the first public release of Elevado! The project is evolving mostly without me these days, and it’s all thanks to these people.

Claire

@qwery

Bilal Elmoussaoui

@bilelmoussaoui

GTK

Of course, almost nothing I’ve mentioned so far would be possible if the toolkit itself didn’t have support for accessibility. Thanks to Emmanuele Bassi GTK4 received an entirely new accessibility backend.

Over time, more people picked up on it, and continued improving it and filling in the gaps. Matthias Clasen and Emmanuele continue to review contributions and keep things moving.

One particular contributor is Lukáš Tyrychtr, who has implemented the Text interface of AT-SPI in GTK. Lukáš contributes to various other parts of the accessibility stack as well!

Emmanuele Bassi

@ebassi

Lukáš Tyrychtr

@tyrylu

Matthias Clasen

@matthiasc

Design

On the design side, one person in particular stands out for a series of contributions on the Accessibility panel of GNOME Settings: Sam Hewitt. Sam introduced the first mockups of this panel in GitLab, then kept on updating it. More recently, Sam introduced mockups for text-to-speech (okay technically these are in the System panel, but that’s in the accessibility mockups folder!).

Please join me in thanking Sam for these contributions!

Sam Hewitt

@snwh

Infrastructure

Having apps and toolkits exposing the proper amount of accessibility information is a necessary first step, but it would be useless if there was nothing to expose to.

Thanks to Mike Gorse and others, the AT-SPI project keeps on living. AT-SPI is the service that receives and manages the accessibility information from apps. It’s the heart of accessibility in the Linux desktop! As far as my knowledge about it goes, AT-SPI is really old, dating back to Sun days.

Samuel Thibault continues to maintain speech-dispatcher and Accerciser. Speech dispatcher is the de facto text-to-speech service for Linux as of now. Accerciser is a venerable tool to inspect AT-SPI trees.

Eitan Isaacson is shaking up the speech synthesis world with libspiel, a speech framework for the desktop. Orca has experimental support for it. Eitan is now working on a desktop portal so that sandboxed apps can benefit from speech synthesis seamlessly!

One of the most common screen readers for Linux is Orca. Orca maintainers have been keeping it up an running for a very long time. Here I’d like to point out that we at Igalia significantly fund Orca development.

I would like to invite the community to share a thank you for all of them!

Eitan Isaacson

@eeejay

Mike Gorse

@mgorse

Samuel Thibault

@sthibaul

… and more!

I tried to reach out to everyone nominally mentioned in this blog post. Some people preferred not to be mentioned. I’m pretty sure I’ve never got to learn about others that are involved in related projects.

I guess what I’m trying to say is, this list is not exhaustive. There are more people involved. If you know some of them, please let me encourage you to pay them a tea, a lunch, a boat trip in Venice, whatever you feel like; or even just reach out to them and thank them for their work.

If you contribute or know someone who contributes to desktop accessibility, and wishes to be here, please let me know. Also, please let me know if this webpage itself is properly accessible!

A Look Into The Future

Shortly after I started to write this blog post, I thought to myself: “well, this is nice and all, but it isn’t exactly robust.” Hm. If only there was a more structured, reliable way to keep investing on this.

Coincidentally, at the same time, we were introduced to our new executive director Steven. With such a blast of an introduction, and seeing Steven hanging around in various rooms, I couldn’t resist asking about it. To my great surprise and joy, Steven swiftly responded to my inquiries and we started discussing some ideas!

Conversations are still ongoing, and I don’t want to create any sort of hype in case things end up not working, but… maaaaaaybe keep in mind that there might be an announcement soon!

Huge thanks to the people above, and to everyone who helped me write this blog post ♥


¹ – Jeff doesn’t accept donations for himself, but welcomes marketing-related business

Felipe Borges

@felipeborges

Using Libravatar/Gravatar for your profile in Planet GNOME

Now that the new planet.gnome.org website is live, we have added Libravatar and Gravatar support. Instead of having the Planet website host user images itself, we are giving members the choice to use profile images/avatars from these services.

If you are interested in updating your profile picture, check out the instructions at https://gitlab.gnome.org/Teams/Websites/planet.gnome.org#adding-an-avatar and file an issue. Extra points if you do a merge-request! 🙂

The old hackergotchis are an important part of our community’s history, so I set up a static website to host the old files. Feel free to file an issue if you want yours taken down from there.

Christian Hergert

@hergertme

Filtering Containers in Ptyxis

Some people seem to have an outrageous number of containers on their system. That can create pretty bad performance with Ptyxis when it is using a GtkPopoverMenu to show you the container list.

Nightly will now use a custom popover backed by GtkListView which should help with that. Additionally, you can filter them now easily. To bring up the menu, alt+, can be used.

A screenshot of Ptyxis showing the popover menu for terminals including containers and profiles. You can filter them by typing into a search entry.

Varun R Mallya

@varunrmallya

GSoC and GNOME

alt text

Hello GNOME!

I am Varun R Mallya, a 3rd-year engineering student at the Indian Institute of Technology, Roorkee. I’m now part of the GNOME community as a Google Summer of Code 2025 intern :). I will be working on the Sysprof project under the mentorship of Christian Hergert.

What I’ll be doing in the coming weeks

My proposal titled “Adding eBPF profiling capabilities to Sysprof” aims to add eBPF profiling capabilities to Sysprof. This will allow users to profile their applications using eBPF, which is a powerful and flexible tracing technology for the Linux kernel. The project will involve implementing a new backend for Sysprof that uses eBPF to collect profiling data, as well as integrating this backend into the existing Sysprof user interface.

You can take a look at my proposal here

I’ll start off by mostly validating what I wrote in the proposal and building small eBPF programs that achieve the functionality, even if inefficiently. My proposal aims to replace the data we got from /proc files using equivalent eBPF programs. Each time I manage to extract data for a type of /proc file, I will write a blog on how it works and exactly how I did it. It will indirectly serve as documentation for people who want to continue work on this after I’m done with it.

After I’m done with this, I’ll add a pipeline to Sysprof that will compile these programs and add them to the final ELF. This will involve a lot of work to make it compatible with older kernel versions since a small part of what I’m doing relies on features available in newer kernels (I might be wrong here, but I don’t know yet—I’m talking about bpf timers and bpf iterators). This will involve BTF and CORE, which I’m currently reading about.

About me

I like any kind of systems programming mostly. eBPF certainly gets me excited and I’ve been doing a lot of reading on it, to be very honest. I’ve also been working on a few open-source projects like GCC-Rust (GCC’s new independent Rust compiler btw, check it out), Reth (The Rust implementation of Ethereum), WasmEdge (A WebAssembly runtime) and I’m also involved in a few projects in my university. I’m actually a Mechanical Engineering student undergoing training, so I’m currently doing some research on drone swarming and GPU-based fluid simulations under my profs. Apart from this, I work on libp2p for Protocol Labs (currently doing some interop work between the Python and Go implementations of it.)

Matthias Clasen

@mclasen

An accessibility update

I recently saw somebody ask

Is Fedora accessible now ?

To which I want to say: yes! But this question does not really have a  simple yes-or-no answer. There is lots of nuance to it. A better question would be:

Is this system usable for *me* ?

Accessibility is about making our software usable (and, ideally, pleasant to use) for as many people as we can.

It has been a year since we last gave an update on accessibility (a11y) in and around GTK. Time to look at what has happened in this space since then. On the surface, it might seem that the answer is: not much. But lets look a bit closer.

A new backend

We merged the AccessKit a11y backend in GTK 4.18. This is pretty big news for GTK on platforms other than Linux. For the very first time, GTK applications can be accessible on Windows and macOS. This is also the first rust dependency in GTK.

If you want to try it out, build GTK with the -Daccesskit=enabled build option, and set

GTK_A11Y=accesskit

in the environment. The AccessKit backend works on Linux as well, but we are still defaulting to at-spi here. If you are ever uncertain which a11y backend GTK is using, you can find this information in the inspector.

The new backend was created by Matt Campbell as part the STF initiative.

Keyboard shortcuts in orca

One of the remaining gaps in the Wayland a11y support was the lack of support for the special keyboard shortcuts that are traditionally provided by the orca screen reader.

Another result of the STF initiative was a prototype for a new a11y protocol, including support for these shortcuts, but it was not complete and unmerged.

Thankfully, Lukáš Tyrychtr and Carlos Garnacho cooperated on extracting the relevant parts and completed the shortcuts support. This closes one of the biggest remaining “Wayland accessibility” gaps in  GNOME 48.

An accessible web browser

Georges Basile Stavracas Neto put a lot of effort into making webkitgtk accessible, in particular when it is used in a flatpak sandbox. You can watch his GUADEC talk from last year to learn all about the complexities of this task. But he succeeded, so GNOME Web is now a fully accessible, fully sandboxed web browser.

This was work was also supported by the STF initiative.

A new accessibility tool

Elevado is a new tool to let you browse and explore what apps expose on the a11y bus. The existing tool for this, accerciser, has not been in active development for a long time, so it is good to have an alternative.

The new tool just got ported to rust, so its cool. And it just saw its first release. Try it out!

Elevado was started by Georges to help with his work on a11y in webkitgtk.

The long tail

Beyond these big headline features, there have been many smaller improvements to a11y in GTK and related libraries:

  • A number of missing accessible labels, tooltips and key bindings have been added in the file chooser
  • List boxes now provide information to make orca say the right thing
  • The a11y overlay in the GTK inspector will now show you when your buttons are too small as click targets
  • ATs can receive notification about platform state (such as focus) changes, and custom accessible implementations can emit such notifications
  • We now provide information about shortcuts and mnemonics for actions in the form that orca expects
  • Reporting of text attributes has been improved (a contribution from the LibreOffice team)
  • libadwaita toast notifications are now announced to AT
  • The accessible representation of many libadwaita action row widgets has been improved

Summary

Accessibility in GNOME is continuously improving, thanks to the contributions of many people. Thanks to everybody who helps! ❤

Jan Lukas Gernert

@jangernert

Newsflash 4.0 (beta)

The big refactor

With Newsflash being one of the earliest gtk-rs applications it went through a lot of iterations already as the ecosystem evolved:

  • from just slapping widgets together in structs to subclassing support in gtk-rs
  • from just cloning everything to weak references with the clone!-macro
  • from GtkBuilder xml to blueprint
  • from interacting with Listboxes directly to GLib.ListModel based ListViews
And now that the boilerplate is down and ergonomics are at a good level, I felt is was finally time to go all in on gobject properties, bindings and signals.
Now the code is much easier to reason about while also dropping about ~2k lines:

 

219 files + 18047 20089

 

While refactoring was the main focus point and the reason why I felt the major version jump was justified, it doesn’t mean there are no new features to play  with.

Enclosures to the front row

So far Image, Audio and Video attachments were hidden behind a small button in the header bar. No more. With Newsflash 4.0 the article view is a hybrid of Gtk for the header with title, author, date, etc. And a web view for the HTML content. This means Newsflash can show widgets for attachments right in the article itself.

Audio Widget
Audio Widget
Image Widget
Image Widget
Video Widget
Video Widget

Misc

  • Clear article pane if selection in article list goes away
  • Allow manual hiding of the sidebar
  • New user agent based on app name
  • Option to set custom user agent per feed (only relevant for Local RSS)
  • Subcategories (also mostly only relevant for Local RSS)
  • Local RSS: in addition to etags, use cache-control header to reduce traffic to feeds

And many smaller fixes and improvements you can read about in the change log.

Sadly I had to deactivate the webkit DMABuf Renderer for now. I discovered a bug creating the now needed larger frame buffers for articles. Fingers crossed that this will get fixed and the DMABuf render can be re-activated.

Available on flathub beta channel

Version 4.0.0-beta1 is available on the flathub beta channel. The first few bugs have already been found and squashed. But I’m sure there are more to discover.

Make sure to back up your data and settings before switching to the beta in case a migration eats your database.
~/.var/app/io.gitlab.news_flash.NewsFlash/config/news-flash/
~/.var/app/io.gitlab.news_flash.NewsFlash/data/news-flash/

Tobias Bernard

@tbernard

Elephant Followup

This is a response to Allan’s response to my most recent blog post. For context, I think it’s important to note that I’m happy that Allan is on the board now, along with some of the other new members coming from the community who joined in the past year. As I think I made clear in my last post, my concerns with the Foundation are with some of its structures, and the leadership predating this year’s board. I have huge respect for the effort Allan has put into the Foundation since he rejoined the board last year, I know it’s thankless work in difficult circumstances. I don’t know why Allan felt the need to issue a personal reply, seeing as this is not about him. However, since he did, I wanted to clarify a few points.

The Ban Itself

From the perspective of many people in the community, especially volunteers not affiliated with any company, Sonny was our representative on the board, trying to fix long-standing problems with the Foundation. Those of us who worked closely with him on the STF team knew how difficult and frustrating this was for him. In that already tense, low-trust situation, Sonny being banned the way he was obviously looks political — how could it not?

If you ban a board member after they try to address the community’s concerns with the Foundation you really need to do a good job communicating why you’re not just getting rid of uncomfortable opposition. What we got instead was silence and appeals to authority. Of course, given that trust in the structures was low to begin with, that was not very convincing to anyone who knew some of the backstory. “Trust me, I’ve seen more evidence” doesn’t work when there are serious concerns about the process as a whole.

My sense is that a big part of the problem is that the board/CoCC never tried to talk things through with Sonny to clear up potential misunderstandings in the CoC complaint, and as a result everyone is operating off of different facts.

Due to CoC confidentiality and the alleged infractions having happened in private settings without other parties present it’s incredibly hard to find any common ground here. I still think a mediation with everyone involved would have been a good path forward, but we’ve seen no interest from the Foundation side in continuing/re-starting something like that. Therefore, it seems we’re at an impasse — those who trust the structures will continue to do so, and those who don’t will continue not to.

The Aftermath

Allan’s post makes the claim that those of us criticizing the way this has been handled are asking for people who make important contributions to the project to be treated differently in the eyes of the CoC — I’m not sure where this is coming from, because nobody has asked for that.

However, in doing something as drastic as an immediate, long-term ban the board and CoC committee should be concerned with avoiding collateral damage. Other community members who are directly or indirectly affected should not be left hanging with no communication and lots of extra work.

Some thought should be put into which modules, programs, or initiatives might be affected by a ban, and measures taken to avoid adverse effects. None of that was done in this case. As an example: I was working with Sonny on a daily basis co-organizing the STF project, and even I didn’t get any official communication of Sonny’s ban when it happened.

In this case, the fallout from messing this up was massive. I don’t think I need to repeat what this meant for the STF project and contractors, but it didn’t stop there. For example, Sonny’s two Google Summer of Code interns also lost all contact to their mentor, with zero communication from anyone. Other volunteers had to scramble and fill in for Sonny, to avoid the interns failing their GSoC evaluations.

Independently of the questions around the validity of the ban itself, the damage caused by the way it has been (mis-)handled has been severe enough that someone should take accountability for it. While it’s true that some directors have apologized to the STF team in private, this does not seem sufficient given the gravity of the failures. There need to be some concrete consequences if the Foundation wants to be credible again in the eyes of the community.

The Independent Review

It’s true that there was an external review of the CoC decision, but unfortunately it did not bring any clarity. This is primarily because the evidence of the case itself was not examined at all, it was only a review of CoC procedures. The report we got was extremely vague and only made high-level process recommendations, it did not answer any of the actual questions around the ban.

This is why I’m confused about the claim that the report said the ban was justified — I’m assuming this was a misunderstanding. In my (and others, see e.g. Andy’s perspective) reading of the report, it only says that such a ban is within the purview of the CoC committee, and does not comment on the merits of this particular case.


There’s obviously a lot more to say, but my goal here was just to clear up a few misconceptions I’ve seen in recent discussions.

I’d like to thank everyone who has reached out and expressed their solidarity after the previous post. It’s clear that even a year later, many people across the community are still feeling hurt, confused, and isolated by the way this has been handled. Between that and the people who seem to think the elephant is just fine where it is and should be actively ignored I think we unfortunately have a lot to work through as a community.

I’d also like to thank Allan for the work he has done and is continuing to do on the Foundation side. I know having to deal with the fallout from this ban on top of everything else is not making things any easier. This situation really sucks for everyone, and I hope we can bring it behind us.

Felipe Borges

@felipeborges

GNOME is Sponsoring an Outreachy Internship Project for GNOME Crosswords!

We are excited to announce that the GNOME Foundation is sponsoring an Outreachy internship project for the June 2025 to August 2025 internship round!

Outreachy provides internships to people subject to systemic bias and impacted by underrepresentation in the technical industry where they are living.

The intern will work with mentors Jonathan Blandford, Federico Mena Quintero, and Tanmay Patil on the project Add Wordlist Scoring to the GNOME Crosswords Editor.

The intern’s blog will soon be added to Planet GNOME, where you can follow their project updates and learn more about them. Stay tuned!

Sophie Herold

@sophieherold

International ME/CFS Awareness Day

May 12 is the International ME/CFS Awareness Day. Since I have been living with ME/CFS for some time, I want to use this day as an opportunity to talk a bit about this topic.

The Illness

The main symptom of ME/CFS is an intolerance against physical, cognitive, and emotional exertion. For me, that means that activities like preparing dinner or cleaning my room can overload my body. Usually, the full consequences of this only become visible after roughly 24 hours. The state after such an overload is also called a crash. The resulting symptoms for me include exhausted muscles, feeling like I got the flue, pain in joints and muscles, disrupted sleep, brain fog, headaches, and more. Depending on the severity, these symptoms will disappear again after a day or a week of rest. Not resting during a crash, is an easy way to prolong the symptoms and just feeling incredibly miserable. Following these limitations is a bit challenging at times. Therefore, some of these symptoms are quite a frequent issue for me.

In contrast to severe cases of ME/CFS, I’m usually still having a considerable amount of energy available, with a score of 30 on the CFIDS Disability Scale. Cases with a score 0, which implies being constantly bedridden and unable to care for oneself, do exist. One of the recent more prominent cases has been the one of Diana (Physics Girl).

While I am able to manage my every day life, having to manage my resource that much, and planning ahead for basic tasks like my weekly hair wash is quite exhausting. Not having extra resources available for unexpected events in life is honestly also pretty frightening at times. Due to ME/CFS and other disabilities like Autism, I have been at “full reduced earning capacity” for more than 10 years now. That’s the formal term in Germany for people that can’t work at least 3 hours per day.

Perspectives for Treatment

ME/CFS is a syndrome, a label for a collection of symptoms that have been observed in many patients. Nobody knows what’s the cause, how it works, or even if it’s one illness or a bunch of illnesses that all manifest similarly. Equally, there is no direct treatment. There are some treatments that can be tried to manage some of the symptoms, but usually, it needs some luck to find anything that has any positive effect. Generally, ME/CFS can get better on its own. But, like everything with ME/CFS, the likeliness of this happening is unknown.

The key in managing ME/CFS is pacing. That means knowing one’s body’s limits and trying to not exceed them. This is especially important since, as described before, the main symptoms have a very delayed onset, making it impossible to just rely on the direct feedback of one’s body. If the body is clearly reacting, I am already deep in crash territory. For me, that especially means to limit physical activities like vacuuming to not more than 30 minutes and to lie down afterward. Walking is currently possible up to about 1 km on good days. But I am still struggling to follow what I know is good for me. But I am improving.

ME/CFS can be caused by infections like influenza or COVID. While COVID can cause a lot of different health issues, often lumped together under the vague term ‘long COVID’, ME/CFS is one of these potential long term effects. ME/CFS has long been mostly ignored by medical research, or worse, been labeled as a psychological problem that can be fixed by “just going out more” – which of course just worsens the symptoms. Even still, large studies are published that try to support these theories. While these studies are of laughable quality (German), they managed to hinder proper research and treatment for ME/CFS for far too long. What’s even more infuriating is that some of these studies seems to be influenced by insurances that want to avoid claims by ME/CFS patients. But COVID brought ME/CFS enough attention that things are slowly changing. A lot of trials for vastly different medications are ongoing. ME/CFS has also reached such an importance that treatment and research for it is explicitly mentioned twice in the coalition agreement of Germany’s new government. Research is slowly getting an idea of what is happening in the body of ME/CFS patients. Damaged Mitochondria, immune system reactions, changes in blood cells, involvement of the nervous system, abnormalities in brain MRI’s, and many more. However, it is still very much unclear which of these things are cause and which are effect.

Working on GNOME

I am very happy that I have the capacities to contribute to GNOME. Programming has been calming and fulfilling for me for a very long. I wish I could contribute more, but slowly chipping away on my projects is also fine :) Since last year, I have also started to accept donations and do a bit of contract work like for GNOME STF. This extra money, on top of my social benefits, helps me to buy some nice woodworking tools (I rarely have energy to use, oh no) or give me the luxury of not having to contemplate if I can afford to take a taxi to a doctor’s appointment. I am very grateful for that!

GNOME Foundation News

@foundationblog

GNOME Foundation Welcomes Steven Deobald as Executive Director

The GNOME Foundation is delighted to announce the appointment of Steven Deobald as our new Executive Director. Steven brings decades of experience in free software, open design, and open documentation efforts to the Foundation, and we are excited to have him lead our organization into its next chapter.

“I’m incredibly excited to serve the GNOME Foundation as its new full-time Executive Director,” said Steven Deobald. “The global network of contributors that makes up the GNOME community is awe-inspiring. I’m thrilled to serve the community in this role. GNOME’s clear mission as a universal computing environment for everyone, everywhere has remained consistent for a quarter century—that kind of continuity is exceptional.”

Steven has been a GNOME user since 2002 and has been involved in numerous free software initiatives throughout his career. His professional background spans technical leadership, business development, and nonprofit work, and he was one of the founding members of Nilenso, India’s first worker-owned tech cooperative. Having worked with projects like XTDB and Endatabas and founding India’s first employee-own, he brings valuable experience in open source product development. Based in Halifax, Canada, Steven is well-positioned to collaborate with our global community across time zones.

“Steven’s wealth of experience in open source communities and his clear understanding of GNOME’s mission make him the ideal leader for the Foundation at this time,” said Robert McQueen, GNOME Foundation Board President. “His vision for transparency and financial resilience aligns perfectly with our goals as we support and grow the diversity and sustainability of GNOME’s free software personal computing ecosystem.”

Steven plans to focus on increasing transparency about the people and processes behind GNOME, reestablishing the Foundation’s financial stability, and building resilience across finances, people, documentation, and processes to ensure GNOME thrives for decades to come. You can read more from Steven in his introductory post on his GNOME blog.

Heartfelt Thanks to Richard Littauer

The GNOME Foundation extends its deepest gratitude to Richard Littauer, who has served as Interim Executive Director for the past ten months. Despite initially signing on for just two months while simultaneously moving to New Zealand and beginning a PhD program, Richard extended his commitment to ensure stability during our search for a permanent director.

During his tenure, Richard worked closely with the board and staff to pass a balanced budget, secure additional funding, support successful events including GUADEC, and navigate numerous challenges facing the Foundation. His dedication to ensuring GNOME’s continued success, often while working across challenging time zones, has been invaluable.

“I knew this day would come at some point,” Richard shared in his farewell post. “My time has been exceedingly difficult… I feel that I have done very little; all of the gains happened with the help of others.” Richard’s humility belies the significant impact he made during his time with us, creating a solid foundation for our new Executive Director.

Richard will return full-time to his PhD studies at Te Herenga Waka Victoria University of Wellington, but remains available to the GNOME community and can be reached via Mastodon, his website, or at richard@gnome.org.

Looking Ahead

As we welcome Steven and thank Richard, we also recognize the dedicated contributors, volunteers, staff, and board members who keep GNOME thriving. The Foundation remains committed to supporting the development of a free and accessible desktop environment for all users around the world.

The GNOME community can look forward to meeting Steven at upcoming events and through community channels. We encourage everyone to join us in welcoming him to the GNOME family and supporting his vision for the Foundation’s future.

Martin Pitt

@pitti

InstructLab evaluation with Ansible and Wordle

During this quarter, all employees are asked to become familiar with using AI technologies. In the last months I explored using AI for code editing and pull request reviews, but I wrote about that separately. But today is another Red Hat day of learning, so I looked at something more hands-on: Install and run InstructLab on my own laptop again, and experiment with it. TL/DR: This just reinforced my experience from the last two years about AI being too bad and too expensive for what I would expect it to do.

Martin Pitt

@pitti

Testing sourcery.ai and GitHub Copilot for cockpit PR reviews

Goal In the Cockpit team we spend a lot of our time on PR reviews. That’s time well spent – we all learn from each other, it keeps the code quality high and ourselves honest. But most certainly there is room for optimization: There are always silly or boring things like typos, inconsistent formatting, or inefficient algorithms; and humans also have selective and subjective sight, i.e. are often missing things.

This Week in GNOME

@thisweek

#199 One More Week...

Update on what happened across the GNOME project in the week from May 02 to May 09.

GNOME Foundation

steven announces

We have our first Foundation Report since I joined as ED! I hope these are less verbose and less rambling in the future… and also less focused on the minutiae of what I spent my week on. With each passing week, they will (hopefully) come to encompass more of what’s going on at the Foundation, at a higher level. For now, I’m meeting many, many lovely folks and finding out just how hard everyone is working.

Read the long ramble on my blog.

Internships

Felipe Borges announces

We are happy to announce that five contributors are joining the GNOME community as part of Google Summer of Code 2025!

This year’s contributors will work on backend isolation in GNOME Papers, adding eBPF profiling to Sysprof, adding printing support in GNOME Crosswords, and Vala’s XML/JSON/YAML integration improvements. Let’s give them a warm welcome!

In the coming days, our new contributors will begin onboarding in our community channels and services. Stay tuned to Planet GNOME to read their introduction blog posts and learn more about their projects.

If you want to learn more about Google Summer of Code internships with GNOME, visit gsoc.gnome.org.

GNOME Core Apps and Libraries

Video Player (Showtime)

Watch without distraction

kramo says

Video Player (codenamed Showtime) is replacing Videos (Totem) as GNOME’s default video player.

It will be included in GNOME 49, but it can already be installed from Flathub.

Third Party Projects

Jan Lukas says

I’ve released the first version of Typewriter to flathub. It is a, as of now, basic Typst editor with built-in live preview, template browser and export dialog. If you’re interested in a local-first Typst experience come join and contribute code and ideas.

Gitlab flathub

ranfdev announces

I’m announcing that DistroShelf is finally available on flathub ! Sometimes, there are certain programs that aren’t available on your favorite distro… They are available for Ubuntu, but you don’t want to reinstall your OS just for that program.

* DistroShelf enters the chat *

It enables you to run containers that are highly integrated with your host system, using distrobox. In other words, it lets you install that program you want, inside a Ubuntu container. Then, you can use the program as if it were installed on your real distro! The program will see all your folders, all your devices… as you expect.

But you can run more than simple ubuntu containers! You can run pretty much any distro you want. I use it to run a development environment with the latest and greatest tools, inside an arch linux container.

Try it while it’s hot!

Parabolic

Download web video and audio.

Nick says

Parabolic V2025.5.0 is here!

This release contains a complete redesign of the Qt/Windows app that features a much more modern experience. yt-dlp was also updated to the latest version to fix many website validation issues and some other features/fixes were added.

Please note, as many of you may have seen already, development of Parabolic and the set of Nickvision apps has slowed down. This is due to me starting a new full-time job and thus leaving only the weekends for me to work on these projects. This does not mean I am stopping development, it just means that releases, updates, and fixes will unfortunately take longer now. I appreciate all of your support and patience for these updates. Any C++ developers who would like to work on the projects with me as well are more than welcome too and are encouraged to reach out to me on Matrix!

Here’s the full changelog:

  • Added the display of the file size of a format if it is available
  • Fixed an issue where file paths were not truncated correctly
  • Redesigned the Qt app for a more modern desktop experience
  • Updated yt-dlp to fix some website validation issues

GNOME Websites

Felipe Borges announces

It’s alive! Welcome to the new planet.gnome.org!

A few months ago, I announced that I was working on a new implementation of Planet GNOME, powered by GitLab Pages. This work has reached a point where we’re ready to flip the switch and replace the old Planet website.

This was only possible thanks to various other contributors, such as Jakub Steiner, who did a fantastic job with the design and style, and Alexandre Franke, who helped with various papercuts, ideas, and improvements.

As with any software, there might be regressions and issues. It would be a great help if you report any problems you find.

If you are subscribed to the old Planet’s RSS feed, you don’t need to do anything. But if you are subscribed to the Atom feed at https://planet.gnome.org/atom.xml, you will have to switch to the RSS address at https://planet.gnome.org/rss20.xml

Miscellaneous

Sid says

GNOME GitLab now uses macOS runners sponsored by MacStadium for managing our macOS CI pipeline. The setup consists of 2 Mac mini (M1, 8-core CPU, 10-core GPU, 16GB RAM, 1TB SSD) along with Orka (Orchestration with Kubernetes on Apple) virtualization. This is a significant bump in hardware specs compared to the current solution, allowing us to run more builds simultaneously. Thanks to MacStadium for sponsoring this infrastructure upgrade!

For more details refer to https://blogs.gnome.org/sid/2025/04/27/macstadium-sponsors-gnome-macos-ci-infrastructure/.

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!

Deep Work reconciled me with personal growth books

I'm usually not a huge fan of personal growth books. As I pointed out in my Blinkist review, most books of this genre are 300 pages long when all the content would fit on 20. I read Deep Work by Cal Newport, with an open but skeptical mind.

A case for deep work

The book is split in two main sections. In the first section, the author makes a case for deep work. He argues that deep work is economically viable because it can help you learn new skills fast, a distinctive trait to successful people in tech, especially when competing with increasingly intelligent machines. This argument is surprisingly timely now, at the peak of the AI bubble.

He then explains that deep work is rare because in the absence of clear indicators of productivity, most people default to appearing very active shuffling things around. This argument clearly resonated with my experience for all my career.

Newport closes the first section by explaining why deep work is actually important for us humans because it limits our exposure to pettiness, makes us empirically happier than shallow work, and because it helps us find meaning to our work.

Rules for deep work

In the second section, the author lays out the four rules to enable deep work:

  1. Decide the length of your deep work sessions, establish a ritual for them, keep track of your consistency and hold yourself accountable to it, and refrain from overworking since it decreases your global productivity.
  2. Since the Internet can be very distracting, establish some time blocks with Internet and some without, and enforce the rule strictly even if it seems silly.
  3. Pick up the right tools for your job by assessing the positive but also the negative impact. Most of the time that means "get off social media." Also avoid fast-paced entertainment since it can undo all the day training and embrace boredom as a way to train your focus.
  4. Use every minute of your day intentionally by scheduling them, even if that means redoing your schedule several time as new priorities emerge. Quantify the depth of your work and ask your boss for a shallow work budget. Finish early so your day is tightly time boxed and shallow work becomes even more expensive (so easier to refuse). Become hard to reach so you don't spend your day in your inbox.

An insightful book

Like in all personal growth books, storytelling takes many pages in Deep Work, but here it supports nicely the argument of the author. The book was pleasant to read and helped me question my relationship to technology and work.

In the first section the author backs his claims about the importance of focus with evidences from academic studies. Of course since the second section is all about establishing new rules to allow deep work, it's not possible to have proofs that it works. With that said, I bought a late edition and would have liked an "augmented" conclusion with evidence from people who used the methodology successfully in the real world.

You can find my key takeaways from the book by having a look at my reading notes.

Richard Littauer

@rlittauer

Licensing a commit

I would like to have my blog indexed on GNOME Planet. GNOME Planet’s repo, however, doesn’t appear to be licensed – there’s no note about the license on https://gitlab.gnome.org/Infrastructure/planet-web, and no license file in the repo.

It would be difficult to add a license now, as there have been thousands of commits to the repo, with a lot of individual contributors. Relicensing might require contacting each one of these authors.

But I don’t like committing to repositories which are not licensed. I’m not even sure I can – do I maintain my copyright, or does the new owner? How would that fall out in court? In which jurisdiction is gnome-planet – the US?

So I asked ChatGPT (itself a pretty odd legal move) whether I could license a commit. Unsurprisingly, it says that no, you can’t, because a repository is a work in itself, and that license would take over. This is obviously garbage. When I asked it to clarify, it said that you might be able to, but it would “violate norms”. Sure, that seems accurate, but I am glad that ChatGPT is not my lawyer.

I figure, if my work is my work, there’s no reason I can’t license a change to a file. Whether not that license will be enforced is anyone’s guess, but legally, I should be responsible for my own lines of code. So, I opened this pull-request: https://gitlab.gnome.org/Infrastructure/planet-web/-/merge_requests/163. I noted in the commit that the license is an MIT license, and then I noted that in the PR comment field, too.

Technically, the MIT license demands that the license be shared with the commit. So I’ve just amended the commit to include the license, too, which satisfies my needs.

I don’t think that there will ever be a technical issue with licensing for this repo. And I don’t know if Felipe will merge my commit. But it is an interesting experiment.

➜ planet-web git:(feat/add-my-feed) git show HEAD
commit 3acaff792c635e9c277d892f37b45997b0b57d70 (HEAD -> feat/add-my-feed, richardlitt/feat/add-my-feed)
Author: Richard Littauer <richard+github@burntfen.com>
Date: Tue May 6 09:38:38 2025 +1200

Adding my ID

This commit is licensed under an MIT license.

MIT License Copyright (c) 2025 Richard Littauer

Permission is hereby granted,
free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use, copy, modify, merge,
publish, distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to the
following conditions:

The above copyright notice and this permission notice
(including the next paragraph) shall be included in all copies or substantial
portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

diff --git a/config/gnome/config.ini b/config/gnome/config.ini
index 9ea71857..4829be43 100644
--- a/config/gnome/config.ini
+++ b/config/gnome/config.ini
@@ -3513,3 +3513,7 @@ outreachy = 1
[https://conduct.gnome.org/feed/]
name = Code of Conduct Committee
#nick =
+
+[https://blogs.gnome.org/richardlitt/feed/]
+name = Richard Littauer's blog
+nick = richardlitt

Richard Hughes

@hughsie

Prem’Day 2025 – Firmware Update Management with LVFS & fwupd

A few weeks ago I was invited to talk about firmware updates for servers using fwupd/LVFS at Prem’Day 2025. I gave the hardware vendors a really hard time, and got lots of instant feedback from customers in the the audience from the “little green thumbs” that people could raise. The main takeaway from the Prem’Day community seemed to be that proprietary tooling adds complexity without value, and using open ecosystems enable users to better operate their infrastructure.

picture from the conference

Since getting back to the UK I’ve had some really interesting discussions with various companies; there might be some nice announcements soon.

Andy Holmes

@andyholmes

Opaque Governance

Recently, Tobias Bernard posted a retrospective of his (and our) experience engaging with the GNOME Foundation regarding the removal of Sonny Piers from our community, followed by a response from Allan Day. I know it's difficult and stressful to talk about; a lot of people just want it to go away. It took a long time to write this.

The details regarding the removal of Sonny Piers will never be publicized, but I respectfully disagree that all discussion of the community impact should happen internally. Regardless of the circumstances at the time, the GNOME Foundation made a decision to publicly remove Sonny Piers from the community and if we are asked to assume good faith, we should be able expect the same good faith when we criticize governance.

# Safety in the Community

The case of Sonny Piers includes GNOME Foundation membership, a seat on the board of directors and employment as a project coordinator. Circumstances these complex do not relate to the Code of Conduct Committee (CoCC) in its typical operation.

The Engagement Team also plays an active role in day-to-day moderation, as well as the community members from diverse backgrounds serving as moderators in the many project channels. Recently a member of the CoCC helped organize a communication channel and new guidelines for moderators, which has already improved coordination and response times across the various platforms.

The GNOME community is a safe place to engage in open source and the matters discussed here should not prevent you from reporting an incident or flagging content for moderation.

CoC Links

# Opaque Context

The following is a very incomplete timeline, providing some amount context for my personal perspective.

In July 2024, many of us in the community were shocked to hear that Sonny Piers had been removed as a GNOME Foundation director, stripped of his membership, had all accounts locked and a permanent ban put in place. More unsettling, he was named as the recipient of a Code of Conduct complaint, but obviously without any details regarding the incident.

With such limited information, for many there was little justification to protest the decision itself, except that the degree of disciplinary action implied behaviour extremely out of character for Sonny.

By October, three months had passed and lacking any meaningful resolution, enough concern had grown in parts of the community to have a conversation. It was decided to compose a letter directly to the Board and, after lengthy discussion of the content, those that agreed signed and it was received generally well by the Board.

The resulting meetings were draining for everyone involved, often with visible exertion of good faith from those present. The many constructive results include several amendments to CoCC procedures, more comprehensive and equitable agreements for contractors, and a fair amount of clarification regarding the constraints the Board was under at the time.

By December, I had withdrawn from most social spaces in the community. During the period of engagement with the Board, there were a conspicuous number of public references made to toxic influencers and after a very disappointing comment from a relevant party, I closed my Mastodon account. Aside from compounding the stress of the meetings, I considered I might be compelled to publicly defend Sonny and compromise our efforts with the Board.

In January, Tobias published Re-Decentralizing Development and seeing the reactions include sentiments like "Cult of Sonny" more or less vindicated my decision to withdraw from social spaces. Some clearly assumed there had been no effort to resolve the matter internally and the spectre of a toxic influencer meant attempts to engage publicly were unlikely to be taken in good faith.

# Good Faith

There are legitimate concerns about an effort to undermine the Code of Conduct (CoC), for the sake of meritocracy. In other words, there are those concerned about different rules being applied to those who contribute more substantially or have more social capital. This is not paranoia; it's the state of justice in many of our real-world societies.

The opposing concern is that the CoC has been used as a tool to defend the status quo or enforce minority opinion as policy. Or as Tobias puts it:

[...] we’re now in a situation where large parts of the community do not trust our CoC structure because they feel it can be weaponized as part of internal power struggles.

Code of Conduct reports must be confidential and the decisions of the committee must be unimpeachable; under no circumstance can they become a matter of public opinion.

Unsurprisingly, there are very few situations that justify revealing any participant of a Code of Conduct report. Doing so has resulted in reputational damage such that an uncensored Google search of the name "Sonny Piers" returns pages of tabloid smear and speculation of criminality. Yet in the many months since, there has been no indication that this served the interests of community safety.

Although I acknowledge the community ban has since been relaxed to one year, I would like if we could each appreciate that to be stripped of membership, barred from ever holding a position in the Foundation and permanently banned from all community spaces is to be told, "You are irredeemable". Again, in the time of Sonny's absence, there have been no signs that the safety of the community ever warranted a permanent ban.

The good faith assumption seems to be that these actions were taken to send a message: the Code of Conduct will be enforced, regardless of a person's stature in the community. Unfortunately, if that was the intention, a number in the community have already expressed confusion that this situation received treatment so different from their own.

# Trust and Accountability

I spent a fair amount of time recently deciding whether I would renew my Foundation membership or not. Those in the Foundation working to rectify the breakdown of communication and policy are the reason I decided to stay. However, there are also those in the Foundation who have made me feel an unwelcome bystander to the very public condemnation of a colleague, only be told not to cause a fuss.

I strongly believe the CoCC operated on an unfounded assumption of bad faith: that Sonny Piers is a toxic influence to be immediately and permanently removed from the community. Since July, none of the corroborating signs have surfaced; few have had more contact with Sonny than a short email response, there has been no public appeal to gather signatures, no coup d'état in the Foundation and, with two months left on the community ban, fears of him being exempt from the rules seem moot.

A number of the recent policy improvements were prompted by the findings of the external review commissioned by the Foundation, but I'd like to clarify this was an assessment of whether the Code of Conduct Committee acted within its scope and authority; not a judicial review. The severity of corrective action has not been justified, nor did any review findings or policy changes apply retroactively.

While the Foundation has and will continue to improve, it seems unlikely we will see accountability for the mishandling of a situation that has caused damage to an individual, to the community and trusting relationships. For trust to be restored, we must be assured that Code of Conduct Committee is free from conflicts of interest and is only applied in the interests of community safety.

# Final Thoughts

I don't know what to do about this. I know there are those in the Foundation working very hard to improve the situation and those on the Board aware that they can just ignore criticism until their seat is up for re-election.

The GNOME Foundation is becoming a more important part of the GNOME project every year, but it is still extremely opaque to most of us. If there is a way to educate oneself as a voter I do not know it, and we must accept that has become a serious problem.

We can not have confidence in leaders elected on vague familiarity and then expect accountability from elections separated by two years. And the GNOME Foundation can not build trust in governance by appealing to its own authority.

Dev Log April 2025

April was light.

exempi

Released Exempi 2.6.6 to fix security issues from upstream.

libopenraw

Some minor fixes in the thumbnail extraction, with JXL support and locate larger Panasonic previews. Extract the exposure bias for Fuijfilm files. Added the latest Canon cameras (still the support of CR3 is work in progress).

Released alpha.10 on May 1st.

Jussi Pakkanen

@jpakkane

Writing your own C++ standard library part 2

This blog post talked about the "self written C++ standard library" I wrote for the fun of it (code here).

The post got linked by Hackernews and Reddit. As is usual the majority of comments did not talk about the actual content but instead were focused on two tangential things. The first one being "this is not a full implementation of the C++ standard library as specified by the ISO standard, therefore the author is an idiot". I am, in actual fact, an idiot, but not due to project scope but because I assumed people on the Internet to have elementary reading comprehension skills. To make things clear: no, this is not an implementation of the ISO standard library. At no point was such a thing claimed. There is little point in writing one of those, there are several high quality implementations available. "Standard library" in this context means "a collection of low level functions and types that would be needed by most applications".

The second discussion was around the fact that calling the C++ standard library "STL" was both wrong and proof that the person saying that does not understand the C++ language. This was followed by several "I am a C++ standard library implementer and everyone I know calls it the STL". Things deteriorated from there.

The complexity question

Existing container implementations are complex by necessity. They need to handle things like types that can not be noexcept moved or copied. The amount of rollback code needed explodes very quickly and needs to be processed every time the header is included (because of templates). A reasonable point against writing your own containers is that eventually you need to support all the same complexity as existing ones because people will insert "bad" types into your container and complain when things fail. Thus you need to have all the same nasty, complex and brittle code as an STL implementation, only lacking decades of hardening to shake out all the bugs.

That is true, but the beauty of having zero existing users is that you can do something like this:

This is basically a concept that requires the type given to be noexcept-movable (and some other things that could arguably be removed). Now, instead of allowing any type under the sun, all containers require all types they get instantiated with to be WellBehaved. This means that the library does not have to care at all about types behaving badly because trying to use those results in a compiler error. A massive amount of complexity is thus eliminated in a single stroke.

There are of course cases when you need to deal with types that are not well behaved. If you can tolerate a memory allocation per object, the simple solution is to use unique_ptr. OTOH if you have types that can't be reliably moved and which are so performance critical that you can't afford memory allocations, then you are probably going to write your own container code anyway. If you are in the position that you have badly behaved types that you can't update, can't tolerate an allocation and can't write your own containers, then that is your problem.

Iterating things the native way

One of the most common things I do with strings in Python is to split them on whitespace. In Python this is simple as there is only one string type, but in native code things are more complicated. What should the return type of mystring.split() be?

  • vector<string>
  • vector<string_view>
  • A coroutine handle
  • The method should be a full template so you can customize it to output any custom string type (as every C++ code base has at least three of them)
  • Something ranges something something
There is probably not a single correct answer. All of the options have different tradeoffs. Thus I implemented this in two ways. The first returns a vector<string> as you would get in Python. The second one was a fully general, lazy and allocation-free method that uses the most unloved of language features: the void pointer.

So given that you have a callback function like this:

the split function becomes:

This is as fully general as you can get without needing to muck about with templates, coroutines or monads (I don't actually know what monads are, I'm just counting on the fact that mentioning them makes you look cool). The cost is that the end user needs to write a small adapter lambda to use it.

Iterating things the Python way

The Python iteration protocol is surprisingly simple. The object being iterated needs to provide a .next() method that either returns the next value or throws a StopIteration exception. Obviously exceptions can't be used in native code because they are too slow, but the same effect can be achieved by returning an optional<T> instead. Here's a unit test for an implementation of Python's range function.


Sadly there is not a simple way to integrate this to native loop constructs without macros and even then it is a bit ugly.

Current status

The repo has basic functionality for strings (regular and enforced UTF-8), regexes and basic containers.

Building the entire project has 8 individual compilation and linking steps and takes 0.8 seconds when using a single core on this laptop computer. Thus compiling a single source file with optimizations enabled takes ~ 0.1 seconds. Which is nice.

The only cheat is that pystd uses ctre for regexes and it is precompiled.

Richard Littauer

@rlittauer

So long, and thanks for all the fish

I knew this day would come at some point. It is time for me to say farewell to the GNOME Foundation in my capacity as the Interim Executive Director.

Last summer, Rob McQueen messaged me in mid-June asking if I could come on and help GNOME out as the Interim Executive Director. I had applied for the position the year before, and so he was familiar with my work. Some of the other board members knew me well, too – Karen Sandler and Michael Downey had both crossed my paths many times through SustainOSS. Rob wanted me to start as soon as possible, and to fill in as much as I could.

I told him, in no uncertain tones, that this was flat-out impossible.

First, I was one week away from moving to New Zealand from Vermont. The international move had been planned for a couple of years, and was right in the middle of happening. I had signed on to do a PhD at Te Herenga Waka Victoria University of Wellington. I already had a job as one of the co-organizers of CURIOSS and SustainOSS, where I also hosted a weekly podcast. And I had a job as a language consultant, making languages for novelists. I didn’t have a house lined up in Wellington. I would be arriving in winter.

Rob asked very nicely. Somehow, I said yes – on the condition that I would do it part-time, and that they would ramp up their efforts to find a permanent ED as soon as possible, and that under no account would that be me. I signed up for a two-month contract.

That was ten months ago. I went on to renew the contract for another month, and then another two. For the last five months, I have been working with very limited hours and helping where absolutely necessary.

Today, I am happy to say that I am rolling off, because a new Executive Director – a permanent one – has been hired. I am overjoyed. This is exactly what GNOME needs, and I think that he is the right person for the job.

My time has been exceedingly difficult. In the first couple of days on the job, I realized that I would be needed back at GUADEC in Denver, so I flew back from New Zealand for it. I met many on the staff and the board for the first time. For many reasons, that week was incredibly stressful. Slowly, slowly, things got better.

I feel that I have done very little; all of the gains happened with the help of others.

Because of Zana’s leadership and amazing institutional memory, and Michael Downey and Pablo Correa Gómez’s meticulous financial help, we were able to pass a balanced budget through the board, on time. Thank you.

Because of Rob’s long hours and all-encompassing understanding of GNOME, we were able to secure more funding from the Dalio Foundation to help move us forward. Thank you.

Because of Allan Day’s incredibly steady hand and ceaseless effort, we were able to navigate some incredibly difficult conversations that the board was having. Thank you.

Because of the staff – Kristi, Anisa, Zana, Melissa, and Caroline – we managed to host not just a fantastic GUADEC, but also other great events around the globe. Thank you.

Because he was open to be peer-pressured into taking it, Julian Sparber made amazing minutes from all of the meetings we attended. Thank you.

Because of Bart, everything kept running. I think this is what Bart does. Thanks Bart.

Because of Holly’s generosity, I was able to take over much more smoothly. Thank you for your time, Holly.

Because of Federico Mena Quintero and the Code of Conduct Committee, many issues were resolved with contributors, and I’m not talking only about elephants in rooms. I cannot overstate how hard this work is and how much of a struggle it is to do it well. I’m constantly grateful for them keeping spaces safe.

That also applies to other people in the community – thank you, Sri Ramkrishna, Deepesha Burse, Justin Wheeler. I’m missing people. I’m grateful anyway.

Because of Thibault Martin, I was able to figure out what was going on and how to ensure that everyone under STF contracts got paid. Thibault, I miss our almost daily meetings! Thank you.

Because of people in the wider community, I was able to get expert help for tough questions. Thank you to our lawyers, our accountants, and, of course, people like Deb Nicholson of PSF and Robin Riley of Matrix and Leah Silen of NumFOCUS and Gunner of Aspiration and Abby Cabunoc Mayes of SustainOSS and Duane O’Brien and so many, many others. There are many, many people in open source and in the computing space that rely on or support GNOME without ever being thanked, and in some cases without knowing it. Thanks to my partner, Julia – she woke up for those 2:00am board meetings, too (although she mostly fell back asleep). Thank you.

Cassidy Blaede and Philip Chimento stepped up to fill board seats, and because of them we have a stronger board. Karen Sandler, you’re my favorite person. Erik Albers, your calm presence kept all of us on track at the GUADEC board meetings. Thank you.

Because of our sponsors, and everyone on our advisory board, GNOME is able to continue doing what it does. Advisors, thanks for smiling and nodding as I said nothing at all over nachos in Denver. You’re doing the good work. Thank you.

And then, of course, there’s the rest. People like Sid T – I’ve rarely met someone as dedicated and perseverant as Sid. It’s because of him that MacStadium is now sponsoring us. Sid, thank you.

Adrian, thank you. Marie, thank you. Tobias, thank you. Alexandre, thank you.

I could, and should, go on. I know I’ve missed people. I’m not perfect. My time here wasn’t perfect. I’ve lost many, many hours of sleep, not only due to the 2:00am calls, but because some of the decisions I have had to deal with have stretched me, and made me so much more appreciative of the work of other executive directors I know who run similar foundations. (Karen and Michael, when do you sleep). I’ve made mistakes. They are my own, and I am sorry.

Since starting, I have had a single minded goal to make sure that GNOME survives until the next executive director and that I make their job easier. I hope I have succeeded in that goal. But, again, I didn’t accomplish that on my own. That’s not how an Interim Executive Director works. For the last few months, Allan, Rob, Julian, and Zana have been working overtime to allow me to focus on my own work. I am thankful for them, and I think you should be, too.

Steven will do a great job. I wish you the best time of it, Steven – you couldn’t ask for a better community to work with.

I am not, in fact, dying, although this does sound rather eulogaic. I’m just going to spend more time as a user now. I might even have time to post updates on this blog. I hope so.

Reach out whenever, anyone, everyone. I like connecting people. And I like doing what I can to help. You can find me on Mastodon, at my website, and at https://richard.social. Or at richard@gnome. I’ll keep checking it.

Until then,
Thanks.

P.S. It really is pronounced /gno:m/, it’s just so much more fun that way. And the foot logo should stay, alright, it’s a good logo.

 

Friday links 2 May 2025

Some links for technical articles on various topics I read.

The Defer Technical Specification: It Is Time - Explains the proposal for the next C language standard for defer.

A guide to implement ActivityPub in a static site (or any website) - A guide to implement ActivityPub in a static website.

20 years of git - An history of git and its early days.

Celebrating Git's 20th anniversary with creator Linus Torvalds - An interview with Linus Torvalds on the 20 years of git.

I use Zip Bombs to Protect my Server - A technique of serving compressed zeros that a lot of bots don't handle properly.

6 usability improvements in GCC 15 - New in a GCC 15 near you, better error messages.

Flathub Blog

@flathubblog

Vorarbeiter is here

We have replaced Buildbot with a custom service, and we hope you haven't noticed.

Vorarbeiter is a German word for "foreman" and a living proof of my school-related trauma. The new service is a middleman between GitHub and GitHub Actions. It has been happily humming since April 21st, and largely does what Buildbot did: builds apps, with a sprinkle of publishing logic.

While what happens under the hood is solid, there is no UI yet. Flathub bot will still inform developers about build status for their pull requests, but there is little visibility of what happens post-merge.

Additionally, Vorarbeiter no longer allows to manually publish, cancel or delete builds. The publishing happens every hour regardless of the age of the build. The previous 3-hour-long delay was too conservative, and barely anyone was giving a final test for a post-merge builds. Similarly, cancelling builds doesn't seem as necessary as before. GitHub Actions runners are ephemeral and new commits on the same branch or pull request will automatically cancel the previous in-progress build.

Last but not least, because of limitations of the free GitHub Actions runners, some apps are designated as large builds. Large builds take place on machines provisioned in AWS, boasting faster CPUs and larger disks to accommodate heavier requirements.

While large builds do not incur costs per se thanks to the generous AWS credits for open source projects program, we still want to be mindful of how much credits we are spending, which is why we don't run large runners all the time. This is possible thanks to RunsOn, which handles all the magic for us. It receives pipeline events from GitHub and provisions new machines automatically within seconds, and tears them down the moment the build is finished. This is completely invisible to developers, but is both faster and more cost-effective, even if we were to pay the bill ourselves.

There is still more work to be done. I want to improve observability of the new service to make sure we can have automatic alerts when we have an abnormal build error rate or unprocessed publishing queue. In fact, we already notify maintainers and Flathub admins when a build triggered on the master branch failed, but there is potential to be more proactive here.

The unsolved challenge so far is caching. Every new pipeline re-downloads Flatpak runtimes, SDKs, and source code needed to build the app. Ideally, we should cache at least the runtimes, but with runners being ephemeral, we should also attempt to implement a distributed solution for ccache to reduce build times.

Given the challenging circumstances, this is more than good enough, though! If you encounter any issues with the new workflow, don't hesitate to open an issue in the project's GitHub repository.

Michael Catanzaro

@mcatanzaro

WebKitGTK API Versions Demystified

WebKitGTK has a bunch of different confusing API versions. Here are the three API versions that are currently supported by upstream:

  • webkitgtk-6.0: This is WebKitGTK for GTK 4 (and libsoup 3), introduced in WebKitGTK 2.40. This is what’s built by default if you build WebKit with -DPORT=GTK.
  • webkit2gtk-4.1: This is WebKitGTK for GTK 3 and libsoup 3, introduced in WebKitGTK 2.32. Get this by building with -DPORT=GTK -DUSE_GTK3=ON.
  • webkit2gtk-4.0: This is WebKitGTK for GTK 3 and libsoup 2, introduced in WebKitGTK 2.6. Get this by building with -DPORT=GTK -DUSE_GTK3=ON -DUSE_SOUP2=ON.

webkitgtk-6.0 contains a bunch of API changes, and all deprecated APIs were removed. If you’re upgrading to webkitgtk-6.0, then you’re also upgrading your application from GTK 3 to GTK 4, and have to adapt to much bigger GTK API changes anyway, so this seemed like a good opportunity to break compatibility and fix old mistakes for the first time in a very long time.

webkit2gtk-4.1 is exactly the same as webkit2gtk-4.0, except for the libsoup API version that it links against.

webkit2gtk-4.0 is — remarkably — mostly API stable since it was released in September 2014. Some particular C APIs have been deprecated and don’t work properly anymore, but no stable C APIs have been removed during this time, and library ABI is maintained. (Caveat: WebKitGTK used to have unstable DOM APIs, some of which were removed before the DOM API was eventually stabilized. Nowadays, the DOM APIs are all stable but deprecated in webkit2gtk-4.1 and webkit2gtk-4.0, and removed in webkitgtk-6.0.)

If you are interested in history, here are the older API versions that do not matter anymore:

  • webkit2gtk-5.0: This was an unstable API version used during development of the GTK 4 API, intended for WebKit developers rather than application developers. It was obsoleted by webkitgtk-6.0.
  • webkit2gtk-3.0: original API version of WebKitGTK for GTK 3 and libsoup 2, obsoleted by webkit2gtk-4.0. This was the original “WebKit 2” API version, which was only used by a few applications before it was removed one decade ago (history).
  • webkitgtk-3.0: note the missing “2”, this is “WebKit 1” (predating the modern multiprocess architecture) for GTK 3. This API version was widely-used on Linux, and its removal one decade ago precipitated a security crisis which I called The Great API Break. (This crisis was worth it. Modern WebKit’s multiprocess architecture is far more secure than the old single-process architecture.)
  • webkitgtk-1.0: the original WebKitGTK API version, this is “WebKit 1” for GTK 2. This API version was also widely-used on Linux before it was removed in The Great API Break.

Fedora and RHEL users, are you confused by all the different confusing downstream package names? Here is your map:

  • webkitgtk6.0, webkit2gtk4.1, and webkit2gtk4.0: This is the current binary package naming in Fedora, corresponding precisely to the WebKitGTK API version to reduce confusion.
  • webkit2gtk3: old name for webkit2gtk4.0, still used in RHEL 9 and RHEL 8
  • webkitgtk4: even older name for webkit2gtk4.0, still used in RHEL 7
  • webkitgtk3: this is the webkitgtk-3.0 API version, still used in RHEL 7
  • webkitgtk: this is webkitgtk-1.0, used in RHEL 6

Notably, webkit2gtk4.0, webkit2gtk3, and webkitgtk4 are all the same thing.

Sid Tosh

@sid

MacStadium sponsors GNOME macOS CI infrastructure

Introduction:

GNOME GitLab now uses macOS runners from MacStadium for managing our macOS CI pipeline. This offers significant improvements in supporting the GNOME platform on macOS. In this blog, we’ll cover the event timeline of macOS CI in GNOME GitLab and the technical details of the new infrastructure setup from MacStadium.

Background:

Around mid 2023, the GNOME Infrastructure Team decided to retire the existing macOS CI runners for a handful of reasons as explained in this post by Emmanuele Bassi. They were x86_64 runners which were quite outdated technically, as they were replaced by better and faster Apple Silicon M series ARM SoCs (specifically Apple M1) from Nov 2020.

There was no macOS CI in GNOME GitLab since then. GNOME core projects like GTK, GLib and few apps still provided macOS support on a best effort basis: meaning development and testing would be done on user machines. Though this is far from perfect, this provided some basic macOS support for GNOME projects.

Infrastructure help from René:

René de Hesselle is a member of Inkscape’s Project Leadership Committee and an open source developer who specializes in building, packaging and porting applications to the macOS platform. Looking into the macOS CI issues GNOME projects were facing, René offered to help with the macOS effort in GNOME, which was greatly appreciated by GNOME developers.

René has been assisting core libraries like GLib, GTK and GNOME apps to build in macOS. To address the macOS CI limitation, René went a step further and provided a self hosted GitLab macOS CI runner. With assistance from the GNOME Infrastructure Team, the self hosted runner was made available to projects across GNOME. This proved to be really useful, as it increased the pace of development in macOS.

Scalability and Sustainability Issues:

Over time, as more projects switched to using the self hosted macOS CI runner, it was becoming evident that this solution would not be effective for the scale of GNOME and not sustainable in the long term. René opened this topic for discussion in this post.

It was quite evident that we needed an enterprise solution to offer scalable and sustainable macOS CI service. This is when MacStadium’s FOSS program was highlighted as a possible solution in GNOME Discourse.

MacStadium, FOSS and GNOME:

MacStadium is well known in the open source world for sponsoring developers of open source projects for the Apple platform, including macOS, iOS, tvOS, and watchOS.

The GNOME Team got in touch with MacStadium for sponsoring macOS CI runners under their FOSS program. Though the MacStadium FOSS program was not available as it was already at capacity, MacStadium was excited in partnering with GNOME. Special thanks to Lauren Cabana (Director, Marketing) from MacStadium for actively pursuing this effort and making this collaboration possible.

MacStadium Orka Cluster solution:

As part of this collaboration, MacStadium has offered the following infrastructure setup based on our requirements:

  • Orka (Orchestration with Kubernetes on Apple) Cluster.
  • Dedicated network with firewall and VPN.
  • 1 TB NAS storage.
  • 2 x Mac mini (M1, 8-core CPU, 10-core GPU, 16GB RAM, 1TB SSD).

This is a significant bump in hardware specs compared to the current solution, allowing us to run more builds simultaneously. But the biggest benefit is having access to a turnkey solution that provides ephemeral machines: build isolation is no longer a concern and restrictions on customizability can be lifted, making it possible to open macOS CI instance-wide on GNOME GitLab with minimal administrative oversight. This setup is located in MacStadium’s Dublin data center.

Thanks to MacStadium for sponsoring this infrastructure upgrade!

Thanks and Mentions:

  • Richard Littauer – for interfacing with MacStadium via calls / emails and active participation.
  • René de Hesselle – for actively taking part in all technical discussions.
  • Philip Withnall – for coordinating efforts within GNOME.
  • Bartłomiej Piotrowski – for setting up GNOME / MacStadium accounts.

Allan Day

@aday

On Elephants

This post is a response to what Tobias posted yesterday on his blog. I would really prefer not be writing it. There are many other things that I would prefer to be doing, and I do not enjoy engaging in public disagreements. I honestly find all of this very stressful and unpleasant, but here we are.

For context, I joined the board in July last year, having previously been on the board from 2015 to 2021. This means that I wasn’t on the board during some of the events and decisions described in Tobias’s post. I am assuming that I am not one of the unnamed individuals he is calling on to resign, though I would be significantly impacted if that were to happen.

The post here is a personal view, based on my close involvement with the issues described in Tobias’s post. As such, it is not an official board position, and other directors may disagree with me on some points. It’s possible that the board may produce its own official statement in the future, but boards are inherently slow-moving beasts, and I wanted to get something posted sooner rather than later.

I want to start by saying that it is difficult to respond to Tobias’s post. The Foundation has a policy that we don’t comment on specific code of conduct cases, in order to protect the privacy of those involved. And, when you get down to it, this is mostly about the particulars of one specific case. Without being able to discuss those particulars, it is hard to say very much at all. That, in my opinion, is the elephant in the room.

The other reason that it is difficult to respond is there are just so many broad brush accusations in the blog post. It presents power conflicts and financial mismanagement and reckless behaviour and so on and so forth. It’s impossible to address every point. Instead, what I will do is provide a fairly high-level view of each of the two main themes in the post, while calling out what I consider to be the main inaccuracies. The first of those themes is the code of conduct decision, and the second relates to the performance of the Foundation.

The big elephant

In the blog post, Tobias throws around a lot of accusations and suggestions about the code of conduct decision to suspend Sonny Piers from the GNOME project. His description of the chain of events is both misleading and a misrepresentation of what happened. Then there’s an accusation of recklessness, as well as an accusation that the code of conduct decision was somehow politically motivated. All of this is clearly intended to question and undermine the code of conduct decision, and to present a picture of mismanagement at the foundation.

My view is that, despite the various twists and turns involved in the decision making process for this case, and all the questions and complexities involved, it basically boils down to one simple question: was the decision to suspend Sonny the correct one? My view, as someone who has spent a significant amount of time looking at the evidence, talking to the people involved, and considering it from different perspectives, is that it was. And this is not just my personal view. The board has looked at this issue over and over, and we have had other parties come in to look at it, and we have always come to the conclusion that some kind of suspension was appropriate. Our code of conduct committee came to this conclusion. Multiple boards came to this conclusion. At least one third party who looked at the case came to this conclusion.

I understand why people have concerns and questions about the decision. I’m sympathetic to the experiences of those individuals, and I understand why they have doubts. I understand that some of them have been badly affected. However, ultimately, the board needs to stand up for the code of conduct. The code of conduct is what provides safety for our community. We do not get to set it aside when it becomes inconvenient.

The argument that the code of conduct decision was somehow politically motivated is false. We even had an external reviewer come in and look at the case, who confirmed this. Their report was provided to Tobias already. He continues to make this accusation despite it standing in opposition to the information that we have provided him with.

Tobias seems to think that Sonny’s importance to the GNOME project should have been taken into account in our decision for the code of conduct case. To me, this would imply that project leaders would operate according to a different, less stringent, set of conduct rules from other contributors. I believe that this would be wrong. The code of conduct has to apply to everyone equally. We need to protect our community from leaders just as much as we need to protect them from anyone else.

No one is suggesting that the management of the code of conduct decision was good. Communication and management should have been better. Community members were significantly impacted. We have sincerely apologised to those involved, and are more than willing to admit our failings. We’ve also been working to ensure that these problems don’t happen again, and that’s something that I personally continue to spend time and energy on.

However, to understand those failings, you also have to look back at the situation we faced last year: we had just lost an ED, board members were burned out, and our processes were being tested in a way that they never had been before. We still had all the usual board and foundation work that needed taking care of. In the middle of it all, elections happened and the board membership changed. It was a complex, shifting, and demanding situation, which looks rather different in retrospect to how it was experienced at the time. We learned a lot of lessons, that’s for sure.

The other elephant

The other part of Tobias’s post addresses the performance of the Foundation.

He points out various problems and challenges, some of which are real. Unfortunately, while being convenient, the theory that all of these challenges are the result of the incompetence of a few individuals is, like most convenient answers, incorrect. The reality is more complex.

One of the major factors for the Foundation’s current situation is our recent history with Executive Directors. Neil left as ED in November 2022. It took us about a year to hire Holly, who was ED for seven months, during which time she had to take a non-trivial amount of time off [1]. And the Foundation is a small organisation – there aren’t lots of people around to pick up the slack when someone leaves. Given these circumstances, it’s unsurprising that the Foundation’s plans have changed, or that they didn’t happen in the way we’d hoped.

This is why the current board has been focusing on and expending considerable effort in recruiting a new executive director, who will be joining us very soon. Hurrah!

Tobias’s proposition that anyone who tries to change the Foundation gets burned out or banned is not true. I am living proof of this. I have changed the Foundation in the past, and continue to change it as part of my role as director. The Foundation today is radically different from the one I first joined in 2015, and continues to evolve and change. A lot of this is due to the interventions of previous and current directors over time.

Amid all this, it’s also important not to forget all the things that the Foundation has been successfully doing in recent years! I went into some of this in my recent blog post, which provides more details than I can here. It is worth stressing that the ongoing successes of the Foundation are mostly thanks to the dedication of its staff. We’ve run successful conferences. We’ve supported Flathub during which time it has experienced extraordinary growth. We’ve supported development programs. And the organisation has kept running, sailing through our taxes and registrations and all those other bureaucratic requirements.

On resignations

From the outside the GNOME Foundation can seem a little opaque. Part of the reason for that is that, as a board, we have to deal with sensitive and confidential matters, so much of the work we do happens behind closed doors. However, when you are on the board you quickly learn that it is really much like any other community-based open source team: there’s usually more work to do than we have capacity for, and the majority of the work gets done by a small minority of contributors.

Speaking as part of that minority, I don’t think that it would be beneficial for members of the board to resign. It would just mean fewer people being available to do the work, and we are already stretched for resources. I’m also of the view that no one should be asked to resign in response to upholding the code of conduct. Conduct work is difficult and important. It requires tough decisions. As a community we need to support the people doing it.

And if people think we should have different directors, well, that’s what the elections are for.

Closing

Readers might wonder why the Foundation has not spoken publicly about this topic (reminder: I’m not speaking on behalf of the Foundation here). The main reasons are confidentiality and legal concerns. We also tried very hard to respect the wishes of those who have been involved and affected. Now with Tobias’s post it is harder to avoid saying things in public. I’m personally skeptical of how useful this is: with opaque and complex issues like these, public discussions tend to generate more questions than they do answers. Contributor relationships are unfortunately likely going to get damaged. But again, here we are.

It should be said that while the foundation hasn’t spoken publicly about these issues, we have expended significant effort engaging with community members behind the scenes. We’ve had meetings where we’ve explained as much of what has happened as we can. We even went so far as to commission an external report which we made available to those individuals. We continue to work on improving our processes in response to the, ahem, feedback we’ve received. I personally remain committed to this. I know that progress in some areas has been slow, but the work continues and is meaningful.

Finally: I am sure that there are contributors who will disagree with what I’ve written here. If you are one of those people, I’m sorry that you feel that way. I still appreciate you, and I understand how difficult it is. It is difficult for all of us.

[1] Edit: we were extremely lucky to have Richard Littauer as interim ED for the second half of 2024, and he did a huge amount. However, Richard was only working for us part-time, so was unable to deliver on strategic initiatives.

Jiri Eischmann

@jeischma

Hiring for Flatpak Automation

The desktop team in Red Hat has another open position. We’re looking for someone to work on Flatpak automation, for someone who enjoys working on infrastructure. Although the job description states 2+ years of experience, it’s suitable for juniors. Formal experience can be replaced by relevant open source contributions. Being onsite in Brno, Czech Republic is preferred, but not required. We’re open to hiring good candidates elsewhere, too.

If you’d like to know more about the job before formally applying, don’t hesitate to contact me on Mastodon, Signal, Matrix (@eischmann at fedora.im), or email.

Boatswain 5.0

After more than an year after, Boatswain 5.0 is finally out. It took me a long time to push it to the finish line, but I’m relatively happy with how it turned out, and it brings some nice features.

Let’s take a quick look at what’s new in this release!

New Devices

Stream Deck Plus (black)
Stream Deck Neo (white)

Boatswain 5.0 comes with support for 2 new device models from Elgato: Stream Deck Plus, and Stream Deck Neo.

Support for Elgato Stream Deck Plus came after the massively successful fundraising campaign from last year. A huge thanks to everyone that contributed to it!

As for Elgato Stream Deck Neo, I tentatively introduced support for it without actually having a device to test, so if there’s anyone out there that can test it, that’d be absolutely appreciated.

Support for Stream Deck Plus was probably the main reason it took so long to release Boatswain 5.0. The entirety of the app was originally written under the assumption that all devices were simply a grid of buttons. Introducing a touchscreen, and dials that act as buttons, required basically rewriting most of the app.

I used this opportunity to make Boatswain able to handle any kind of device, with any kind of layout. Everything is represented as regions in a grid layout. Simple Stream Deck devices just contain a button grid; Stream Deck Plus contains a button grid, a touchscreen, and a dial grid.

Keyboard Shortcuts

The new Keyboard Shortcut action allows executing any keyboard shortcut – or any keyboard event in general – on the desktop. This seems to work better than I could have anticipated!

Under the hood, this action uses the Remote Desktop portal be able to inject input on the desktop. Locally controlling the desktop was probably not on the original goals of the portal, but alas, it fit the use case perfectly!

Paired with folders, Keyboard Shortcuts are very powerful, especially for large and complex software with a large number of shortcuts.

Next Steps

This release might be a little disappointing as it took so long, and yet didn’t come as packed with new features. And yet, this was the largest release of Boatswain, perhaps larger than the initial release even.

I’ve reached a point where I’m mostly satisfied with how the internals work now. So much so that, right after the Boatswain 5.0 release, I was able to split the core logic of the app into an internal library, and hide device-specific details from the rest of the app. This paved the way for adding a testing framework using umockdev, and also will allow adding support for devices from other brands such as Loupedeck. If you have any Stream Deck-like device and wish to see it supported in Boatswain, now’s your chance!

For Boatswain 6, I personally want to focus on 2 major features:

  1. Make Boatswain use the new USB portal. One of my goals with Boatswain is to make it a reference app, using the most modern platform features available – and adding missing features if necessary. The USB portal is an obvious choice!
  2. Remove X11 support. This might come as a controversial decision, but I don’t personally use X11 anymore, do not support it, and will not work on fixing bugs that only exist there. As such, I think it’s fair to just remove X11 support from the apps that I maintain. Practically speaking, this just means removing --socket=fallback-x11, and users can add back this permission using Flatseal; but please do not expect any kind of support anymore.

Some features that would be lovely to have, but we currently don’t have either because we lack platform support (i.e. portals), or simply because nobody sat down and wrote it:

  1. Tracking the current desktop state, such as the focused app, the session idle state, etc. This will be useful for contextual actions.
  2. Clipboard integration. In theory people can simulate this using the Keyboard Shortcuts action, but proper clipboard integration will work better and in more cases.
  3. Picking and launching apps from the host system. This needs to happen through portals which currently don’t exist.
  4. A fancy visual icon editor so that people can create their pretty icons in the app! If any UI designer is reading, please consider yourself assigned to this little project.
  5. Support for custom backgrounds in the touchscreen. I did not have time to finish it before the 5.0 release, but it shouldn’t be too hard to add it.
  6. A proper testing framework!

Finally, I’d like to thank my Ko-Fi and YouTube supporters for all the patience and for enabling me to do this work. The fundraiser campaign last year was a massive success, and I’m happy to see the all this progress! You all are awesome and I truly appreciate the support.

Keep an eye on this space as there may be more good news in the near future!

Andre Klapper

@andre

GIMP user documentation

Over the last two years I’ve worked a bit in my spare time on the user documentation of GIMP, a Free & Open Source Image Editor.
While I personally still consider it pretty bad user documentation regarding style inconsistency, duplication of topics, “organic growth”, and lack of task orientation, I managed to put some lipstick on that pig across nearly 900 commits.
I was sometimes rather ruthless pushing my changes (plus I am only a simple contributor and not a GIMP developer) so I’d like to thank Jacob Boerema for their patience and lenience.

In particular that led to

  • pretty consistent and up-to-date user interface dialog screenshots using the default theme (a fun game in a repository with about 2000 images and no filename scheme whatsoever),
  • less trivial screenshots; people know how menus look like and all their entries are covered by accompanying text anyway (which created more work for translators),
  • all application icons updated to the default monochrome theme, in SVG format, located in one single directory within the docs repository, using the same filenames as in the GIMP code repository (so there’s theoretically a chance of maintenance),
    Before and After comparisons
  • adding some icons to text because “click the fifth icon” isn’t particularly user-friendly (especially for RTL folks),
  • slightly less quadruplication of string variants expressing the same meaning (which created more work for translators).

An interesting remaining issue is whether to remove outdated ancient localized screenshots and where to draw the line. Does having localized strings in the screenshot (not everybody prefers English) outweigh an outdated user interface in the screenshot (wrong numbers of buttons, or dropdowns instead of radio buttons)? Your mileage may vary.

Obviously there is much more to do, for example maybe rewriting everything from scratch or splitting screenshot files of translatable UI dialogs and non-translatable example images mashed into one single image file into two separate files because, again, translators and lower maintenance costs.

If you enjoy dealing with Docbook and all its quirks, see the open GIMP help issues or even write merge requests.

TIL that I can ask my smartphone to respect my attention

If my phone is making me miserable my constantly nagging me for attention, surely the solution must be to ditch it and take a dumb phone that can only place calls and send texts?

Except calls are particularly intrusive interruptions, and the only texts I receive are from couriers. My family and friends use iMessage or Signal. And what about the pictures I can snap in a few seconds by pulling my phone from my pocket? What about GPS navigation? What about those parking lots where you can only pay with an app? What if I need to order a cab in a country I don't speak the language of? What about using my phone app as a 2FA from the bank as the PSD2 practically requires?

I thought about using a dumb down smartphone like the Lite Phone III or any of the other dumbed-down Android phones. In practice it doesn't work for me, because most of them either don't let me use the apps I need or let me break out of the dumb mode to use the app. At this point, why using a dumbed down smartphone at all?

I don't need a dumb(ed down smart)phone. I need the convenience of my smartphone, but I need to use intentionally instead of being dragged to it. My phone was already in silent mode all the time because I can't stand being interrupted loudly by it unless it's an actual emergency. But whenever a notification pops on the screen it brightens up, drags my attention to it, and even if I don't want to interact with it it stays in the back of my head until I finally unlock the phone and have a look at what it's all about.

What I was missing was a sense of priority for notifications. To stay focused on what I cared about, I needed my phone to hold back the unimportant notifications and tell me when something important happened. I could already deny some app the authorization to display notifications, but that's a double edged sword. If I do so with messaging apps I end up compulsively checking them to see if I missed anything important.

What solved it for me was the Focus feature of the iPhone. Instead of using the Do Not Disturb mode, I've configured the Personal Focus profile. I configured it so

  • No notifications at all appear on my screen.
  • If my favorite contacts call me I will be notified.
  • If someone calls me twice within three minutes it will bypass the protection.
  • If an app has a Time Sensitive notification to send me, it will bypass the protection.

All the rest is filtered out. As a result I have a phone that doesn't actively nag me for attention. Because it notifies me when something truly important happens, I don't have to check it regularly out of Fear Of Missing Out. This tweak is part of a broader effort to reclaim my attention capacity.

Tobias Bernard

@tbernard

The Elephant in the Room

In a few weeks it’ll be one year since a board member of the GNOME Foundation was removed from the project entirely (including Gitlab, Matrix, Discourse, etc.) under very suspicious circumstances. Very little has been said or done about this in public since then. The intentions behind keeping everything internal were good — the hope was to get to a resolution without unnecessary conflict. However, because there’s no non-public way to have discussions across the entire community, and with this dragging on longer and longer, what I’ve seen is partial facts and misunderstandings spreading across different sub-groups, making it harder to talk to each other. I’m now convinced it’s better to break the silence and start having this conversations across the entire project, rather than letting the conflict continue to fester in the background.

That’s not to say nothing has been happening. Over the past year, a number of people from the community (including myself), and some members of the board have tried to resolve this behind the scenes. On a personal level, I’d like to thank all the board members involved for their efforts, even if we didn’t always see eye to eye. Medium-term I’m hopeful that some positive policy changes can be made as a result of this process.

One important thing to note is that nobody involved is against Codes of Conduct. The problem here is the Foundation’s structural dysfunction, bad leadership, and the way the CoC was used in this case as a result. I’m aware of the charged nature of the subject, and the potential for feeding right wing narratives, but I think it’s also important to not let that deter us from discussing these very real issues. But just to be extra clear: Fuck Nazis, GNOME is Antifa.

Sonny has been out since last summer, and as far as I know he’s currently not interested in investing more energy into this. That’s understandable given how he’s been treated, but the rest of us are still here, and we still need to work together. For that we need, if not justice, at least closure, and a way forward.

In this case someone was disappeared entirely from the community with no recourse, no attempts to de-escalate, no process for re-integration, and no communication to the rest of the project (not until months later anyway). Having talked to members of other projects’ CoC structures this is highly unusual, especially completely out of the blue against a well-integrated member of the project.

While the details of this case are unknown to most of the community due to the (understandable) need to keep CoC reports confidential, what is known (semi-) publicly paints a pretty damning picture all by itself:

  • A first-time CoC complaint was met with an immediate ban
  • A week later the ban was suspended, and a mediation promised
  • The 2024 board elections were held a few weeks later without informing the electorate about the ban
  • 2 months later the ban was re-instated unilaterally, against the wishes of the new board
  • There was an (unsuccessful) vote to remove the chairman of the CoC committee from the board and CoC committee

Given the above, I think it’s fair to say that the people who were on the board and CoC committee when the ban happened, have, at the very least, acted with incredible recklessness. The haphazard and intransparent way in which they handled this case, the incoherence of their subsequent actions, and the lack of communication have have caused great damage to the project. Among other things, in Sonny Piers they have cost us one of our most prolific developers and organizers, and in the STF development team our most successful program in recent history.

What perhaps not everyone’s aware of is that we were working on making this team permanent and tried to apply for followup funding from different sources. None of this materialized due to the ban and the events surrounding it, and the team has since been disbanded. In an alternate world where this had not happened we could be looking at a very different Foundation today, with an arm that strategically funds ongoing development and can employ community members.

More importantly however, we’re now in a situation where large parts of the community do not trust our CoC structure because they feel it can be weaponized as part of internal power struggles.

This ban was only the latest in a long series of failures, missteps, and broken promises by the Foundation. In addition to the recent financial problems and operational failures (e.g. not handling internships, repeatedly messing up invoicing, not responding to time-sensitive communication), all strategic initiatives over the past 5+ years have either stalled or just never happened (e.g. Flathub payments (2019), local-first (2021), development initiative (2024)).

I think there are structural reasons at the root of many of these issues, but it’s also true that much of the Foundation leadership and staff has not changed throughout this period, and that new people joining the board and trying to improve things tend to get frustrated and give up quickly (or in Sonny’s case, get banned). This is a problem we need to confront.

To those on the board and CoC committee who were involved in Sonny’s ban: I’m asking you to step down from your positions, and take some time off from Foundation politics. I know you know you fucked up, and I know you care about this project, like we all do. Whatever your reasons at the time, consider what’s best for the project now. Nobody can undo what happened, but in the medium-term I’m actually hopeful that reconciliation is possible and that both the Foundation and community can come out of this stronger than before. I don’t think that can happen under the current leadership though.

To everyone else: My hope in talking openly about this is that we can get closer to a common understanding of the situation. It seems unlikely that we can resolve this quickly, but I’d at least like to make a start. Eventually I hope we can have some mediated sessions for people from across the community to process the many feelings about this, and see how we can heal these wounds. Perhaps we could organize something at GUADEC this summer — if anyone would be interested in that, let me know.

Michael Catanzaro

@mcatanzaro

Safety on Matrix

Hello Matrix users, please review the following:

Be cautious with unexpected private message invites. Do not accept private message invites from users you do not recognize. If you want to talk to somebody who has rejected your invite, contact them in a public room first.

Fractal users: Fractal 11.rc will block media preview by default in public rooms, and can be configured to additionally block media preview in private rooms if desired.

Matrix server administrators: please review the Matrix.org Foundation announcement Introducing Policy Servers.