<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xml:base="https://www.andyholmes.ca/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Andy Holmes</title>
    <description>Mused and Bemused</description>
    <language>en</language>
    <link>https://www.andyholmes.ca/</link>
    <atom:link href="https://www.andyholmes.ca/feed.xml" rel="self" type="application/rss+xml" />
    <pubDate>Sat, 03 May 2025 18:27:00 GMT</pubDate>
    <lastBuildDate>Sat, 03 May 2025 18:27:00 GMT</lastBuildDate>
    <item>
      <title>Opaque Governance</title>
      <description>&lt;p&gt;Recently, Tobias Bernard posted a retrospective of his (and our) experience
engaging with the GNOME Foundation regarding the removal of Sonny Piers from
our community, followed by a response from Allan Day. I know it&#39;s difficult and
stressful to talk about; a lot of people just want it to go away. It took a
long time to write this.&lt;/p&gt;
&lt;p&gt;The details regarding the removal of Sonny Piers will never be publicized, but
I respectfully disagree that all discussion of the community impact should
happen internally. Regardless of the circumstances at the time, the GNOME
Foundation made a decision to publicly remove Sonny Piers from the community
and if we are asked to assume good faith, we should be able expect the same
good faith when we criticize governance.&lt;/p&gt;
&lt;h2 id=&quot;safety-in-the-community&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/opaque-governance/#safety-in-the-community&quot;&gt;#&lt;/a&gt; Safety in the Community&lt;/h2&gt;
&lt;p&gt;The case of Sonny Piers includes GNOME Foundation membership, a seat on the
board of directors and employment as a project coordinator. Circumstances these
complex do not relate to the Code of Conduct Committee (CoCC) in its typical
operation.&lt;/p&gt;
&lt;p&gt;The Engagement Team also plays an active role in day-to-day moderation, as well
as the community members from diverse backgrounds serving as moderators in the
many project channels. Recently a member of the CoCC helped organize a
communication channel and new guidelines for moderators, which has already
improved coordination and response times across the various platforms.&lt;/p&gt;
&lt;p&gt;The GNOME community is a safe place to engage in open source and the matters
discussed here should not prevent you from reporting an incident or flagging
content for moderation.&lt;/p&gt;
&lt;h4&gt;CoC Links&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://conduct.gnome.org/&quot;&gt;Code of Conduct&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://conduct.gnome.org/#report-an-incident&quot;&gt;Report an Incident&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;opaque-context&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/opaque-governance/#opaque-context&quot;&gt;#&lt;/a&gt; Opaque Context&lt;/h2&gt;
&lt;p&gt;The following is a very incomplete timeline, providing some amount context for
my personal perspective.&lt;/p&gt;
&lt;p&gt;In July 2024, many of us in the community were shocked to hear that Sonny Piers
had been removed as a GNOME Foundation director, stripped of his membership,
had all accounts locked and a permanent ban put in place. More unsettling,
he was named as the recipient of a Code of Conduct complaint, but obviously
without any details regarding the incident.&lt;/p&gt;
&lt;p&gt;With such limited information, for many there was little justification to
protest the decision itself, except that the degree of disciplinary action
implied behaviour extremely out of character for Sonny.&lt;/p&gt;
&lt;p&gt;By October, three months had passed and lacking any meaningful resolution,
enough concern had grown in parts of the community to have a conversation. It
was decided to compose a letter directly to the Board and, after lengthy
discussion of the content, those that agreed signed and it was received
generally well by the Board.&lt;/p&gt;
&lt;p&gt;The resulting meetings were draining for everyone involved, often with visible
exertion of good faith from those present. The many constructive results
include several amendments to CoCC procedures, more comprehensive and equitable
agreements for contractors, and a fair amount of clarification regarding the
constraints the Board was under at the time.&lt;/p&gt;
&lt;p&gt;By December, I had withdrawn from most social spaces in the community. During
the period of engagement with the Board, there were a conspicuous number of
public references made to &lt;a href=&quot;https://intenseminimalism.com/2020/the-impact-of-toxic-influencers-on-communities/&quot;&gt;toxic influencers&lt;/a&gt; and after a very disappointing
comment from a relevant party, I closed my Mastodon account. Aside from
compounding the stress of the meetings, I considered I might be compelled to
publicly defend Sonny and compromise our efforts with the Board.&lt;/p&gt;
&lt;p&gt;In January, Tobias published &lt;em&gt;&lt;a href=&quot;https://blogs.gnome.org/tbernard/2025/01/07/re-decentralizing/&quot;&gt;Re-Decentralizing Development&lt;/a&gt;&lt;/em&gt; and seeing the
reactions include sentiments like &lt;em&gt;&amp;quot;Cult of Sonny&amp;quot;&lt;/em&gt; more or less vindicated my
decision to withdraw from social spaces. Some clearly assumed there had been
no effort to resolve the matter internally and the spectre of a toxic influencer
meant attempts to engage publicly were unlikely to be taken in good faith.&lt;/p&gt;
&lt;h2 id=&quot;good-faith&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/opaque-governance/#good-faith&quot;&gt;#&lt;/a&gt; Good Faith&lt;/h2&gt;
&lt;p&gt;There are legitimate concerns about an effort to undermine the Code of Conduct
(CoC), for the sake of meritocracy. In other words, there are those concerned
about different rules being applied to those who contribute more substantially
or have more social capital. This is not paranoia; it&#39;s the state of justice
in many of our real-world societies.&lt;/p&gt;
&lt;p&gt;The opposing concern is that the CoC has been used as a tool to defend the
status quo or enforce minority opinion as policy. Or as Tobias puts it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[...] we’re now in a situation where large parts of the community do not
trust our CoC structure because they feel it can be weaponized as part of
internal power struggles.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Code of Conduct reports must be confidential and the decisions of the committee
must be unimpeachable; under no circumstance can they become a matter of public
opinion.&lt;/p&gt;
&lt;p&gt;Unsurprisingly, there are very few situations that justify revealing any
participant of a Code of Conduct report. Doing so has resulted in reputational
damage such that an uncensored Google search of the name &lt;em&gt;&amp;quot;Sonny Piers&amp;quot;&lt;/em&gt; returns
pages of tabloid smear and speculation of criminality. Yet in the many months
since, there has been no indication that this served the interests of community
safety.&lt;/p&gt;
&lt;p&gt;Although I acknowledge the community ban has since been relaxed to one year,
I would like if we could each appreciate that to be stripped of membership,
barred from ever holding a position in the Foundation and permanently banned
from all community spaces is to be told, &lt;em&gt;&amp;quot;You are irredeemable&amp;quot;&lt;/em&gt;. Again, in
the time of Sonny&#39;s absence, there have been no signs that the safety of the
community ever warranted a permanent ban.&lt;/p&gt;
&lt;p&gt;The good faith assumption seems to be that these actions were taken to send a
message: the Code of Conduct will be enforced, regardless of a person&#39;s stature
in the community. Unfortunately, if that was the intention, a number in the
community have already expressed confusion that this situation received
treatment so different from their own.&lt;/p&gt;
&lt;h2 id=&quot;trust-and-accountability&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/opaque-governance/#trust-and-accountability&quot;&gt;#&lt;/a&gt; Trust and Accountability&lt;/h2&gt;
&lt;p&gt;I spent a fair amount of time recently deciding whether I would renew my
Foundation membership or not. Those in the Foundation working to rectify the
breakdown of communication and policy are the reason I decided to stay. However,
there are also those in the Foundation who have made me feel an unwelcome
bystander to the very public condemnation of a colleague, only be told not to
cause a fuss.&lt;/p&gt;
&lt;p&gt;I strongly believe the CoCC operated on an unfounded assumption of bad faith:
that Sonny Piers is a toxic influence to be immediately and permanently removed
from the community. Since July, none of the corroborating signs have surfaced;
few have had more contact with Sonny than a short email response, there has
been no public appeal to gather signatures, no &lt;em&gt;coup d&#39;état&lt;/em&gt; in the Foundation
and, with two months left on the community ban, fears of him being exempt from
the rules seem moot.&lt;/p&gt;
&lt;p&gt;A number of the recent policy improvements were prompted by the findings of the
external review commissioned by the Foundation, but I&#39;d like to clarify this
was an assessment of whether the Code of Conduct Committee acted within its
scope and authority; not a judicial review. The severity of corrective action
has not been justified, nor did any review findings or policy changes apply
retroactively.&lt;/p&gt;
&lt;p&gt;While the Foundation has and will continue to improve, it seems unlikely we
will see accountability for the mishandling of a situation that has caused
damage to an individual, to the community and trusting relationships. For
trust to be restored, we must be assured that Code of Conduct Committee is
free from conflicts of interest and is only applied in the interests of
community safety.&lt;/p&gt;
&lt;h2 id=&quot;final-thoughts&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/opaque-governance/#final-thoughts&quot;&gt;#&lt;/a&gt; Final Thoughts&lt;/h2&gt;
&lt;p&gt;I don&#39;t know what to do about this. I know there are those in the Foundation
working very hard to improve the situation and those on the Board aware that
they can just ignore criticism until their seat is up for re-election.&lt;/p&gt;
&lt;p&gt;The GNOME Foundation is becoming a more important part of the GNOME project
every year, but it is still extremely opaque to most of us. If there is a way
to educate oneself as a voter I do not know it, and we must accept that has
become a serious problem.&lt;/p&gt;
&lt;p&gt;We can not have confidence in leaders elected on vague familiarity and then
expect accountability from elections separated by two years. And the GNOME
Foundation can not build trust in governance by appealing to its own authority.&lt;/p&gt;
</description>
      <pubDate>Sat, 03 May 2025 18:27:00 GMT</pubDate>
      <dc:creator>Andy Holmes</dc:creator>
      <link>https://www.andyholmes.ca/posts/opaque-governance/</link>
      <guid>https://www.andyholmes.ca/posts/opaque-governance/</guid>
      
    </item>
    <item>
      <title>Best Intentions</title>
      <description>&lt;p&gt;This is going to be a bit of a sporadic blog post covering XDG Intents, GSoC
and few other updates from GNOME goings on.&lt;/p&gt;
&lt;h2 id=&quot;xdg-intents&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/best-intentions/#xdg-intents&quot;&gt;#&lt;/a&gt; XDG Intents&lt;/h2&gt;
&lt;p&gt;Most end-user platforms have something they call an intent system or something
approximating the idea. Implementations vary somewhat, but these often amount
to a high-level desktop or application action coupled to a URI or mime-type.
There examples of fancy URIs like &lt;code&gt;sms:555-1234?body=on%20my%20way&lt;/code&gt; that can do
intent-like things, but intents are higher-level, more purposeful and certainly
not restricted to metadata shoehorned into a URI.&lt;/p&gt;
&lt;p&gt;I&#39;m going to approach this like &lt;a href=&quot;https://gitlab.freedesktop.org/xdg/xdg-specs/-/merge_requests/45&quot;&gt;the original proposal&lt;/a&gt; by David Faure and the
discussions that followed, by contrasting it with mime-types and then
demonstrating what the files for some real-world use cases might look like.&lt;/p&gt;
&lt;h3 id=&quot;the-landscape&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/best-intentions/#the-landscape&quot;&gt;#&lt;/a&gt; The Landscape&lt;/h3&gt;
&lt;p&gt;Let&#39;s start with the &lt;a href=&quot;https://www.freedesktop.org/wiki/Specifications/mime-apps-spec/&quot;&gt;mime-apps Specification&lt;/a&gt;. For desktop environments
mime-types are, most of all, useful for associating content with applications
that can consume it. Once you can do that, the very next thing you want is
defaults and fallback priorities. Now can you double-click stuff to have your
favourite application open it, or right-click to open it with another of your
choice. Hooray.&lt;/p&gt;
&lt;p&gt;We&#39;ve also done something kind of clever, by supporting URI handlers with the
special &lt;code&gt;x-scheme-handler/*&lt;/code&gt; mime-type. It is clever, it does work and it was
good enough for a long time. It&#39;s not very impressive when you see what other
platforms are doing with URIs, though.&lt;/p&gt;
&lt;p&gt;Moving on to the &lt;a href=&quot;https://specifications.freedesktop.org/desktop-entry-spec/latest/interfaces.html&quot;&gt;&lt;code&gt;Implements&lt;/code&gt; key&lt;/a&gt; in the Desktop Entry Specification, where
applications can define &amp;quot;interfaces&amp;quot; they support. A &lt;code&gt;.desktop&lt;/code&gt; file for an
application that supports a search interface might look like this:&lt;/p&gt;
&lt;pre class=&quot;language-ini&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-ini&quot;&gt;&lt;span class=&quot;token section&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token section-name selector&quot;&gt;Desktop Entry&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;Contacts&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;Icon&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;org.gnome.Contacts&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;Exec&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;gnome-contacts %U&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;Terminal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;false&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;Application&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;DBusActivatable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;true&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;Implements&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;org.gnome.Shell.SearchProvider2&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The last line is a list of interfaces, which in this case is the D-Bus interface
used for the overview search in GNOME Shell. In the case of the
&lt;code&gt;org.freedesktop.FileManager1&lt;/code&gt; interface we could infer a default from the
preferred &lt;code&gt;inode/directory&lt;/code&gt; mime-type handler, but there is no support for
defining a default or fallback priority for these interfaces.&lt;/p&gt;
&lt;p&gt;While researching URI handlers as part of the work funded by the STF, Sonny
reached out to a number developers, including Sebastian Wick, who has been
helping to push forward sandboxing thumbnailers. The proposed intent-apps
Specification turns out to be a sensible way to frame URI handlers, and other
interfaces have requirements that make it an even better choice.&lt;/p&gt;
&lt;h3 id=&quot;terminal-itchiness&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/best-intentions/#terminal-itchiness&quot;&gt;#&lt;/a&gt; Terminal Itchiness&lt;/h3&gt;
&lt;p&gt;In community-driven software, we&#39;ve operated on a scratch-an-itch priority
model for a very long time. At this point we have several, arguably critical,
use cases for an intent system. Some known use cases include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Default Terminal&lt;/p&gt;
&lt;p&gt;This one should be pretty well known and a good example of when you might
need an intent system. Terminals aren&#39;t really associated with anything, let
alone a mime-type or URI scheme, so we&#39;ve all been hard-coding defaults for
decades now. See the proposed &lt;a href=&quot;https://gitlab.freedesktop.org/xdg/xdg-specs/-/merge_requests/46&quot;&gt;terminal-intent Specification&lt;/a&gt; for details.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Thumbnailers&lt;/p&gt;
&lt;p&gt;If C/C++ are the languages responsible for most vulnerabilities, thumbnailers
have to be high on the list of application code to blame. Intents will allow
using or providing thumbnailing services from a sandboxed application.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;URI Handler&lt;/p&gt;
&lt;p&gt;This intent is probably of interest to the widest range of developers, since
it allows a lot freedom for independent applications and provides assurances
relied on by everything from authentication flows to personal banking apps.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Below is a hypothetical example of how an application might declare it can
handle particular URIs:&lt;/p&gt;
&lt;pre class=&quot;language-ini&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-ini&quot;&gt;&lt;span class=&quot;token section&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token section-name selector&quot;&gt;Desktop Entry&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;Wise&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;Icon&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;com.wise.WiseLinux&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;Exec&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;wise %U&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;Terminal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;false&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;Application&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;DBusActivatable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;true&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;Implements&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;org.freedesktop.UriHandler&lt;/span&gt;

&lt;span class=&quot;token section&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token section-name selector&quot;&gt;org.freedesktop.UriHandler&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;Supports&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;wise.com;&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;Patterns&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;https://*.wise.com/link?urn=urn%3Awise%3Atransfers;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;While the Desktop Entry specification states that interfaces can have a named
group like above, there are no standardized keys shared by all interfaces. The
&lt;code&gt;Supports&lt;/code&gt; key proposed by Sebastian is important for both thumbnailers and URI
handlers. Unlike a Terminal which lacks any association with data, these need
the ability to express additional constraints.&lt;/p&gt;
&lt;p&gt;So the proposal is to have the existing &lt;code&gt;Implements&lt;/code&gt; key work in tandem with
the &lt;code&gt;intentapps.list&lt;/code&gt; (similar to the &lt;code&gt;MimeType&lt;/code&gt; key and &lt;code&gt;mimeapps.list&lt;/code&gt;), while
the &lt;code&gt;Supports&lt;/code&gt; key allows interfaces to define their own criteria for defaults
and fallbacks. Below is a hypothetical example of a thumbnailer&#39;s &lt;code&gt;.desktop&lt;/code&gt;
file:&lt;/p&gt;
&lt;pre class=&quot;language-ini&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-ini&quot;&gt;&lt;span class=&quot;token section&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token section-name selector&quot;&gt;Desktop Entry&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;Image Viewer&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;Icon&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;org.gnome.Loupe&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;Exec&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;loupe %U&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;Terminal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;false&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;Application&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;MimeType&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;image/jpeg;image/png;image/gif;image/webp;image/tiff&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;DBusActivatable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;true&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;Implements&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;org.freedesktop.Thumbnailer&lt;/span&gt;

&lt;span class=&quot;token section&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token section-name selector&quot;&gt;org.freedesktop.Thumbnailer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;Supports&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;image/jpeg;image/png;image/gif;image/svg+xml;image/tiff&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;Supports&lt;/code&gt; key will always be a list of strings, but the values themselves
are entirely up to the interface to define. To the intent system, these are
simply opaque tags with no implicit ordering. In the URI handler we may want
this to be a top-level domain to prevent things like link hijacking, while
thumbnailers want to advertise which mime-types they can process.&lt;/p&gt;
&lt;p&gt;In the &lt;code&gt;intentapps.list&lt;/code&gt; below, we&#39;re demonstrating how one could insist that a
particular format, like sketchy SVGs, are handled by &lt;a href=&quot;https://apps.gnome.org/Loupe/&quot;&gt;Loupe&lt;/a&gt;:&lt;/p&gt;
&lt;pre class=&quot;language-ini&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-ini&quot;&gt;&lt;span class=&quot;token section&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token section-name selector&quot;&gt;Default Applications&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;org.freedesktop.Thumbnailer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;org.gimp.GIMP&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;org.freedesktop.Thumbnailer[image/svg+xml]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;org.gnome.Loupe;org.gimp.GIMP&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We&#39;re in a time when Linux users need to do things like pass an untrusted file
attachment, from an unknown contact, to a thumbnailer maintained by an
indepedent developer. So while the intent-apps Specification itself is
superficially quite simple, if we get this right it can open up a lot of
possibilities and plug a lot of security holes.&lt;/p&gt;
&lt;h3 id=&quot;put-this-in-your-backpack-mines-full&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/best-intentions/#put-this-in-your-backpack-mines-full&quot;&gt;#&lt;/a&gt; Put this in your backpack, mine&#39;s full&lt;/h3&gt;
&lt;p&gt;First a bit of context for the GLib project, which is comprised of three main
parts: GLib, GObject and GIO. GLib contains things you&#39;d generally get from a
standard library, GObject defines the OOP semantics (methods/properties/signals,
inheritance, etc), and GIO provides reasonably high-level APIs for everything
from sockets and files to D-Bus and &lt;code&gt;Gio.DesktopAppInfo&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The GLib project as a whole contains a substantial amount of the XDG
implementations for the GLib/GTK-lineage of desktop environments. It also
happens to be the layer we implement a lot of our cross-platform support, from
OS-level facilities like process spawning on Windows to desktop subsystems like
sending notifications on macOS.&lt;/p&gt;
&lt;figure&gt;
  &lt;img src=&quot;https://www.andyholmes.ca/posts/best-intentions/maintainers.jpg&quot; alt=&quot;A scene from Lord of the Rings, wherein Gandalf shouts, &#39;You shall not pass!&#39;&quot;&gt;
  &lt;figcaption&gt;Fig. 1. A GLib Maintainer&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The &lt;a href=&quot;https://gitlab.gnome.org/GNOME/glib/-/merge_requests/4119&quot;&gt;merge request I drafted&lt;/a&gt; for the initial implementation received what
might look like Push Back, but this should really be interpreted as a Speed
Bump. GLib goes a lot of places, including Windows and macOS, thus we need
maintainers to make prudent decisions that allow us to take calculated risks
higher in the stack. It may also be a sign that GLib is no longer the first
place we should be looking to carry XDG implementations.&lt;/p&gt;
&lt;p&gt;Something that &lt;strong&gt;you&lt;/strong&gt; may be able to help with, is impedance-matching our
implementation of the intent-apps Specification with its counterparts in the
Apple and Microsoft platforms. Documentation is available (in varying quality),
but hands-on experience would be a great benefit.&lt;/p&gt;
&lt;h2 id=&quot;workbench-and-gsoc&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/best-intentions/#workbench-and-gsoc&quot;&gt;#&lt;/a&gt; Workbench and GSoC&lt;/h2&gt;
&lt;p&gt;Last year, I was invited by Sonny Piers to co-mentor for both Google Summer
of Code and Outreachy, which was really one the best times I&#39;ve had in the
community. He also invited a couple of us Workbenchers from that period to
the kick-off meeting for this year&#39;s projects.&lt;/p&gt;
&lt;p&gt;Recently, he asked if I could step in and help out with this year&#39;s programs.
This is a very unfortunate set of circumstances to arise during an internship
program, but regardless, I&#39;m both honored and thrilled.&lt;/p&gt;
&lt;p&gt;I think there&#39;s good chance you&#39;ve run into one of our mentees this year,
Shem Angelo Verlain (aka vixalien). He&#39;s been actively engaging in the GJS
community for some time and contributing to better support for TypeScript,
including his application &lt;a href=&quot;https://apps.gnome.org/Decibels&quot;&gt;Decibels&lt;/a&gt; which is in incubation to become a part of
GNOME Core. His project to bootstrap TypeScript support in Workbench is going
to play an important role in its adoption by our community.&lt;/p&gt;
&lt;p&gt;Our other mentee, Bharat Atbrat, has a familiar origin story. It started as an
innocent attempt to fix a GNOME Shell extension, turned into a merge request
for GNOME Settings, rolled over into porting Workbench demos to Vala and it&#39;s
at this point one admits to oneself they&#39;ve been nerd-sniped. Since then, Bharat
has been porting more demos to Vala and working on an indexed code search for
the demos. As a bonus, we will get a &lt;a href=&quot;https://gitlab.gnome.org/GNOME/gom&quot;&gt;GOM&lt;/a&gt; demo that&#39;s being used to prototype
and test searching capabilities.&lt;/p&gt;
&lt;h2 id=&quot;gnome-online-accounts&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/best-intentions/#gnome-online-accounts&quot;&gt;#&lt;/a&gt; GNOME Online Accounts&lt;/h2&gt;
&lt;p&gt;The release notes are not yet finalized for GNOME 47, but there are few
highlights worth mentioning.&lt;/p&gt;
&lt;p&gt;There have been several improvements to the periodic credential checks, fixing
several false positives and now notifying when an account needs to be
re-authenticated. The notification policy in GNOME 47.beta turned out overly
aggressive, so it has been amended to ensure you are notified at most once per
account, per session.&lt;/p&gt;
&lt;figure&gt;
  &lt;img src=&quot;https://www.andyholmes.ca/posts/best-intentions/goa-notifications.png&quot; alt=&quot;A screengrab of Commander Ransom from &#39;Star Trek: Lower Decks, Strange Energies&#39;, where he turns into a god-like tilt-a-whirl, spraying rainbows everywhere.&quot;&gt;
  &lt;figcaption&gt;Fig. 2. Entirely Reasonable Notification Policy&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;For Kerberos users, there is rarely any exciting news, however after
resurrecting a &lt;a href=&quot;https://gitlab.gnome.org/GNOME/gnome-online-accounts/-/merge_requests/47&quot;&gt;merge request by Rishi&lt;/a&gt; (a previous maintainer) and some help,
we now support Linux&#39;s &lt;a href=&quot;https://docs.kernel.org/core-api/watch_queue.html&quot;&gt;general notification mechanism&lt;/a&gt; as a very efficient
alternative to the default credential polling. If you&#39;re using your Kerberos or
Fedora account on a laptop or GNOME Mobile, this may improve your battery life
noticeably.&lt;/p&gt;
&lt;p&gt;The support for &lt;a href=&quot;https://datatracker.ietf.org/doc/draft-bucksch-autoconfig/&quot;&gt;Mail Autoconfig&lt;/a&gt; and improved handling of app passwords for
WebDAV accounts will ship in GNOME 47. The DAV discovery and Mail Autoconfig
will form the base of the &lt;a href=&quot;https://www.andyholmes.ca/posts/gnome-46-and-beyond/#webdav&quot;&gt;collection provider&lt;/a&gt;, but this won&#39;t ship until
GNOME 48. Aside from time constraints, this will allow a cycle to shake out
bugs while the existing pieces are stitched together.&lt;/p&gt;
&lt;p&gt;The Microsoft 365 provider has enabled support for email, calendar and
contacts, thanks to more work by Jan Michael-Brummer and Milan Crha. This
is available in &lt;a href=&quot;https://os.gnome.org&quot;&gt;GNOME OS Nightly&lt;/a&gt; now, so it&#39;s great time to get in some
early testing. We&#39;ve made progress on verifying our application to supports more
organizational accounts and, although this is not constrained by our release
schedule, I expect it to be resolved by GNOME 47.&lt;/p&gt;
&lt;h2 id=&quot;acknowledgements&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/best-intentions/#acknowledgements&quot;&gt;#&lt;/a&gt; Acknowledgements&lt;/h2&gt;
&lt;p&gt;Many thanks again to the &lt;a href=&quot;https://www.sprind.org/en/projects/sovereign-tech-fund/&quot;&gt;Sovereign Tech Fund&lt;/a&gt; and everyone who helped make it
possible. I would also like to express my appreciation to everyone who helps me
catch up on the historical context of the various XDG and GLib facilities. Even
when documentation exists, it can be extremely arduous to put the picture
together by yourself.&lt;/p&gt;
&lt;figure&gt;
  &lt;img src=&quot;https://www.andyholmes.ca/posts/best-intentions/kitten.png&quot; alt=&quot;A kitten, sleeping sweetly on its back.&quot;&gt;
  &lt;figcaption&gt;Fig. 3. Ideal Psychological and Emotional State&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Until next time, stay sweet.&lt;/p&gt;
</description>
      <pubDate>Mon, 19 Aug 2024 23:32:00 GMT</pubDate>
      <dc:creator>Andy Holmes</dc:creator>
      <link>https://www.andyholmes.ca/posts/best-intentions/</link>
      <guid>https://www.andyholmes.ca/posts/best-intentions/</guid>
      
    </item>
    <item>
      <title>GNOME 46 and Beyond</title>
      <description>&lt;p&gt;With GNOME 46.2 released, it seems like a good time to write a post about goings
on in GNOME Online Accounts and other STF-funded initiatives. There&#39;s a lot to
be excited about this cycle and most of it is leading to more improvements in
the near future.&lt;/p&gt;
&lt;h2 id=&quot;gnome-online-accounts&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/gnome-46-and-beyond/#gnome-online-accounts&quot;&gt;#&lt;/a&gt; GNOME Online Accounts&lt;/h2&gt;
&lt;p&gt;A lot happened in GNOME 46 for GNOME Online Accounts, including two new
providers, a port to GTK4 and Adwaita, authentication in the desktop browser,
and a large refactoring towards contemporary platform conventions.&lt;/p&gt;
&lt;p&gt;The new WebDAV and Microsoft 365 providers contrast quite a bit, although
both made progress in the general direction we want to move. The existing
Nexcloud provider was a good starting point for WebDAV, but support for more
implementations and auto-discovery were important goals for our push towards
open protocols and local-first principles.&lt;/p&gt;
&lt;h3 id=&quot;webdav&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/gnome-46-and-beyond/#webdav&quot;&gt;#&lt;/a&gt; WebDAV&lt;/h3&gt;
&lt;p&gt;The WebDAV provider seemed like it would be fairly straightforward, however
feedback from the community has shown that several popular services like
Fastmail and mailbox.org offer support for features like custom domain names
and app passwords restricted by content type. These are great features, but
not supported by a naive implementation of standard service discovery.&lt;/p&gt;
&lt;p&gt;The large refactoring in GNOME 46 de-duplicated a lot of code and is much easier
to use, but a lot of the account setup process is still tightly coupled to the
user interface. The new work being done to support more service configurations
and improve the user experience is separate from the provider code, which has
already led to the easy integration of some nice features:&lt;/p&gt;
&lt;video controls=&quot;&quot;&gt;
  &lt;source src=&quot;https://www.andyholmes.ca/posts/gnome-46-and-beyond/autoconfig-screencast.webm&quot;&gt;
  &lt;track kind=&quot;captions&quot; src=&quot;https://www.andyholmes.ca/posts/gnome-46-and-beyond/autoconfig-screencast.vtt&quot; srclang=&quot;en&quot;&gt;
&lt;/video&gt;
&lt;p&gt;In the video above, you can see the implementation of &lt;a href=&quot;https://benbucksch.github.io/autoconfig-spec/draft-autoconfig-1.html&quot;&gt;Mail Autoconfig&lt;/a&gt; at work
detecting settings for Fastmail from the email address, in the otherwise
unchanged Email setup dialog. I&#39;d like to thank Tyler and the rest of the
development team at &lt;a href=&quot;https://www.fastmail.com/&quot;&gt;Fastmail&lt;/a&gt; for extending me an account for additional
testing this cycle. By design, Mail Autoconfig doesn&#39;t need authentication, but
this account was very helpful while improving support for content-restricted app
passwords.&lt;/p&gt;
&lt;p&gt;These app passwords are especially relevant to WebDAV, which received a few
adjustments to adopt an internal API compatible with the Mail Autoconfig
implementation. While the WebDAV setup dialog hasn&#39;t landed the same UI feedback
improvements yet, there is a work-in-progress that does:&lt;/p&gt;
&lt;video controls=&quot;&quot;&gt;
  &lt;source src=&quot;https://www.andyholmes.ca/posts/gnome-46-and-beyond/collection-account-screencast.webm&quot;&gt;
  &lt;track kind=&quot;captions&quot; src=&quot;https://www.andyholmes.ca/posts/gnome-46-and-beyond/collection-account-screencast.vtt&quot; srclang=&quot;en&quot;&gt;
&lt;/video&gt;
&lt;p&gt;In this video, you can see an early prototype for a goal of a lot of this work.
Thanks to the research and work of Éloi Rivard we have an excellent whiteboard
for &lt;a href=&quot;https://gitlab.gnome.org/Teams/Design/whiteboards/-/issues/186&quot;&gt;Generic Service Providers&lt;/a&gt;, detailing a large amount of the subject matter.
The immediate goal then is to offer an account type that&#39;s easy to set up,
supports the common set of services (mail, calendar, contacts and files) and
adapts to the available services using open protocols and standards.&lt;/p&gt;
&lt;p&gt;We still have longer-term changes planned to support a sandbox-friendly
ecosystem, but it&#39;s not yet clear what form GNOME Online Accounts will take or
how applications will interact with it. For this reason, all the new code
supporting Mail Autoconfig and WebDAV was written for potential reuse later,
without investing in becoming yet another &lt;a href=&quot;https://accounts-sso.gitlab.io/&quot;&gt;Accounts SSO&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;microsoft-365&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/gnome-46-and-beyond/#microsoft-365&quot;&gt;#&lt;/a&gt; Microsoft 365&lt;/h3&gt;
&lt;p&gt;Much of the recent work on GNOME Online Accounts was funded by the Sovereign
Tech Fund, while the Microsoft 365 provider is the work of &lt;a href=&quot;https://gitlab.gnome.org/jbrummer&quot;&gt;Jan-Michael Brummer&lt;/a&gt;.
The initial support includes access to OneDrive with &lt;a href=&quot;https://apps.gnome.org/Nautilus/&quot;&gt;Files&lt;/a&gt; and &lt;a href=&quot;https://wiki.gnome.org/Projects/gvfs&quot;&gt;GVfs&lt;/a&gt;, with
support for email, contacts and calendar planned for the near future. While our
focus remains on open protocols and local-first principles, it&#39;s still a goal
to support services that the people use in their work and provide benefit to
the community.&lt;/p&gt;
&lt;p&gt;Something interesting the project gained from Jan&#39;s work is the first OAuth
provider with support for user-provided client IDs. Currently, every distributor
and fork of GNOME Online Accounts has been using the GNOME Foundation&#39;s client
IDs for OAuth providers. This can be problematic depending on the terms of
service and restrictive for those using enterprise or organizational accounts.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.andyholmes.ca/posts/gnome-46-and-beyond/microsoft365-setup-dialog.png&quot; alt=&quot;A screenshot of the Microsoft 365 setup dialog in GNOME 46.2, with confusingly optional entry fields&quot;&gt;&lt;/p&gt;
&lt;p&gt;Unfortunately, the first iterations of the setup dialog did not result in a
good user experience. Microsoft&#39;s services come with their own concepts and
terminology, which really resulted in a lack of clear direction in the design
of the interface during an already busy release cycle. The tight coupling
between logic and user interface did not help here either, as evidenced by the
double-modal:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.andyholmes.ca/posts/gnome-46-and-beyond/microsoft365-oauth2-dialog.png&quot; alt=&quot;A screenshot of the Microsoft 365 setup dialog in GNOME 46.2, with a &amp;quot;Sign In with your browser&amp;quot; dialog stacked on top&quot;&gt;&lt;/p&gt;
&lt;p&gt;The amount of feedback and issues reported has been the most help here, as we
learn how Microsoft 365 is being used by the open-source community in both
personal and work-related environments. Support for more services like email,
calendar and contacts are planned, and hopefully some better support for
&lt;a href=&quot;https://gitlab.gnome.org/GNOME/gnome-online-accounts/-/issues/335&quot;&gt;organizational accounts&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;orca-and-spiel&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/gnome-46-and-beyond/#orca-and-spiel&quot;&gt;#&lt;/a&gt; Orca and Spiel&lt;/h2&gt;
&lt;p&gt;Something I am thrilled to have the opportunity to take part in is &lt;a href=&quot;https://project-spiel.org&quot;&gt;Spiel&lt;/a&gt;, a
new speech synthesis service by &lt;a href=&quot;https://blog.monotonous.org/&quot;&gt;Eitan Isaacson&lt;/a&gt; that&#39;s a bit reminiscent of
&lt;a href=&quot;https://specifications.freedesktop.org/mpris-spec/latest/&quot;&gt;MPRIS&lt;/a&gt;. New &lt;a href=&quot;https://github.com/project-spiel/libspeechprovider&quot;&gt;speech providers&lt;/a&gt; can be easily written in C, Rust or any other
language binding and &lt;a href=&quot;https://github.com/project-spiel/libspiel&quot;&gt;libspiel&lt;/a&gt; will aggregate them for the client.&lt;/p&gt;
&lt;p&gt;An interesting difference with &lt;a href=&quot;https://github.com/brailcom/speechd&quot;&gt;Speech Dispatcher&lt;/a&gt; is that while the speech
provider takes responsibility for speech synthesis, the client application
takes responsibility for the audio output. Internally, the speech provider
returns a file descriptor over D-Bus and GStreamer is used to output the audio
on the client side.&lt;/p&gt;
&lt;p&gt;While Spiel does have some exciting possibilities outside of screen readers,
including new synthesizers like &lt;a href=&quot;https://github.com/rhasspy/piper&quot;&gt;Piper&lt;/a&gt;, you may be surprised to find the
speech rate that many users operate a screen reader at. Léonie Watson has an
excellent blog post titled &lt;a href=&quot;https://tink.uk/notes-on-synthetic-speech/&quot;&gt;Notes on synthetic speech&lt;/a&gt;, with plenty of audio
clips and insights into how screen readers are used by real people.&lt;/p&gt;
&lt;p&gt;I was fortunate enough to have the opportunity to integrate Spiel into Orca,
which was a great learning experience and re-sparked my interest in
accessibility in general. Something else to watch out for is Matt Campbell&#39;s
&lt;a href=&quot;https://gitlab.gnome.org/mwcampbell/gtk/tree/accesskit#experimental-accesskit-integration&quot;&gt;Newton&lt;/a&gt; project, bringing a modern accessibility stack to Wayland.&lt;/p&gt;
&lt;h2 id=&quot;acknowledgements&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/gnome-46-and-beyond/#acknowledgements&quot;&gt;#&lt;/a&gt; Acknowledgements&lt;/h2&gt;
&lt;p&gt;I&#39;d like to again thank the &lt;a href=&quot;https://www.sprind.org/en/projects/sovereign-tech-fund/&quot;&gt;Sovereign Tech Fund&lt;/a&gt; for investing in the GNOME
project. Their targeted funding of infrastructure and accessibility has
empowered a lot of overdue improvements for open source and the GNOME platform.&lt;/p&gt;
&lt;p&gt;I&#39;d also like to thank the development team at &lt;a href=&quot;https://www.fastmail.com/&quot;&gt;Fastmail&lt;/a&gt;, who upon request
graciously granted us an extended account, to continue testing support for their
service. The support staff at &lt;a href=&quot;https://mailbox.org&quot;&gt;mailbox.org&lt;/a&gt; also extended a trial period as a
show of good faith. It&#39;s been really encouraging to have these companies show
support for the community, thank you!&lt;/p&gt;
&lt;p&gt;As always, GNOME&#39;s community of contributors and users have been the most help,
with diligent reporting, code reviews and advice. There are so many things
happening in open source, I really wouldn&#39;t be able to keep up without all your
help.&lt;/p&gt;
</description>
      <pubDate>Tue, 11 Jun 2024 18:27:00 GMT</pubDate>
      <dc:creator>Andy Holmes</dc:creator>
      <link>https://www.andyholmes.ca/posts/gnome-46-and-beyond/</link>
      <guid>https://www.andyholmes.ca/posts/gnome-46-and-beyond/</guid>
      
    </item>
    <item>
      <title>GNOME Online Account and the STF</title>
      <description>&lt;p&gt;One of our goals for the &lt;a href=&quot;https://foundation.gnome.org/2023/11/09/gnome-recognized-as-public-interest-infrastructure/&quot;&gt;Sovereign Tech Fund&lt;/a&gt; is to modernize platform
infrastructure, in line with the mission to support security and resilience in
open source software. For GNOME Online Accounts, this meant tightening up the
code base and shifting focus to prioritize open protocols.&lt;/p&gt;
&lt;p&gt;A significant portion of the backend was refactored and tested in tandem with
the GNOME Settings side of Online Accounts. By working with development tools
like &lt;a href=&quot;https://en.wikipedia.org/wiki/AddressSanitizer&quot;&gt;AddressSanitizer&lt;/a&gt; we identified and fixed a number of memory and type
safety issues in both projects and helped to ensure the resiliency of any new
code.&lt;/p&gt;
&lt;h2 id=&quot;what-did-we-do&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/goa-and-stf-part-1/#what-did-we-do&quot;&gt;#&lt;/a&gt; What did we do&lt;/h2&gt;
&lt;p&gt;The first thing we wanted to do was get a &lt;a href=&quot;https://gitlab.gnome.org/GNOME/gnome-online-accounts/-/merge_requests/137&quot;&gt;general WebDAV provider merged&lt;/a&gt;.
This work was a multi-phase community effort and the majority of the work as
part of the STF was adding and testing more thorough and resuable code for DAV
discovery and configuration.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.andyholmes.ca/posts/goa-and-stf-part-1/webdav-setup.png&quot; alt=&quot;A screenshot of a WebDAV account sign-in form&quot;&gt;&lt;/p&gt;
&lt;p&gt;The new WebDAV provider then became a base for the Nextcloud provider, which is
now simply a branded version.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.andyholmes.ca/posts/goa-and-stf-part-1/nextcloud-details.png&quot; alt=&quot;A screenshot of a Nextcloud account page&quot;&gt;&lt;/p&gt;
&lt;p&gt;Another big step to improving reliability and maintainability is updating to
the latest dependencies and industry conventions. This meant first
&lt;a href=&quot;https://gitlab.gnome.org/GNOME/gnome-online-accounts/-/merge_requests/139&quot;&gt;supporting OAuth 2.0&lt;/a&gt; in a standard browser so, for example, when you log into
a Google account you&#39;re doing it with your preferred, trusted browser. This
allowed us to remove the old WebKit2 dependency and
&lt;a href=&quot;https://gitlab.gnome.org/GNOME/gnome-online-accounts/-/merge_requests/142&quot;&gt;port to GTK4 and libadwaita&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.andyholmes.ca/posts/goa-and-stf-part-1/oauth2-setup.png&quot; alt=&quot;A screenshot of a browser redirection dialog&quot;&gt;&lt;/p&gt;
&lt;p&gt;Although the user interface for adding an account is simple, each account type
needs its own, so GNOME Online Accounts has traditionally had a strange API and
behavior. In the GTK3 days we used modal dialogs and nested loops in ways that
really didn&#39;t work out. Nowadays we often approach user tasks like
&lt;em&gt;&amp;quot;Pick a File&amp;quot;&lt;/em&gt; with simple task-based APIs and now GNOME Online Accounts does,
too.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.andyholmes.ca/posts/goa-and-stf-part-1/webdav-setup-comparison.png&quot; alt=&quot;Side-by-side screenshots of a sign-in form using GTK3 and GTK4&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-future-of-online-accounts&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/goa-and-stf-part-1/#the-future-of-online-accounts&quot;&gt;#&lt;/a&gt; The Future of Online Accounts&lt;/h2&gt;
&lt;p&gt;When we&#39;re talking about Single Sign-On with GNOME, we&#39;re talking about
authenticating an account once and making it available to multiple desktop
applications. You log into Nextcloud, then when you open GNOME Contacts or
Calendar it can access your data using the account credentials. Aside from
other hurdles in the project, we have no ability to enforce any real trust
model, let alone selectively by application or content type.&lt;/p&gt;
&lt;p&gt;The future of GNOME Online Accounts then has less to do with accounts and
services than it does with security and content. A user shouldn&#39;t have to
worry about a calendar app scraping their e-mails and the developer shouldn&#39;t
have to care about OAuth 2.0 or RFC 5545. &lt;a href=&quot;https://gnome.pages.gitlab.gnome.org/tracker/overview.html&quot;&gt;Tracker&lt;/a&gt; provides a sandbox-friendly
data storage framework with a feature set we can build on to give users more
control and developers less legwork.&lt;/p&gt;
&lt;p&gt;Other aspects of the project have a less certain future.
&lt;a href=&quot;https://discourse.gnome.org/t/giving-up-maintainership-of-libgdata/9983&quot;&gt;libgdata is currently without a maintainer&lt;/a&gt; and having the GNOME Foundation&#39;s
provider client IDs used almost universally has left us in an awkward
relationship with service providers like Google and Microsoft.&lt;/p&gt;
&lt;p&gt;This doesn&#39;t mean GNOME Online Accounts is going away, but that we&#39;re
re-orienting to best provide control to users and simplicity to developers.
Prioritizing open protocols like WebDAV and modernizing the code base are
first steps towards less dependence on closed services and tighter security.
A few of our next steps will include new libraries that provide controlled
access to content (e.g. contacts) without exposing account credentials to
applications.&lt;/p&gt;
&lt;h2 id=&quot;corporate-users&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/goa-and-stf-part-1/#corporate-users&quot;&gt;#&lt;/a&gt; Corporate Users&lt;/h2&gt;
&lt;p&gt;We&#39;d like make a point of inviting our corporate users to reach out and
contribute. Some are already in contact or have contributions waiting for
review and we thank you for your patience.&lt;/p&gt;
&lt;p&gt;Since the focus moving forward will be on open protocols, we will be relying
more on contributions from the community to help maintain support for closed
services. If you are a business or work for a business that benefits from
integration of a proprietary service, consider sponsoring an employee or a
developer in the community for support and maintenance of these services.&lt;/p&gt;
&lt;p&gt;Contributing upstream is a great way to give back and shows you&#39;re an active
part of an industry embracing open source, especially if you are the service
provider. The GNOME Foundation is always proud to announce collaborations with
other parties in its press releases, which reach many other corporate partners
and related markets.&lt;/p&gt;
&lt;h2 id=&quot;acknowledgements&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/goa-and-stf-part-1/#acknowledgements&quot;&gt;#&lt;/a&gt; Acknowledgements&lt;/h2&gt;
&lt;p&gt;We&#39;d like to thank the &lt;a href=&quot;https://foundation.gnome.org/2023/11/09/gnome-recognized-as-public-interest-infrastructure/&quot;&gt;Sovereign Tech Fund&lt;/a&gt; for investing in GNOME Online
Accounts. With most maintainers stretched thin, the opportunity to get everyone
together for video meetings and the time to take in a whole new codebase would
not have been possible without their support.&lt;/p&gt;
&lt;p&gt;We&#39;d also like to thank the many members of the GNOME community who lent their
experience and ideas, as well as &lt;a href=&quot;https://blog.wuc.me/&quot;&gt;Christoph Wurst&lt;/a&gt; from Nextcloud who joined
in on a meeting. The work on this project really wouldn&#39;t be possible without
the combined talent of various backgrounds.&lt;/p&gt;
</description>
      <pubDate>Fri, 15 Dec 2023 18:27:00 GMT</pubDate>
      <dc:creator>Andy Holmes</dc:creator>
      <link>https://www.andyholmes.ca/posts/goa-and-stf-part-1/</link>
      <guid>https://www.andyholmes.ca/posts/goa-and-stf-part-1/</guid>
      
    </item>
    <item>
      <title>Mentoring in Open Source</title>
      <description>&lt;p&gt;This year, I was invited by Sonny Piers to be a co-mentor for the GNOME
Foundation, working on platform demos for Workbench. I already contribute a lot
of entry-level documentation and help a lot of contributors, so this felt like
a good step in a direction I&#39;ve been heading for a while.&lt;/p&gt;
&lt;h2 id=&quot;internships&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/mentoring-in-open-source/#internships&quot;&gt;#&lt;/a&gt; Internships&lt;/h2&gt;
&lt;p&gt;Together, Sonny and I mentored three interns; two by way of Google Summer of
Code (GSoC) and a third for Outreachy. Both are international programs providing
a great opportunity for newcomers, but differ in some important ways.&lt;/p&gt;
&lt;h3 id=&quot;google-summer-of-code&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/mentoring-in-open-source/#google-summer-of-code&quot;&gt;#&lt;/a&gt; Google Summer of Code&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://summerofcode.withgoogle.com&quot;&gt;Google Summer of Code&lt;/a&gt; has been around for a very long time, although I&#39;ve been
around long enough to remember when it started, and how it helped change the
public image of open source. Google&#39;s program is well developed, while at the
same time being mostly hands-off, leaving most of the planning and direction
to the mentors.&lt;/p&gt;
&lt;p&gt;Something that did influence our choice of applicants was the requirement that
interns be open source beginners, which I feel doesn&#39;t account for those who
could benefit from more advanced mentoring. Of course, we had plenty of
applicants and I have no regrets about our selection.&lt;/p&gt;
&lt;h3 id=&quot;outreachy&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/mentoring-in-open-source/#outreachy&quot;&gt;#&lt;/a&gt; Outreachy&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://outreachy.org&quot;&gt;Outreachy&lt;/a&gt; is a newer program and one that actually started as an initiative
of the GNOME Foundation. It is focused on those that are underrepresented in the
industry, and fostering a positive feedback loop to address this ongoing issue.&lt;/p&gt;
&lt;p&gt;In contrast to Google&#39;s program, Outreachy is not limited to students or
developers, which is important when you consider the barriers to education and
lack of opportunity its applicants often face. The program also includes prompts
and goals, both for mentors and mentees, that help make these internships more
engaging.&lt;/p&gt;
&lt;p&gt;The infrastructure for Outreachy is kind of unassuming at first, compared to
Google&#39;s sleek and streamlined website. Once you&#39;re a few weeks into the
program though, you realize they really are a lot more focused on genuine
mentorship. Nothing about your interaction with the coordinators is impersonal
or superficial.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://sfconservancy.org/news/2022/jun/14/remembering-marina/&quot;&gt;Marina Zhurakhinskaya&lt;/a&gt; deserves special mention here, and even if you haven&#39;t
heard the name before, you have heard the names of those whose lives she
touched. Although I never had the honour of working with her myself, it&#39;s
impossible to ignore how we all continue to benefit from her contributions.&lt;/p&gt;
&lt;h2 id=&quot;people&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/mentoring-in-open-source/#people&quot;&gt;#&lt;/a&gt; People&lt;/h2&gt;
&lt;p&gt;I should first thank &lt;a href=&quot;https://floss.social/@sonny&quot;&gt;Sonny&lt;/a&gt; for the opportunity to participate as a mentor for
the GNOME Foundation. This is not something I&#39;ve been able to do in a formal way
since high school when I was allowed extra classes to assist younger students
in the electronics program.&lt;/p&gt;
&lt;p&gt;We&#39;ve all been in the position where you really just need someone to answer the
question, &lt;em&gt;&amp;quot;Okay, but how does it actually work?&amp;quot;&lt;/em&gt;. Being a part of the
&lt;em&gt;&amp;quot;Oh, now I get it!&amp;quot;&lt;/em&gt; moments is an unparalleled experience for me. I&#39;m really
grateful I had the chance to be involved in this way again.&lt;/p&gt;
&lt;h3 id=&quot;akshay-warrier&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/mentoring-in-open-source/#akshay-warrier&quot;&gt;#&lt;/a&gt; Akshay Warrier&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://akshaywarrier.medium.com&quot;&gt;Akshay&lt;/a&gt; is going to do great things in open source and I think he really gets
community-driven software. He&#39;s one of those people that renews your excitement
for open source.&lt;/p&gt;
&lt;p&gt;Aside from the contributions he&#39;s made to Workbench as part of his internship,
I was really excited to see him appear at our yearly GNOME Shell Extensions
workshop. I know he had a fantastic time at GUADEC and the way he talked
about it made it obvious how much importance he places on people.&lt;/p&gt;
&lt;p&gt;I think we&#39;ll see more of Akshay and, one day, I think he could make a really
great mentor himself.&lt;/p&gt;
&lt;h3 id=&quot;jose-hunter&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/mentoring-in-open-source/#jose-hunter&quot;&gt;#&lt;/a&gt; José Hunter&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://josecodes.hashnode.dev&quot;&gt;José&lt;/a&gt; comes up with some great ideas, and he&#39;s quick to jump in and get them
implemented. Given the right circumstances, I think we might see him do some
really cool things in the community.&lt;/p&gt;
&lt;p&gt;He&#39;s blogged about privacy and the encroach of corporate interests, and it&#39;s
hard not to think this encouraged his involvement in open source. I think he
has a natural impulse to form his own opinions about the technology he uses and
employs, and an honest interest in projects related to his hobbies like
&lt;code&gt;libmanette&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I hope José sticks around after his internship is complete, because he has
a personality that has served the community well in the past.&lt;/p&gt;
&lt;h3 id=&quot;sriyansh-shivam&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/mentoring-in-open-source/#sriyansh-shivam&quot;&gt;#&lt;/a&gt; Sriyansh Shivam&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://sonichere.hashnode.dev&quot;&gt;Sriyansh&lt;/a&gt; displayed an aptitude for development early on, but also a habit of
responding to feedback in a really constructive and professional way. That&#39;s a
hard thing to do sometimes, and he really has the drive for self-improvement.&lt;/p&gt;
&lt;p&gt;We spent a fair amount of time working through a series of demos about the
model-view-controller pattern together, and I really enjoyed that. These demos
covered everything from &lt;code&gt;GListModel&lt;/code&gt; and &lt;code&gt;GtkListBox&lt;/code&gt;, to the newer view widgets
like &lt;code&gt;GtkColumnView&lt;/code&gt;. These are very popular in GTK4 applications, and often
quite complex, so I&#39;m quite proud to see the results of his hard work.&lt;/p&gt;
&lt;p&gt;I&#39;m not sure we really had a chance to see his full potential, and I hope he
gets the opportunity to take on a longer more challenging project.&lt;/p&gt;
&lt;h2 id=&quot;the-future&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.andyholmes.ca/posts/mentoring-in-open-source/#the-future&quot;&gt;#&lt;/a&gt; The Future&lt;/h2&gt;
&lt;p&gt;I hope to have the time and opportunity to mentor again, and next time I would
like to apply myself in a more thoughtful way. I write a lot of entry-level
documentation for free software, but the feedback is far more asynchronous and
has to be applied more statistically.&lt;/p&gt;
&lt;p&gt;Having spent time with several mentees over an extended period of time was a
good way to learn a lot. Sonny and I had some good conversations about what
seemed to work in retrospect, which was very enlightening. I would really like
to try mentoring again, but next time with a more developed strategy.&lt;/p&gt;
&lt;p&gt;I will say that co-mentoring is definitely something we should encourage more
as a community. It&#39;s difficult to be confident of your take on an interpersonal
relationship, and having someone to balance that turned out to be invaluable to
the mentorship.&lt;/p&gt;
</description>
      <pubDate>Thu, 31 Aug 2023 06:09:00 GMT</pubDate>
      <dc:creator>Andy Holmes</dc:creator>
      <link>https://www.andyholmes.ca/posts/mentoring-in-open-source/</link>
      <guid>https://www.andyholmes.ca/posts/mentoring-in-open-source/</guid>
      
    </item>
  </channel>
</rss>
