This feed does not validate.
line 2, column 3001: (50 occurrences) [help]
... nts</description><author>Matthew Garrett</author><dc:creator>Matthew Gar ...
^
In addition, interoperability with the widest range of feed readers could be improved by implementing the following recommendations.
line 2, column 3010: (50 occurrences) [help]
... ription><author>Matthew Garrett</author><dc:creator>Matthew Garrett</dc: ...
^
line 1392, column 0: (10 occurrences) [help]
<figure class="wp-block-image size-full is-resized has-custom-border is-s ...
... /05/05/licensing-a-commit/</guid></item></channel></rss>
^
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Planet GNOME</title><link>https://planet.gnome.org/</link><description>Planet GNOME - https://planet.gnome.org/</description><language>en</language><generator>rfeed v1.1.1</generator><docs>https://github.com/svpino/rfeed/blob/master/README.md</docs><item><title>Matthew Garrett: How Twitter could (somewhat) fix their encrypted DMs</title><link>https://mjg59.dreamwidth.org/71933.html</link><description>As I wrote in my <a href="https://mjg59.dreamwidth.org/71646.html">last post</a>, Twitter's new encrypted DM infrastructure is pretty awful. But the amount of work required to make it somewhat better isn't large.<br /><br />When Juicebox is used with HSMs, it supports encrypting the communication between the client and the backend. This is handled by generating a unique keypair for each HSM. The public key is provided to the client, while the private key remains within the HSM. Even if you can see the traffic sent to the HSM, it's encrypted using the <a href="https://en.wikipedia.org/wiki/Noise_Protocol_Framework">Noise protocol</a> and so the user's encrypted secret data can't be retrieved.<br /><br />But this is only useful if you know that the public key corresponds to a private key in the HSM! Right now there's no way to know this, but there's worse - the client doesn't have the public key built into it, it's supplied as a response to an API request made to Twitter's servers. Even if the current keys <em>are</em> associated with the HSMs, Twitter could swap them out with ones that aren't, terminate the encrypted connection at their endpoint, and then fake your query to the HSM and get the encrypted data that way. Worse, this could be done for specific targeted users, without any indication to the user that this has happened, making it almost impossible to detect in general.<br /><br />This is at least partially fixable. Twitter could prove to a third party that their Juicebox keys were generated in an HSM, and the key material could be moved into clients. This makes attacking individual users more difficult (the backdoor code would need to be shipped in the public client), but can't easily help with the website version[1] even if a framework exists to analyse the clients and verify that the correct public keys are in use.<br /><br />It's still worse than Signal. Use Signal.<br /><br />[1] Since they could still just serve backdoored Javascript to specific users. This is, unfortunately, kind of an inherent problem when it comes to web-based clients - we don't have good frameworks to detect whether the site itself is malicious.<br /><br /><img alt="comment count unavailable" height="12" src="https://www.dreamwidth.org/tools/commentcount?user=mjg59&amp;ditemid=71933" style="vertical-align: middle;" width="30" /> comments</description><author>Matthew Garrett</author><dc:creator>Matthew Garrett</dc:creator><pubDate>Thu, 05 Jun 2025 13:18:48 GMT</pubDate><guid isPermaLink="true">https://mjg59.dreamwidth.org/71933.html</guid></item><item><title>Matthew Garrett: Twitter's new encrypted DMs aren't better than the old ones</title><link>https://mjg59.dreamwidth.org/71646.html</link><description>(Edit: Twitter could improve this significantly with very few changes - I wrote about that <a href="https://mjg59.dreamwidth.org/71933.html">here</a>. It's unclear why they'd launch without doing that, since it entirely defeats the point of using HSMs)<br /><br />When Twitter[1] launched encrypted DMs a couple <br />of years ago, it was the worst kind of end-to-end <br />encrypted - <em>technically</em> e2ee, but in a way that made it relatively easy for Twitter to inject new encryption keys and get everyone's messages anyway. It was also lacking a whole bunch of features such as "sending pictures", so the entire thing was largely a waste of time. But a couple of days ago, Elon <a href="https://x.com/elonmusk/status/1929238157872312773">announced</a> the arrival of "XChat", a new encrypted message platform <q>built on Rust with (Bitcoin style) encryption, whole new architecture</q>. Maybe this time they've got it right?<br /><br />tl;dr - no. Use Signal. Twitter can probably obtain your private keys, and admit that they can MITM you and have full access to your metadata.<br /><br />The new approach is pretty similar to the old one in that it's based on pretty straightforward and well tested cryptographic primitives, but merely using good cryptography doesn't mean you end up with a good solution. This time they've pivoted away from using the underlying cryptographic primitives directly and into higher level abstractions, which is probably a good thing. They're using <a href="https://libsodium.gitbook.io/doc/public-key_cryptography/sealed_boxes">Libsodium's boxes</a> for message encryption, which is, well, fine? It doesn't offer <a href="https://en.wikipedia.org/wiki/Forward_secrecy">forward secrecy</a> (if someone's private key is leaked then all existing messages can be decrypted) so it's a long way from the state of the art for a messaging client (Signal's had forward secrecy for over a decade!), but it's not inherently broken or anything. It is, however, written in C, not Rust[2].<br /><br />That's about the extent of the good news. Twitter's old implementation involved clients generating keypairs and pushing the public key to Twitter. Each client (a physical device or a browser instance) had its own private key, and messages were simply encrypted to every public key associated with an account. This meant that new devices couldn't decrypt old messages, and also meant there was a maximum number of supported devices and terrible scaling issues and it was pretty bad. The new approach generates a keypair and then stores the private key using the <a href="https://juicebox.xyz/assets/whitepapers/juiceboxprotocol_revision7_20230807.pdf">Juicebox</a> protocol. Other devices can then retrieve the private key. <br /><br />Doesn't this mean Twitter has the private key? Well, no. There's a PIN involved, and the PIN is used to generate an encryption key. The stored copy of the private key is encrypted with that key, so if you don't know the PIN you can't decrypt the key. So we brute force the PIN, right? Juicebox actually protects against that - before the backend will hand over the encrypted key, you have to prove knowledge of the PIN to it (this is done in a clever way that doesn't directly reveal the PIN to the backend). If you ask for the key too many times while providing the wrong PIN, access is locked down.<br /><br />But this is true only if the Juicebox backend is trustworthy. If the backend is controlled by someone untrustworthy[3] then they're going to be able to obtain the encrypted key material (even if it's in an HSM, they can simply watch what comes out of the HSM when the user authenticates if there's no validation of the HSM's keys). And now all they need is the PIN. Turning the PIN into an encryption key is done using the <a href="https://en.wikipedia.org/wiki/Argon2">Argon2id</a> key derivation function, using 32 iterations and a memory cost of 16MB (the Juicebox white paper says 16KB, but (a) that's laughably small and (b) the <a href="https://github.com/juicebox-systems/juicebox-sdk/blob/main/rust/sdk/src/pin.rs#L54">code</a> says 16 * 1024 in an argument that takes kilobytes), which makes it computationally and moderately memory expensive to generate the encryption key used to decrypt the private key. How expensive? Well, on my (not very fast) laptop, that takes less than 0.2 seconds. How many attempts to I need to crack the PIN? Twitter's chosen to fix that to 4 digits, so a maximum of 10,000. You aren't going to need many machines running in parallel to bring this down to a very small amount of time, at which point private keys can, to a first approximation, be extracted at will.<br /><br />Juicebox attempts to defend against this by supporting sharding your key over multiple backends, and only requiring a subset of those to recover the original. <s>I can't find any evidence that Twitter's does seem to be making use of this,</s>Twitter uses three backends and requires data from at least two, but all the backends used are under x.com so are presumably under Twitter's direct control. Trusting the keystore without needing to trust whoever's hosting it requires a trustworthy communications mechanism between the client and the keystore. If the device you're talking to can prove that it's an HSM that implements the attempt limiting protocol and has no other mechanism to export the data, this can be made to work. Signal makes use of something along these lines using <a href="https://en.wikipedia.org/wiki/Software_Guard_Extensions">Intel SGX</a> for contact list and settings storage and recovery, and <a href="https://security.googleblog.com/2022/10/SecurityofPasskeysintheGooglePasswordManager.html">Google</a> and <a href="https://support.apple.com/en-gb/102651">Apple</a> also have documentation about how they handle this in ways that make it difficult for them to obtain backed up key material. Twitter has no documentation of this, and as far as I can tell does nothing to prove that the backend is in any way trustworthy. (Edit to add: The Juicebox API does support authenticated communication between the client and the HSM, but that relies on you having some way to prove that the public key you're presented with corresponds to a private key that only exists in the HSM. Twitter gives you the public key whenever you communicate with them, so even if they've implemented this properly you can't prove they haven't made up a new key and MITMed you the next time you retrieve your key)<br /><br />On the plus side, Juicebox <em>is</em> written in Rust, so Elon's not 100% wrong. Just mostly wrong.<br /><br />But ok, at least you've got viable end-to-end encryption even if someone can put in some (not all that much, really) effort to obtain your private key and render it all pointless? Actually no, since you're still relying on the Twitter server to give you the public key of the other party and there's no out of band mechanism to do that or verify the authenticity of that public key at present. Twitter can simply give you a public key where they control the private key, decrypt the message, and then reencrypt it with the intended recipient's key and pass it on. The <a href="https://help.x.com/en/using-x/encrypted-direct-messages">support page</a> makes it clear that this is a known shortcoming and that it'll be fixed at some point, but they said that about the original encrypted DM support and it never was, so that's probably dependent on whether Elon gets distracted by something else again. And the server knows who and when you're messaging even if they haven't bothered to break your private key, so there's a lot of metadata leakage.<br /><br />Signal doesn't have these shortcomings. Use Signal.<br /><br />[1] I'll respect their name change once Elon respects his daughter<br /><br />[2] There are implementations written in Rust, but Twitter's using the C one with <a href="https://github.com/ionspin/kotlin-multiplatform-libsodium">these</a> JNI bindings <br /><br />[3] Or someone nominally trustworthy but who's been compelled to act against your interests - even if Elon were absolutely committed to protecting all his users, his overarching goals for Twitter require him to have legal presence in multiple jurisdictions that are not necessarily above placing employees in physical danger if there's a perception that they could obtain someone's encryption keys<br /><br /><img alt="comment count unavailable" height="12" src="https://www.dreamwidth.org/tools/commentcount?user=mjg59&amp;ditemid=71646" style="vertical-align: middle;" width="30" /> comments</description><author>Matthew Garrett</author><dc:creator>Matthew Garrett</dc:creator><pubDate>Thu, 05 Jun 2025 11:02:47 GMT</pubDate><guid isPermaLink="true">https://mjg59.dreamwidth.org/71646.html</guid></item><item><title>Code of Conduct Committee: Transparency report for May 2025</title><link>https://conduct.gnome.org/2025/06/04/transparency-report-for-may-2025/</link><description><h1 id="transparency-report-for-july-2024-to-may-2025---gnome-code-of-conduct-committee">Transparency report for July 2024 to May 2025 &#8211; GNOME Code of Conduct Committee</h1>
<p>GNOME’s Code of Conduct is our community’s shared standard of behavior for participants in GNOME. This is the Code of Conduct Committee’s periodic summary report of its activities from July 2024 to May 2025.</p>
<p>The current members of the CoC Committee are:</p>
<ul>
<li>Anisa Kuci</li>
<li>Carlos Garnacho</li>
<li>Christopher Davis</li>
<li>Federico Mena Quintero</li>
<li>Michael Downey</li>
<li>Rosanna Yuen</li>
</ul>
<p>All the members of the CoC Committee have completed Code of Conduct Incident Response training provided by Otter Tech, and are professionally trained to handle incident reports in GNOME community events.</p>
<p>The committee has an email address that can be used to send reports: <a href="mailto:conduct@gnome.org">conduct@gnome.org</a> as well as a website for report submission: <a href="https://conduct.gnome.org/">https://conduct.gnome.org/</a></p>
<h2 id="reports">Reports</h2>
<p>Since July 2024, the committee has received reports on a total of 19 possible incidents. Of these, 9 incidents were determined to be actionable by the committee, and were further resolved during the reporting period.</p>
<ul>
<li>Report about an individual in a GNOME Matrix room acting rudely toward others. A Committee representative discussed the issue with the reported individual and adjusted room permissions.</li>
<li>Report about an individual acting in a hostile manner toward a new GNOME contributor in a community channel. A Committee representative contacted the reported person to provide a warning and to suggest methods of friendlier engagement.</li>
<li>Report about a discussion on a community channel that had turned heated. After going through the referenced conversation, the Committee noted that all participants were using non-friendly language and that the turning point in the conversation was a disagreement over a moderator’s action. The committee contacted the moderator and reminded them to use kinder words in the future.</li>
<li>Report related to technical topics out of the scope of the CoC committee. The issue was forwarded to the Board of Directors.</li>
<li>Report about members’ replies in community channels; after reviewing the conversation the CoC committee decided that it was not actionable. The conversation did not violate the Code of Conduct.</li>
<li>Report about inappropriate and insulting comments made by a member in social moments during an offline event. The CoC Committee sent a warning to the reported person.</li>
<li>Report against two members making comments the reporter considered disrespectful in a community channel. After reading through the conversation, the Committee did not see any violations to the CoC. No actions were taken.</li>
<li>Report on someone using abrasive and aggressive language in a community channel. After reading the conversation, the Committee agrees with this assessment. As this person had previously been found to have violated the CoC, the Committee has banned the person from the channel for one month.</li>
<li>Report about ableist language in a GitLab merge request. The reported person was given warning not to use such language.</li>
<li>Report against GNOME in general without any specifics. A request for more information was sent, and after no reply after a number of months, the issue has been closed with no action.</li>
<li>Report against the moderating team’s efforts to keep discussions within the Code of Conduct. No action was taken.</li>
<li>Report about a contributor being aggressive to the reporter who is working with them, on multiple occasions. The CoC committee talked both to the reporter and the reported person, and also to other people working with them in order to solve the disagreements. The result was that the reporter had some patterns on their behavior that made it difficult to collaborate with them too. The conclusion was that all parties acknowledged their wrong behaviors and will work on improving that and be more collaborative.</li>
<li>Report about a disagreement with a maintainer’s decision. The report was non-actionable.</li>
<li>Report about a contributor who set up harassment campaigns against Foundation and non-Foundation members. This person has been suspended indefinitely from participation in GNOME.</li>
<li>Report about a moderator being hostile in community channels; this was not the first report we received about this member so they got banned from the channel.</li>
<li>Report about a blog syndicated in <a class="external" href="http://planet.gnome.org">planet.gnome.org</a>. The committee evaluated the blog in question and found it not to contravene the CoC, so it took no action afterwards.</li>
<li>Five reports, unrelated to each other, with technical support requests. These were marked as not actionable.</li>
<li>Report with a general comment about GNOME, marked as not actionable.</li>
<li>A question about where to report security issues; informed the reporter about security@gnome.org.</li>
</ul>
<h2 id="changes-to-the-coc-committee-procedures">Changes to the CoC Committee procedures</h2>
<p>The Foundation’s Executive Director commissioned an external review of the CoC Committee’s procedures in October of 2024. After discussion with the Foundation Board of Directors, we have made the following changes to the <a href="https://conduct.gnome.org/committee-procedures/">committee procedures</a>:</p>
<ul>
<li>Establish a “chain of command” for requesting tasks to be performed by sysadmins after an incident report.</li>
<li>Clarify the procedures for notifying affected people and teams or committees after a report.</li>
<li>Clarify the way notifications are made about a report’s consequences, and update the Committee’s communications infrastructure in general.</li>
<li>Specify how to handle reports related to Foundation staff or contractors.</li>
</ul>
<p>The history of changes can be seen in <a class="external" href="https://gitlab.gnome.org/Teams/Conduct/gnome-code-of-conduct/-/merge_requests/4">this merge request</a> to the repository for the Code of Conduct.</p>
<h2 id="coc-committee-blog">CoC Committee blog</h2>
<p>We have a new blog at <a href="https://conduct.gnome.org/blog/">https://conduct.gnome.org/blog/</a>, where you can read this transparency report. In the future, we hope to post materials about dealing with interpersonal conflict, non-violent communication, and other ideas to help the GNOME community.</p>
<h2 id="meetings-of-the-coc-committee">Meetings of the CoC committee</h2>
<p>The CoC committee has two meetings each month for general updates, and weekly ad-hoc meetings when they receive reports. There are also in-person meetings during GNOME events.</p>
<h2 id="ways-to-contact-the-coc-committee">Ways to contact the CoC committee</h2>
<ul>
<li>https://conduct.gnome.org &#8211; contains the GNOME Code of Conduct and a reporting form.</li>
<li>conduct@gnome.org &#8211; incident reports, questions, etc.</li>
</ul></description><author>Code of Conduct Committee</author><dc:creator>Code of Conduct Committee</dc:creator><pubDate>Wed, 04 Jun 2025 19:55:25 GMT</pubDate><guid isPermaLink="true">https://conduct.gnome.org/2025/06/04/transparency-report-for-may-2025/</guid></item><item><title>Alley Chaggar: Compiler Knowledge</title><link>https://alleych.github.io/gnome/compiler-knowledge/</link><description><h1 id="intro">Intro</h1>
<p>I apologize that I’m a little late updating my blog, but over the past two weeks, I’ve been diving into Vala’s compiler and exploring how JSON (de)serialization could be integrated. My mentor, Lorenz, and I agreed that focusing on JSON is a good beginning.</p>
<h1 id="understanding-the-vala-compiler">Understanding the Vala Compiler</h1>
<p>Learning the steps it takes to go from Vala code to C code is absolutely fascinating.</p>
<p>Vala’s Compiler 101</p>
<ul>
<li>
<p>The first step in the compiler is the lexical analysis. This is handled by <a href="https://gitlab.gnome.org/GNOME/vala/-/blob/main/vala/valascanner.vala?ref_type=heads">valascanner.vala</a>, where your Vala code gets tokenized, which breaks up your code into chunks called tokens that are easier for the compiler to understand.</p>
<pre><code> switch (begin[0]) {
case 'f':
if (matches (begin, "for")) return TokenType.FOR;
break;
case 'g':
if (matches (begin, "get")) return TokenType.GET;
break;
&lt;/pre&gt;</code>
The code above is a snippet of Vala's scanner, it's responsible for recognizing specific keywords like 'for' and 'get' and returning the appropriate token type.
</pre>
</li>
<li>
<p>Next is syntax analysis and the creation of the abstract syntax tree (AST). In Vala, it’s managed by <a href="https://gitlab.gnome.org/GNOME/vala/-/blob/main/vala/valaparser.vala?ref_type=heads">valaparser.vala</a>, which checks if your code structure is correct, for example, if that pesky ‘}’ is missing.</p>
<pre><code> inline bool expect (TokenType type) throws ParseError {
if (accept (type)) {
return true;
}
switch (type) {
case TokenType.CLOSE_BRACE:
safe_prev ();
report_parse_error (new ParseError.SYNTAX ("following block delimiter %s missing", type.to_string ()));
return true;
case TokenType.CLOSE_BRACKET:
case TokenType.CLOSE_PARENS:
case TokenType.SEMICOLON:
safe_prev ();
report_parse_error (new ParseError.SYNTAX ("following expression/statement delimiter %s missing", type.to_string ()));
return true;
default:
throw new ParseError.SYNTAX ("expected %s", type.to_string ());
}
}
&lt;/pre&gt;</code>
This is a snippet of Vala's parser, it tries to accept a specific token type, like again that '}'. If '}' is there, it continues parsing. Else if not, it throws a syntax error.
</pre>
</li>
<li>
<p>Then comes semantic analysis, the “meat and logic,” as I like to call it. This happens in <a href="https://gitlab.gnome.org/GNOME/vala/-/blob/main/vala/valasemanticanalyzer.vala?ref_type=heads">valasemanticanalyzer.vala</a>, where the compiler checks if things make sense. Do the types match? Are you using the correct number of parameters?</p>
<pre><code> public bool is_in_constructor () {
unowned Symbol? sym = current_symbol;
while (sym != null) {
if (sym is Constructor) {
return true;
}
sym = sym.parent_symbol;
}
return false;
}
&lt;/pre&gt;</code>
This code is a snippet of Vala's semantic analyzer, which helps the compiler understand if the current code is a constructor. Starting from the current symbol, which represents where the compiler is in the code, it then moves through its parent symbols. If it finds a parent symbol that is a constructor, it returns true. Else if the parent symbol is null, it returns false.
</pre>
</li>
<li>
<p>After that, the flow analysis phase, located in <a href="https://gitlab.gnome.org/GNOME/vala/-/blob/main/vala/valaflowanalyzer.vala?ref_type=heads">valaflowanalyzer.vala</a>, analyzes the execution order of the code. It figures out how control flows through the program, which is useful for things like variable initialization and unreachable code.</p>
<pre><code> public override void visit_lambda_expression (LambdaExpression le) {
var old_current_block = current_block;
var old_unreachable_reported = unreachable_reported;
var old_jump_stack = jump_stack;
mark_unreachable ();
jump_stack = new ArrayList ();
le.accept_children (this);
current_block = old_current_block;
unreachable_reported = old_unreachable_reported;
jump_stack = old_jump_stack;
}
&lt;/pre&gt;&lt;/code&gt;
The snippet of Vala's flow analyzer ensures that control flow, like unreachable code or jump statements, is properly analyzed within the lambda expression.
</code></pre>
</li>
<li>
<p>After all that, we now want to convert the Vala code into C code using a variety of Vala files in the directories <a href="https://gitlab.gnome.org/GNOME/vala/-/tree/main/ccode?ref_type=heads">ccode</a> and <a href="https://gitlab.gnome.org/GNOME/vala/-/tree/main/codegen?ref_type=heads">codegen</a>.</p>
</li>
</ul>
<p>All of these classes inherit from <a href="https://gitlab.gnome.org/GNOME/vala/-/blob/main/vala/valacodevisitor.vala?ref_type=heads">valacodevisitor.vala</a>, which is basically the mother of classes that provides the <code class="language-plaintext highlighter-rouge">visit_*</code> methods that allow each phase in the compiler to walk the source code tree.</p>
<p>I know this brief isn’t all of what there is to understand about the compiler, but it’s a start. Also, let’s take a moment to appreciate everyone who has contributed to Vala’s compiler design, it’s truly an art 🎨</p>
<h1 id="the-coding-period-begins">The Coding Period Begins!!!</h1>
<p>Now that GSoC’s official coding period is here, I’m continuing my research on how to implement JSON support.</p>
<p>Right now, I’m still learning the codegen phase AKA the phase of converting vala into C, I’m exploring <a href="https://gitlab.gnome.org/GNOME/json-glib">json glib</a> and starting to work on a valajsonmodule.vala in the code gen.</p>
<p>Another thing I want to work on is the Vala docs. The docs aren’t bad, but I’ve realized the information is pretty limited the deeper you get into the compiler.</p>
<p>I’m excited that this is starting to slowly make sense, little by little.</p></description><author>Alley Chaggar</author><dc:creator>Alley Chaggar</dc:creator><pubDate>Wed, 04 Jun 2025 14:25:00 GMT</pubDate><guid isPermaLink="true">https://alleych.github.io/gnome/compiler-knowledge/</guid></item><item><title>Ignacy Kuchciński: Using Portals with unsandboxed apps</title><link>https://ignapk.blogspot.com/2025/06/using-portals-with-unsandboxed-apps.html</link><description>Nowadays <a href="https://flatpak.github.io/xdg-desktop-portal/" target="_blank">XDG Desktop Portal</a>&nbsp;plays an important part in interaction between apps and the system, providing much needed security and unifying the experience, regardless of the desktop environment or toolkit you're using. While one could say it was created for sandboxed Flatpak apps, portals could bring major advantages to unsandboxed, host apps as well:<br /><br />- Writing universal code: you don't need to care about writing desktop-specific code, as different desktops and toolkits will provide their own implementations <br /><br />- Respecting the privacy of the user: portals use a permission system, which can be granted, revoked and controlled by the user. While host apps could bypass them, user can still be presented with dialogs, which will ask for permission to perform certain actions or obtain information.<br /><h4 style="text-align: left;">Okay, so they seem like a good idea after all. Now, how do we use them?</h4>More often than not, you don't actually have to manually call the <a href="https://flatpak.github.io/xdg-desktop-portal/docs/api-reference.html" target="_blank">D-Bus API</a>&nbsp;- for many of the portals, toolkits and desktop will interact with them on your behalf, exposing easy to use high-level APIs. For example, if you're developing an app using GTK4 on GNOME and want to inhibit suspend or logout, you would call <a href="https://docs.gtk.org/gtk4/method.Application.inhibit.html" target="_blank">gtk_application_inhibit</a>&nbsp; which will actually prefer using the Inhibit portal over directly talking to gnome-session-manager. There are also <a href="https://flatpak.github.io/xdg-desktop-portal/docs/convenience-libraries.html" target="_blank">convenience libraries</a> to help you, available for different programming languages.<br /><h4 style="text-align: left;">That sounds easy, is that all? Unfortunately, there are some caveats.</h4>The fact that we can safely say that flatpaks are first-class citizen when interacting with portals, compared to host apps, is a good thing - they offer many benefits, and we should embrace them. However, in the real world there are many instances of apps installed without sandbox, and the transition will take time, so in the meantime we need to make sure they play correctly with portals as well.<br /><br />One such instance is the getting the information about the app - in flatpak land, it's obtained from a special .flatpak-info file located in the sandbox. In the host apps though, xdg-desktop-portal tries to parse the app id from the systemd unit name, only accepting "app-" prefixed format, specified in the <a href="https://systemd.io/DESKTOP_ENVIRONMENTS/" target="_blank">XDG standardization for applications</a>. This works for some applications, but unfortunately not all, at least at this time. One such example is D-Bus activated apps, which are started with "dbus-" prefixed systemd unit name, or the ones started from the terminal with even different prefixes. In all those cases, the app id exposed to the portal is empty.<br /><br />One major problem, when xdg-desktop-portal doesn't have access to the app-id, is undoubtedly failure of inhibiting logout/suspend when using the Inhibit portal. Applications on GNOME using GTK4 will call <i>gtk_application_inhibit</i>, which in turn calls xdg-desktop-portal-gtk inhibit portal implementation, which finally talks to the gnome-session-manager D-Bus API. However, it requires app-id to function correctly, and will not inhibit the session without it. The situation should get better in the next release of <a href="https://gitlab.gnome.org/GNOME/gnome-session/-/commit/b6a62d0ce86cdb2229c2da3cbd3ce63a58fd9948" target="_blank">gnome-session</a> but it could still cause problems for the user, not knowing the name of the application that is preventing logout/suspend.<br /><br />Moreover, while not as critical, other portals also rely on that information in some way. Account portal used for obtaining the information about the user will mention the app display name when asking for confirmation, otherwise will call it the "requesting app", which the user may not recognize, and is more likely to cancel. Location portal will do the same, and Background portal won't allow autostart if it's requested.<br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgvq5DapY3BA_7heesTZxu7YBwEAIUcWg0cdAil07rjt2C4OeOHdjAnH7zgd-HB--pu4nlgvkDiW4cMKj7a8XeUho3FMoGg85NFSERfBo9SK2zHPPf1AhVp66tCX4Ae_-vg9vEFR7MWFGEIs1h4Lk-zYKnriNUEVmdfswVOYdOqPE2fP5d9G5JszwhWKns" style="margin-left: auto; margin-right: auto;"><img alt="" height="231" src="https://blogger.googleusercontent.com/img/a/AVvXsEgvq5DapY3BA_7heesTZxu7YBwEAIUcWg0cdAil07rjt2C4OeOHdjAnH7zgd-HB--pu4nlgvkDiW4cMKj7a8XeUho3FMoGg85NFSERfBo9SK2zHPPf1AhVp66tCX4Ae_-vg9vEFR7MWFGEIs1h4Lk-zYKnriNUEVmdfswVOYdOqPE2fP5d9G5JszwhWKns" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">GNOME Shell logout dialog when Nautilus is copying files, inhibiting indirectly via portal&nbsp;</td></tr></tbody></table><br /><br /><h4 style="text-align: left;">How can we make sure our host apps play well with portals?</h4>Fortunately, there are many ways to make sure your host app interacts correctly with portals. First and foremost, you should always try to follow the <a href="https://systemd.io/DESKTOP_ENVIRONMENTS/#xdg-standardization-for-applications" target="_blank">XDG cgroup pathname standardization for applications</a>. Most desktop environments already follow the standard, and if they don't, you should definitely report it as a bug. There are some exceptions, however - D-Bus activated apps are started by the D-Bus message bus implementations on behalf of desktops, and currently they don't put the app in the correct systemd unit. There is an effort to fix that on the <a href="https://github.com/bus1/dbus-broker/issues/302" target="_blank">dbus-broker side</a>, but these things take time, and there is also the case of apps started from the terminal, which have different unit names altogether.<br /><br />When for some reason your app was launched in a way that doesn't follow the standard, you can use the special interface for registering with XDG Desktop Portal, the <a href="https://flatpak.github.io/xdg-desktop-portal/docs/doc-org.freedesktop.host.portal.Registry.html" target="_blank">host app Registry</a>, which overwrites the automatic detection. It should be considered a temporary solution, as it is expected to be eventually deprecated (with the details of the replacement specified in the documentation), nevertheless it lets us fix the problem at present. Some toolkits, like GTK, will register the application for you, during the GtkApplication startup call.<br /><br />There is one caveat, though - it needs to be the first call to the portal, otherwise it will not overwrite the automatic detection. This means that when relying on GTK to handle the registration, you need to make sure you don't interact with the portal before the GtkApplication startup chain-up call. So no more <i>gtk_init</i> in <i>main.c,</i> which on Wayland uses Settings portal to open display, all such code needs to be moved just after the application startup chain-up. If for some reason you really cannot do that, you'll have to call the D-Bus method yourself, before any portal interaction is made.<br /><h4 style="text-align: left;">The end is never the end...</h4>If you made it this far, congratulations and thanks for taking this rabbit hole with me. If it's still not enough, you can check out the <a href="https://gitlab.gnome.org/GNOME/nautilus/-/issues/3874" target="_blank">ticket</a> I reported and worked on in nautilus, giving even more context to how we ended up here. Hope you learned something that will make your app better :)</description><author>Ignacy Kuchciński</author><dc:creator>Ignacy Kuchciński</dc:creator><pubDate>Wed, 04 Jun 2025 02:15:00 GMT</pubDate><guid isPermaLink="true">https://ignapk.blogspot.com/2025/06/using-portals-with-unsandboxed-apps.html</guid></item><item><title>Victor Ma: Coding begins!</title><link>https://victorma.ca/posts/coding-begins/</link><description><p>Today marks the end of the community bonding period, and the start of the coding period, of GSoC.</p>
<p>In the last two weeks, I&rsquo;ve been looking into other crossword editors that are on the market, in order to see what features they have that we should implement. I compiled everything I saw into a <a href="https://pad.gnome.org/s/aGYPwTen5">findings document</a>.</p>
<p>Once that was done, I went through the document and distilled it down into a final list. I also added other feature ideas that I already had in mind.</p>
<p>Eventually, through a discussion with my mentor, we decided that I should start by tackling a <a href="https://gitlab.gnome.org/jrb/crosswords/-/issues/269">bug that I found</a>. This will help me get more familiar with the fill algorithm code, and it will inform my decisions going forward, in terms of what features I should work on.</p></description><author>Victor Ma</author><dc:creator>Victor Ma</dc:creator><pubDate>Mon, 02 Jun 2025 00:00:00 GMT</pubDate><guid isPermaLink="true">https://victorma.ca/posts/coding-begins/</guid></item><item><title>Tobias Bernard: Summer of GNOME OS</title><link>https://blogs.gnome.org/tbernard/2025/06/01/summer-of-gnome-os/</link><description><p>So far, <a class="external" href="https://os.gnome.org">GNOME OS</a> has mostly been used for testing in virtual machines, but what if you could just use it as your primary OS on real hardware?</p>
<p>Turns out you can!</p>
<p>While it&#8217;s still early days and it&#8217;s not recommended for non-technical audiences, GNOME OS is now ready for developers and early adopters who know how to deal with occasional bugs (and importantly, file those bugs when they occur).</p>
<h3>The Challenge</h3>
<p>To get GNOME OS to the next stage we need a lot more hardware testing. This is why this summer (June, July, and August) we&#8217;re launching a GNOME OS daily-driving challenge. This is how it works:</p>
<ul>
<li>10 points for daily driving GNOME OS on your primary computer for at least 4 weeks</li>
<li>1 point for every (valid, non-duplicate) <a class="external" href="https://gitlab.gnome.org/GNOME/gnome-build-meta/-/issues">issue</a> created</li>
<li>3 points for every (merged) <a class="external" href="https://gitlab.gnome.org/GNOME/gnome-build-meta/-/merge_requests">merge request</a></li>
<li>5 points for fixing an open issue</li>
</ul>
<p>You can sign up for the challenge and claim points by adding yourself to the <a class="external" href="https://pad.gnome.org/summer-of-gnomeos#Particiants">list of participants on the Hedgedoc</a>. As the challenge progresses, add any issues and MRs you opened to the list.</p>
<p>The person with the most points on September 1 will receive a OnePlus 6 (running postmarketOS, unless someone gets GNOME OS to work on it by then). The three people with the most points on September 1 (noon UTC) will receive a limited-edition shirt (stay tuned for designs!).</p>
<p id="install">Important links:</p>
<ul>
<li>Sign up for the challenge by adding yourself to the <a class="external" href="https://pad.gnome.org/summer-of-gnomeos?both#Participants">list of participants</a>.</li>
<li>To install GNOME OS on real hardware <a class="external" href="https://os.gnome.org/install">follow the installation instructions</a>.</li>
<li>For questions and problems, use the <a class="external" href="https://matrix.to/#/#gnome-os:gnome.org">GNOME OS Matrix channel</a>.</li>
<li>File any GNOME OS issues you encounter <a class="external" href="https://gitlab.gnome.org/GNOME/gnome-build-meta/-/issues?label_name%5B%5D=GNOME%20OS">here</a>.</li>
</ul>
<h3 id="faq">FAQ</h3>
<h4 id="why-gnome-os">Why GNOME OS?</h4>
<p>Using GNOME OS Nightly means you&#8217;re running the latest latest <code>main</code> for all of our projects. This means you get all the dope new features as they land, months before they hit Fedora Rawhide et al.</p>
<p>For GNOME contributors that&#8217;s especially valuable because it allows for easy testing of things that are annoying/impossible to try in a VM or nested session (e.g. notifications or touch input). For feature branches there&#8217;s also the possibility to install a sysext of a development branch for system components, making it easy to try things out before they&#8217;ve even landed.</p>
<p>More people daily driving Nightly has huge benefits for the ecosystem, because it allows for catching issues early in the cycle, while they&#8217;re still easy to fix.</p>
<h4 id="is-my-device-supported">Is my device supported?</h4>
<p>Most laptops from the past 5 years are probably fine, especially Thinkpads. The most important specs you need are UEFI and if you want to test the TPM security features you need a semi-recent TPM (any Windows 11 laptop should have that). If you&#8217;re not sure, ask in the <a class="external" href="https://matrix.to/#/#gnome-os:gnome.org">GNOME OS channel</a>.</p>
<h4 id="does-app-work-on-gnome-os">Does $APP work on GNOME OS?</h4>
<p>Anything available as a Flatpak works fine. For other things, you&#8217;ll have to build a sysext.</p>
<p>Generally we&#8217;re interested in collecting use cases that Flatpak doesn&#8217;t cover currently. One of the goals for this initiative is finding both short-term workarounds and long-term solutions for those cases.</p>
<p>Please add such use cases to the <a class="external" href="https://pad.gnome.org/summer-of-gnomeos#Use-cases-that-aren%E2%80%99t-covered-by-Flatpak">relevant section in the Hedgedoc</a>.</p>
<h4>Any other known limitations?</h4>
<p>GNOME OS uses systemd-sysupdate for updating the system, which doesn&#8217;t yet support delta updates. This means you have to download a new 2GB image from scratch for every update, which might be an issue if you don&#8217;t have regular access to a fast internet connection.</p>
<p>The current installer is temporary, so it&#8217;s missing many features we&#8217;ll have in the real installer, and the UI isn&#8217;t very polished.</p>
<h4 id="anything-i-should-know-before-trying-to-install-gnome-os">Anything else I should know before trying to install GNOME OS?</h4>
<p>Update the device&#8217;s firmware, including the TPM&#8217;s firmware, before nuking the Windows install the computer came with (I&#8217;m speaking from experience)!</p>
<h4 id="i-tried-it-but-im-having-problems">I tried it, but I&#8217;m having problems :(</h4>
<p>Ask in the <a class="external" href="https://matrix.to/#/#gnome-os:gnome.org">GNOME OS Matrix channel</a>!</p></description><author>Tobias Bernard</author><dc:creator>Tobias Bernard</dc:creator><pubDate>Sun, 01 Jun 2025 17:00:48 GMT</pubDate><guid isPermaLink="true">https://blogs.gnome.org/tbernard/2025/06/01/summer-of-gnome-os/</guid></item><item><title>Michael Hill: Publishing a book from the GNOME desktop</title><link>https://blogs.gnome.org/mdhill/2025/06/01/publishing-a-book-from-the-gnome-desktop/</link><description><p><a href="https://blogs.gnome.org/mdhill/files/2025/06/ChapterOne.png"><img alt="" class="alignnone size-large wp-image-5415" height="305" src="https://blogs.gnome.org/mdhill/files/2025/06/ChapterOne-1024x499.png" width="625" /></a></p>
<p>My first two books were written online using Pressbooks in a browser. A change in the company&#8217;s pricing model prompted me to migrate another edition of the second book to LaTeX. Many enjoyable hours were spent searching online for how to implement everything from the basics to special effects. After a year and a half a nearly finished book suddenly congealed.</p>
<p>Here&#8217;s what I&#8217;m using: Fedora&#8217;s TeX Live stack, Emacs (with AUCTeX and the memoir class), Evince, and the Citations flatpak, all on a GNOME desktop. The cover of the first book was done professionally by a friend. For the second book (first and second editions) I&#8217;ve used the GNU Image Manipulation Program.</p>
<p>For print on demand, Lulu.com. The company was founded by Bob Young, who (among other achievements) rejuvenated a local football team, coincidentally my dad&#8217;s (for nearly 80 years and counting). Lulu was one of the options recommended by Adam Hyde at the end of the Mallard book sprint hosted by Google. Our book didn&#8217;t get printed in time to take home, so I uploaded it to Lulu and ordered a few copies with great results. My second book is also on Amazon&#8217;s KDP under another ISBN; I&#8217;m debating whether to do that again.</p>
<p>Does this all need to be done from GNOME? For me, yes. The short answer came from Richard Schwarting on the occasion of our Boston Summit road trip: &#8220;GNOME makes me happy.&#8221;</p>
<p>The long answer&#8230;<br />
In my career working as a CAD designer in engineering, I&#8217;ve used various products by Autodesk (among others). I lived through the AutoCAD-MicroStation war of the 1990s on the side of MicroStation (using AutoCAD when necessary). MicroStation brought elegance to the battle, basing their PC and UNIX ports on their revolutionary new Mac interface. They produced a student version for Linux. After Windows 95 the war was over and mediocrity won.</p>
<p>Our first home computer was an SGI Indy, purchased right in the middle of that CAD war. Having experienced MicroStation on IRIX I can say it&#8217;s like running GNOME on a PC: elegant if not exquisite compared to the alternative.</p>
<p>For ten years I was the IT guy at a small engineering company. While carrying out my insidious plan of installing Linux servers and routers, I was able to indulge certain pastimes, building and testing XEmacs (formerly Lucid Emacs) and fledgling GNOME on Debian unstable/experimental. Through the SGI Linux effort I got to meet online acquaintances from Sweden, Mexico, and Germany in person at Ottawa Linux Symposium and Debconf .</p>
<p>At the peak of my IT endeavours, I was reading email in Evolution from OpenXchange Server on SuSE Enterprise Server while serving a Windows workstation network with Samba. When we were acquired by a much larger company, my Linux servers met with expedient demise as we were absorbed into their global Windows Server network. The IT department was regionalized and I was promoted back into the engineering side of things. It was after that I encountered the docs team.</p>
<p>These days I&#8217;m compelled to keep Windows in a Box on my GNOME desktop in order to run Autodesk software. It&#8217;s not unusual for me to grind my teeth while I&#8217;m working. A month ago a surprise hiatus in my day job was announced, giving me time to enjoy GNOME, finish the book, and write a blog post.</p>
<p>So yes, it has to be GNOME.</p>
<p><span style="font-size: small;">In 2004 I used LaTeX in XEmacs to write a magazine article that was ultimately published in the UK. This week, for old times&#8217; sake, I installed XEmacs (no longer packaged for Fedora) on my desktop. This requires an EPEL 8 package on CentOS 9 in Boxes. It can be seen in the screenshot. The syntax highlighting is real but LaTeX-mode isn&#8217;t quite operational yet.</span></p></description><author>Michael Hill</author><dc:creator>Michael Hill</dc:creator><pubDate>Sun, 01 Jun 2025 12:42:01 GMT</pubDate><guid isPermaLink="true">https://blogs.gnome.org/mdhill/2025/06/01/publishing-a-book-from-the-gnome-desktop/</guid></item><item><title>Steven Deobald: Pride At GNOME</title><link>https://blogs.gnome.org/steven/2025/06/01/pride-at-gnome/</link><description><p>After some discussion about where to announce our Pride Month celebrations, I&#8217;ve decided it might be easiest to do it on my own blog. It&#8217;s a little more personal that way. And if I say something silly or out of turn, it&#8217;s on me.</p>
<p>Let me begin by trying to explain why Pride feels particularly important in the world of Free Software.</p>
<p>&nbsp;</p>
<h2 id="free-software-is-inclusive">Free Software Is Inclusive</h2>
<p>GNOME is a weird project. It&#8217;s not a household name, like Linux. Nor is it a shrinkwrapped brand, like Red Hat, SUSE, or Ubuntu. But it is a massive, collective software project that includes many different components under its umbrella.</p>
<p>What binds all these interconnected projects together if not a brand and not a singular BDFL technical vision? It is the founding principle and vision for the project: everyone should be allowed in. To use GNOME, to modify GNOME, and to collaborate on GNOME.</p>
<p>GNOME has more active threads of contribution than any one person could possibly follow and more active users than we could possibly count. So this simple mission of making a desktop that includes <em>everyone</em> is actually a lot harder than it seems. Will it run on a 14-year-old Chromebook? Perhaps that&#8217;s the only computer someone has access to. Is it translated into Farsi? Perhaps that&#8217;s the only language the user reads. &#8220;Everyone&#8221; is a lot of people — and the world is a big place.</p>
<p>&nbsp;</p>
<h2 id="pride-is-inclusive">Pride Is Inclusive</h2>
<p>Far be it from me to equate the mission of an open source project with that of a worldwide civil rights movement. But Pride carries a very similar message: everyone is allowed in. Everyone should be allowed into a country or city or business. Everyone is allowed to be themselves.</p>
<p>I&#8217;m very fortunate. I live in Halifax. It is, as far as I can tell, the Gayest City in Canada. Year-round, the Pride flag hangs from our bridges, is painted on crosswalks, and fills storefront windows. The rainbow adorns backpacks, laptops, skateboards, cars, and checkout counters. On an individual level, the Pride flag is a symbol of safety: &#8220;I promise you&#8217;re safe with me.&#8221; On a societal level, it&#8217;s an invitation: &#8220;You are welcome here.&#8221;</p>
<p>I know that not everyone is this lucky.</p>
<p>&nbsp;</p>
<h2 id="pride-is-not-the-same-everywhere">Pride Is Not The Same Everywhere</h2>
<p>Pride is a celebration of how far the community has come. The 1970s and 1980s feel far away and the decades-long fight for liberation (in countries where liberation has begun) provides us with the history and war stories we all benefit from today.</p>
<p>But GNOME is global. And for many in the global 2SLGBTQIA+ (queer) community, the war is ongoing. Or it&#8217;s barely even begun. In some countries, members of the community are shunned, silenced, ostracized, harmed, or killed. Most of us know someone who didn&#8217;t survive.</p>
<p>We also need to demonstrate support for everyone because no one is safe simply because they live in a city filled with rainbow flags. Many of us still struggle with our identity and our place in society, no matter where we live.</p>
<p>And so Pride is bittersweet: a celebration of the freedom Pride represents but also an awareness of the dangers that continue to exist.</p>
<p>&nbsp;</p>
<h2 id="a-request-to-the-foundation">A Request To The Foundation</h2>
<p>While discussing Pride preparations, there was a simple request, addressing these dangers, from one queer Foundation Member: &#8220;We just want to know you have our back.&#8221;</p>
<p>To all GNOME&#8217;s queer users and contributors: absolutely, the Foundation has your back. Not just this June, but always. <img alt="❤" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.1.0/72x72/2764.png" style="height: 1em;" /></p>
<p>May everyone enjoy a peaceful and joyful Pride Month! <img alt="🏳️🌈" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f3f3-fe0f-200d-1f308.png" style="height: 1em;" /><img alt="🏳️⚧️" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f3f3-fe0f-200d-26a7-fe0f.png" style="height: 1em;" /></p>
<p>&nbsp;</p>
<p>(Special thanks to <a class="external" href="https://kramo.page/">Laura Kramolis</a> for her thoughtful feedback and guidance while writing this post.)</p></description><author>Steven Deobald</author><dc:creator>Steven Deobald</dc:creator><pubDate>Sun, 01 Jun 2025 06:34:29 GMT</pubDate><guid isPermaLink="true">https://blogs.gnome.org/steven/2025/06/01/pride-at-gnome/</guid></item><item><title>Nancy Nyambura: Outreachy Internship:My First Two Weeks with GNOME:</title><link>https://nanciedev.wordpress.com/2025/06/01/outreachy-internshipmy-first-two-weeks-with-gnome/</link><description><hr class="wp-block-separator has-alpha-channel-opacity" />
<h1 class="wp-block-heading">Diving into Word Scoring for Crosswords</h1>
<p>In my first two weeks as an Outreachy intern with GNOME, I’ve been getting familiar with the project I’ll be contributing to and settling into a rhythm with my mentor, <a href="https://gitlab.gnome.org/jrb">Jonathan Blandford</a>. We’ve agreed to meet every Monday to review the past week and plan goals for the next — something I’ve already found incredibly grounding and helpful.</p>
<h2 class="wp-block-heading">What I&#8217;m Working On: The Word Score Project</h2>
<p>My project revolves around improving how GNOME’s crossword tools (like GNOME Crosswords) assess and rank words. This is part of a larger effort to support puzzle constructors by helping them pick <em>better</em> words for their grids — ones that are fun, fresh, and fair.</p>
<p>But what makes a “good” crossword word?</p>
<p>This is what the Word Score project aims to answer. It proposes a scoring system that assigns numerical values to words based on multiple measurable traits, such as:</p>
<ul class="wp-block-list">
<li><strong>Lexical interest</strong> (e.g. does it contain unusual bigrams/trigrams like &#8220;KN&#8221; or &#8220;OXC&#8221;?),</li>
<li><strong>Frequency</strong> in natural language (based on datasets like Google Ngrams),</li>
<li><strong>Familiarity</strong> to solvers (which may differ from frequency),</li>
<li><strong>Definition count</strong> (some words like <em>SET</em> or <em>RUN</em> are goldmines for cryptic clues),</li>
<li><strong>Sentiment</strong> and appropriateness (nobody wants a vulgar word in a breakfast puzzle).</li>
</ul>
<p>The goal is to build a system that supports both the autofill functionality and the word list interface in GNOME Crosswords, giving human setters better tools while respecting editorial judgment. In other words, this project isn’t about replacing setters — it’s about enhancing their toolkit.</p>
<p>You can read more about the project’s goals and philosophy in our draft document: <em><a href="https://jrb.pages.gitlab.gnome.org/crosswords/devel-docs/word-scores.html">Thoughts on Scoring Words</a></em> (final link coming soon).</p>
<h2 class="wp-block-heading"> Week 1: Building and Breaking Puzzles</h2>
<p>During my first week, I spent time getting familiar with the project environment and experimenting with crossword puzzle generation. I created test puzzles to better understand how word placement, scoring, and validation work under the hood.</p>
<p>This hands-on experimentation helped me form a clearer mental model of how GNOME Crosswords structures and fills puzzles — and why scoring matters. The way words interact in a grid can make some fills elegant and others feel forced or unplayable. </p>
<h2 class="wp-block-heading"> Week 2: Wrestling with <code>libipuz</code> and Introspection</h2>
<p>In the second week, my focus shifted to working on <a href="https://gitlab.gnome.org/GNOME/libipuz">libipuz</a>, a C library that parses and exports puzzles using the <a href="https://github.com/ipuz/specification">IPUZ format</a>. but getting libipuz working with GNOME’s introspection system proved more challenging than expected.</p>
<p>Initially, I tried to use it inside the <code>crosswords</code> container, but it wasn’t cooperating. After some digging (and rebuilding), we decided to create a separate container specifically for libipuz to enable introspection and allow scripting in languages like Python and JavaScript to interact with it.</p>
<p>This also gave me a deeper understanding of how GNOME handles language bindings via GObject Introspection — something I hadn’t worked with before, but I’m quickly getting the hang of.</p>
<h2 class="wp-block-heading"> Bonus: Scrabble-Inspired Scoring Script</h2>
<p>As a side exploration, I also wrote a quick Python script that calculates Scrabble-style scores for words. While Scrabble scoring isn’t the same as what we want in crosswords (it values rare letters like Z and Q), it gave me a fun way to experiment with scoring mechanics and visualize how simple rules change the ranking of word lists. This mini-project helped me warm up to the idea of building more complex scoring systems later on.</p>
<hr class="wp-block-separator has-alpha-channel-opacity" />
<h2 class="wp-block-heading">What’s Next?</h2>
<p>In the coming weeks, I’ll continue refining the scoring dimensions, writing more scripts to calculate traits (especially frequency and lexical interest), and exploring how this scoring system can be surfaced in GNOME Crosswords. I’m excited to see how this evolves — and even more excited to share updates as I go.</p>
<p>Thanks for reading! </p>
<hr class="wp-block-separator has-alpha-channel-opacity" />
<p></p></description><author>Nancy Nyambura</author><dc:creator>Nancy Nyambura</dc:creator><pubDate>Sat, 31 May 2025 23:06:23 GMT</pubDate><guid isPermaLink="true">https://nanciedev.wordpress.com/2025/06/01/outreachy-internshipmy-first-two-weeks-with-gnome/</guid></item><item><title>Ahmed Fatthi: GSoC 2025: First Two Weeks Progress Report</title><link>https://ahmedfatthi.pages.dev/posts/first-two-weeks-progress/</link><description><p>The first two weeks of my Google Summer of Code (GSoC) journey with GNOME Papers have been both exciting and productive. I had the opportunity to meet my mentors, discuss the project goals, and dive into my first major task: improving the way document mutex locks are handled in the codebase.</p>
<hr />
<h2 id="-mentor-meeting--planning">🤝 Mentor Meeting &amp; Planning</h2>
<p>We kicked off with a meeting to get to know each other and to discuss the open <a href="https://gitlab.gnome.org/GNOME/Incubator/papers/-/merge_requests/499">Merge Request 499</a>. The MR focuses on moving document mutex locks from the <code>libview</code>/shell layer down to the individual backends (DjVu, PDF, TIFF, Comics). We also outlined the remaining work and clarified how to approach it for the best results.</p></description><author>Ahmed Fatthi</author><dc:creator>Ahmed Fatthi</dc:creator><pubDate>Sat, 31 May 2025 18:00:00 GMT</pubDate><guid isPermaLink="true">https://ahmedfatthi.pages.dev/posts/first-two-weeks-progress/</guid></item><item><title>Steven Deobald: 2025-05-30 Foundation Report</title><link>https://blogs.gnome.org/steven/2025/05/30/2025-05-30-foundation-report/</link><description><h2 id="opaque-stuff">## Opaque Stuff</h2>
<ul>
<li>the usual policy drafting work; thank you Allan for ensuring we&#8217;re on top of this</li>
<li>moving some operational deadlines forward (&#8220;preponing&#8221;) was discussed but this hasn&#8217;t been confirmed yet</li>
<li>a bunch of tactical paperwork minutiae I&#8217;ll be very happy to see completed</li>
</ul>
<p>&nbsp;</p>
<h2 id="safety">## Safety</h2>
<p>I published a post this week entitled <a href="https://blogs.gnome.org/steven/2025/05/28/on-safety/"><em>On Safety</em></a>. I won&#8217;t revisit it here in the Foundation Report but it is an important topic and I encourage you to go read it. Thank you to Allan Day for his thoughtful and patient editing.</p>
<p>&nbsp;</p>
<h2 id="pride">## Pride</h2>
<p>On a much happier note, we&#8217;ve begun celebrating Pride Month a little early! You may see some coloured flags on GNOME&#8217;s social media accounts and Jakub Steiner has produced some lovely Pride backgrounds. You can find the source in <a class="external" href="https://gitlab.gnome.org/Teams/Design/wallpaper-assets/-/tree/master/pride"><code>Design / wallpaper-assets / pride</code></a> and you can get the high-res renders from the GNOME-48 branch of <a class="external" href="https://gitlab.gnome.org/GNOME/gnome-backgrounds/-/tree/gnome-48/backgrounds"><code>GNOME / gnome-backgrounds</code></a>. Low-res previews below. Thanks to everyone who pitched in this year to help us celebrate Pride together. <img alt="🙂" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f642.png" style="height: 1em;" /></p>
<p style="text-align: center;"> <img alt="" class="alignnone size-medium wp-image-100" height="300" src="https://blogs.gnome.org/steven/files/2025/05/pride-l-300x300.png" width="300" /> <img alt="" class="alignnone size-medium wp-image-99" height="300" src="https://blogs.gnome.org/steven/files/2025/05/pride-d-300x300.png" width="300" /></p>
<p>&nbsp;</p>
<h2 id="designers">## Designers</h2>
<p>Speaking of The Designers, I got to attend their regular meeting this week. It was a pleasure to see just how committed everyone is to resolving the eternal tension of form, function, and performance. What might seem like a trivial decision on the surface (the performance of window drop-shadows, in this case) hides plenty of nuance, once you start digging. The need for performance isn&#8217;t arbitrary: a freie desktop needs to support older machines if we want to be the destination for those whose hardware had been abandoned by manufacturers and those who can&#8217;t afford to buy the fanciest gadget every 5 years. I enjoyed my time as a fly on the wall until Firefox crashed and wouldn&#8217;t restart.</p>
<p>Part of my meeting with the designers was selfish. The Foundation will need their help to revisit the audiences for our fundraising efforts. I&#8217;m actually looking forward to a little bit of pairing time with some of them, if they&#8217;ll let me. <img alt="🙂" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f642.png" style="height: 1em;" /></p>
<p>&nbsp;</p>
<h2 id="fundraising">## Fundraising</h2>
<p>Rosanna and I sat down to drill through a mountain of spreadsheets and formulate a <em>simplified</em> picture of the Foundation&#8217;s finances &#8212; that &#8220;round to the nearest $100&#8221; napkin non-accounting that&#8217;s useful for visualization but not much else. I&#8217;m really grateful for the time Rosanna spent with me; it gave me a much better picture of where we stand, month on month, year on year.</p>
<p>We need these cartoony visuals so we can start painting a fundraising picture for ourselves. I&#8217;ve been told by many people &#8220;don&#8217;t make any promises!&#8221; And I am not promising anything in particular. At this stage, we&#8217;re just sweeping the floor and sketching out our strategy.</p>
<p>&nbsp;</p>
<h2 id="end-of-10">## End of 10</h2>
<p>We&#8217;ve assembled a small Promo Team to coordinate with the <a class="external" href="https://endof10.org">End of 10</a> core team and the KDE folks. If you would like to be a part of this, shout at me or Sri. If you want to get involved more generally, jump into <a class="external" href="https://matrix.to/#/%23endof10-en:kde.org"><code>#endof10-en:kde.org</code></a>.</p>
<p>I&#8217;ve already pitched to the local hacker community here in Halifax that we should put on a repair cafe some weekend. Step One? Find a cheap venue so none of us are paying out-of-pocket. We have a gorgeous public library here that hosts community events for free. Maybe your city does, too?</p>
<p>&nbsp;</p>
<h2 id="gtd">## GTD (Getting Things Done)</h2>
<p>We&#8217;ve made some great progress with the new Staff project wall and the Foundation-wide &#8220;Staff Ops&#8221; calendar. The new Foundation Handbook keeps plodding along, though I will admit it&#8217;s still a disorganized dumping ground for links I wish I had when I started. Baby steps.</p>
<p>&nbsp;</p>
<h2 id="nextcloud-onlyoffice">## Nextcloud / OnlyOffice</h2>
<p>Speaking of tooling, we have had repeated issues with data loss in OnlyOffice and it&#8217;s been decided to shut it down for now. If you are using Nextcloud for office files, your best option is to set up a mount in Nautilus (by adding &#8216;you@cloud.gnome.org/remote.php/dav&#8217; to Online Accounts) and work on them locally.</p>
<p>If the lack of collaborative office tools is a big issue, we can revisit this. If you have collaboration requirements, please document them in the <a class="external" href="https://pad.gnome.org/js3UjWdSQWyFdXYWLZGRfw">Multiplayer Office Files</a> HedgeDoc. Thanks!</p>
<p>&nbsp;</p>
<h2 id="vaultwarden">## Vaultwarden</h2>
<p>We threw around a few suggestions for better group passwords across the Foundation. Somewhat unfortunately, we can&#8217;t lean on Nextcloud for this, as their &#8220;share&#8221; password feature doesn&#8217;t actually allow sharing groups of passwords yet.</p>
<p>For the time-being, it looks like Vaultwarden is our most likely candidate. Commercial Bitwarden was considered, but we can&#8217;t guarantee we wouldn&#8217;t rely on non-free features and passwords are too big a deal to find ourselves accidentally relying on proprietary software.</p>
<p>&nbsp;</p>
<h2 id="treasurer">## Treasurer</h2>
<p>We are still on the hunt for a solid Treasurer. The clock is ticking now, so if you know of anyone who might be appropriate, do reach out! I&#8217;m happy to speak to them over the weekend, if it will help, though they would need to have a conversation with Board members early next week, as it&#8217;s not me who decides who the Treasurer will be.</p>
<p>&nbsp;</p>
<h2 id="digital-wellbeing">## Digital Wellbeing</h2>
<p>We are looking at adding some additional development capacity to the Digital Wellbeing work to ensure it&#8217;s delivered on time. If you&#8217;re keen on a bit of Calm Computing and family-focused frontend work, please keep an eye out for the job posting and/or poke us in <a class="external" href="https://matrix.to/#/%23foundation:gnome.org"><code>#foundation:gnome.org</code></a>.</p>
<p>&nbsp;</p>
<h2 id="un-open-source-week">## UN Open Source Week</h2>
<p>Looking to the future a bit, it&#8217;s UN Open Source Week in NYC, starting June 16th. I&#8217;m considering going if I can find a couch to crash on. If you&#8217;re planning to be in NYC that week, let me know!</p>
<p>See you next week!</p></description><author>Steven Deobald</author><dc:creator>Steven Deobald</dc:creator><pubDate>Fri, 30 May 2025 15:51:51 GMT</pubDate><guid isPermaLink="true">https://blogs.gnome.org/steven/2025/05/30/2025-05-30-foundation-report/</guid></item><item><title>Thibault Martin: TIL that Signal Stories are Fun</title><link>https://ergaster.org/til/signal-stories-fun/</link><description><p>When Signal <a href="https://signal.org/blog/introducing-stories/">introduced Stories</a>, I didn't understand why. To me, Signal is all about giving as little information to as few people as possible but still being able to have a social life.</p>
<p>I didn't use any app that had stories. Only a few friends published Instagram stories, and many more followed public stories. I thought of stories as "broadcast content to as many people as possible," which is the opposite of what Signal is about for me.</p>
<p>It turns out I was wrong. Signal lets you curate who can see your stories. By default, all your contacts can see your stories, but you can also create smaller circles of people who will see them, or you can create stories from existing Signal groups.</p>
<p></p>
<p>Since I've realized that social media like <a href="https://ergaster.org/posts/2025/04/15-social-media-affect-me/">Mastodon affect me more (negatively) than I thought</a>, I've significantly reduced what I read and publish there. But I still want to share happy moments with friends. So, I gave Signal stories a go, and it has been more fun and useful than I thought.</p>
<p>When I publish a story on Signal, I know who will read it. It's not for the public, but it's for friends. I can publish more personal things, and people reply more genuinely. Friends ask where I am or how I'm doing at the moment. We listen to each other. And, to my great satisfaction, a few friends have started publishing stories since I started!</p>
<p>I also publish different things on Signal stories than on Mastodon. On Mastodon, I shared thoughts or, let's be honest, hot takes. On Signal, I share <em>moments</em>. I share what I do and experience, not necessarily what I think.</p>
<p></p>
<p>The UX is still a bit clunky, stories feel poorly integrated into Signal, and I don't understand why Signal broadcasts stories to your whole address book <em>by default</em>. But I enjoy having a place where I can share privately and spontaneously what I'm doing with a short list of people I trust and care about.</p>
<blockquote>
<p>[!info] Signal is good tech, help them</p>
<p>If you've never tried Signal stories, I strongly encourage you to do so. If you use Signal and can afford it, consider <a href="https://signal.org/donate/">supporting them financially</a>; they deserve it.</p>
</blockquote>
<p>Keep up the good work, Signal. You're an excellent app and a great nonprofit, and I wish more organizations took inspiration from you.</p></description><author>Thibault Martin</author><dc:creator>Thibault Martin</dc:creator><pubDate>Fri, 30 May 2025 12:04:00 GMT</pubDate><guid isPermaLink="true">https://ergaster.org/til/signal-stories-fun/</guid></item><item><title>This Week in GNOME: #202 Presenting Screenshots</title><link>https://thisweek.gnome.org/posts/2025/05/twig-202/</link><description><p>Update on what happened across the GNOME project in the week from May 23 to May 30.<!--more--></p>
<h2 id="gnome-core-apps-and-libraries">GNOME Core Apps and Libraries</h2>
<h3 id="calendar">Calendar <a href="https://gitlab.gnome.org/GNOME/gnome-calendar/">↗</a></h3>
<p>A simple calendar application.</p>
<p><a href="https://thisweek.gnome.org/reporters/b07133844afce41626b1a463dc5d35bd4bb6e99b855f26349f8db520a72e44f8">Hari Rana (TheEvilSkeleton)</a> says</p>
<blockquote>
<p>Continuing our <a href="https://thisweek.gnome.org/posts/2025/05/twig-198/#calendar">volunteer effort</a> to make GNOME Calendar fully accessible with a keyboard, we fixed a major bug that was causing the focus to disappear into the abyss when the user tried to tab into the month view in <a href="https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/576">merge request !576</a>. This means, as of this commit, <strong>events should now be completely functional and accessible within the month view</strong>. Additionally, the merge request changes the keyboard and focus behavior within the month view: Events can only be cycled using arrow buttons, the focus can’t escape the month view with arrow buttons, and entering/exiting the month view can only be done with tab. These improvements will be available on GNOME 49.</p>
</blockquote>
<h3 id="web">Web <a href="https://gitlab.gnome.org/GNOME/epiphany">↗</a></h3>
<p>Web browser for the GNOME desktop.</p>
<p><a href="https://thisweek.gnome.org/reporters/744734bb9e24ac02bccfabf509071b840f3b337cc1c8cc532708218ae1a33af2">Jan-Michael Brummer</a> reports</p>
<blockquote>
<p>This cycle GNOME Web received tremendous new features and bug fixes. I took the chance and started to work on our bug
list and squashed over 100 bugs and added several new features. Among those are:</p>
<ul>
<li>UI files switched to blueprint format</li>
<li>Adblocker now tries to load locale specific adblocker list in addition to the default one</li>
<li>URL bar received an inline completion</li>
<li>URL bar is now on bottom in narrow mode</li>
<li>Bottom action bar hides and reveals automatically in narrow mode</li>
<li>Reader mode got an estimated reading time based on Firefox implementation</li>
<li>PKCS #11 (smartcard) persistence support</li>
<li>Moved passwords from preferences to it’s own dialog</li>
<li>Security popover has been replaced with an adaptive dialog</li>
<li>WebApp additional URL handling has been changed and thus base domains are now compared instead of full domains</li>
<li>Ability to quit and uninstall web apps from their menu</li>
<li>Search now handles case sensitive and full word searches</li>
<li>Mute button in URL bar for single tab pages</li>
<li>Background portal support</li>
<li>Bookmark editing mode (Arak)</li>
</ul>
<p>Thanks to Jamie, Arak and kramo for their support and fixes. We are going to deliver one of the best releases.</p>
</blockquote>
<h2 id="third-party-projects">Third Party Projects</h2>
<p><a href="https://thisweek.gnome.org/reporters/3f7e56fd3e07a5d293b680946eb734c590035ba39d4a7db7ddfc048c9d97aad6">Alexander Vanhee</a> reports</p>
<blockquote>
<p>The first public version of <a href="https://github.com/AlexanderVanhee/Gradia">Gradia</a> was released this Sunday.</p>
<p>Gradia is designed to improve the presentation of your screenshots on platforms where you have limited control, such as social media. It allows you to add a custom gradient background, add padding, change the aspect ratio, and more.</p>
<p>The app is designed for quick edits of mostly screenshots and does not aim to be a full-fledged image editor. However, I do have aspirations to add simple annotation features like a freehand pen mode and an arrow drawing tool.</p>
<p>Please check it out on <a href="https://flathub.org/apps/be.alexandervanhee.gradia">Flathub</a>.</p>
<p><img height="722" src="https://thisweek.gnome.org/_astro/gradia_showcase.CC0ZDB8x_ZWYeya.webp" width="1022" /></p>
</blockquote>
<p><a href="https://thisweek.gnome.org/reporters/81472ec2b92ffc75dbadcede58ced2ff1d7d00141163a579223c0106bc45cb87">Vladimir Vaskov</a> says</p>
<blockquote>
<p>Hello everyone! This week, at ALT Gnome and ALT Linux Team, we are introducing Folder Manager — a folder manager for the GNOME and Phosh application menu, designed to simplify and automate the organization of applications into folders by category.</p>
<p><a href="https://altlinux.space/alt-gnome/Foldy"><strong>Folder Manager</strong></a> is a convenient utility for managing app folders in GNOME and Phosh. Built with Vala using GTK4 and Libadwaita, it adheres to GNOME HIG guidelines and ensures a clean and modern interface for application menu organization.</p>
<h3 id="key-features">Key Features:</h3>
<ul>
<li>
<p><strong>Create and Delete Folders</strong>: Instantly create, rename, or delete application folders through a user-friendly graphical interface.</p>
</li>
<li>
<p><strong>Category-Based Autofill</strong>: When creating a folder, select a category (e.g. Office, Chat, Games), and Folder Manager will automatically include all applications belonging to that category.</p>
</li>
<li>
<p><strong>Manual Management</strong>: Add or remove individual applications from folders manually, for precise control over organization.</p>
</li>
<li>
<p><strong>Filtering and Search</strong>: Easily locate applications by name using built-in search and filtering tools within the interface.</p>
</li>
<li>
<p><strong>Designed for GNOME and Phosh</strong>: Provides full compatibility with both GNOME Shell and the mobile-oriented Phosh environment.</p>
</li>
</ul>
<p><strong>Folder Manager</strong> helps keep your application menu organized, improves accessibility, and enhances your desktop experience. Try it today and bring structure and clarity to your GNOME workspace!</p>
<p><img height="853" src="https://thisweek.gnome.org/_astro/FolderManager-1.3o2dwK65_Z293TvK.webp" width="1052" />
</p>
<p><img height="853" src="https://thisweek.gnome.org/_astro/FolderManager-2.BG44k2F2_1g8RTH.webp" width="1052" /></p>
<p><img height="824" src="https://thisweek.gnome.org/_astro/FolderManager-3.dCrlznvZ_S5S5W.webp" width="482" /></p>
</blockquote>
<p><a href="https://thisweek.gnome.org/reporters/684fe378f8d2e4bbcab120e61f5e87c00e4aa4bd9ee026387467bd4b1a85ed16">nozwock</a> reports</p>
<blockquote>
<p><a href="https://github.com/nozwock/packet">Packet</a> is an app that lets you send and receive files wirelessly from Android devices using Quick Share, or another device with Packet.</p>
<p>It just received an update! The status indicator now shows the connection state, the in-app help has been rewritten to be easier to understand, and an error page is shown if the app can’t run, so it’s easier to troubleshoot. This update also brings lots of smaller under-the-hood improvements and fixes.</p>
<p>You can get it from <a href="https://flathub.org/apps/io.github.nozwock.Packet">Flathub</a>!</p>
<p><img height="722" src="https://thisweek.gnome.org/_astro/packet-incoming-transfer.CPXxTdYd_Z20k773.webp" width="482" />
</p>
<p><img height="722" src="https://thisweek.gnome.org/_astro/packet-sent-files.BPpNgbf5_1LI0Jy.webp" width="482" /></p>
</blockquote>
<p><a href="https://thisweek.gnome.org/reporters/d9f4687b054c76e4a42741246e42df65fd070e4112df30f2654cfd6830cc7e9b">francescocaracciolo</a> reports</p>
<blockquote>
<p>Newelle, AI assistant for Gnome, got updated to 0.9.7, improving local documents reading performances, adding thinking support for Gemini models, other minor improvements and updated translations</p>
<p>Install it from <a href="https://flathub.org/apps/io.github.qwersyk.Newelle">FlatHub</a></p>
</blockquote>
<h3 id="pipeline">Pipeline <a href="https://flathub.org/apps/de.schmidhuberj.tubefeeder">↗</a></h3>
<p>Follow your favorite video creators.</p>
<p><a href="https://thisweek.gnome.org/reporters/2d6bfa52eff97725a6197c0937e602046fe2a6569a3e73f54fe0124496ec618f">schmiddi</a> says</p>
<blockquote>
<p>Versions 2.2.3 and 2.3.0 of Pipeline were released. Pipeline now hides videos which require payment by default from the feed, as those cannot yet be played using Pipeline anyway. If you want them to keep showing up because you are using an external player which supports those, you can change the behavior in the filter settings. If you are using an external player, you can now spawn it again in case it failed by clicking the thumbnail of the video, instead of needing to go back to the feed and clicking the video again. Startup performance of Pipeline also got significantly improved, on my device from over 3s to under 1s. Finally, the releases fix quite a few bugs:</p>
<ul>
<li>Videos sometimes being duplicated in the watch-later list.</li>
<li>Videos starting to play with low resolution.</li>
<li>Error searching when the result contains videos with over 2 billion views.</li>
<li>Errors fetching information for a single video for some videos.</li>
</ul>
</blockquote>
<h3 id="gircore">Gir.Core <a href="https://gircore.github.io/">↗</a></h3>
<p>Gir.Core is a project which aims to provide C# bindings for different GObject based libraries.</p>
<p><a href="https://thisweek.gnome.org/reporters/df0a04213a82d87b64ad6836e52dc714edb5cfc6309d4579d03c72546da4d6e1">Marcel Tiede</a> reports</p>
<blockquote>
<p>Gir.Core <a href="https://github.com/gircore/gir.core/releases/tag/0.7.0-preview.1">0.7.0-preview.1</a> was released. It features updated dotnet bindings for GNOME 48, initial binding support for libsecret and several bug fixes.</p>
</blockquote>
<h2 id="miscellaneous">Miscellaneous</h2>
<p><a href="https://thisweek.gnome.org/reporters/a83e784bf7b0401c04181520b696b7135983bc984ec4b4f425884b2c1601ddcc">revisto</a> says</p>
<blockquote>
<p>We’ve started a Farsi-language podcast version of This Week in GNOME! Each week we read and summarize the latest TWIG post in Farsi, covering GNOME Core updates, Circle apps, and community news. The goal is to help Farsi-speaking users stay connected with the GNOME ecosystem.</p>
<p>We’ve released 3 episodes so far (199, 200, 201) and keep episode scripts + audio files on GitHub. You can listen on Spotify, Castbox, Podcast Index, or via RSS feed.</p>
<p>More details: <a href="https://blogs.gnome.org/alirezash/2025/05/25/we-started-a-podcast-for-this-week-in-gnome-in-farsi/">https://blogs.gnome.org/alirezash/2025/05/25/we-started-a-podcast-for-this-week-in-gnome-in-farsi/</a></p>
<p>Repository: <a href="https://github.com/revisto/this-week-in-gnome-farsi">https://github.com/revisto/this-week-in-gnome-farsi</a>
</p>
<p><img height="4501" src="https://thisweek.gnome.org/_astro/this-week-in-gnome-farsi-banner.42VKELJu_Z12qTm2.webp" width="8000" /></p>
</blockquote>
<h2 id="internships">Internships</h2>
<p><a href="https://thisweek.gnome.org/reporters/040f57f9f48431baa3e30a5689beb4a595fd9e0296264fb4977204e6c3becd76">Pablo Correa Gomez</a> says</p>
<blockquote>
<p>Ahmed Fatthi started his GSoC internship in Papers getting a complex work related to locking <a href="https://gitlab.gnome.org/GNOME/Incubator/papers/-/merge_requests/499">merged</a>! Ahmed will be working on isolating documents, so that eventually Papers can be as secure managing documents as Loupe is managing images! Keep posted to his blog for more updates: <a href="https://ahmedfatthi.pages.dev/">https://ahmedfatthi.pages.dev/</a></p>
</blockquote>
<h2 id="gnome-foundation">GNOME Foundation</h2>
<p><a href="https://thisweek.gnome.org/reporters/9143e882f165daa6337ff08ea407ba2fd030447de25d67c8eb0acdaf3005d958">steven</a> reports</p>
<blockquote>
<p>This week’s Foundation Report discusses:</p>
<ul>
<li>Community Safety</li>
<li>Pride</li>
<li>A glimpse into the regular Design Meeting</li>
<li>Fundraising from first principles</li>
<li>End of 10 Promo Team</li>
<li>GTD, tools, etc. Software: It’s Still Annoying (TM)</li>
<li>Treasurer search - the clock is ticking!</li>
<li>Digital Wellbeing contract opportunity</li>
<li>UN Open Source Week, June 16 - 20</li>
</ul>
<p><a href="https://blogs.gnome.org/steven/2025/05/30/2025-05-30-foundation-report/">https://blogs.gnome.org/steven/2025/05/30/2025-05-30-foundation-report/</a></p>
</blockquote>
<h2 id="thats-all-for-this-week">That’s all for this week!</h2>
<p>See you next week, and be sure to stop by <a href="https://matrix.to/#/#thisweek:gnome.org">#thisweek:gnome.org</a> with updates on your own projects!</p></description><author>This Week in GNOME</author><dc:creator>This Week in GNOME</dc:creator><pubDate>Fri, 30 May 2025 00:00:00 GMT</pubDate><guid isPermaLink="true">https://thisweek.gnome.org/posts/2025/05/twig-202/</guid></item><item><title>Michael Meeks: 2025-05-28 Wednesday</title><link>https://meeksfamily.uk/~michael/blog/2025-05-28.html</link><description><ul> <!-- -->
<li>
J. unwell in the night, feeling groggy. Sync with Dave,
important partner call.
</li>
<li>
Really excited to announce the <a href="https://www.collaboraonline.com/blog/collabora-allotropia-merge/">merger
of Collabora Productivity and allotropia!</a> and really looking forward to
properly welcoming and unifying the teams after <a href="https://www.collaboraonline.com/events/cool-days-2025/">COOL days</a>
<center>
<a href="https://www.collaboraonline.com/blog/collabora-allotropia-merge/"><img alt="Collabora Productivity and allotropia merge teams" src="https://meeksfamily.uk/~michael/images/2025-05-28-allotropia.png" /></a>
</center>
</li>
<li>
Published the next strip around whether you focus on the
process, or getting results:
<center>
<a href="https://www.collaboraonline.com/torf/torf20"><img alt="The Open Road to Freedom - strip#20 - process, or results ?" src="https://meeksfamily.uk/~michael/images/torf20-thumb.jpeg" /></a>
</center>
</li>
<li>
Call with Till &amp; Thorsten, caught the end of our
sales team call. Sync with Philippe. What a day!
</li>
</ul></description><author>Michael Meeks</author><dc:creator>Michael Meeks</dc:creator><pubDate>Wed, 28 May 2025 21:00:00 GMT</pubDate><guid isPermaLink="true">https://meeksfamily.uk/~michael/blog/2025-05-28.html</guid></item><item><title>Michael Meeks: 2025-05-27 Tuesday</title><link>https://meeksfamily.uk/~michael/blog/2025-05-27.html</link><description><ul> <!-- ljm -->
<li>
Early customer call, planning call. Intermittent catch
ups with Margaret, 1:1 with Lily, partner call, sync with Andras.
</li>
<li>
Up late working on slides, starting to feel somewhat unwell.
</li>
</ul></description><author>Michael Meeks</author><dc:creator>Michael Meeks</dc:creator><pubDate>Tue, 27 May 2025 21:00:00 GMT</pubDate><guid isPermaLink="true">https://meeksfamily.uk/~michael/blog/2025-05-27.html</guid></item><item><title>Jussi Pakkanen: Iterators and adaptors</title><link>https://nibblestew.blogspot.com/2025/05/iterators-and-adaptors.html</link><description><p>Previously it was mentioned that Python and C++ do iteration quite differently. Python has "statefull" objects that have a <span style="font-family: courier;">.next()</span> method that returns a new object or throws a <span style="font-family: courier;">StopIteration</span> exception. Incidentally Rust does exactly the same thing, except that it uses an optional type rather than an exception. C++ does not work like this, instead it has a concept of a "start" and "end" of a sequence and the machinery keeps incrementing the start until it reaches the end.</p><p>At the end of last post it was said that it is difficult to integrate an object of the former type with C++'s native language facilities, at least without macros.</p><p>Now we'll look how to integrate an object of the former type with C++'s native language facilities without any macros.</p><p>In fact, it only took fewer than 30 lines of code to do. The caveat being that it is probably fairly easy to break it. But it works for me.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSa8E23tu4cgZLYPxAV2qca0CxTGk-FTbYhCpez5qzm-W_NeOvgvam6shp-yC0ZHkqH4cbk2nI3jZ4cbRQGqCIBMxakbtPkM-fuUtW6EVjsnvciK4qWiDUcGP31nGmusYIFlXphvvsHyL-YB2Qjo1aiTKAFjXIrUc616cz6w_RfHgSZFTiYE1aDyvPP58/s640/loopconverter.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="224" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSa8E23tu4cgZLYPxAV2qca0CxTGk-FTbYhCpez5qzm-W_NeOvgvam6shp-yC0ZHkqH4cbk2nI3jZ4cbRQGqCIBMxakbtPkM-fuUtW6EVjsnvciK4qWiDUcGP31nGmusYIFlXphvvsHyL-YB2Qjo1aiTKAFjXIrUc616cz6w_RfHgSZFTiYE1aDyvPP58/s320/loopconverter.png" width="320" /></a></div><p>Here it is being used.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgujzTi3o-yeqwhLU0CpuvbXpf0iMNxj3BHcEOUrnwMPwcfbZ9s6pmdprbbTXPE__YqoFLAXPQEd0LQNWfVihOYZnkBFPM9sxjPkGSAPb3BUhWJU-VkMytXOp8UDUTxkwPg7hzK-eLhXtro2C7E7niyhnEBqLkLCKvRKcJ0zCVZDB52-LTqsyDPuuISc08/s501/loopusage.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="151" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgujzTi3o-yeqwhLU0CpuvbXpf0iMNxj3BHcEOUrnwMPwcfbZ9s6pmdprbbTXPE__YqoFLAXPQEd0LQNWfVihOYZnkBFPM9sxjPkGSAPb3BUhWJU-VkMytXOp8UDUTxkwPg7hzK-eLhXtro2C7E7niyhnEBqLkLCKvRKcJ0zCVZDB52-LTqsyDPuuISc08/s320/loopusage.png" width="320" /></a></div><p>There is also a second, similar helper class that takes ownership of the object being iterated over.</p></description><author>Jussi Pakkanen</author><dc:creator>Jussi Pakkanen</dc:creator><pubDate>Sun, 25 May 2025 21:50:00 GMT</pubDate><guid isPermaLink="true">https://nibblestew.blogspot.com/2025/05/iterators-and-adaptors.html</guid></item><item><title>Alireza Shabani: We Started a Podcast for This Week in GNOME (in Farsi)</title><link>https://blogs.gnome.org/alirezash/2025/05/25/we-started-a-podcast-for-this-week-in-gnome-in-farsi/</link><description><p>Hi, we&#8217;ve started a new project: a <strong>Farsi-language podcast version of <a class="external" href="https://thisweek.gnome.org">This Week in GNOME</a>.</strong></p>
<p>Each week, we read and summarise the latest <em>TWIG</em> post in Farsi, covering updates from <strong>GNOME Core</strong>, <strong>GNOME Circle apps</strong>, and other community-related news. Our goal is to help <strong>Persian-speaking users and contributors</strong> stay connected with the GNOME ecosystem.</p>
<p>The podcast is hosted by me (Revisto), along with <a class="external" href="https://mastodon.social/@MirSobhan@persadon.com">Mirsobhan</a> and <a class="external" href="https://hadi7546.ir/">Hadi</a>. We release one short episode per week.</p>
<p>Since <a class="external" href="https://youtube.com/@theRevisto">I also make music</a>, I created a short theme for the podcast to give it more identity and consistency across episodes. It’s simple, but it adds a nice touch of production value that we hope makes the podcast feel more polished.</p>
<p>We’re also keeping a <a class=" external" href="https://github.com/Revisto/this-week-in-gnome-farsi" rel="noopener" target="_new">GitHub repository</a> in which I&#8217;m uploading each of my episode scripts (in Farsi) in Markdown + audio files. The logo and banner assets have been uploaded in SVG as well for transparency.</p>
<p><img alt="Partial screenshot of 201st script of TWIG podcast in Obsidian in Farsi, written in markdown." class="alignnone size-full wp-image-65" height="864" src="https://blogs.gnome.org/alirezash/files/2025/05/Screenshot-From-2025-05-25-15-26-52.png" width="775" /></p>
<p>You can listen to the podcast on:</p>
<ul>
<li>
<ul>
<li><a class="external" href="https://open.spotify.com/show/3lbMYMzqyGquD60DA2WmEY">Spotify</a></li>
<li><a class="external" href="https://castbox.fm/channel/id6601942">Castbox</a></li>
<li><a class="external" href="https://podcastindex.org/podcast/7330276">Podcast Index</a></li>
<li><a class="external" href="https://t.me/gnome_fa">Telegram: @gnome_fa</a></li>
<li>Or via <a class="external" href="https://anchor.fm/s/104bde124/podcast/rss">RSS feed</a></li>
</ul>
</li>
</ul>
<p>Let us know what you think, and feel free to share it with Farsi-speaking friends or communities interested in GNOME.</p></description><author>Alireza Shabani</author><dc:creator>Alireza Shabani</dc:creator><pubDate>Sun, 25 May 2025 13:03:15 GMT</pubDate><guid isPermaLink="true">https://blogs.gnome.org/alirezash/2025/05/25/we-started-a-podcast-for-this-week-in-gnome-in-farsi/</guid></item><item><title>Ahmed Fatthi: About This Blog & My GSoC Journey</title><link>https://ahmedfatthi.pages.dev/about/</link><description>Learn more about this blog, my GSoC 2025 project with GNOME, and my background in open source development.</description><author>Ahmed Fatthi</author><dc:creator>Ahmed Fatthi</dc:creator><pubDate>Sat, 24 May 2025 00:00:00 GMT</pubDate><guid isPermaLink="true">https://ahmedfatthi.pages.dev/about/</guid></item><item><title>Christian Hergert: Sysprof in your Mesa</title><link>https://blogs.gnome.org/chergert/2025/05/23/sysprof-in-your-mesa/</link><description><p>Thanks to the work of <a class="external" href="https://christian-gmeiner.info/">Christian Gmeiner</a>, support for annotating time regions using Sysprof marks has landed in Mesa.</p>
<p>That means you&#8217;ll be able to open captures with Sysprof and see the data along other useful information including callgraphs and flamegraphs.</p>
<p>I do think there is a lot more we can do around better visualizations in Sysprof. If that is something you&#8217;re interested in working on please stop by <a href="irc://irc.libera.chat/#gnome-hackers">#gnome-hackers on Libera.chat</a> or drop me an email and I can find things for you to work on.</p>
<p>See the <a class="external" href="https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34893">merge request here</a>.</p></description><author>Christian Hergert</author><dc:creator>Christian Hergert</dc:creator><pubDate>Fri, 23 May 2025 16:51:04 GMT</pubDate><guid isPermaLink="true">https://blogs.gnome.org/chergert/2025/05/23/sysprof-in-your-mesa/</guid></item><item><title>Hans de Goede: IPU6 cameras with ov02c10 / ov02e10 now supported in Fedora</title><link>https://hansdegoede.dreamwidth.org/29996.html</link><description>I'm happy to share that 3 major IPU6 camera related kernel changes from linux-next have been <a href="https://gitlab.com/cki-project/kernel-ark/-/merge_requests/3859">backported to Fedora</a> and have been available for about a week now the Fedora <a href="https://koji.fedoraproject.org/koji/buildinfo?buildID=2711921">kernel-6.14.6-300.fc42</a> (or later) package:<br /><br /><ol><li>Support for the <a href="https://git.linuxtv.org/media.git/commit/?id=44f89010dae0eff6aabb9c14fb4b1001542498b4">OV02C10 camera sensor</a>, this should e.g. enable the camera to work out of the box on all Dell XPS 9x40 models.</li><li>Support for the <a href="https://git.linuxtv.org/media.git/commit/?id=1c734f8ab070716604d0794094e18de3475c8eeb">OV02E10 camera sensor</a>, this should e.g. enable the camera to work out of the box on <span><span>Dell Precision 5690 laptops. When combined with item 3. below and the <a href="https://koji.rpmfusion.org/koji/buildinfo?buildID=30990">USBIO drivers from rpmfusion</a> this should also e.g. enable the camera on other laptop models like e.g. the </span></span><span><span>Dell Latitude 7450.</span></span></li><li>Support for the <a href="https://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git/commit/?h=for-next&amp;id=c5d0393272048748ace2dd4ff8326fc0bf70b262">special handshake GPIO</a> used to turn on the sensor and allow sensor i2c-access on various new laptop models using the Lattice MIPI aggregator FPGA / USBIO chip.</li></ol><br />If you want to give this a test using the libcamera-softwareISP FOSS stack, run the following commands:<br /><br />sudo rm -f /etc/modprobe.d/ipu6-driver-select.conf<br />sudo dnf update 'kernel*'<br />sudo dnf install libcamera-qcam<br />reboot<br />qcam<br /><br />Note the colors being washed out and/or the image possibly being a bit over or under exposed is expected behavior ATM, this is due to the software ISP needing more work to improve the image quality. If your camera still does not work after these changes and you've not filed a bug for this camera already please file a bug following <a href="https://fedoraproject.org/wiki/Changes/X86_MIPI_CameraHwEnablement#How_To_Test">these instructions</a>.<br /><br />See my <a href="https://hansdegoede.dreamwidth.org/29920.html">previous blogpost</a> on how to also test Intel's proprietary stack from rpmfusion if you also have that installed.<br /><br /><img alt="comment count unavailable" height="12" src="https://www.dreamwidth.org/tools/commentcount?user=hansdegoede&amp;ditemid=29996" style="vertical-align: middle;" width="30" /> comments</description><author>Hans de Goede</author><dc:creator>Hans de Goede</dc:creator><pubDate>Fri, 23 May 2025 16:09:31 GMT</pubDate><guid isPermaLink="true">https://hansdegoede.dreamwidth.org/29996.html</guid></item><item><title>Hans de Goede: IPU6 FOSS and proprietary stack co-existence</title><link>https://hansdegoede.dreamwidth.org/29920.html</link><description>Since the set of rpmfusion <a href="https://koji.rpmfusion.org/koji/packageinfo?packageID=661">intel-ipu6-kmod</a> +&nbsp;<a href="https://koji.rpmfusion.org/koji/packageinfo?packageID=653">ipu6-camera-*</a> package updates from last February the FOSS libcamera-softwareISP and Intel's proprietary stack using the Intel hardware ISP can now co-exist on Fedora systems, sharing the mainline IPU6-CSI2 receiver driver.<br /><br />Because of this it is no longer necessary to blacklist the kernel-modules from the other stack. Unfortunately when the rpmfusion packages first generated &quot;/etc/modprobe.d/ipu6-driver-select.conf&quot; for blacklisting this file was not marked as &quot;%ghost&quot; in the specfile and now with the February <a href="https://koji.rpmfusion.org/koji/packageinfo?packageID=653">ipu6-camera-hal</a> the file has been removed from the package. This means that if you've jumped from an old ipu6-camera-hal where the file was not marked as &quot;%ghost directly to the latest you may still have the modprobe.d conf file around causing issues. To fix this run:<br /><br />sudo rm -f /etc/modprobe.d/ipu6-driver-select.conf<br /><br />and then reboot. I'll also add this as post-install script to the ipu6-camera-hal packages, to fix systems being broken because of this.<br /><br />If you want the rpmfusion packages because your system needs the USBIO drivers, but you do not want the proprietary stack, you can run the following command to disable the proprietary stack:<br /><br />sudo ipu6-driver-select foss<br /><br />Or if you have disabled the prorietary stack in the past and want to give it a try, run:<br /><br />sudo ipu6-driver-select proprietary<br /><br />To test switching between the 2 stacks in Firefox go to <a href="https://mozilla.github.io/webrtc-landing/gum_test.html">Mozilla's webrtc test page</a> and click on the &quot;Camera&quot; button, you should now get a camera permisson dialog with 2 cameras: &quot;Built in Front Camera&quot; and &quot;Intel MIPI Camera (V4L2)&quot; the &quot;Built in Front Camera&quot; is the FOSS stack and the &quot;Intel MIPI Camera (V4L2)&quot; is the proprietary stack. Note the FOSS stack will show a strongly zoomed in (cropped) image, this is caused by the GUM test-page, in e.g. google-meet this will not be the case.<br /><br />Unfortunately switching between the 2 cameras in jitsi does not work well. The jitsi camera selector tries to show a preview of both cameras at the same time and while one stack is streaming the other stack cannot access the camera. You should be able to switch by: 1. Selecting the camera you want 2. Closing the jitsi tab 3. wait a few seconds for the camera to stop streaming 4. open jitsi in a new tab.<br /><br />Note I already mentioned most of this in my previous <a href="https://hansdegoede.dreamwidth.org/29477.html">blog post</a> but it was a bit buried there.<br /><br /><img alt="comment count unavailable" height="12" src="https://www.dreamwidth.org/tools/commentcount?user=hansdegoede&amp;ditemid=29920" style="vertical-align: middle;" width="30" /> comments</description><author>Hans de Goede</author><dc:creator>Hans de Goede</dc:creator><pubDate>Fri, 23 May 2025 15:42:26 GMT</pubDate><guid isPermaLink="true">https://hansdegoede.dreamwidth.org/29920.html</guid></item><item><title>This Week in GNOME: #201 Dithered Images</title><link>https://thisweek.gnome.org/posts/2025/05/twig-201/</link><description><p>Update on what happened across the GNOME project in the week from May 16 to May 23.<!--more--></p>
<h2 id="gnome-core-apps-and-libraries">GNOME Core Apps and Libraries</h2>
<h3 id="glib">GLib <a href="https://gitlab.gnome.org/GNOME/glib">↗</a></h3>
<p>The low-level core library that forms the basis for projects such as GTK and GNOME.</p>
<p><a href="https://thisweek.gnome.org/reporters/38fcb3d7ec47a7787c0e20673542111b1fc08f6b2223e45be83d79fae8ebaa83">Philip Withnall</a> reports</p>
<blockquote>
<p>Axel Karjalainen has added <code>SYSLOG_IDENTIFIER</code> to journald log messages outputted by GLib’s default log handler, which should make journal messages from your app easier to find (see <a href="https://gitlab.gnome.org/GNOME/glib/-/merge_requests/4589">https://gitlab.gnome.org/GNOME/glib/-/merge_requests/4589</a>)</p>
</blockquote>
<h3 id="web">Web <a href="https://gitlab.gnome.org/GNOME/epiphany">↗</a></h3>
<p>Web browser for the GNOME desktop.</p>
<p><a href="https://thisweek.gnome.org/reporters/c100c9b389d534f2cb1c127af169fcc7c8068a1d4eddd38ca0f0d823f67177fb">adrian</a> reports</p>
<blockquote>
<p>Web has <a href="https://gitlab.gnome.org/GNOME/epiphany/-/merge_requests/1323">gained</a> a preferences page that allows toggling WebKit features at run-time. Tech Preview builds of the browser will show the settings page by default, while in regular releases it is hidden and may be enabled with the following command:</p>
<pre class="astro-code github-dark" style="background-color: #24292e; color: #e1e4e8;" tabindex="0"><code><span class="line"><span style="color: #B392F0;">gsettings</span><span style="color: #9ECBFF;"> set</span><span style="color: #9ECBFF;"> org.gnome.Epiphany.ui</span><span style="color: #9ECBFF;"> webkit-features-page</span><span style="color: #79B8FF;"> true</span></span></code></pre>
<p>This should allow frontend developers to test upcoming features more easily. Note that the settings for WebKit features are <em>not</em> persistent, and they will be reset to their default state on every launch.</p>
<p><img height="606" src="https://thisweek.gnome.org/_astro/ephy-features-prefs-dark.BCnvhl3J_Z2sIbxQ.webp" width="799" /></p>
</blockquote>
<h2 id="gnome-circle-apps-and-libraries">GNOME Circle Apps and Libraries</h2>
<h3 id="déjà-dup-backups">Déjà Dup Backups <a href="https://apps.gnome.org/DejaDup/">↗</a></h3>
<p>A simple backup tool.</p>
<p><a href="https://thisweek.gnome.org/reporters/3c28343ad45b86bbdc6c71d329672cea0fe60f3462f88407527a2822d4d304ba">Michael Terry</a> announces</p>
<blockquote>
<p>Déjà Dup Backups has <a href="https://discourse.gnome.org/t/deja-dup-backups-gains-restic-mount-support/28960">landed support</a> for <code>restic mount</code> which lets you restore files using your native file manager (instead of the previous in-app file browser)</p>
</blockquote>
<h2 id="third-party-projects">Third Party Projects</h2>
<p><a href="https://thisweek.gnome.org/reporters/29d8f060a5d8230289ccee74afd00c285610280c4229bde04bb59559aebbdadd">tfuxu</a> announces</p>
<blockquote>
<p><a href="https://github.com/tfuxu/Halftone">Halftone</a> 0.7.0 introduces a long-awaited feature: support for image zooming! From now on, you can easily check even the smallest details simply by using the scroll wheel or gestures on your touchpad/touchscreen.</p>
<p>This release also improves stability and user experience by properly handling and informing the user about errors occurring during image loading. No more endless loading screens!</p>
<p>As always, you can download it from <a href="https://flathub.org/apps/io.github.tfuxu.Halftone">Flathub</a>.</p>
<p><img height="997" src="https://thisweek.gnome.org/_astro/twig-201-halftone.Buxfnbmv_91lQE.webp" width="1397" /></p>
</blockquote>
<p><a href="https://thisweek.gnome.org/reporters/696a79d300f2c36e7120630dab1e85058bb69e6fa93840b82bc3dfa3b6977d3e">Semen Fomchenkov</a> announces</p>
<blockquote>
<p>Hello everyone This week, at ALT Gnome and ALT Linux Team, we released the settings center we developed with support for libpeas-based plugins. I have prepared a short text with its description, I hope it will help to better understand the essence of the idea. And some app UI screenshots: <a href="https://altlinux.space/alt-gnome/Tuner/src/branch/main/data/screenshots">https://altlinux.space/alt-gnome/Tuner/src/branch/main/data/screenshots</a></p>
<p><a href="https://altlinux.space/alt-gnome/Tuner"><strong>Tuner</strong></a> is an extensible settings management center for GNOME, featuring a modern graphical interface built with Libadwaita. Designed with a focus on flexibility and user convenience, Tuner allows every GNOME user to assemble a personalized control center tailored to their system configuration needs.</p>
<h3 id="key-features">Key Features:</h3>
<ul>
<li>
<p><strong>Plugin-Based Architecture</strong>: Tuner leverages libpeas to provide a dynamic and modular ecosystem. This means any developer can contribute their own functionality in the form of a plugin, offering unlimited opportunities for expansion and customization.</p>
</li>
<li>
<p><strong>Simplified GSettings Integration</strong>: Inspired by the GNOME Refine project, Tuner implements a mechanism for creating widgets using <code>.blp</code> (Blueprint) files. This simplifies the binding of GSettings keys to interface elements and significantly reduces boilerplate code for developers.</p>
</li>
<li>
<p><strong>Modern Libadwaita Interface</strong>: The user interface follows GNOME HIG guidelines, ensuring a clean, adaptive, and touch-friendly experience.</p>
</li>
<li>
<p><strong>Distribution-Specific Modules</strong>: GNOME-based distributions can use Tuner as a hub for distribution-specific settings. For example, a <a href="https://altlinux.space/alt-gnome/TunerPanel">TunerPanel</a> module for managing panel mode, integrated into the “Appearance” section(Created by <a href="https://altlinux.space/alt-gnome/TunerTweaks">TunerTweaks</a> module) for ALT Linux, has already been implemented.</p>
</li>
</ul>
<h3 id="getting-started-with-plugin-development">Getting Started with Plugin Development:</h3>
<p>Developers interested in extending Tuner can refer to the <a href="https://altlinux.space/alt-gnome/Tuner/wiki/Creating-plugin">quick guide</a> on plugin creation. The guide includes an example of writing a plugin in Vala and integrating it with Tuner’s architecture. Additionally, template repositories are available for creating plugins in both <a href="https://altlinux.space/alt-gnome/TunerBase">Vala</a> and <a href="https://altlinux.space/alt-gnome/TunerPython">Python</a>, along with documentation in <a href="https://alt-gnome.github.io/Tuner/">Valadoc</a> format.</p>
<p><img height="722" src="https://thisweek.gnome.org/_astro/Tuner1.BmFuLlcx_Z4x81A.webp" width="922" />
</p>
<p><img height="722" src="https://thisweek.gnome.org/_astro/Tuner2.zLYUWQLR_Z1Tmd6H.webp" width="922" /></p>
<p><img height="722" src="https://thisweek.gnome.org/_astro/Tuner3._mv0vVdf_2uqCCn.webp" width="922" /></p>
</blockquote>
<h3 id="phosh">Phosh <a href="https://gitlab.gnome.org/World/Phosh/phosh">↗</a></h3>
<p>A pure wayland shell for mobile devices.</p>
<p><a href="https://thisweek.gnome.org/reporters/9e476470b17d2c911813055b18b1851c0ecd3959463838ca01d2c99e7e85391e">Guido</a> says</p>
<blockquote>
<p><a href="https://gitlab.gnome.org/World/Phosh/phosh">Phosh</a> 0.47.0 is out:</p>
<p>phosh’s Feedback Quick Setting now has a status page featuring a “Do not disturb” toggle (that sets the profile to “silent” and disables notification banners) and a button for quick access to the Feedback settings (to e.g. tweak Feedback for individual apps or tune ring tones).</p>
<p>The on screen keyboard makes better use available space when showing auto completions, adds Emojis to the auto completions and can show a popover for the currently typed character.</p>
<p>There’s more, see the full details at <a href="https://phosh.mobi/releases/rel-0.47.0/">here</a></p>
<p><img height="1440" src="https://thisweek.gnome.org/_astro/phosh-do-not-disturb.pF0nYM3T_1l9b29.webp" width="720" />
</p>
<p><img height="1440" src="https://thisweek.gnome.org/_astro/phosh-osk-emoji.C029uyIJ_11wwyy.webp" width="720" /></p>
</blockquote>
<h2 id="thats-all-for-this-week">That’s all for this week!</h2>
<p>See you next week, and be sure to stop by <a href="https://matrix.to/#/#thisweek:gnome.org">#thisweek:gnome.org</a> with updates on your own projects!</p></description><author>This Week in GNOME</author><dc:creator>This Week in GNOME</dc:creator><pubDate>Fri, 23 May 2025 00:00:00 GMT</pubDate><guid isPermaLink="true">https://thisweek.gnome.org/posts/2025/05/twig-201/</guid></item><item><title>Sam Thursfield: Status update, 22/05/2025</title><link>https://samthursfield.wordpress.com/2025/05/22/status-update-22-05-2025/</link><description><p>Hello. It is May, my favourite month. I&#8217;m in Manchester, mainly as I&#8217;m moving projects at work, and its useful to do that face-to-face.</p>
<p></p>
<p>For the last 2 and a half years, my job has mostly involved a huge, old application inside a big company, which I can&#8217;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&#8217;t cause any major outages in all that time. I will take that as a sign of success. (There&#8217;s still plenty of legacy application to decommission, but it&#8217;s no longer my problem).</p>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><a href="https://samthursfield.wordpress.com/wp-content/uploads/2025/05/img_20250522_191818.jpg"><img alt="A green tiled outside wall with graffiti" class="wp-image-2924" height="1024" src="https://samthursfield.wordpress.com/wp-content/uploads/2025/05/img_20250522_191818.jpg?w=768" style="width: 640px;" width="768" /></a></figure></div>
<p>During that project I tried to make time to work on end to end testing of GNOME using openQA as well&#8230; with some success, in the sense that GNOME OS still has working openQA tests, but I didn&#8217;t do very well at making <a href="https://gitlab.gnome.org/GNOME/openqa-tests/-/issues">improvements</a>, and I still don&#8217;t know if or when I&#8217;ll ever have time to look further at end-to-end testing for graphical desktops. We did a great Outreachy internship at least with <a href="https://tanjuachaleke.wordpress.com/2023/12/11/embracing-growth-curiosity-and-inclusivity-my-outreachy-journey-from-bamenda-cameroon-to-gnome/">Tanju</a> and <a href="https://dorothykabarozi.wordpress.com/2024/03/12/overall-experience-my-outreachy-internship-with-gnome/">Dorothy</a> adding quite a few new tests.</p>
<p>Several distros test GNOME downstream, but we still don&#8217;t have much of a story of how they could collaborate upstream. We do still have the monthly <a href="https://github.com/linux-qa/linux-qa/">Linux QA call</a> so we have a space to coordinate work in that area&#8230; but we need people who can <em>do</em> the work.</p>
<p>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 &#8220;safety certificate&#8221; &#8212; it represents some thinking about risks and how to detect and mitigate them. I know Codethink is doing some <a href="https://www.codethink.co.uk/news/trustable-software.html">original thinking in this area</a>. It&#8217;s interesting to join in and learn about what we did so far and where it&#8217;s all going.</p>
<p></p>
<h2 class="wp-block-heading">Giving credit to people</h2>
<p>The new <a href="https://www.gnome.org/">GNOME website</a>, which I really like, describes the project as &#8220;An independent computing platform for everyone&#8221;.</p>
<p>There is something political about that statement: it&#8217;s implying that we should work towards equal access to computer technology. Something which is not currently very equal. Writing software isn&#8217;t going to solve that on its own, but it feels like a necessary part of the puzzle.</p>
<p>If I was writing a more literal tagline for the GNOME project, I might write: &#8220;A largely anarchic group maintaining complex software used by millions of people, often for little or no money.&#8221; I suppose that describes many open source projects.</p>
<p>Something that always bugs me is how a lot of this work is invisible. That&#8217;s a problem everywhere: from big companies and governments, down to families and local community groups, there&#8217;s usually somebody who does more work than they get credit for.</p>
<p>But we can work to give credit where credit is due. And recently several people have done that!<br /><br />Outgoing ED Richard Littauer in <a href="https://blogs.gnome.org/richardlitt/2025/05/02/so-long-and-thanks-for-all-the-fish/">&#8220;So Long and Thanks For All the Fish&#8221;</a> shouted out a load of people who work hard in the GNOME Foundation to make stuff work. </p>
<p>Then incoming GNOME ED, Steven Deobald wrote a very detailed <a href="https://blogs.gnome.org/steven/2025/05/09/2025-05-09-foundation-report/">&#8220;2025-05-09 Foundation Report&#8221;</a> (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.</p>
<p>And then Georges wrote about some people working hard on accessibility in <a href="https://feaneron.com/2025/05/15/in-celebration-of-accessibility/">&#8220;In celebration of accessibility&#8221;</a>.</p>
<p>Giving credit is important and helpful. In fact, that&#8217;s just given me an idea, but explaining that will have to wait til next month.</p>
<p></p>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><a href="https://samthursfield.wordpress.com/wp-content/uploads/2025/05/img_20250520_130132.jpg"><img alt="canal in manchester" class="wp-image-2925" height="1024" src="https://samthursfield.wordpress.com/wp-content/uploads/2025/05/img_20250520_130132.jpg?w=768" style="width: 640px;" width="768" /></a></figure></div></description><author>Sam Thursfield</author><dc:creator>Sam Thursfield</dc:creator><pubDate>Thu, 22 May 2025 22:23:09 GMT</pubDate><guid isPermaLink="true">https://samthursfield.wordpress.com/2025/05/22/status-update-22-05-2025/</guid></item><item><title>Andy Wingo: whippet lab notebook: guile, heuristics, and heap growth</title><link>https://wingolog.org/archives/2025/05/22/whippet-lab-notebook-guile-heuristics-and-heap-growth</link><description><div><p>Greets all! Another brief note today. I have gotten Guile working with
one of the <a href="https://arxiv.org/abs/2503.16971">Nofl</a>-based collectors, specifically the
one that scans all edges conservatively (<a href="https://github.com/wingo/whippet/blob/main/doc/collector-mmc.md#conservative-heap-scanning"><tt>heap-conservative-mmc</tt> /
<tt>heap-conservative-parallel-mmc</tt></a>). Hurrah!</p><p>It was a pleasant surprise how easy it was to switch—from the user’s
point of view, you just pass <tt>--with-gc=heap-conservative-parallel-mmc</tt>
to Guile’s build (on the <tt>wip-whippet</tt> branch); when developing I also pass <tt>--with-gc-debug</tt>, 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.</p><h3>growable heaps</h3><p>Whippet has <a href="https://wingolog.org/archives/2023/01/27/three-approaches-to-heap-sizing">three heap sizing
strategies</a>:
fixed, growable, and adaptive
(<a href="https://marisa.moe/balancer.html">MemBalancer</a>). 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.</p><p>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 <tt>GUILE_GC_OPTIONS</tt> environment variable.
For example to set an initial heap size of 10 megabytes and a 4×
multiplier, you would set
<tt>GUILE_GC_OPTIONS=heap-size-multiplier=4,heap-size=10M</tt>.</p><p>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.</p><p>I actually ran into this case during Guile’s bootstrap, while allocating
a 7072-byte vector. So it’s a thing that needs fixing!</p><h3>observations</h3><p>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,
<a href="https://wingolog.org/archives/2024/07/10/copying-collectors-with-block-structured-heaps-are-unreliable">modulo
any block-level fragmentation</a>.</p><p>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.</p><p>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).</p><p>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.</p><p>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.</p><h3>for nofl?</h3><p>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.</p><p>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.</p><p>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 <i>overflow allocation</i>: 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 <i>overflow block</i>, which is taken from the
empty block set. This reduces fragmentation (holes which were not used
for allocation because they were too small).</p><p>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 <tt>clz(min-size)–clz(size)</tt> blocks before taking from the empty block list, which would at least bound the
sweeping work of any given allocation.</p><h3>fin</h3><p>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!</p></div></description><author>Andy Wingo</author><dc:creator>Andy Wingo</dc:creator><pubDate>Thu, 22 May 2025 10:05:35 GMT</pubDate><guid isPermaLink="true">https://wingolog.org/archives/2025/05/22/whippet-lab-notebook-guile-heuristics-and-heap-growth</guid></item><item><title>Jakub Steiner: Scavengers Reign</title><link>https://blog.jimmac.eu/2025/scavengers-reign/</link><description><p><img alt="Scavengers Reign" src="https://blog.jimmac.eu/2025/scavengers-reign/scavengers.webp" /></p>
<p>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.</p>
<p>And now I’ve watched the final 12. episode and I already miss it. So I need to say: watch it. It’s something special.</p>
<p>The series is a full-length expansion of the short <a href="https://www.youtube.com/watch?v=1TRzemJbUsw">Scavengers</a> 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.</p>
<p>Neither Netflix nor HBO wanted to greenlight the <a href="https://www.youtube.com/watch?v=kSEPJ9OtQb8">second season</a>. But the show has come to a very satisfying closure, so I’m not complaining.</p>
<p>★★★★★</p></description><author>Jakub Steiner</author><dc:creator>Jakub Steiner</dc:creator><pubDate>Thu, 22 May 2025 00:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.jimmac.eu/2025/scavengers-reign/</guid></item><item><title>Peter Hutterer: libinput and Lua plugins</title><link>http://who-t.blogspot.com/2025/05/libinput-and-lua-plugins.html</link><description><p><em>First of all, what's outlined here <strong>should</strong> 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 <a href="https://gitlab.freedesktop.org/libinput/libinput/-/merge_requests/1192">libinput!1192</a> merge request. I'd specifically like to see some feedback from people familiar with Lua APIs. With this out of the way:</em>
</p>
<p>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.</p>
<p>The motivation for this are a few unfixable issues - issues we knew <b>how</b> 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.
</p>
<p>
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.
</p>
<p>
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 <a href="https://who-t.blogspot.com/2024/04/udev-hid-bpf-quickstart-tooling-to-fix.html">udev-hid-bpf</a> 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 <i>struct input_events</i> up to the terminating <i>SYN_REPORT</i>. 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.
</p>
<p>
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:
<pre>
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)
</pre>
This file can be dropped into <i>/etc/libinput/plugins/10-mx-master.lua</i> 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.
</p>
<p>
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]
</p>
<p>
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.
</p>
<p>
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 :)
</p>
<p>
<small>[1] Benjamin Tissoires actually had a go at WASM plugins (via rust). But ... a lot of effort for rather small gains over Lua</small>
</p></description><author>Peter Hutterer</author><dc:creator>Peter Hutterer</dc:creator><pubDate>Wed, 21 May 2025 14:09:00 GMT</pubDate><guid isPermaLink="true">http://who-t.blogspot.com/2025/05/libinput-and-lua-plugins.html</guid></item><item><title>Engagement Blog: Call for Participation</title><link>https://blogs.gnome.org/engagement/2025/05/21/call-for-participation/</link><description><h1></h1>
<h1 class="part" id="Call-for-Participation---Promo-Team-for-endof10org">Call for Participation &#8211; Promo Team for <a class="external" href="http://endof10.org" rel="noopener" target="_blank">endof10.org</a></h1>
<p class="part">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.</p>
<h2 class="part" id="What"><i class="fa fa-link"></i>What</h2>
<p class="part">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.</p>
<h2 class="part" id="Who"><i class="fa fa-link"></i>Who</h2>
<p class="part">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.</p>
<h2 class="part" id="Why"><i class="fa fa-link"></i>Why</h2>
<p class="part">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.</p>
<h2 class="part" id="How"><i class="fa fa-link"></i>How</h2>
<p class="part">You can participate by reaching out to us on <a class="hashtag u-tag u-category" href="https://blogs.gnome.org/engagement/tag/engagement/" rel="tag">#engagement</a>:gnome.org on Matrix.</p>
<p class="part">If you are interested in End Of 10 but don’t feel you can commit to the Promo Team, you are welcome to join <a class="hashtag u-tag u-category" href="https://blogs.gnome.org/engagement/tag/endof10/" rel="tag">#endof10</a>-en:kde.org on Matrix.</p></description><author>Engagement Blog</author><dc:creator>Engagement Blog</dc:creator><pubDate>Wed, 21 May 2025 01:01:26 GMT</pubDate><guid isPermaLink="true">https://blogs.gnome.org/engagement/2025/05/21/call-for-participation/</guid></item><item><title>Christian Hergert: Simplifying LSP Selection</title><link>https://blogs.gnome.org/chergert/2025/05/20/simplifying-lsp-selection/</link><description><p>With <a class="external" href="https://gitlab.gnome.org/chergert/foundry">Foundry</a> I want to make LSP management much easier than it currently is in <a class="external" href="https://gitlab.gnome.org/GNOME/gnome-builder">Builder</a>.</p>
<p>We have the <code>foundry lsp run python3</code> command where <code>python3</code> 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 <code>stdin</code>/<code>stdout</code>.</p>
<p>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.</p>
<p>Keep in mind the language identifiers should match GtkSourceView language identifiers.</p>
<pre>
# 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
</pre>
<p>If there is a clear LSP that your project should be using by all contributors, add <code>--project</code> and it will update the value in the projects settings.</p></description><author>Christian Hergert</author><dc:creator>Christian Hergert</dc:creator><pubDate>Tue, 20 May 2025 23:06:20 GMT</pubDate><guid isPermaLink="true">https://blogs.gnome.org/chergert/2025/05/20/simplifying-lsp-selection/</guid></item><item><title>Jakub Steiner: Ode to HTML</title><link>https://blog.jimmac.eu/2025/plain-html/</link><description><p>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.</p>
<p>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.)</p>
<!--
The reason I ever got interested in Linux was partly due to the difficulties getting a PHP interpreter running on Windows (I was shocked to see my student freelance side job autoroku.cz continue to be run at production for years).
-->
<p>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 <a href="https://middlemanapp.com/">Middleman</a>, then <a href="https://jekyllrb.com/">Jekyll</a> 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.</p>
<p><img alt="Javascript no thank you" src="https://blog.jimmac.eu/2025/plain-html/web-design.webp" /></p>
<p>People are often surprised to see major projects like <a href="https://www.gnome.org">gnome.org</a>, <a href="https://brand.gnome.org">brand.gnome.org</a>, <a href="https://circle.gnome.org">circle.gnome.org</a> and my own <a href="https://jimmac.eu">jimmac.eu</a> built with plain HTML. Yes you <em>do repeat yourself</em> 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.</p>
<p>Do I miss some form of <code class="language-plaintext highlighter-rouge">include()</code>? 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.</p></description><author>Jakub Steiner</author><dc:creator>Jakub Steiner</dc:creator><pubDate>Wed, 21 May 2025 00:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.jimmac.eu/2025/plain-html/</guid></item><item><title>Jussi Pakkanen: Optimizing page splits in books</title><link>https://nibblestew.blogspot.com/2025/05/optimizing-page-splits-in-books.html</link><description><p><a href="https://nibblestew.blogspot.com/2022/06/attempting-to-create-aesthetic-global.html">Earlier in this blog</a> we looked at how to generate a justified block of text, which is nowadays usually done with the <a href="https://en.wikipedia.org/wiki/Knuth%E2%80%93Plass_line-breaking_algorithm">Knuth-Plass algorithm</a>. 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.</p><p>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:</p><p></p><ol style="text-align: left;"><li><i>Orphan lines</i>, a paragraph at the bottom of a page that has only one line of text.</li><li><i>Widow lines</i>, a paragraph that starts a new page and has only one line of text.</li><li><i>Spread imbalance</i>, where the two pages on a spread have different number of lines on them (when both are "full pages")</li></ol>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.<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDWUM9krkI_ZETDBADHmqsXfkzeCpbqRPcPSDARzJBf01U9VvIriZ2LZw6-p7mJxBosNbvMOVR76OSbimYaOSGcsXNyU9lSdISEZWWNkssCgxLDAytLoN69nszx0zDKwH2iU808iLgWwBdxslqh6QO_ljeuKHvsdrh-Mbzj7cGg8NyKyLMPpk0hRqV3Lo/s1050/same_text.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDWUM9krkI_ZETDBADHmqsXfkzeCpbqRPcPSDARzJBf01U9VvIriZ2LZw6-p7mJxBosNbvMOVR76OSbimYaOSGcsXNyU9lSdISEZWWNkssCgxLDAytLoN69nszx0zDKwH2iU808iLgWwBdxslqh6QO_ljeuKHvsdrh-Mbzj7cGg8NyKyLMPpk0hRqV3Lo/s320/same_text.png" width="291" /></a></div><p>The two problems are exactly the same and can be solved in the same way. I have implemented this in the <a href="https://github.com/jpakkane/chapterizer">Chapterizer book generator program</a>. 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.</p><p>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.</p><h1 style="text-align: left;">Has this been done before?</h1><p style="text-align: left;">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.</p><p style="text-align: left;">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.</p><p style="text-align: left;">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.</p><p style="text-align: left;">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.</p><p style="text-align: left;">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.</p></description><author>Jussi Pakkanen</author><dc:creator>Jussi Pakkanen</dc:creator><pubDate>Mon, 19 May 2025 20:10:00 GMT</pubDate><guid isPermaLink="true">https://nibblestew.blogspot.com/2025/05/optimizing-page-splits-in-books.html</guid></item><item><title>Cassidy James Blaede: Elect the next GNOME Foundation Board of Directors for 2025!</title><link>https://cassidyjames.com/blog/elect-gnome-foundation-board-directors-2025/</link><description><img src="https://cassidyjames.com/images/blog/gnome-foot-logo-rebrand/foot-dark.png" />
<p>It’s everyone’s favorite time of year, election season! …Okay, maybe not the most exciting thing—but an extremely important one nonetheless.</p>
<p>For anyone who doesn’t know, <a href="https://gnome.org">GNOME</a> 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 <a href="https://handbook.gnome.org/foundation.html">foundation</a>. 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.</p>
<p>If you contribute to GNOME, you’re eligible to become a <em>member</em> of the GNOME Foundation, which gets you some <a href="https://handbook.gnome.org/foundation/membership-benefits.html">perks</a> (like an @gnome.org email address and Matrix account, blog hosting and syndication, and access to Nextcloud and video conferencing tools)—but most importantly, <strong>GNOME Foundation members vote to elect the Board of Directors</strong>. If you contribute to GNOME, I highly recommend you <a href="https://foundation.gnome.org/membership/">become a member</a>: it looks good for you, but it also helps ensure the GNOME Foundation is directly influenced and governed by contributors themselves.</p>
<h2 id="im-running-for-the-board">I’m Running for the Board!</h2>
<p>I realized today I never actually announced this on my blog (just <a href="https://mastodon.blaede.family/@cassidy/114186002034585963">via social media</a>), but <strong>this past March I was appointed to the GNOME Foundation Board of Directors</strong> to fill a vacancy.</p>
<p>However, the seat I filled was up for re-election in this very next cycle, so I’m happy to officially announce: <strong>I’m running for the GNOME Foundation Board of Directors</strong>! As part of announcing my candidacy, I was asked to share why I would like to serve on the board. I posted this <a href="https://discourse.gnome.org/t/2025-board-candidate-cassidy-james-blaede/28982">on the GNOME Discourse</a>, but for convenience, I’ve copied it below:</p>
<blockquote>
<p>Hey everyone,</p>
<p>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.</p>
<p>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.</p>
<p>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:</p>
<ul>
<li>
<p>Clearer and more frequent communication from the GNOME Foundation, including by helping write and edit blog posts and announcements</p>
</li>
<li>
<p>Exploring and supporting fundraising opportunities including with users, OEMs, and downstream projects</p>
</li>
<li>
<p>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</p>
</li>
<li>
<p>More widely communicating the impact, influence, and importance of GNOME and Flathub to raise awareness beyond the existing contributor community</p>
</li>
<li>
<p>Helping ensure that the Foundation reflects the interests of the contributor community</p>
</li>
</ul>
<p>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.</p>
<p>Thank you for your consideration!</p>
</blockquote>
<h2 id="become-a-member-and-vote">Become a Member, and Vote!</h2>
<p>Voting will be open for <strong>two weeks beginning June 5, 2025.</strong> If you contribute to GNOME, now is a great time to ensure you’re a member so you can vote in time; check the <a href="https://discourse.gnome.org/t/gnome-foundation-board-of-directors-elections-2025/28980">GNOME Discourse announcement</a> for all of the specific dates and details. And don’t forget to actually vote once it begins. :)</p></description><author>Cassidy James Blaede</author><dc:creator>Cassidy James Blaede</dc:creator><pubDate>Mon, 19 May 2025 00:00:00 GMT</pubDate><guid isPermaLink="true">https://cassidyjames.com/blog/elect-gnome-foundation-board-directors-2025/</guid></item><item><title>Sam Thursfield: Book club, 2025 edition</title><link>https://samthursfield.wordpress.com/2025/05/18/book-club-2025-edition/</link><description><p>It&#8217;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? <em>(Or, causing <a href="https://www.ochaopt.org/content/reported-impact-snapshot-gaza-strip-14-may-2025">&#8220;high levels of acute food insecurity&#8221;</a> as the UN refer to it).</em></p>
<p>Nothing in the world is simple, though, is it.</p>
<p>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.</p>
<p>If you&#8217;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.</p>
<p>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&#8217;re <em>starting</em> to get a grip on why living standards for everyone except the rich are nosediving.</p>
<p>Lets go back to an older technology which changed the world centuries ago: books. I am going to recommend a few books.</p>
<h2 class="wp-block-heading">Technofeudalism (by Yannis Varoufakis)</h2>
<p></p>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><a href="https://samthursfield.wordpress.com/wp-content/uploads/2025/05/image-1.png"><img alt="Cover of Technofeudalism" class="wp-image-2906" height="1023" src="https://samthursfield.wordpress.com/wp-content/uploads/2025/05/image-1.png?w=665" style="width: auto; height: 480px;" width="665" /></a></figure></div>
<p>The book&#8217;s preface outlines the theory: capital has mutated into a much more powerful and dangerous form of itself. Two things caused it: the &#8220;privatization of the internet&#8221;, 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.</p>
<p>Yanis&#8217; concept of technofuedalism is this:</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>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.</p>
</blockquote>
<p></p>
<p>Many people depend on cloud platforms<em> </em>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&#8217;s not just individuals. Many capitalist businesses now rely on sites like Amazon.com for most of their sales. Everyone has to pay <em>cloud rent</em> to the overlord.</p>
<p></p>
<p>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&#8217;t your traditional monopoly, though &#8212; because cloud platforms also &#8220;personalize&#8221; 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 <em>cloud capital</em>.</p>
<p>The concept of <em>cloud capital</em> 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&#8217;t pay you to make app store apps. Tiktok don&#8217;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.</p>
<p>In my last <a href="https://samthursfield.wordpress.com/2025/04/11/status-update-11-04-2025/">status update</a> I mentioned some disillusionment with open source projects in the age of AI. Here&#8217;s another perspective: contributing to some open source projects now feels like giving free labour to cloud platform owners.</p>
<p>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.</p>
<p>It&#8217;s great that we maintain ethical, open computing platforms like GNOME, but the power struggle has moved on. I don&#8217;t expect to see huge innovations in desktop or mobile operating systems in the next decade.</p>
<p>Meanwhile, maintaining ethical cloud platforms is still a minority pursuit. Writing software doesn&#8217;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).</p>
<p>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 <em>what</em> makes the big tech companies of the USA and China so powerful.</p>
<p>If the cloudalists got to you already and you don&#8217;t have the attention span to buy and read a book any more, don&#8217;t worry! <a href="https://www.youtube.com/watch?v=Fhgm5b8BR0k">There&#8217;s also a video</a>.</p>
<h2 class="wp-block-heading">The Trading Game (by Gary Stevenson)</h2>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><a href="https://samthursfield.wordpress.com/wp-content/uploads/2025/05/image-2.png"><img alt="Cover of The Trading Game" class="wp-image-2912" height="1024" src="https://samthursfield.wordpress.com/wp-content/uploads/2025/05/image-2.png?w=667" style="width: auto; height: 480px;" width="667" /></a></figure></div>
<p>I&#8217;m late to the party with this one. Gary started a blog ten years ago (<a href="https://www.wealtheconomics.org/category/blog/">wealtheconomics.org</a>), and now runs a online video channel (<a href="https://www.youtube.com/c/GarysEconomics">GarysEconomics</a>).</p>
<p>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&#8217;t admit that the two things are linked. And he has over a million subscribers to his channel who know that too.</p>
<p>Why does it give me hope? First, he&#8217;s focused on helping us understand the problem. He does have a clickbait solution &#8212; &#8220;Tax wealth, not work&#8221; &#8212; but he also acknowledges that it&#8217;s slow, difficult and messy to affect national politics. He&#8217;s realistic about how difficult it is to tax the super-rich in a world of tax havens. And he&#8217;s been going at it for 10 years already.</p>
<h2 class="wp-block-heading">Careless People (by Sarah Wynn-Williams)</h2>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><a href="https://samthursfield.wordpress.com/wp-content/uploads/2025/05/image-3.png"><img alt="" class="wp-image-2915" height="1024" src="https://samthursfield.wordpress.com/wp-content/uploads/2025/05/image-3.png?w=665" style="width: auto; height: 480px;" width="665" /></a></figure></div>
<p>I listened to long discussion of this book on a podcast called <a href="https://shows.acast.com/chisme-corporativo">Chisme Corporativo</a>, run by two chicas from Mexico working to demystify the world of big business and USA power that controls much of the world.</p>
<p>The fact that Chisme Corporativo exists makes me very happy. If we&#8217;re going to live in a world where US corporations have more power than your own government &#8212; particularly the case in Latin America &#8212; 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.</p>
<p>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.</p>
<p>And he digested this bombshell for three hours, and his thought process led him to this: &#8220;Maybe I should run for president!&#8221;</p>
<p>That&#8217;s the type of person we are dealing with.</p>
<p></p>
<h2 class="wp-block-heading">What&#8217;s next</h2>
<p></p>
<p>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.</p>
<p>I&#8217;m going to leave you with this quote I stole blatantly from Gary Stevenson&#8217;s website:</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>“If we can really understand the problem, the answer will come out of it, because the answer is not separate from the problem.”<br />― J. Krishnamurti</p>
</blockquote>
<p>Have you read any of these books? What else would you add to this list?</p></description><author>Sam Thursfield</author><dc:creator>Sam Thursfield</dc:creator><pubDate>Sun, 18 May 2025 22:17:27 GMT</pubDate><guid isPermaLink="true">https://samthursfield.wordpress.com/2025/05/18/book-club-2025-edition/</guid></item><item><title>Thibault Saunier: gst-dots-viewer: A New Tool for GStreamer Pipeline Visualization</title><link>https://blogs.gnome.org/tsaunier/2025/05/16/gst-dots-viewer-a-new-tool-for-gstreamer-pipeline-visualization/</link><description><p>We’re happy to have released <code>gst-dots-viewer</code>, 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.</p>
<h2 id="What-is-gst-dots-viewer">What is gst-dots-viewer?</h2>
<p><code>gst-dots-viewer</code> is a server application that monitors a directory for <code>.dot</code> files generated by GStreamer’s pipeline visualization system and displays them in your web browser. It automatically updates the visualization whenever new <code>.dot</code> files are created, making it simpler to debug complex applications and understand the evolution of the pipelines at runtime.</p>
<h2 id="Key-Features">Key Features</h2>
<ul>
<li>Real-time Updates: Watch your pipelines evolve as your application runs</li>
<li>Interactive Visualization:
<ul>
<li>Click nodes to highlight pipeline elements</li>
<li>Use Shift-Ctrl-scroll or w/s keys to zoom</li>
<li>Drag-scroll support for easy navigation</li>
</ul>
</li>
<li>Easily deployable in cloud based environments</li>
</ul>
<h2 id="How-to-Use-It">How to Use It</h2>
<ol>
<li>Start the viewer server:
<pre><code class="bash hljs">gst-dots-viewer
</code></pre>
</li>
<li>Open your browser at <code>http://localhost:3000</code></li>
<li>Enable the dots tracer in your GStreamer application:
<pre><code class="bash hljs">GST_TRACERS=dots your-gstreamer-application
</code></pre>
</li>
</ol>
<p>The web page will automatically update whenever new pipeline are dumped, and you will be able to dump all pipelines from the web page.</p>
<h2 id="New-Dots-Tracer">New Dots Tracer</h2>
<p>As part of this release, we’ve also introduced a new <code>dots</code> tracer that replaces the previous manual approach to specify where to dump pipelines. The tracer can be activated simply by setting the <code>GST_TRACERS=dots</code> environment variable.</p>
<h2 id="Interactive-Pipeline-Dumps">Interactive Pipeline Dumps</h2>
<p>The <code>dots</code> tracer integrates with the <a class="external" href="https://gstreamer.freedesktop.org/documentation/rstracers/pipeline-snapshot.html?gi-language=c" rel="noopener" target="_blank"><code>pipeline-snapshot</code></a> 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.</p>
<h2 id="Future-Improvements">Future Improvements</h2>
<p>We plan on adding more feature and have this list of possibilities:</p>
<ul>
<li>Additional interactive features in the web interface</li>
<li>Enhanced visualization options</li>
<li>Integration with more GStreamer tracers to provide comprehensive debugging information. For example, we could integrate the newly released <a class="external" href="https://gstreamer.freedesktop.org/documentation/rstracers/memory-tracer.html?gi-language=c#memorytracer-page">memory-tracer</a> and <a class="external" href="https://gstreamer.freedesktop.org/documentation/rstracers/memory-tracer.html?gi-language=c#memorytracer-page">queue-level</a> tracers so to plot graphs about memory usage at any time.</li>
</ul>
<p>This could transform gst-dots-viewer into a more complete debugging and monitoring dashboard for GStreamer applications.</p>
<h2>Demo</h2>
<p></p></description><author>Thibault Saunier</author><dc:creator>Thibault Saunier</dc:creator><pubDate>Fri, 16 May 2025 09:35:48 GMT</pubDate><guid isPermaLink="true">https://blogs.gnome.org/tsaunier/2025/05/16/gst-dots-viewer-a-new-tool-for-gstreamer-pipeline-visualization/</guid></item><item><title>Alley Chaggar: Hi GSoC and GNOME</title><link>https://alleych.github.io/gnome/hello-gnome/</link><description><p><strong><em>Hey GNOME and GSoC! 👋</em></strong></p>
<p>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.</p>
<p><strong><em>🛠️ My GSoC Project: Improving JSON, XML, and YAML Integration in Vala</em></strong></p>
<p>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.</p>
<p>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.</p>
<p><strong><em>Thanks 🙏</em></strong></p>
<p>Also, big thanks to <a href="https://feborg.es/">Felipe Borges</a> for maintaining Planet GNOME, and to my mentor <a href="https://gitlab.gnome.org/lwildberg">Lorenz Wildberg</a>, who will be mentoring me on this project. 💙</p></description><author>Alley Chaggar</author><dc:creator>Alley Chaggar</dc:creator><pubDate>Fri, 16 May 2025 06:50:00 GMT</pubDate><guid isPermaLink="true">https://alleych.github.io/gnome/hello-gnome/</guid></item><item><title>Victor Ma: Introducing my GSoC 2025 project</title><link>https://victorma.ca/posts/gsoc-introduction/</link><description><p>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.</p>
<p>I have three mentors:</p>
<ul>
<li>Jonathan Blandford</li>
<li>Federico Mena Quintero</li>
<li>Tanmay Patil</li>
</ul>
<h2 id="gnome-crosswords">GNOME Crosswords</h2>
<p>The <a href="https://gitlab.gnome.org/jrb/crosswords">GNOME Crosswords</a> project consists of two applications:</p>
<ul>
<li>The <a href="https://flathub.org/apps/org.gnome.Crosswords">Crosswords player</a>, which lets you play crossword puzzles.</li>
<li>The <a href="https://flathub.org/apps/org.gnome.Crosswords.Editor">Crosswords editor</a>, which lets you create crossword puzzles.</li>
</ul>
<p>My project focuses on the Crosswords <em>editor</em>.</p>
<p>To learn more about GNOME Crosswords, check out this <a href="https://www.youtube.com/watch?v=fcQfpQLLzYo">GUADEC presentation</a> that Jonathan Blandford, the creator of Crosswords, gave last year.</p>
<h2 id="crossword-construction">Crossword construction</h2>
<p>Constructing a crossword puzzle is tricky. Constructing a <em>good</em> crossword puzzle is even trickier. The main difficulty lies in finding the right words to fill the grid.</p>
<p>Initially, it&rsquo;s quite easy. The grid starts off completely empty, so the first few words that you add don&rsquo;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&rsquo;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.</p>
<p>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&mdash;so you can get a domino effect of groups of rows/columns on the grid needing to be redone!</p>
<p>And that&rsquo;s just what you have to deal with to create a valid crossword puzzle. To create a <em>good</em> crossword puzzle, there are many more things to consider, some of which impose further restrictions on the words that you can use. For example:</p>
<ul>
<li>Are the words interesting?</li>
<li>Are there any words that are so uncommon as to feel unfair?</li>
<li>Does the puzzle have a good variety of parts of speech?</li>
<li>Is the grid rotationally symmetric?</li>
<li>Are there any unchecked cells?</li>
</ul>
<p>To learn more about the crossword construction process, check out <a href="https://www.nytimes.com/2018/09/14/crosswords/how-to-make-a-crossword-puzzle-the-series.html">How to Make a Crossword Puzzle</a> by <em>The New York Times</em>, as well as <a href="https://www.youtube.com/watch?v=aAqQnXHd7qk">How to Create a Crossword Puzzle</a> by <em>Wired</em>.</p>
<p>Suffice it to say, creating a good crossword puzzle is difficult. Thankfully, crossword construction software can make this process easier&mdash;certainly not easy&mdash;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 &ldquo;construction aid.&rdquo;</p>
<p>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.</p>
<h2 id="construction-aids">Construction aids</h2>
<p>Here&rsquo;s a list of potential construction aids that this project can add:</p>
<ul>
<li>Warning for unches (unchecked cells).</li>
<li>Warning for non-dictionary-words.</li>
<li>Warning for words with low familiarity.</li>
<li>Indicator for average familiarity of words.</li>
<li>Warning for crosswordese (overused crossword words).</li>
<li>Heat map for hard-to-fill cells.</li>
<li>Parts-of-speech distribution graph.</li>
</ul>
<p>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.</p>
<h2 id="mini-crossword">Mini crossword</h2>
<p>Here&rsquo;s a <a href="https://drive.google.com/file/d/1IjSUo3j_GK_Lw-x5mhFfX3qRLDZN2TOf">mini crossword</a> that I made! You can try it out by using the <a href="https://flathub.org/apps/org.gnome.Crosswords">Crosswords player</a>.</p>
<p>
<figure>
<img alt="My mini crossword" src="https://victorma.ca/posts/gsoc-introduction/mini.png" />
</figure>
</p></description><author>Victor Ma</author><dc:creator>Victor Ma</dc:creator><pubDate>Fri, 16 May 2025 00:00:00 GMT</pubDate><guid isPermaLink="true">https://victorma.ca/posts/gsoc-introduction/</guid></item><item><title>Andy Wingo: guile on whippet waypoint: goodbye, bdw-gc?</title><link>https://wingolog.org/archives/2025/05/15/guile-on-whippet-waypoint-goodbye-bdw-gc</link><description><div><p>Hey all, just a lab notebook entry today. I’ve been working on the
<a href="https://github.com/wingo/whippet">Whippet GC library</a> for about three
years now, learning a lot on the way. The goal has always been to
replace <a href="https://wingolog.org/archives/2025/03/04/whippet-lab-notebook-on-untagged-mallocs">Guile’s use of the Boehm-Demers-Weiser
collector</a>
with something more modern and maintainable. Last year I finally got to
the point that I felt <a href="https://wingolog.org/archives/2024/09/18/whippet-progress-update-feature-complete">Whippet was
feature-complete</a>,
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
<a href="https://git.savannah.gnu.org/cgit/guile.git/log/?h=wip-whippet">wip-whippet
branch</a>.</p><h3>the haps</h3><p>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.</p><p>Code-wise, the initial import of Whippet added some 18K lines to Guile’s
repository, as counted by <tt>git diff --stat</tt>, 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.</p><p>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.</p><p>Anyway, next waypoint will be trying out the version of Whippet’s
<a href="https://github.com/wingo/whippet/blob/main/doc/collector-mmc.md#conservative-heap-scanning">Nofl-based mostly-marking collector that traces all heap edges
conservatively</a>. 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!</p></div></description><author>Andy Wingo</author><dc:creator>Andy Wingo</dc:creator><pubDate>Thu, 15 May 2025 14:39:56 GMT</pubDate><guid isPermaLink="true">https://wingolog.org/archives/2025/05/15/guile-on-whippet-waypoint-goodbye-bdw-gc</guid></item><item><title>Georges Basile Stavracas Neto: In celebration of accessibility</title><link>https://feaneron.com/2025/05/15/in-celebration-of-accessibility/</link><description><p>Accessibility in the free and open source world is somewhat of a sensitive topic.</p>
<p>Given the principles of free software, one would think it would be the best possible place to advocate for accessibility. After all, there&#8217;s a collection of ideologically motivated individuals trying to craft desktops to themselves and other fellow humans. And yet, when you <a href="https://fireborn.mataroa.blog/blog/i-want-to-love-linux-it-doesnt-love-me-back-post-1-built-for-control-but-not-for-people/">look at the current state of accessibility on the Linux desktop</a>, you couldn&#8217;t possibly call it <em>good</em>, not even <em>sufficient</em>.</p>
<p>It&#8217;s a tough situation that&#8217;s forcing people who need assistive technologies out of these spaces.</p>
<p>I think accessibility on the Linux desktop is in a particularly difficult position due to a combination of poor incentives and historical factors:</p>
<ul class="wp-block-list">
<li>The dysfunctional state of accessibility on Linux makes it so that the people who need it the most cannot even contribute to it.</li>
<li>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.</li>
<li>Volunteers, especially those who contribute for fun and self enjoyment, often don&#8217;t go out of their ways to make the particular projects they&#8217;re working on accessible. Or to check if their contributions regress the accessibility of the app.</li>
<li>The nature of accessibility makes it such that the &#8220;functional progression&#8221; is not linear. If only 50% of the stack is working, that&#8217;s practically a 0%. Accessibility requires that almost every part of the stack to be functional for even the most basic use cases.</li>
<li>There&#8217;s <em>almost</em> nobody contributing to this area anymore. Expertise and domain knowledge are almost entirely lost.</li>
</ul>
<p>In addition to that, I feel like work on accessibility is <em>invisible</em>. 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&#8217;t know. But it sure feels unrewarding. Compare:</p>
<figure class="wp-block-image size-full is-style-rounded is-style-rounded--1"><img alt="Picture of a Reddit thread titled &quot;An accessibility update - GTK Development Blog&quot; with just 1 comment and 28 upvotes" class="wp-image-10979" height="274" src="https://feaneron.com/wp-content/uploads/2025/05/image-10.png" width="1117" /></figure>
<figure class="wp-block-image size-full is-style-rounded is-style-rounded--2"><img alt="Picture of a Reddit thread titled &quot;Wayland: An Accessibility Nightmare&quot; with just 327 comment and a thousand upvotes, published 12 hours before the GTK accessibility update thread" class="wp-image-10977" height="448" src="https://feaneron.com/wp-content/uploads/2025/05/image-9.png" width="1117" /></figure>
<p>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 <em>are</em> people working on accessibility. Often without any kind of reward, doing this out of principle. It&#8217;s just so easy to overlook their effort!</p>
<p>So as we prepare for the <a href="https://accessibility.day/">Global Accessibility Awareness Day</a>, 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.</p>
<p>If you consider this kind of work important and relevant, and/or if you need accessibility features yourself, I urge you: <strong>please donate to the people mentioned here</strong>. 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.</p>
<div class="wp-block-spacer"></div>
<h3 class="wp-block-heading">Calendar</h3>
<p>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 <strong>Hari Rana</strong> and <strong>Jeff Fortin Tam</strong>!</p>
<p>Hari recently <a href="https://social.treehouse.systems/@TheEvilSkeleton/114434850837916105">wrote about it on Mastodon</a>. 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 <a href="https://mastodon.social/@nekohayo/114456299407241500">blogged about these collateral fixes</a>.</p>
<p>If you consider this kind of work important, please consider getting them a coffee!</p>
<div class="wp-block-group has-global-padding is-content-justification-center is-layout-constrained wp-container-core-group-is-layout-3fc66524 wp-block-group-is-layout-constrained">
<div class="wp-block-group is-layout-grid wp-container-core-group-is-layout-ac9b42e7 wp-block-group-is-layout-grid">
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-bc62b511 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full is-resized"><img alt="" class="wp-image-10955" height="460" src="https://feaneron.com/wp-content/uploads/2025/05/image.png" style="width: 140px;" width="460" /></figure>
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-ce155fab wp-block-group-is-layout-flex">
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-81423f52 wp-block-group-is-layout-flex">
<p class="has-small-font-size"><strong>Hari Rana</strong></p>
<p class="has-small-font-size"><a href="https://gitlab.gnome.org/TheEvilSkeleton">@TheEvilSkeleton</a></p>
</div>
<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-a89b3969 wp-block-buttons-is-layout-flex">
<div class="wp-block-button has-custom-width wp-block-button__width-100 is-style-outline is-style-outline--3"><a class="wp-block-button__link has-small-font-size has-custom-font-size wp-element-button" href="https://tesk.page/#donate">Support</a></div>
</div>
</div>
</div>
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-bc62b511 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full is-resized has-custom-border is-style-default"><img alt="" class="wp-image-10959" height="384" src="https://feaneron.com/wp-content/uploads/2025/05/image-2.png" style="border-radius: 100px; width: 140px;" width="384" /></figure>
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-ce155fab wp-block-group-is-layout-flex">
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-81423f52 wp-block-group-is-layout-flex">
<p class="has-small-font-size"><strong>Jeff Fortin Tam</strong></p>
<p class="has-small-font-size"><a href="https://gitlab.gnome.org/jfft">@jfft</a></p>
</div>
<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-a89b3969 wp-block-buttons-is-layout-flex">
<div class="wp-block-button has-custom-width wp-block-button__width-100 is-style-outline is-style-outline--4"><a class="wp-block-button__link has-small-font-size has-custom-font-size wp-element-button" href="https://regen.to/project/gnome-calendar/">Website¹</a></div>
</div>
</div>
</div>
</div>
</div>
<div class="wp-block-spacer"></div>
<h3 class="wp-block-heading">Elevado</h3>
<p>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&#8217;t think much of it, really.</p>
<p>But the project started getting some attention when <a href="https://belmoussaoui.com/blog/19-accessibility-adventure/"><strong>Bilal Elmoussaoui</strong> contributed to it while testing some accessibility work in GNOME Shell</a>. After that, <strong>Matthias Clasen</strong> &#8211; of GTK fame &#8211; and <strong>Claire</strong> &#8211; a new contributor! &#8211; started sending some nice patches around.</p>
<p>In preparation for the <a href="https://accessibility.day/">Global Accessibility Awareness Day</a> we have made the <a href="https://gitlab.gnome.org/feaneron/elevado/-/releases/2025.1">first public release of Elevado</a>! The project is evolving mostly without me these days, and it&#8217;s all thanks to these people.</p>
<div class="wp-block-group has-global-padding is-content-justification-center is-layout-constrained wp-container-core-group-is-layout-e51e2fa4 wp-block-group-is-layout-constrained">
<div class="wp-block-group is-layout-grid wp-container-core-group-is-layout-471a4f32 wp-block-group-is-layout-grid">
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-2f43b880 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full is-resized has-custom-border"><img alt="" class="wp-image-10958" height="192" src="https://feaneron.com/wp-content/uploads/2025/05/image-1.png" style="border-style: none; border-width: 0px; border-radius: 100px; width: 140px; height: auto;" width="192" /></figure>
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-ce155fab wp-block-group-is-layout-flex">
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-81423f52 wp-block-group-is-layout-flex">
<p class="has-small-font-size"><strong>Claire</strong></p>
<p class="has-small-font-size"><a href="https://gitlab.gnome.org/qwery">@qwery</a></p>
</div>
<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-a89b3969 wp-block-buttons-is-layout-flex">
<div class="wp-block-button has-custom-width wp-block-button__width-100 is-style-outline is-style-outline--5"><a class="wp-block-button__link has-small-font-size has-custom-font-size wp-element-button" href="https://donate.qwery.dev">Support</a></div>
</div>
</div>
</div>
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-2f43b880 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full is-resized has-custom-border"><img alt="" class="wp-image-10961" height="460" src="https://feaneron.com/wp-content/uploads/2025/05/image-3.png" style="border-radius: 100px; width: 140px;" width="460" /></figure>
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-ce155fab wp-block-group-is-layout-flex">
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-81423f52 wp-block-group-is-layout-flex">
<p class="has-small-font-size"><strong>Bilal Elmoussaoui</strong></p>
<p class="has-small-font-size"><a href="https://gitlab.gnome.org/bilelmoussaoui">@bilelmoussaoui</a></p>
</div>
<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-a89b3969 wp-block-buttons-is-layout-flex">
<div class="wp-block-button has-custom-width wp-block-button__width-100 is-style-outline is-style-outline--6"><a class="wp-block-button__link has-small-font-size has-custom-font-size wp-element-button" href="https://www.paypal.me/BilalELMoussaoui">Support</a></div>
</div>
</div>
</div>
</div>
</div>
<div class="wp-block-spacer"></div>
<h3 class="wp-block-heading">GTK</h3>
<p>Of course, almost nothing I&#8217;ve mentioned so far would be possible if the toolkit itself didn&#8217;t have support for accessibility. Thanks to <strong>Emmanuele Bassi</strong> GTK4 received an entirely new accessibility backend.</p>
<p>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.</p>
<p>One particular contributor is <strong>Lukáš Tyrychtr</strong>, who has implemented the Text interface of AT-SPI in GTK. Lukáš contributes to various other parts of the accessibility stack as well!</p>
<div class="wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-group is-layout-grid wp-container-core-group-is-layout-d75a7a6d wp-block-group-is-layout-grid">
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-2f43b880 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full is-resized has-custom-border"><img alt="" class="wp-image-10969" height="200" src="https://feaneron.com/wp-content/uploads/2025/05/image-4.png" style="border-radius: 100px; width: 140px;" width="200" /></figure>
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-ce155fab wp-block-group-is-layout-flex">
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-81423f52 wp-block-group-is-layout-flex">
<p class="has-small-font-size"><strong>Emmanuele Bassi</strong></p>
<p class="has-small-font-size"><a href="https://gitlab.gnome.org/ebassi">@ebassi</a></p>
</div>
<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-a89b3969 wp-block-buttons-is-layout-flex">
<div class="wp-block-button has-custom-width wp-block-button__width-100 is-style-outline is-style-outline--7"><a class="wp-block-button__link has-small-font-size has-custom-font-size wp-element-button" href="https://ko-fi.com/emmanueleb">Support</a></div>
</div>
</div>
</div>
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-2f43b880 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full is-resized has-custom-border"><img alt="" class="wp-image-10970" height="384" src="https://feaneron.com/wp-content/uploads/2025/05/image-5.png" style="border-radius: 100px; width: 140px;" width="384" /></figure>
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-ce155fab wp-block-group-is-layout-flex">
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-81423f52 wp-block-group-is-layout-flex">
<p class="has-small-font-size"><strong>Lukáš Tyrychtr</strong></p>
<p class="has-small-font-size"><a href="https://gitlab.gnome.org/tyrylu">@tyrylu</a></p>
</div>
</div>
</div>
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-2f43b880 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full is-resized has-custom-border"><img alt="" class="wp-image-10974" height="192" src="https://feaneron.com/wp-content/uploads/2025/05/image-6.png" style="border-radius: 100px; width: 140px;" width="192" /></figure>
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-ce155fab wp-block-group-is-layout-flex">
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-81423f52 wp-block-group-is-layout-flex">
<p class="has-small-font-size"><strong>Matthias Clasen</strong></p>
<p class="has-small-font-size"><a href="https://gitlab.gnome.org/matthiasc">@matthiasc</a></p>
</div>
</div>
</div>
</div>
</div>
<div class="wp-block-spacer"></div>
<h3 class="wp-block-heading">Design</h3>
<p>On the design side, one person in particular stands out for a series of contributions on the Accessibility panel of GNOME Settings: <strong>Sam Hewitt</strong>. Sam <a href="https://gitlab.gnome.org/Teams/Design/settings-mockups/-/commit/a4dad5c44980922c5f4cc8fad9fa3451bff82479">introduced</a> 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&#8217;s in the accessibility mockups folder!).</p>
<p>Please join me in thanking Sam for these contributions!</p>
<div class="wp-block-group has-global-padding is-content-justification-center is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-group is-layout-grid wp-container-core-group-is-layout-40be5623 wp-block-group-is-layout-grid">
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-2f43b880 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full is-resized has-custom-border"><img alt="" class="wp-image-10991" height="192" src="https://feaneron.com/wp-content/uploads/2025/05/image-13.png" style="border-radius: 100px; width: 140px;" width="192" /></figure>
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-ce155fab wp-block-group-is-layout-flex">
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-81423f52 wp-block-group-is-layout-flex">
<p class="has-small-font-size"><strong>Sam Hewitt</strong></p>
<p class="has-small-font-size"><a href="https://gitlab.gnome.org/snwh">@snwh</a></p>
</div>
</div>
</div>
</div>
</div>
<div class="wp-block-spacer"></div>
<h3 class="wp-block-heading">Infrastructure</h3>
<p>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 <em>expose to</em>.</p>
<p>Thanks to <strong>Mike Gorse</strong> and others, the AT-SPI project keeps on living. AT-SPI is the service that receives and manages the accessibility information from apps. It&#8217;s the heart of accessibility in the Linux desktop! As far as my knowledge about it goes, AT-SPI is <em>really old</em>, dating back to Sun days.</p>
<p><strong>Samuel Thibault</strong> continues to maintain <a href="https://github.com/brailcom/speechd">speech-dispatcher</a> and <a href="https://gitlab.gnome.org/GNOME/accerciser">Accerciser</a>. Speech dispatcher is the <em>de facto</em> text-to-speech service for Linux as of now. Accerciser is a venerable tool to inspect AT-SPI trees.</p>
<p><strong>Eitan Isaacson</strong> is shaking up the speech synthesis world with <a href="https://project-spiel.org/">libspiel</a>, 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!</p>
<p>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&#8217;d like to point out that we at <a href="http://igalia.com/">Igalia</a> significantly fund Orca development.</p>
<p>I would like to invite the community to share a thank you for all of them!</p>
<div class="wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-group is-layout-grid wp-container-core-group-is-layout-d75a7a6d wp-block-group-is-layout-grid">
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-2f43b880 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full is-resized has-custom-border"><img alt="" class="wp-image-10983" height="384" src="https://feaneron.com/wp-content/uploads/2025/05/image-12.png" style="border-radius: 100px; width: 140px;" width="384" /></figure>
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-ce155fab wp-block-group-is-layout-flex">
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-81423f52 wp-block-group-is-layout-flex">
<p class="has-small-font-size"><strong>Eitan Isaacson</strong></p>
<p class="has-small-font-size"><a href="https://gitlab.gnome.org/eeejay">@eeejay</a></p>
</div>
</div>
</div>
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-2f43b880 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full is-resized has-custom-border"><img alt="" class="wp-image-11000" height="384" src="https://feaneron.com/wp-content/uploads/2025/05/image-14.png" style="border-radius: 100px; width: 140px;" width="384" /></figure>
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-ce155fab wp-block-group-is-layout-flex">
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-81423f52 wp-block-group-is-layout-flex">
<p class="has-small-font-size"><strong>Mike Gorse</strong></p>
<p class="has-small-font-size"><a href="https://gitlab.gnome.org/mgorse">@mgorse</a></p>
</div>
</div>
</div>
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-2f43b880 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full is-resized has-custom-border"><img alt="" class="wp-image-10982" height="384" src="https://feaneron.com/wp-content/uploads/2025/05/image-11.png" style="border-radius: 100px; width: 140px;" width="384" /></figure>
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-ce155fab wp-block-group-is-layout-flex">
<div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-81423f52 wp-block-group-is-layout-flex">
<p class="has-small-font-size"><strong>Samuel Thibault</strong></p>
<p class="has-small-font-size"><a href="https://gitlab.gnome.org/sthibaul">@sthibaul</a></p>
</div>
</div>
</div>
</div>
</div>
<div class="wp-block-spacer"></div>
<h3 class="wp-block-heading">&#8230; and more!</h3>
<p>I tried to reach out to everyone nominally mentioned in this blog post. Some people preferred not to be mentioned. I&#8217;m pretty sure I&#8217;ve never got to learn about others that are involved in related projects.</p>
<p>I guess what I&#8217;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.</p>
<p>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!</p>
<div class="wp-block-spacer"></div>
<h2 class="wp-block-heading">A Look Into The Future</h2>
<figure class="wp-block-image size-full is-style-rounded is-style-rounded--8"><img alt="" class="wp-image-11004" height="120" src="https://feaneron.com/wp-content/uploads/2025/05/blog-header-1.png" width="1000" /></figure>
<p>Shortly after I started to write this blog post, I thought to myself: &#8220;well, this is nice and all, but it isn&#8217;t exactly robust.&#8221; Hm. If only there was a more structured, reliable way to keep investing on this.</p>
<p>Coincidentally, at the same time, we were <a href="https://blogs.gnome.org/steven/2025/05/06/introducing-myself/">introduced to our new executive director Steven</a>. With such a blast of an introduction, and seeing Steven hanging around in various rooms, I couldn&#8217;t resist asking about it. To my great surprise and joy, Steven swiftly responded to my inquiries and we started discussing some ideas!</p>
<p>Conversations are still ongoing, and I don&#8217;t want to create any sort of hype in case things end up not working, but&#8230; maaaaaaybe keep in mind that there <em>might</em> be an announcement soon!</p>
<p>Huge thanks to the people above, and to everyone who helped me write this blog post <img alt="♥" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.1.0/72x72/2665.png" style="height: 1em;" /></p>
<div class="wp-block-spacer"></div>
<hr class="wp-block-separator has-alpha-channel-opacity" />
<div class="wp-block-spacer"></div>
<p class="has-small-font-size">¹ &#8211; Jeff doesn&#8217;t accept donations for himself, but welcomes marketing-related business</p></description><author>Georges Basile Stavracas Neto</author><dc:creator>Georges Basile Stavracas Neto</dc:creator><pubDate>Thu, 15 May 2025 12:49:13 GMT</pubDate><guid isPermaLink="true">https://feaneron.com/2025/05/15/in-celebration-of-accessibility/</guid></item><item><title>Felipe Borges: Using Libravatar/Gravatar for your profile in Planet GNOME</title><link>https://feborg.es/avatar-planet-gnome/</link><description><p>Now that the new <a href="https://planet.gnome.org">planet.gnome.org</a> website is live, we have added <a href="https://www.libravatar.org/">Libravatar</a> and <a href="https://gravatar.com/">Gravatar</a> 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.</p>
<p>If you are interested in updating your profile picture, check out the instructions at <a href="https://gitlab.gnome.org/Teams/Websites/planet.gnome.org#adding-an-avatar">https://gitlab.gnome.org/Teams/Websites/planet.gnome.org#adding-an-avatar</a> and file an issue. Extra points if you do a merge-request! <img alt="🙂" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f642.png" style="height: 1em;" /></p>
<p>The old <a href="https://wiki.gnome.org/PlanetGnome(2f)HackergotchiGuidelines.html">hackergotchis</a> are an important part of our community&#8217;s history, so I set up a <a href="https://felipeborges.pages.gitlab.gnome.org/heads-of-gnome/">static website to host the old files</a>. Feel free to <a href="https://felipeborges.pages.gitlab.gnome.org/heads-of-gnome/">file an issue</a> if you want yours taken down from there.</p></description><author>Felipe Borges</author><dc:creator>Felipe Borges</dc:creator><pubDate>Thu, 15 May 2025 09:24:24 GMT</pubDate><guid isPermaLink="true">https://feborg.es/avatar-planet-gnome/</guid></item><item><title>Varun R Mallya: GSoC and GNOME</title><link>https://xeon.me/gnome/introduction/</link><description><p><img alt="alt text" src="https://xeon.me/gnome/introduction/gnome.gif" /></p>
<h1 id="hello-gnome">Hello GNOME!</h1>
<p>I am Varun R Mallya, a 3rd-year engineering student at the Indian Institute of Technology, Roorkee. I&rsquo;m now part of the GNOME community as a Google Summer of Code 2025 intern :). I will be working on the <a href="https://gitlab.gnome.org/GNOME/sysprof">Sysprof</a> project under the mentorship of <a href="https://gitlab.gnome.org/chergert">Christian Hergert</a>.</p>
<h1 id="what-ill-be-doing-in-the-coming-weeks">What I&rsquo;ll be doing in the coming weeks</h1>
<p>My proposal titled &ldquo;Adding eBPF profiling capabilities to Sysprof&rdquo; 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.</p>
<h5 id="you-can-take-a-look-at-my-proposal-herehttpsgitlabgnomeorgvarunrmallyagsoc-proposal-sysprof-2025-blobmaingsoc_proposalpdfref_typeheads">You can take a look at my proposal <a href="https://gitlab.gnome.org/varunrmallya/gsoc-proposal-sysprof-2025/-/blob/main/gsoc_proposal.pdf?ref_type=heads">here</a></h5>
<p>I&rsquo;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 <code>/proc</code> files using equivalent eBPF programs. Each time I manage to extract data for a type of <code>/proc</code> 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&rsquo;m done with it.</p>
<p>After I&rsquo;m done with this, I&rsquo;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&rsquo;m doing relies on features available in newer kernels (I might be wrong here, but I don&rsquo;t know yet—I&rsquo;m talking about <code>bpf timers</code> and <code>bpf iterators</code>). This will involve BTF and CORE, which I&rsquo;m currently reading about.</p>
<h1 id="about-me">About me</h1>
<p>I like any kind of systems programming mostly. <code>eBPF</code> certainly gets me excited and I&rsquo;ve been doing a lot of reading on it, to be very honest. I&rsquo;ve also been working on a few open-source projects like GCC-Rust (GCC&rsquo;s new independent Rust compiler btw, check it out), Reth (The Rust implementation of Ethereum), WasmEdge (A WebAssembly runtime) and I&rsquo;m also involved in a few projects in my university. I&rsquo;m actually a Mechanical Engineering student undergoing training, so I&rsquo;m currently doing some research on drone swarming and GPU-based fluid simulations under my profs. Apart from this, I work on <code>libp2p</code> for Protocol Labs (currently doing some interop work between the Python and Go implementations of it.)</p></description><author>Varun R Mallya</author><dc:creator>Varun R Mallya</dc:creator><pubDate>Tue, 13 May 2025 00:00:00 GMT</pubDate><guid isPermaLink="true">https://xeon.me/gnome/introduction/</guid></item><item><title>Matthias Clasen: An accessibility update</title><link>https://blog.gtk.org/2025/05/12/an-accessibility-update/</link><description><p>I recently saw somebody ask</p>
<blockquote><p>Is Fedora accessible now ?</p></blockquote>
<p>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:</p>
<blockquote><p>Is this system usable for *me* ?</p></blockquote>
<p>Accessibility is about making our software usable (and, ideally, pleasant to use) for as many people as we can.</p>
<p>It has been a <a href="https://blog.gtk.org/2024/03/08/accessibility-improvements-in-gtk-4-14/">year</a> 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.</p>
<h3>A new backend</h3>
<p>We merged the <a class="external" href="https://accesskit.dev/">AccessKit</a> 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.</p>
<p>If you want to try it out, build GTK with the -Daccesskit=enabled build option, and set</p>
<pre>GTK_A11Y=accesskit</pre>
<p>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.</p>
<p><a href="https://blog.gtk.org/files/2025/05/Screenshot-From-2025-05-12-08-20-56.png"><img alt="" class="aligncenter wp-image-10500" height="259" src="https://blog.gtk.org/files/2025/05/Screenshot-From-2025-05-12-08-20-56-300x194.png" width="400" /></a></p>
<p>The new backend was created by Matt Campbell as part the STF <a class="external" href="https://blogs.gnome.org/tbernard/2025/04/11/gnome-stf-2024/">initiative</a>.</p>
<h3>Keyboard shortcuts in orca</h3>
<p>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.</p>
<p>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.</p>
<p>Thankfully, Lukáš Tyrychtr and Carlos Garnacho cooperated on extracting the relevant parts and completed the shortcuts support. This closes one of the biggest remaining &#8220;Wayland accessibility&#8221; gaps in GNOME 48.</p>
<h3>An accessible web browser</h3>
<p>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 <a class="external" href="https://www.youtube.com/watch?v=iAlxa5sZs-0">talk</a> 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.</p>
<p>This was work was also supported by the STF initiative.</p>
<h3>A new accessibility tool</h3>
<p><a class="external" href="https://gitlab.gnome.org/feaneron/elevado/">Elevado</a> 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.</p>
<p><a href="https://blog.gtk.org/files/2025/05/Screenshot-From-2025-05-12-08-25-07.png"><img alt="" class="aligncenter wp-image-10501" height="243" src="https://blog.gtk.org/files/2025/05/Screenshot-From-2025-05-12-08-25-07-300x182.png" width="400" /></a></p>
<p>The new tool just got ported to rust, so its cool. And it just saw its first release. Try it out!</p>
<p>Elevado was started by Georges to help with his work on a11y in webkitgtk.</p>
<h3>The long tail</h3>
<p>Beyond these big headline features, there have been many smaller improvements to a11y in GTK and related libraries:</p>
<ul>
<li>A number of missing accessible labels, tooltips and key bindings have been added in the file chooser</li>
<li>List boxes now provide information to make orca say the right thing</li>
<li>The a11y overlay in the GTK inspector will now show you when your buttons are too small as click targets</li>
<li>ATs can receive notification about platform state (such as focus) changes, and custom accessible implementations can emit such notifications</li>
<li>We now provide information about shortcuts and mnemonics for actions in the form that orca expects</li>
<li>Reporting of text attributes has been improved (a contribution from the LibreOffice team)</li>
<li>libadwaita toast notifications are now announced to AT</li>
<li>The accessible representation of many libadwaita action row widgets has been improved</li>
</ul>
<h3>Summary</h3>
<p>Accessibility in GNOME is continuously improving, thanks to the contributions of many people. Thanks to everybody who helps! <img alt="❤" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.1.0/72x72/2764.png" style="height: 1em;" /></p></description><author>Matthias Clasen</author><dc:creator>Matthias Clasen</dc:creator><pubDate>Mon, 12 May 2025 21:00:56 GMT</pubDate><guid isPermaLink="true">https://blog.gtk.org/2025/05/12/an-accessibility-update/</guid></item><item><title>Jan Lukas Gernert: Newsflash 4.0 (beta)</title><link>https://blogs.gnome.org/jangernert/2025/05/12/newsflash-4-0-beta/</link><description><h3>The big refactor</h3>
<p>With Newsflash being one of the earliest gtk-rs applications it went through a lot of iterations already as the ecosystem evolved:</p>
<ul>
<li>from just slapping widgets together in structs to subclassing support in gtk-rs</li>
<li>from just cloning everything to weak references with the clone!-macro</li>
<li>from GtkBuilder xml to blueprint</li>
<li>from interacting with Listboxes directly to GLib.ListModel based ListViews</li>
</ul>
<div>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.</div>
<div></div>
<div>Now the code is much easier to reason about while also dropping about ~2k lines:</div>
<p>&nbsp;</p>
<div><a class="external" href="https://gitlab.com/news-flash/news_flash_gtk/-/merge_requests/238"><span class="gl-font-bold gl-text-subtle">219 files </span>+ <span>18047 </span>− <span>20089</span></a></div>
<p>&nbsp;</p>
<div>While refactoring was the main focus point and the reason why I felt the major version jump was justified, it doesn&#8217;t mean there are no new features to play with.</div>
<h3>Enclosures to the front row</h3>
<p>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.</p>
<figure class="wp-caption aligncenter" id="attachment_285" style="width: 300px;"><a href="https://blogs.gnome.org/jangernert/files/2025/05/Audio-Player-scaled.png"><img alt="Audio Widget" class="wp-image-285 size-medium" height="175" src="https://blogs.gnome.org/jangernert/files/2025/05/Audio-Player-300x175.png" width="300" /></a><figcaption class="wp-caption-text" id="caption-attachment-285">Audio Widget</figcaption></figure>
<figure class="wp-caption aligncenter" id="attachment_286" style="width: 300px;"><a href="https://blogs.gnome.org/jangernert/files/2025/05/Image-Widget-scaled.png"><img alt="Image Widget" class="wp-image-286 size-medium" height="175" src="https://blogs.gnome.org/jangernert/files/2025/05/Image-Widget-300x175.png" width="300" /></a><figcaption class="wp-caption-text" id="caption-attachment-286">Image Widget</figcaption></figure>
<figure class="wp-caption aligncenter" id="attachment_287" style="width: 300px;"><a href="https://blogs.gnome.org/jangernert/files/2025/05/Video-Player-scaled.png"><img alt="Video Widget" class="wp-image-287 size-medium" height="175" src="https://blogs.gnome.org/jangernert/files/2025/05/Video-Player-300x175.png" width="300" /></a><figcaption class="wp-caption-text" id="caption-attachment-287">Video Widget</figcaption></figure>
<h3>Misc</h3>
<ul>
<li>Clear article pane if selection in article list goes away</li>
<li>Allow manual hiding of the sidebar</li>
<li>New user agent based on app name</li>
<li>Option to set custom user agent per feed (only relevant for Local RSS)</li>
<li>Subcategories (also mostly only relevant for Local RSS)</li>
<li>Local RSS: in addition to etags, use cache-control header to reduce traffic to feeds</li>
</ul>
<p>And many smaller fixes and improvements you can read about in the <a class="external" href="https://gitlab.com/news-flash/news_flash_gtk/-/blob/master/data/io.gitlab.news_flash.NewsFlash.appdata.xml.in.in?ref_type=heads">change log</a>.</p>
<p>Sadly I had to deactivate the webkit DMABuf Renderer for now. I discovered <a class="external" href="https://bugs.webkit.org/show_bug.cgi?id=291332">a bug</a> creating the now needed larger frame buffers for articles. Fingers crossed that this will get fixed and the DMABuf render can be re-activated.</p>
<h3>Available on flathub beta channel</h3>
<p>Version 4.0.0-beta1 is available on the <a class="external" href="https://docs.flathub.org/docs/for-users/installation#flathub-beta-repository">flathub beta channel</a>. The first few bugs have already been found and squashed. But I&#8217;m sure there are more to discover.</p>
<p>Make sure to back up your data and settings before switching to the beta in case a migration eats your database.<br />
<code>~/.var/app/io.gitlab.news_flash.NewsFlash/config/news-flash/<br />
~/.var/app/io.gitlab.news_flash.NewsFlash/data/news-flash/</code></p></description><author>Jan Lukas Gernert</author><dc:creator>Jan Lukas Gernert</dc:creator><pubDate>Mon, 12 May 2025 18:49:31 GMT</pubDate><guid isPermaLink="true">https://blogs.gnome.org/jangernert/2025/05/12/newsflash-4-0-beta/</guid></item><item><title>Tobias Bernard: Elephant Followup</title><link>https://blogs.gnome.org/tbernard/2025/05/12/elephant-followup/</link><description><p>This is a response to <a href="https://blogs.gnome.org/aday/2025/04/25/on-elephants">Allan&#8217;s response</a> to my most <a href="https://blogs.gnome.org/tbernard/2025/04/23/the-elephant-in-the-room">recent blog post</a>. For context, I think it&#8217;s important to note that I&#8217;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&#8217;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&#8217;s thankless work in difficult circumstances. I don&#8217;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.</p>
<h2 id="the-ban-itself">The Ban Itself</h2>
<p>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 &#8212; how could it not?</p>
<p>If you ban a board member after they try to address the community&#8217;s concerns with the Foundation you <em>really</em> need to do a good job communicating why you&#8217;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. &#8220;Trust me, I&#8217;ve seen more evidence&#8221; doesn&#8217;t work when there are serious concerns about the process as a whole.</p>
<p>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.</p>
<p>Due to CoC confidentiality and the alleged infractions having happened in private settings without other parties present it&#8217;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&#8217;ve seen no interest from the Foundation side in continuing/re-starting something like that. Therefore, it seems we&#8217;re at an impasse &#8212; those who trust the structures will continue to do so, and those who don&#8217;t will continue not to.</p>
<h2 id="the-aftermath">The Aftermath</h2>
<p>Allan&#8217;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 &#8212; I&#8217;m not sure where this is coming from, because nobody has asked for that.</p>
<p>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.</p>
<p>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&#8217;t get any official communication of Sonny&#8217;s ban when it happened.</p>
<p>In this case, the fallout from messing this up was massive. I don&#8217;t think I need to repeat what this meant for the STF project and contractors, but it didn&#8217;t stop there. For example, Sonny&#8217;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.</p>
<p>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&#8217;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 <em>some</em> concrete consequences if the Foundation wants to be credible again in the eyes of the community.</p>
<h2 id="the-independent-review">The Independent Review</h2>
<p>It&#8217;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.</p>
<p>This is why I&#8217;m confused about the claim that the report said the ban was justified &#8212; I&#8217;m assuming this was a misunderstanding. In my (and others, see e.g. <a class="external" href="https://andyholmes.ca/posts/opaque-governance/#trust-and-accountability">Andy&#8217;s perspective</a>) 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.</p>
<hr />
<p>There&#8217;s obviously a lot more to say, but my goal here was just to clear up a few misconceptions I&#8217;ve seen in recent discussions.</p>
<p>I&#8217;d like to thank everyone who has reached out and expressed their solidarity after the previous post. It&#8217;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.</p>
<p>I&#8217;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.</p></description><author>Tobias Bernard</author><dc:creator>Tobias Bernard</dc:creator><pubDate>Mon, 12 May 2025 09:32:34 GMT</pubDate><guid isPermaLink="true">https://blogs.gnome.org/tbernard/2025/05/12/elephant-followup/</guid></item><item><title>Felipe Borges: GNOME is Sponsoring an Outreachy Internship Project for GNOME Crosswords!</title><link>https://feborg.es/gnome-outreachy-june-2025-crosswords/</link><description><p>We are excited to announce that the GNOME Foundation is sponsoring an <a href="https://www.outreachy.org/">Outreachy </a> internship project for the June 2025 to August 2025 internship round!</p>
<p>Outreachy provides internships to people subject to systemic bias and impacted by underrepresentation in the technical industry where they are living.</p>
<p>The intern will work with mentors Jonathan Blandford, Federico Mena Quintero, and Tanmay Patil on the project <a href="https://gitlab.gnome.org/Teams/internship/project-ideas/-/issues/63">Add Wordlist Scoring to the GNOME Crosswords Editor</a>.</p>
<p>The intern’s blog will soon be added to <a href="https://planet.gnome.org/">Planet GNOME</a>, where you can follow their project updates and learn more about them. Stay tuned!</p></description><author>Felipe Borges</author><dc:creator>Felipe Borges</dc:creator><pubDate>Mon, 12 May 2025 08:40:17 GMT</pubDate><guid isPermaLink="true">https://feborg.es/gnome-outreachy-june-2025-crosswords/</guid></item><item><title>Sophie Herold: International ME/CFS Awareness Day</title><link>https://blogs.gnome.org/sophieh/2025/05/12/international-me-cfs-awareness-day/</link><description><p>May 12 is the <a class="external" href="https://en.wikipedia.org/wiki/International_May_12th_Awareness_Day">International ME/CFS Awareness Day</a>. 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.</p>
<h2 id="the-illness">The Illness</h2>
<p>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 <em>crash</em>. 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.</p>
<p>In contrast to severe cases of ME/CFS, I’m usually still having a considerable amount of energy available, with a score of <em>30</em> on the <a class="external" href="https://www.oiresource.com/cfsscale.htm">CFIDS Disability Scale</a>. Cases with a score <em>0</em>, 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 <a class="external" href="https://www.youtube.com/watch?v=vydgkCCXbTA">Diana (Physics Girl)</a>.</p>
<p>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.</p>
<h2 id="perspectives-for-treatment">Perspectives for Treatment</h2>
<p>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.</p>
<p>The key in managing ME/CFS is <em>pacing</em>. 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.</p>
<p>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, <a class="external" href="https://www.tandfonline.com/doi/full/10.1080/09638288.2021.1949049">large studies</a> are published that try to support these theories. While these studies are of <a class="external" href="https://www.mecfs.de/cochrane-review-birgt-schadenspotenzial/">laughable quality (German)</a>, 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.</p>
<h2 id="working-on-gnome">Working on GNOME</h2>
<p>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 <a href="https://blogs.gnome.org/tbernard/2025/04/11/gnome-stf-2024/">GNOME STF</a>. 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!</p></description><author>Sophie Herold</author><dc:creator>Sophie Herold</dc:creator><pubDate>Mon, 12 May 2025 00:01:23 GMT</pubDate><guid isPermaLink="true">https://blogs.gnome.org/sophieh/2025/05/12/international-me-cfs-awareness-day/</guid></item><item><title>GNOME Foundation News: GNOME Foundation Welcomes Steven Deobald as Executive Director</title><link>https://foundation.gnome.org/2025/05/09/gnome-foundation-welcomes-steven-deobald-as-executive-director/</link><description><p>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.</p>
<p>“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&#8217;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.”</p>
<p>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 <a href="https://www.nilenso.com/">Nilenso</a>, India&#8217;s first worker-owned tech cooperative. Having worked with projects like <a href="https://www.xtdb.com/">XTDB</a> and <a href="https://www.endatabas.com/">Endatabas</a> and founding India&#8217;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.</p>
<p>“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&#8217;s free software personal computing ecosystem.”</p>
<p>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 <a href="https://blogs.gnome.org/steven/2025/05/06/introducing-myself/">introductory post on his GNOME blog</a>.</p>
<h2 class="wp-block-heading" id="Heartfelt-Thanks-to-Richard-Littauer"><a href="https://pad.gnome.org/gPj_ujjrQm-lKuCx8VFBSQ#Heartfelt-Thanks-to-Richard-Littauer"></a>Heartfelt Thanks to Richard Littauer</h2>
<p>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.</p>
<p>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.</p>
<p>“I knew this day would come at some point,” Richard shared in <a href="http://blogs.gnome.org/richardlitt/2025/05/02/so-long-and-thanks-for-all-the-fish/">his farewell post</a>. “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.</p>
<p>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 <a href="https://mastodon.social/@richlitt">Mastodon</a>, his <a href="https://www.burntfen.com/">website</a>, or at <a href="mailto:richard@gnome.org" rel="noreferrer noopener" target="_blank">richard@gnome.org</a>.</p>
<h2 class="wp-block-heading" id="Looking-Ahead"><a href="https://pad.gnome.org/gPj_ujjrQm-lKuCx8VFBSQ#Looking-Ahead"></a>Looking Ahead</h2>
<p>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.</p>
<p>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.</p></description><author>GNOME Foundation News</author><dc:creator>GNOME Foundation News</dc:creator><pubDate>Fri, 09 May 2025 12:23:11 GMT</pubDate><guid isPermaLink="true">https://foundation.gnome.org/2025/05/09/gnome-foundation-welcomes-steven-deobald-as-executive-director/</guid></item><item><title>Martin Pitt: InstructLab evaluation with Ansible and Wordle</title><link>https://piware.de/post/2025-05-09-instructlab/</link><description>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.</description><author>Martin Pitt</author><dc:creator>Martin Pitt</dc:creator><pubDate>Fri, 09 May 2025 00:00:00 GMT</pubDate><guid isPermaLink="true">https://piware.de/post/2025-05-09-instructlab/</guid></item><item><title>Martin Pitt: Testing sourcery.ai and GitHub Copilot for cockpit PR reviews</title><link>https://piware.de/post/2025-05-09-sourcery/</link><description>Goal In the Cockpit team we spend a lot of our time on PR reviews. That&rsquo;s time well spent &ndash; 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.</description><author>Martin Pitt</author><dc:creator>Martin Pitt</dc:creator><pubDate>Fri, 09 May 2025 00:00:00 GMT</pubDate><guid isPermaLink="true">https://piware.de/post/2025-05-09-sourcery/</guid></item><item><title>Thibault Martin: Deep Work reconciled me with personal growth books</title><link>https://ergaster.org/posts/2025/05/07-deep-work-reconciled-personal-growth/</link><description><p>I'm usually not a huge fan of personal growth books. As <a href="https://ergaster.org/posts/2023/08/01-blinkist-review/#opinions-in-15-minutes">I pointed out in my Blinkist review</a>, most books of this genre are 300 pages long when all the content would fit on 20. I read <em>Deep Work</em> by Cal Newport, with an open but skeptical mind.</p>
<h2>A case for deep work</h2>
<p>The book is split in two main sections. In the first section, the author makes a case for <em>deep</em> 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.</p>
<p>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.</p>
<p>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.</p>
<h2>Rules for deep work</h2>
<p>In the second section, the author lays out the four rules to enable deep work:</p>
<ol>
<li>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.</li>
<li>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.</li>
<li>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.</li>
<li>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.</li>
</ol>
<h2>An insightful book</h2>
<p>Like in all personal growth books, storytelling takes many pages in <em>Deep Work</em>, 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.</p>
<p>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.</p>
<p>You can find my key takeaways from the book by having a look at <a href="https://ergaster.org/book-notes/deep-work">my reading notes</a>.</p></description><author>Thibault Martin</author><dc:creator>Thibault Martin</dc:creator><pubDate>Wed, 07 May 2025 09:00:00 GMT</pubDate><guid isPermaLink="true">https://ergaster.org/posts/2025/05/07-deep-work-reconciled-personal-growth/</guid></item><item><title>Richard Littauer: Licensing a commit</title><link>https://blogs.gnome.org/richardlitt/2025/05/05/licensing-a-commit/</link><description><p>I would like to have my blog indexed on GNOME Planet. GNOME Planet&#8217;s repo, however, doesn&#8217;t appear to be licensed – there&#8217;s no note about the license on https://gitlab.gnome.org/Infrastructure/planet-web, and no license file in the repo.</p>
<p>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.</p>
<p>But I don&#8217;t like committing to repositories which are not licensed. I&#8217;m not even sure I can &#8211; 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?</p>
<p>So I asked ChatGPT (itself a pretty odd legal move) whether I could license a commit. Unsurprisingly, it says that no, you can&#8217;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 &#8220;violate norms&#8221;. Sure, that seems accurate, but I am glad that ChatGPT is not my lawyer.</p>
<p>I figure, if my work is my work, there&#8217;s no reason I can&#8217;t license a change to a file. Whether not that license will be enforced is anyone&#8217;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.</p>
<p>Technically, the MIT license demands that the license be shared with the commit. So I&#8217;ve just amended the commit to include the license, too, which satisfies my needs.</p>
<p>I don&#8217;t think that there will ever be a technical issue with licensing for this repo. And I don&#8217;t know if Felipe will merge my commit. But it is an interesting experiment.</p>
<blockquote>
<pre>➜ planet-web git:(feat/add-my-feed) git show HEAD
commit 3acaff792c635e9c277d892f37b45997b0b57d70 (HEAD -&gt; feat/add-my-feed, richardlitt/feat/add-my-feed)
Author: Richard Littauer &lt;richard+github@burntfen.com&gt;
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</pre>
</blockquote></description><author>Richard Littauer</author><dc:creator>Richard Littauer</dc:creator><pubDate>Mon, 05 May 2025 21:52:24 GMT</pubDate><guid isPermaLink="true">https://blogs.gnome.org/richardlitt/2025/05/05/licensing-a-commit/</guid></item></channel></rss>