<?xml version="1.0"?>
<rdf:RDF
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:foaf="http://xmlns.com/foaf/0.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns="http://purl.org/rss/1.0/"
>
<channel rdf:about="https://planet.mozilla.org/">
	<title>Planet Mozilla</title>
	<link>https://planet.mozilla.org/</link>
	<description>Planet Mozilla - https://planet.mozilla.org/</description>
	<atom:link rel="self" href="https://planet.mozilla.org/rss10.xml" type="application/rss+xml"/>

	<items>
		<rdf:Seq>
			<rdf:li rdf:resource="discourse.mozilla.org-topic-149466" />
			<rdf:li rdf:resource="discourse.mozilla.org-topic-149464" />
			<rdf:li rdf:resource="https://blog.mozilla.org/?p=87204" />
			<rdf:li rdf:resource="https://jonalmeida.com/til/fetch-one-off-github-contributions/" />
			<rdf:li rdf:resource="https://servo.org/blog/2026/09/15/one-year-of-sponsorship/" />
			<rdf:li rdf:resource="https://blog.nightly.mozilla.org/?p=2118" />
			<rdf:li rdf:resource="yt:video:nZupfJy6I0A" />
			<rdf:li rdf:resource="yt:video:E5j6BoxZ-7w" />
			<rdf:li rdf:resource="yt:video:Y3IOY-kmk70" />
			<rdf:li rdf:resource="yt:video:BZVugz_yzzg" />
			<rdf:li rdf:resource="https://jonalmeida.com/til/do-not-relocate-objdir/" />
			<rdf:li rdf:resource="https://blog.mozilla.org/community/?p=2550" />
			<rdf:li rdf:resource="yt:video:B635wgZy7Iw" />
			<rdf:li rdf:resource="yt:video:myHH89j0JQU" />
			<rdf:li rdf:resource="yt:video:y7msgjoLjNk" />
			<rdf:li rdf:resource="yt:video:V5FgVbxm-cc" />
			<rdf:li rdf:resource="discourse.mozilla.org-topic-149413" />
			<rdf:li rdf:resource="yt:video:k1cvnVKOmM8" />
			<rdf:li rdf:resource="discourse.mozilla.org-topic-149411" />
			<rdf:li rdf:resource="https://blog.thunderbird.net/?p=4543" />
			<rdf:li rdf:resource="tag:this-week-in-rust.org,2026-09-09:/blog/2026/09/09/this-week-in-rust-668/" />
			<rdf:li rdf:resource="https://blog.nightly.mozilla.org/?p=2108" />
			<rdf:li rdf:resource="https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/" />
			<rdf:li rdf:resource="discourse.mozilla.org-topic-149369" />
			<rdf:li rdf:resource="discourse.mozilla.org-topic-149361" />
			<rdf:li rdf:resource="https://blog.mozilla.org/performance/?p=580" />
			<rdf:li rdf:resource="discourse.mozilla.org-topic-149360" />
			<rdf:li rdf:resource="https://blog.rust-lang.org/2026/09/03/Rust-1.98.1/" />
			<rdf:li rdf:resource="https://blog.thunderbird.net/?p=4540" />
			<rdf:li rdf:resource="https://blog.mozilla.org/?p=86867" />
			<rdf:li rdf:resource="tag:this-week-in-rust.org,2026-09-02:/blog/2026/09/02/this-week-in-rust-667/" />
			<rdf:li rdf:resource="https://fxdx.dev/?p=560" />
			<rdf:li rdf:resource="https://blog.mozilla.org/netpolicy/?p=2611" />
			<rdf:li rdf:resource="https://blog.mozilla.org/?p=86916" />
			<rdf:li rdf:resource="https://blog.rust-lang.org/2026/09/01/Rustup-1.29.1/" />
			<rdf:li rdf:resource="https://blog.mozilla.org/netpolicy/?p=2619" />
			<rdf:li rdf:resource="https://blog.mozilla.org/l10n/?p=1918" />
			<rdf:li rdf:resource="https://servo.org/blog/2026/08/31/july-in-servo/" />
			<rdf:li rdf:resource="discourse.mozilla.org-topic-149287" />
			<rdf:li rdf:resource="tag:serge-sans-paille.github.io,2026-08-27:/pythran-stories/pros-and-cons-of-unified-build.html" />
			<rdf:li rdf:resource="https://blog.mozilla.org/performance/?p=561" />
			<rdf:li rdf:resource="tag:this-week-in-rust.org,2026-08-26:/blog/2026/08/26/this-week-in-rust-666/" />
			<rdf:li rdf:resource="https://blog.rust-lang.org/2026/08/26/announcing-our-first-maintainers-in-residence/" />
			<rdf:li rdf:resource="https://blog.nightly.mozilla.org/?p=2098" />
			<rdf:li rdf:resource="discourse.mozilla.org-topic-149251" />
			<rdf:li rdf:resource="https://hacks.mozilla.org/?p=48385" />
			<rdf:li rdf:resource="https://jonalmeida.com/til/github-serves-ssh-over-tls-port/" />
			<rdf:li rdf:resource="urn:https-wrla-ch:-log-2026-08-glean-dictionary-duckdb" />
			<rdf:li rdf:resource="https://blog.rust-lang.org/2026/08/21/enabling-next-solver-on-nightly/" />
			<rdf:li rdf:resource="http://ritter.vg/blog-webaudio_alibaba.html" />
			<rdf:li rdf:resource="https://blog.mozilla.org/?p=86826" />
			<rdf:li rdf:resource="https://addons.mozilla.org/blog/extension-starter-pack/" />
			<rdf:li rdf:resource="https://addons.mozilla.org/blog/youtube-your-way-browser-extensions-put-you-in-charge-of-your-video-experience/" />
			<rdf:li rdf:resource="https://blog.rust-lang.org/2026/08/20/supply-chain-attack-on-arrayref/" />
			<rdf:li rdf:resource="https://blog.rust-lang.org/2026/08/20/Rust-1.98.0/" />
			<rdf:li rdf:resource="https://blog.mozilla.org/sumo/?p=4198" />
			<rdf:li rdf:resource="tag:this-week-in-rust.org,2026-08-19:/blog/2026/08/19/this-week-in-rust-665/" />
			<rdf:li rdf:resource="discourse.mozilla.org-topic-149223" />
			<rdf:li rdf:resource="https://blog.mozilla.org/netpolicy/?p=2604" />
			<rdf:li rdf:resource="https://blog.mozilla.org/netpolicy/?p=2603" />
			<rdf:li rdf:resource="https://blog.mozilla.org/?p=86554" />
			<rdf:li rdf:resource="https://blog.mozilla.org/?p=86578" />
			<rdf:li rdf:resource="https://blog.mozilla.org/?p=86592" />
			<rdf:li rdf:resource="https://blog.mozilla.org/?p=86528" />
			<rdf:li rdf:resource="https://fxdx.dev/?p=557" />
			<rdf:li rdf:resource="discourse.mozilla.org-topic-149211" />
			<rdf:li rdf:resource="https://blog.farre.se/posts/2026/08/17/tracing-web-specs/" />
			<rdf:li rdf:resource="urn:https-wrla-ch:-log-2026-08-writing-the-docs-2026-edition" />
			<rdf:li rdf:resource="https://jonalmeida.com/til/regenerate-build-config/" />
			<rdf:li rdf:resource="https://blog.mozilla.org/l10n/?p=1911" />
			<rdf:li rdf:resource="https://blog.thunderbird.net/?p=4481" />
			<rdf:li rdf:resource="https://blog.mozilla.org/security/?p=2926" />
			<rdf:li rdf:resource="discourse.mozilla.org-topic-149143" />
			<rdf:li rdf:resource="https://smallcultfollowing.com/babysteps/blog/2026/08/10/cyclic-trait-solving/" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-19749110.post-236503802116150253" />
		</rdf:Seq>
	</items>
</channel>

<item rdf:about="discourse.mozilla.org-topic-149466">
	<title>Firefox Tooling Announcements: Happy BMO Push Day! (20260916.1)</title>
	<link>https://discourse.mozilla.org/t/happy-bmo-push-day-20260916-1/149466</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;https://github.com/mozilla-bteam/bmo/tree/release-20260916.1&quot; rel=&quot;noopener nofollow ugc&quot;&gt;Github Link&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The following changes have been pushed to &lt;a href=&quot;https://bugzilla.mozilla.org&quot;&gt;bugzilla.mozilla.org&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2069143&quot;&gt;Bug 2069143&lt;/a&gt; - When retrieving comments for a bug(s) via REST API, remove comments that would be collapsed in the web UI unless explicitly asking for them&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2070247&quot;&gt;Bug 2070247&lt;/a&gt; - Support limiting who can needinfo the Hackbot account&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2061445&quot;&gt;Bug 2061445&lt;/a&gt; - Migrate Bugzilla (system info) REST resource to native Mojo API&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1877201&quot;&gt;Bug 1877201&lt;/a&gt; - Post to &lt;code&gt;bug/{bugid}/comment&lt;/code&gt; returns wrong &lt;code&gt;comment_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2072224&quot;&gt;Bug 2072224&lt;/a&gt; - Update REST API authentication documentation to reflect per-resource migration to native Mojo auth&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2060932&quot;&gt;Bug 2060932&lt;/a&gt; - Support GitHub-style &amp;lt;details&amp;gt;/&amp;lt;summary&amp;gt; collapsible sections in comments&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2072689&quot;&gt;Bug 2072689&lt;/a&gt; - Buglist link on My Dashboard is broken&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Discuss these changes in the &lt;a href=&quot;https://matrix.to/#/#bmo:mozilla.org&quot; rel=&quot;noopener nofollow ugc&quot;&gt;BMO Matrix Room&lt;/a&gt;&lt;/p&gt;
            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;
            &lt;p&gt;&lt;a href=&quot;https://discourse.mozilla.org/t/happy-bmo-push-day-20260916-1/149466&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2026-09-16T18:03:55+00:00</dc:date>
	<dc:creator>dkl1</dc:creator>
</item>
<item rdf:about="discourse.mozilla.org-topic-149464">
	<title>Firefox Tooling Announcements: MozPhab 2.19.1 Released</title>
	<link>https://discourse.mozilla.org/t/mozphab-2-19-1-released/149464</link>
	<content:encoded>&lt;p&gt;Bugs resolved in Moz-Phab 2.19.1:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/2071003&quot;&gt;bug 2071003&lt;/a&gt; moz-phab patch --apply-to head moves to a detached HEAD&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Discuss these changes in &lt;span class=&quot;hashtag-raw&quot;&gt;#engineering-workflow&lt;/span&gt; on Slack or &lt;span class=&quot;hashtag-raw&quot;&gt;#Conduit&lt;/span&gt; Matrix.&lt;/p&gt;
            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;
            &lt;p&gt;&lt;a href=&quot;https://discourse.mozilla.org/t/mozphab-2-19-1-released/149464&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2026-09-16T14:28:36+00:00</dc:date>
	<dc:creator>sheehan</dc:creator>
</item>
<item rdf:about="https://blog.mozilla.org/?p=87204">
	<title>The Mozilla Blog: Mozilla and Mistral: Partnering to expand AI competition and preserve user choice</title>
	<link>https://blog.mozilla.org/en/firefox/mozilla-mistral-partnership/</link>
	<content:encoded>&lt;p&gt;The AI race is shifting. Again. Practically overnight, competition has expanded from “which AI model is best?” to a new high-stakes battle over which models people can access, through which products, and whether people have meaningful choice about AI at all.&lt;/p&gt;



&lt;p&gt;In response, Mozilla and Mistral today &lt;a href=&quot;https://mistral.ai/news/mistral-x-mozilla/&quot;&gt;announced a partnership&lt;/a&gt; built on a shared idea: a new, open-source AI model alternative to Big Tech-default browser ecosystems. The intent: a model deliberately designed to keep the web open to technological diversity, competition, and choice.&lt;/p&gt;



&lt;p&gt;And we’re putting this idea into practice in Firefox. &lt;/p&gt;



&lt;p&gt;Mistral Small 4 is coming to Firefox Smart Window beta (learn more about Firefox Smart Window &lt;a href=&quot;https://blog.mozilla.org/en/firefox/firefox-smart-window/&quot;&gt;here&lt;/a&gt;), becoming a new AI model for Smart Window users in the US and Canada, while expanding Smart Window beta access and French-language support to Firefox users in France. Across all markets where Smart Window beta is available, Firefox users can still choose from a multitude of other AI models. &lt;/p&gt;



&lt;p&gt;“AI is becoming part of how people experience the web every day. We want to make sure that doesn’t mean people are chained to one company’s self-serving pipeline. With the browser sitting at the heart of the web and online experience, it should be a place where different AI providers can compete and open source has a seat at the table.&lt;/p&gt;



&lt;p&gt;This isn’t just a product partnership. A browser shouldn’t be a one-way funnel. It should preserve what made the internet powerful to begin with: the freedom to explore, discover different ideas and tech, and decide for ourselves where to go next,” said Anthony Enzor-DeMeo, CEO of Mozilla Corporation.&lt;/p&gt;



&lt;h3&gt;Choice and competition are worth protecting&lt;/h3&gt;



&lt;p&gt;As AI integration becomes increasingly concentrated, we are in jeopardy of a handful of closed-model companies controlling the browser, the search engine, the AI model, and the surrounding services that connect them. Mozilla and Mistral are betting that independent and interoperable models can offer an alternative to global tech monopolies controlling the next digital era. &lt;/p&gt;



&lt;p&gt;“This partnership represents two open source advocates working together to bring Mistral’s scientific innovations to Mozilla’s consumers around the world. Together, we are bringing privacy, control, and choice to AI-powered web browsing,” said Arthur Mensch, Co-founder and CEO of Mistral.&lt;/p&gt;



&lt;p&gt;Meaningful choice isn’t confined to personal preference for one AI model over another. Web products need to be able to work with different AI providers, and people deserve the option of switching without being locked into a single company’s ecosystem. When a tech layer as far-reaching and influential as AI is controlled by a small handful of players, it risks creating closed systems and closed doors, making it harder for new ideas and better technologies to grow, reach users, and compete on merits. &lt;/p&gt;



&lt;p&gt;Mozilla and Mistral aim to keep that door open. The combination of an independent browser with a frontier European AI company gives people and institutions greater access to useful, responsible AI, the opposite of locking them into one company’s singular technology ecosystem. &lt;/p&gt;



&lt;h3&gt;Selecting Mistral, and expanding to France &lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-87281&quot; height=&quot;673&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2026/09/Mistral-partnership-in-Firefox-UI-English1-1-1024x673.png&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;



&lt;p&gt;Mozilla selected Mistral Small 4 after evaluating its performance for Smart Window Beta, including multilingual performance, an important part of the fit. The companies approached multilingual and multicultural tuning as a core model feature, rather than simply adapting an English-first experience for a new market. &lt;/p&gt;



&lt;p&gt;For Firefox users, Mistral access starts with Smart Window Beta, a browsing experience designed to turn AI into a useful assistant for the things we do online: making sense of complex search trails, finding something valuable you clicked away from, presenting data sources, and generally picking up where day-to-day internet use got left off. &lt;/p&gt;



&lt;p&gt;France is the first new market for Smart Window with official French-language support. Mozilla is planning additional European expansion later this year.&lt;/p&gt;



&lt;h3&gt;A different kind of AI competition&lt;/h3&gt;



&lt;p&gt;Our Mistral partnership puts an ambitious new AI model approach into practice: a multilingual, globally competitive European AI company reaching people through an independent browser, leveraging openness to create more room for new technologies to compete and succeed. Mistral can reach Firefox users without owning the browser, and Mozilla can integrate and recommend Mistral without removing user choice.&lt;/p&gt;



&lt;p&gt;It is a natural extension of the principles that have shaped Firefox and the open web, and the kind of AI ecosystem we intend to continue building.&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/firefox/mozilla-mistral-partnership/&quot;&gt;Mozilla and Mistral: Partnering to expand AI competition and preserve user choice&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/en/&quot;&gt;The Mozilla Blog&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2026-09-16T08:00:00+00:00</dc:date>
	<dc:creator>Mozilla</dc:creator>
</item>
<item rdf:about="https://jonalmeida.com/til/fetch-one-off-github-contributions/">
	<title>Jonathan Almeida: Checkout a Github pull request from one-off contributions</title>
	<link>https://jonalmeida.com/til/fetch-one-off-github-contributions/</link>
	<content:encoded>&lt;p&gt;EDIT: Updated to reference &lt;code&gt;gh&lt;/code&gt; correctly. Thanks flod!&lt;/p&gt;
&lt;p&gt;Sometimes on Github, I need to fetch a patch from a fork I don't typically see everyday so I can try it out locally. I use the line at the top of the patch which has a copy button next to it because it's convenient.&lt;/p&gt;
&lt;div&gt;&lt;img src=&quot;https://jonalmeida.com/til/fetch-one-off-github-contributions/image-1.png&quot; style=&quot;display: block; margin-left: auto; margin-right: auto;&quot; /&gt;&lt;/div&gt;
&lt;p&gt;The common steps for this are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Click the contributor's branch and go to their github fork repository.&lt;/li&gt;
&lt;li&gt;Copy the repository link.&lt;/li&gt;
&lt;li&gt;Add a new git remote with an alias (typically their username).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git fetch &amp;lt;alias&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git checkout &amp;lt;alias&amp;gt;/&amp;lt;branch&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Here is a one-liner for it that you can add to your &lt;code&gt;gitconfig&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot;&gt;&lt;code&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;alias&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  co&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; &quot;&lt;/span&gt;&lt;span&gt;!f() { PNAME=$(basename `git rev-parse --show-toplevel`); OWNER=$(echo $1 | cut -d':' -f1); BRANCH=$(echo $1 | cut -d':' -f2); git fetch git@github.com:$OWNER/$PNAME.git $BRANCH; git checkout FETCH_HEAD; }; f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You might ask, why do all of this when the github &lt;code&gt;gh&lt;/code&gt; CLI does this for you?
While it does simplify some tasks, I wanted a solution that was independant to a specific git host. The &lt;code&gt;git@github.com&lt;/code&gt; remote that is used in the alias can be changed or made configurable if desired. This is something that I wouldn't be able to do with platform-dependant &lt;code&gt;gh&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The fetch also works well with &lt;code&gt;jj&lt;/code&gt; too because the fetch and checkout remain headless.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Formatted and commented, it looks less intimidating:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot;&gt;&lt;code&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  #&lt;/span&gt;&lt;span&gt; Get the repository name from your checkout (assuming it is the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  #&lt;/span&gt;&lt;span&gt; original directory name as the remote).&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  PNAME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;basename&lt;/span&gt;&lt;span&gt; `&lt;/span&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; rev-parse&lt;/span&gt;&lt;span&gt; -&lt;/span&gt;&lt;span&gt;-show-toplevel&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  #&lt;/span&gt;&lt;span&gt; Parse out the fork's owner.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  #&lt;/span&gt;&lt;span&gt; Example: `&amp;lt;owner&amp;gt;:&amp;lt;branch&amp;gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  OWNER&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; $&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; |&lt;/span&gt;&lt;span&gt; cut&lt;/span&gt;&lt;span&gt; -&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt;'&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;'&lt;/span&gt;&lt;span&gt; -&lt;/span&gt;&lt;span&gt;f1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  #&lt;/span&gt;&lt;span&gt; Parse out the branch name.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  #&lt;/span&gt;&lt;span&gt; Example: `&amp;lt;owner&amp;gt;:&amp;lt;branch&amp;gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  BRANCH&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; $&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; |&lt;/span&gt;&lt;span&gt; cut&lt;/span&gt;&lt;span&gt; -&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt;'&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;'&lt;/span&gt;&lt;span&gt; -&lt;/span&gt;&lt;span&gt;f2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  #&lt;/span&gt;&lt;span&gt; Do a fetch of that particular branch using the extracted&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  #&lt;/span&gt;&lt;span&gt; information from above.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  #&lt;/span&gt;&lt;span&gt; This assumes the remote is hosted on github.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  git&lt;/span&gt;&lt;span&gt; fetch&lt;/span&gt;&lt;span&gt; git@github.com:&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;OWNER&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;PNAME&lt;/span&gt;&lt;span&gt;.git&lt;/span&gt;&lt;span&gt; $&lt;/span&gt;&lt;span&gt;BRANCH&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  #&lt;/span&gt;&lt;span&gt; Checkout using the alias `FETCH_HEAD` which git provides.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  git&lt;/span&gt;&lt;span&gt; checkout&lt;/span&gt;&lt;span&gt; FETCH_HEAD&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt; Execute the function!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt; It's easier to build a function that holds variables and execute&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt; rather than in-line it.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;f&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;section class=&quot;article-content&quot; id=&quot;comments&quot;&gt;
  &lt;h3&gt;Comments&lt;/h3&gt;
  &lt;p&gt;With an account on the Fediverse or Mastodon, you can respond to this &lt;a href=&quot;https://mindly.social/@jonalmeida/117279142568496801&quot;&gt;post&lt;/a&gt;. Since Mastodon is decentralized, you can use your existing account hosted by another Mastodon server or compatible platform if you don't have an account on this one. Known non-private replies are displayed below.&lt;/p&gt;
  &lt;p&gt;Learn how this was implemented from the original source &lt;a class=&quot;link&quot; href=&quot;https://carlschwan.eu/2020/12/29/adding-comments-to-your-static-blog-with-mastodon/&quot;&gt;here.&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;mastodon-comments-list&quot;&gt;
  &lt;button id=&quot;load-comment&quot;&gt;Load comments&lt;/button&gt;&lt;/p&gt;
  &lt;div id=&quot;comments-wrapper&quot;&gt;
    &amp;lt;noscript&amp;gt;&amp;lt;p&amp;gt;Loading comments relies on JavaScript. Try enabling JavaScript and reloading, or visit &amp;lt;a href=&quot;https://mindly.social/@jonalmeida/117279142568496801&quot;&amp;gt;the original post&amp;lt;/a&amp;gt; on Mastodon.&amp;lt;/p&amp;gt;&amp;lt;/noscript&amp;gt;
  &lt;/div&gt;
  &amp;lt;noscript&amp;gt;You need JavaScript to view the comments.&amp;lt;/noscript&amp;gt;
  
&lt;/section&gt;</content:encoded>
	<dc:date>2026-09-16T05:38:50+00:00</dc:date>
	<dc:creator>Jonathan Almeida</dc:creator>
</item>
<item rdf:about="https://servo.org/blog/2026/09/15/one-year-of-sponsorship/">
	<title>The Servo Blog: Your Donations at Work: One Year of Sponsored Servo Development</title>
	<link>https://servo.org/blog/2026/09/15/one-year-of-sponsorship/</link>
	<content:encoded>&lt;p&gt;Last September, the Servo project &lt;a href=&quot;https://servo.org/blog/2025/09/17/your-donations-at-work-funding-jdm/&quot;&gt;announced&lt;/a&gt; that long-time maintainer &lt;a href=&quot;https://github.com/jdm&quot;&gt;Josh Bowman-Matthews (@jdm)&lt;/a&gt; would work part-time on improving the Servo contributor experience, entirely funded by the monthly donations on &lt;a href=&quot;https://opencollective.com/servo&quot;&gt;OpenCollective&lt;/a&gt; and &lt;a href=&quot;https://github.com/sponsors/servo&quot;&gt;GitHub&lt;/a&gt;.
In his own words, here is a look back over the past year!&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;First of all, I am enormously grateful to everyone who financially supports Servo, as those donations have enabled me to devote significant time to a project that I care a lot about.
Some highlights from that funded work that I’m proud of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I nominated &lt;strong&gt;8 new &lt;a href=&quot;https://github.com/servo/project/blob/main/governance/README.md#maintainers&quot;&gt;maintainers&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;I reviewed &lt;strong&gt;1150 pull requests&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;I filed &lt;strong&gt;114 issues&lt;/strong&gt; targeted at newer contributors (92% of them have been fixed)&lt;/li&gt;
&lt;li&gt;I wrote &lt;strong&gt;new documentation&lt;/strong&gt; about &lt;a href=&quot;https://book.servo.org/design-documentation/script/garbage-collection-and-refcell.html&quot;&gt;borrow hazards&lt;/a&gt;, &lt;a href=&quot;https://book.servo.org/design-documentation/experimental-features.html&quot;&gt;experimental features&lt;/a&gt;, the &lt;a href=&quot;https://book.servo.org/contributing/getting-started.html#ai-policy-faq&quot;&gt;AI policy&lt;/a&gt;, &lt;a href=&quot;https://book.servo.org/contributing/finding-things-to-do.html&quot;&gt;finding things to do&lt;/a&gt;, and fixing &lt;a href=&quot;https://book.servo.org/contributing/guides/diagnosing-errors/stable-wpt-errors.html&quot;&gt;stable&lt;/a&gt; and &lt;a href=&quot;https://book.servo.org/contributing/guides/diagnosing-errors/intermittent-wpt-errors.html&quot;&gt;intermittent&lt;/a&gt; test failures&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On top of that, I spent time diagnosing unexpected failures in others’ PRs and fixed numerous intermittent test failures that made merging PRs more difficult for everyone.&lt;/p&gt;
&lt;p&gt;A few pieces of work from this period that stand out to me:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;supporting a &lt;a href=&quot;https://github.com/servo/servo/issues/40600&quot;&gt;large scale rewrite&lt;/a&gt; of Servo’s JS engine integration to address intermittent panics related to garbage collection—I reviewed lots of pull requests, but also filed many issues that enabled the work addressing the panics to be spread across many other contributors&lt;/li&gt;
&lt;li&gt;getting tagged in to help understand test failures, uncovering our &lt;a href=&quot;https://github.com/servo/servo/issues/43149&quot;&gt;broken window.open behaviour&lt;/a&gt;, and eventually making &lt;a href=&quot;https://github.com/servo/servo/pull/46975&quot;&gt;a lot of flaky tests&lt;/a&gt; more stable&lt;/li&gt;
&lt;li&gt;supporting another contributor’s grant proposal to work on Servo that &lt;a href=&quot;https://nlnet.nl/project/Servo-Navigation_Downloads/&quot;&gt;was approved!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This role I’ve carved out means a lot to me—I’ve found a healthy balance that allows me to spend time with my family as well as make meaningful contributions to Servo, and I get to spend a lot of time looking for ways to make the project more accessible for others.
A big thank you to everybody supporting the project and my work; each individual monthly donation makes a big difference!
I’m excited to see what’s possible in the coming year.&lt;/p&gt;</content:encoded>
	<dc:date>2026-09-15T00:00:00+00:00</dc:date>
</item>
<item rdf:about="https://blog.nightly.mozilla.org/?p=2118">
	<title>Firefox Nightly: The Need for Speed Controls – These Weeks in Firefox: Issue 208</title>
	<link>https://blog.nightly.mozilla.org/2026/09/11/the-need-for-speed-controls-these-weeks-in-firefox-issue-208/</link>
	<content:encoded>&lt;h3&gt;Highlights&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.firefox.com/en-US/firefox/154.0/releasenotes/&quot;&gt;Firefox 154 went out today&lt;/a&gt;! Lots of goodies in there for our users, including &lt;a href=&quot;https://blog.mozilla.org/en/firefox/firefox-nvidia-geforce-now-partnership/&quot;&gt;support for NVIDIA GeForce NOW&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://groups.google.com/a/mozilla.org/g/dev-platform/c/qlaQ1YSlOP8&quot;&gt;new 2 week release cycle is now in effect&lt;/a&gt;. This means that Firefox 155 is slated to hit release on September 1st!
&lt;ul&gt;
&lt;li&gt;You can follow along at &lt;a href=&quot;https://whattrainisitnow.com/&quot;&gt;https://whattrainisitnow.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;As part of the Nova redesign, a “Use Linux system theme” checkbox is being shown on Linux builds for the about:addons theme picker, which will make Firefox’s Nova UI use the colours of the system theme.&lt;/li&gt;
&lt;li&gt;Thanks to Simon Rosen for &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1875517&quot;&gt;adding a new playback speed control to the PiP player&lt;/a&gt;. The feature can be enabled by flipping the pref media.videocontrols.picture-in-picture.playback-speed.enabled.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;Playback speed settings panel in a Picture-in-Picture window.&quot; class=&quot;aligncenter size-full wp-image-2121&quot; height=&quot;422&quot; src=&quot;https://blog.nightly.mozilla.org/files/2026/09/image6-1.png&quot; width=&quot;750&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Friends of the Firefox team&lt;/h3&gt;
&lt;h4&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/buglist.cgi?title=Resolved%20bugs%20(excluding%20employees)&amp;amp;quicksearch=2052320%2C2053182%2C2056102%2C1692434%2C2051545%2C2052046%2C2052047%2C2053550%2C2053333%2C2054036%2C2056714%2C2040752%2C2053568%2C2056856%2C1418178%2C2048884%2C1910767%2C2033570%2C2053551%2C2057472%2C2058146%2C2058381%2C1975797%2C2057710%2C2025999%2C2053689%2C1988723%2C2039596%2C2046156%2C2058588%2C1477920%2C2044483%2C2057244%2C2057835%2C2053543%2C2055774%2C2057645%2C2041335%2C2053566%2C2058421%2C1875517%2C2050959%2C2036942%2C2049517%2C2059969%2C1943359%2C2045944%2C2058556%2C1977947%2C2040498%2C2046774%2C1856645%2C2060029%2C2061166%2C2061348%2C2059866%2C2033961%2C2039601%2C2058238%2C2060972%2C1642578%2C2047956%2C2058383%2C1938769%2C2030812%2C2059350%2C2039602%2C2061020%2C2062989&quot;&gt;Resolved bugs (excluding employees)&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/niklasbaumgardner/NewContributorScraper&quot;&gt;Script to find new contributors from bug list&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Volunteers that fixed more than one bug&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Benoit&lt;/li&gt;
&lt;li&gt;Chris Vander Linden&lt;/li&gt;
&lt;li&gt;Fede&lt;/li&gt;
&lt;li&gt;japandi&lt;/li&gt;
&lt;li&gt;Lukáš Lipinský&lt;/li&gt;
&lt;li&gt;Nirmal Advani&lt;/li&gt;
&lt;li&gt;Ruhollah Majdoddin&lt;/li&gt;
&lt;li&gt;Sameem [:sameembaba]&lt;/li&gt;
&lt;li&gt;Sebastian Zartner [:sebo]&lt;/li&gt;
&lt;li&gt;Zyphrenn&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;New contributors (🌟 = first patch)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Aditi: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2056102&quot;&gt;Increase the maximum number of PDF.js preferences&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fede:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1418178&quot;&gt;more than six thumbnails needed when Ctrl+Tab is used&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2040498&quot;&gt;Clicking “delete group” on group context menu in tab groups list doesn’t dismiss toolbar panel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2046774&quot;&gt;Tab group context menu actions fail when right-clicking the label or icon of a tab groups list row&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Giulio B: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2048884&quot;&gt;frameId is wrong in webRequest events triggered via importScripts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🌟 Gopalarathnam Venkatesan: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2062989&quot;&gt;Fix incorrect ‘this’ in the Sync add-on install error handler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🌟 Kevin Gosse: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2054036&quot;&gt;nsDataObj::QueryGetData in Firefox returns E_FAIL for formats it doesn’t carry, instead of DV_E_FORMATETC per the COM contract&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🌟 mikey gough: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053551&quot;&gt;Remove three unused devtools.debugger.file-search-* preferences&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🌟 Nathan Leuz: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053550&quot;&gt;Remove unused legacy preference browser.translation.neverForLanguages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🌟 Priyanshu[:0xanshu]: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1977947&quot;&gt;“Forget About This Site” dialog is cut off&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🌟 K: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1642578&quot;&gt;Disable breakpoints shortcut&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🌟 Shawn Zivontsis: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2025999&quot;&gt;Reorder moz_origins composite unique index to UNIQUE(host, prefix)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🌟 Simon Rosen: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1875517&quot;&gt;Suggestion: Add speed button for Youtube in picture-in-picture(PiP) modals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;tanvi.manku: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2052320&quot;&gt;unnecessary scrollbars in edit dialogs for payments and addresses&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Zyphrenn:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2033961&quot;&gt;browser.tabs.groups.enabled should disable drag-n-drop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2059969&quot;&gt;“Tab group suggestions” AI control setting still visible when browser.tabs.groups.enabled is false&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Project Updates&lt;/h3&gt;
&lt;h4&gt;Add-ons / Web Extensions&lt;/h4&gt;
&lt;h5&gt;Addon Manager &amp;amp; about:addons&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;As part of Nova about:addons work:
&lt;ul&gt;
&lt;li&gt;Replaced the “more themes” button in the themes list view footer with a promo element when Nova is enabled –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2057200&quot;&gt; Bug 2057200&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Removed the testing XPI base url pref from ThemesList.sys.mjs –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053220&quot;&gt; Bug 2053220&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fixed a mismatch between the popup panel border radius applied by Nova and the border radius applied to the document.body of the WebExtensions popup page loaded into it –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2057844&quot;&gt; Bug 2057844&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Moved new strings added as part of the about:addons Nova restyling out of the locales preview –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2052034&quot;&gt; Bug 2052034&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;As part of legacy telemetry cleanups for the Add-ons related telemetry, migrated addons-search-detection telemetry off the legacy telemetry mirroring path, now collected only through Glean –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2055606&quot;&gt; Bug 2055606&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;WebExtensions Framework&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Fixed a series of intermittent and CI-reliability test failures across the WebExtensions browser-chrome test suite –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1575369&quot;&gt; Bug 1575369&lt;/a&gt; /&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1697626&quot;&gt; Bug 1697626&lt;/a&gt; /&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1699341&quot;&gt; Bug 1699341&lt;/a&gt; /&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1974953&quot;&gt; Bug 1974953&lt;/a&gt; /&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2015004&quot;&gt; Bug 2015004&lt;/a&gt; /&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2030542&quot;&gt; Bug 2030542&lt;/a&gt; /&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2062186&quot;&gt; Bug 2062186&lt;/a&gt; /&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2062187&quot;&gt; Bug 2062187&lt;/a&gt; /&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2062189&quot;&gt; Bug 2062189&lt;/a&gt; /&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2062191&quot;&gt; Bug 2062191&lt;/a&gt; /&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2062193&quot;&gt; Bug 2062193&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Thanks to Florian Quèze for applying his work on an LLM-based system for investigating intermittent tests to investigating and fixing intermittents and perma failures across the WebExtensions test suite.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;DevTools&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=737654&quot;&gt;Ruhollah Majdoddin&lt;/a&gt; fixed issues in the Storage panel to make sure we’re only showing relevant cookies (and their values) for the debugged tab (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1856645&quot;&gt;#1856645&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2060029&quot;&gt;#2060029&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2061166&quot;&gt;#2061166&lt;/a&gt;) and also did some cleanup in this area (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2061348&quot;&gt;#2061348&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=792331&quot;&gt;sevenwithawp&lt;/a&gt; added a keyboard shortcut (Ctrl+Alt+B, Cmd+Alt+B on Mac) to disable/enable breakpoints (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1642578&quot;&gt;#1642578&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=656417&quot;&gt;Hubert Boma Manilla (:bomsy)&lt;/a&gt; continues his work to display stylesheets in the Debugger (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2051029&quot;&gt;#2051029&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2051264&quot;&gt;#2051264&lt;/a&gt;)
&lt;ul&gt;
&lt;li&gt;Preference: devtools.debugger.features.stylesheets-in-debugger&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=557153&quot;&gt;Nicolas Chevobbe [:nchevobbe]&lt;/a&gt; added support for ::picker() rules in pseudo element section (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2042839&quot;&gt;#2042839&lt;/a&gt;)
&lt;ul&gt;
&lt;li&gt;Used by customizable select (&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Forms/Customizable_select&quot;&gt;MDN&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Preference: dom.select.customizable_select.enabled&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;::picker rules for a pseudo element within the DevTools Inspector pane.&quot; class=&quot;aligncenter size-full wp-image-2120&quot; height=&quot;314&quot; src=&quot;https://blog.nightly.mozilla.org/files/2026/09/image7-1.png&quot; width=&quot;842&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=557153&quot;&gt;Nicolas Chevobbe [:nchevobbe]&lt;/a&gt; made CSS explainers work for substitution functions (var(), attr() and env()) (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2041622&quot;&gt;#2041622&lt;/a&gt;)
&lt;ul&gt;
&lt;li&gt;Preference: devtools.inspector.css-explainers&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;A tooltip showing a breakdown of a CSS var function&quot; class=&quot;aligncenter size-full wp-image-2125&quot; height=&quot;292&quot; src=&quot;https://blog.nightly.mozilla.org/files/2026/09/image2-1.png&quot; width=&quot;1280&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=559949&quot;&gt;Julian Descottes [:jdescottes]&lt;/a&gt; fixed an accessibility bug in about:debugging where error message where not announced (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2056332&quot;&gt;#2056332&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;WebDriver&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Sameem added &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1943359&quot;&gt;the cleanup logic for subscriptions when a browsing context is destroyed&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Nirmal Advani updated &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2058556&quot;&gt;the Actions API to fire the dblclick event when performing a double-click while holding down the Ctrl key on non-macOS platforms&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Khalid AlHaddad &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2041335&quot;&gt;updated the webdriver bidi moz:debugging module to stop using enterNestedEventLoop&lt;/a&gt; which can avoid conflicts with the regular DevTools’ debugger.&lt;/li&gt;
&lt;li&gt;Alexandra Borovova fixed the &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2030909&quot;&gt;“browsingContext.reload” command to not fail for frames&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;New Tab Page&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Big ticket items:
&lt;ul&gt;
&lt;li&gt;Did a trainhop last week to help with the remote layouts effort&lt;/li&gt;
&lt;li&gt;Doing another trainhop this week to make some spacing optimizations, deploying tomorrow if all goes well&lt;/li&gt;
&lt;li&gt;We will be experimenting with some more layout variations over the next few months
&lt;ul&gt;
&lt;li&gt;Example:&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;A layout variation for the New Tab page with the Widgets column on the left and Popular Today column on the right.&quot; class=&quot;aligncenter size-full wp-image-2124&quot; height=&quot;922&quot; src=&quot;https://blog.nightly.mozilla.org/files/2026/09/image3-1.png&quot; width=&quot;1827&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We’ve migrated a &lt;a href=&quot;https://bugzil.la/2018699&quot;&gt;bunch&lt;/a&gt; of &lt;a href=&quot;https://bugzil.la/2018702&quot;&gt;our&lt;/a&gt; &lt;a href=&quot;https://bugzil.la/2018705&quot;&gt;unit&lt;/a&gt; &lt;a href=&quot;https://bugzil.la/2018709&quot;&gt;tests&lt;/a&gt; to Jest/RTL from the deprecated Mocha / Karma framework we’ve historically used.&lt;/li&gt;
&lt;li&gt;Joel added &lt;a href=&quot;https://bugzil.la/2046946]&quot;&gt;a WebNotifications badge to Top Sites on the New Tab Page&lt;/a&gt; which surfaces per-origin unread web-notification state directly on TopSites tiles by rendering a compact badge in the activity-stream/TopSites component—users can now glance at NTP tiles to see which sites have pending web notifications without changing navigation or site state (affects desktop and mobile NTP Top Sites UI). This is something we plan on experimenting with later this year.&lt;/li&gt;
&lt;li&gt;Similarly, Joel &lt;a href=&quot;https://bugzil.la/2046947]&quot;&gt;added a TopSites hover card&lt;/a&gt; with notifications which expands the to show per-site notification items and actions on hover or long-press, enabling users to read and dismiss notifications from the NTP itself rather than opening each site.&lt;/li&gt;
&lt;li&gt;Hanna Alemu&lt;a href=&quot;https://bugzil.la/2050377&quot;&gt; fixed the focus outline for the “Learn how we protect your data” link in NEWTAB_PERSONALIZATION_MESSAGE&lt;/a&gt;, replacing the blue non-rounded ring with the standard rounded focus style via CSS so keyboard and assistive users get a consistent, discoverable focus indicator.&lt;/li&gt;
&lt;li&gt;Maxx Crawford&lt;a href=&quot;https://bugzil.la/2050954&quot;&gt; added logic to show different tip messages throughout the day/week on the New Tab Page&lt;/a&gt; in the upcoming privacy widget, implementing time-of-day/day-of-week selection in the tip renderer so users receive context-varying tips rather than a static message, which affects the tip surface and supports time-targeted experiments.&lt;/li&gt;
&lt;li&gt;Irene Ni&lt;a href=&quot;https://bugzil.la/2051410&quot;&gt; removed the New Tab daily briefing slice from the New Tab Page&lt;/a&gt;, so users will no longer see the daily-briefing card on new tabs and related New Tab slice prefs/registrations were cleaned up.&lt;/li&gt;
&lt;li&gt;Jack Brown&lt;a href=&quot;https://bugzil.la/2051742&quot;&gt; migrated the New Tab ContextMenu/LinkMenu implementation to the panel-list component&lt;/a&gt;, so right-click menus and link context behavior on the New Tab now use panel-list rendering (affects keyboard navigation, theming, and menu perf).&lt;/li&gt;
&lt;li&gt;Irene Ni&lt;a href=&quot;https://bugzil.la/2056255&quot;&gt; removed a root-level &amp;lt;hr&amp;gt; selector from the Weather forecast widget SCSS that leaked global divider styles into the New Tab Page layout&lt;/a&gt;, restoring correct dividers and preventing spacing/layout regressions on about:newtab.&lt;/li&gt;
&lt;li&gt;Irene Ni&lt;a href=&quot;https://bugzil.la/2058938&quot;&gt; enabled the remote-settings-driven sections layout in Nightly&lt;/a&gt;, flipping the remote-settings/sections layout so Nightly users receive Discovery Stream section composition from Remote Settings.&lt;/li&gt;
&lt;li&gt;Irene Ni&lt;a href=&quot;https://bugzil.la/2059104&quot;&gt; automated the New Tab Page locales update for train-hop&lt;/a&gt; to ensure locale bundles are refreshed on train deploys so users see corrected translations and no longer encounter stale labels after a hop.&lt;/li&gt;
&lt;li&gt;Reem Hamoui&lt;a href=&quot;https://bugzil.la/2059741&quot;&gt; fixed the Crossword widget double-counting and removed broad “interaction” user_actions&lt;/a&gt; so telemetry and UX-triggered actions reflect a single user event and analytics driven by user_action are no longer inflated.&lt;/li&gt;
&lt;li&gt;Dre&lt;a href=&quot;https://bugzil.la/2059811&quot;&gt; fixed the “Show more widgets” visibility&lt;/a&gt; by adjusting the widget container overflow/visibility logic so the Show more control is reliably revealed on constrained viewports, restoring widget discoverability.&lt;/li&gt;
&lt;li&gt;Joel&lt;a href=&quot;https://bugzil.la/2060320&quot;&gt; fixed newtab.closed and newtab.sections_impression firing unexpectedly&lt;/a&gt; on the New Tab Page by gating event emission on section visibility and tab lifecycle, which stops spurious impression and close telemetry pings and improves the accuracy of NTP impression/close counts for affected users.&lt;/li&gt;
&lt;li&gt;Joel&lt;a href=&quot;https://bugzil.la/2060323&quot;&gt; added a topsite display customization event to newtab ping&lt;/a&gt;, updating the New Tab ping schema so user topsite layout and appearance changes are emitted as topsite.display_customization events, enabling reliable capture of pin/remove/resize/customization actions in Telemetry.&lt;/li&gt;
&lt;li&gt;Nina Pypchenko [:nina-py]&lt;a href=&quot;https://bugzil.la/2060749&quot;&gt; added widgets.stocks.interaction and flip it on user actions&lt;/a&gt; so explicit click/tap interactions with the Stocks widget now generate widgets.stocks.interaction events, improving engagement capture for the Stocks surface.&lt;/li&gt;
&lt;li&gt;Nina Pypchenko [:nina-py]&lt;a href=&quot;https://bugzil.la/2060787&quot;&gt; migrated the Stocks widget telemetry to the shared useWidgetTelemetry hook&lt;/a&gt;, standardizing how the Stocks widget emits metrics and ping fields to match other widgets, which reduces missing/duplicate events and makes per-widget telemetry consistent across platforms.&lt;/li&gt;
&lt;li&gt;Irene Ni &lt;a href=&quot;https://bugzil.la/2060908&quot;&gt;created an initial JSON dump of Remote Settings sections layouts for cold startup&lt;/a&gt; to prepopulate New Tab Page sections on first launch and reduce layout flash or missing tiles.&lt;/li&gt;
&lt;li&gt;Nina Pypchenko [:nina-py]&lt;a href=&quot;https://bugzil.la/2061063&quot;&gt; added a persistent “New” badge to the Stocks widget until first user interaction&lt;/a&gt;, which improves discoverability of the Stocks card and is cleared on the user’s first click/tap.&lt;/li&gt;
&lt;li&gt;Maxx Crawford&lt;a href=&quot;https://bugzil.la/2061741&quot;&gt; implemented a side-by-side content layout variant for the New Tab Page feed&lt;/a&gt;, which introduces a new responsive layout option that changes feed column behavior and visual density on wider viewports.&lt;/li&gt;
&lt;li&gt;Scott Downe&lt;a href=&quot;https://bugzil.la/2061828&quot;&gt; added support for five-column content feed layouts&lt;/a&gt;, which enables denser content grids for large displays by updating grid logic and responsive breakpoints and affects NTP rendering on wide screens.&lt;/li&gt;
&lt;li&gt;Dre&lt;a href=&quot;https://bugzil.la/2061876&quot;&gt; added a “Celebrations” UI state to the Privacy Widget&lt;/a&gt;, which surfaces milestone/celebratory visuals and transient animations in the Privacy Widget when triggers are satisfied.&lt;/li&gt;
&lt;li&gt;Irene Ni updated the New Tab topsite context menu button to respect&lt;a href=&quot;https://bugzil.la/2062434&quot;&gt; prefers-reduced-motion&lt;/a&gt; via CSS/media-query changes, so users with reduce-motion enabled no longer see the button’s motion/animation.&lt;/li&gt;
&lt;li&gt;Scott Downe&lt;a href=&quot;https://bugzil.la/2062473&quot;&gt; expanded New Tab’s list of region and locales for content support&lt;/a&gt;, updating the New Tab content selection config and region→locale mappings so more users in newly-added locales receive localized tiles and recommendations on the New Tab Page.&lt;/li&gt;
&lt;li&gt;Irene Ni&lt;a href=&quot;https://bugzil.la/2062621&quot;&gt; fixed the New Shortcut / Edit Shortcut prompt background being transparent with the Newtab addon installed&lt;/a&gt;, restoring CSS/background opacity for the edit UI so shortcut editing is readable across themes and addon combinations.&lt;/li&gt;
&lt;li&gt;Maxx Crawford&lt;a href=&quot;https://bugzil.la/2062750&quot;&gt; added a dedicated trainhopConfig.widgetPrivacy payload for the Privacy widget feature&lt;/a&gt;, introducing a per-trainhop config payload in Discovery Stream so Privacy widget rollouts and toggles can be controlled without code deploys.&lt;/li&gt;
&lt;li&gt;Maxx Crawford&lt;a href=&quot;https://bugzil.la/2062753&quot;&gt; added a layout management panel in Discovery Stream Admin&lt;/a&gt;, giving editors an admin UI to modify New Tab/stream layouts (reduces manual config edits and speeds layout experiments).&lt;/li&gt;
&lt;li&gt;Dre reduced the Privacy Widget celebration sparkles on the New Tab Page in&lt;a href=&quot;https://bugzil.la/2062830&quot;&gt; Privacy Widget Celebration: Reduce the Sparkles&lt;/a&gt; by lowering particle counts and throttling animation cadence in the widget’s CSS/JS animation code, reducing visual noise and a small amount of GPU/animation work for users during the celebration without changing privacy settings.&lt;/li&gt;
&lt;li&gt;Maxx Crawford&lt;a href=&quot;https://bugzil.la/2063604&quot;&gt; restored the “Change size” context menu item for the side-by-side experimental New Tab layout&lt;/a&gt; so users with the side-by-side exp layout enabled regain the resize control in widget context menus.&lt;/li&gt;
&lt;li&gt;Maxx Crawford&lt;a href=&quot;https://bugzil.la/2063657&quot;&gt; stopped the sports widget from rendering regardless of the pref&lt;/a&gt; so unwanted sports content no longer appears on New Tab when the pref should prevent it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Picture-in-Picture&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Thanks to Lukáš Lipinský for &lt;a href=&quot;http://ceskatelevize.cz&quot;&gt;adding live event caption support for ceskatelevize.cz&lt;/a&gt;!&lt;/li&gt;
&lt;li&gt;Thanks to Mike Conley for &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2050059&quot;&gt;fixing play / pause issues with the PiP player on Udemy&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Search and Urlbar&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Nova:&lt;/b&gt; continued work on the Nova redesign, focusing on CSS fixes, tab group and container styling, and tab/address bar polish. Efforts are underway to ensure the UI integrates correctly with platform themes and high-contrast modes.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;IPC Urlbar / Multi-Context Address Bar (MCAB) on New Tab:&lt;/b&gt; Significant progress has been made on the IPC Urlbar implementation. The CI variant is now live and upgraded to Tier 2, allowing for better bug detection. Currently focused on &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053407&quot;&gt;making content modules content-process-safe&lt;/a&gt; and &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2062209&quot;&gt;preparing for new tab search bar integration&lt;/a&gt;. Here’s moz-urlbar rendering &lt;i&gt;something&lt;/i&gt; on about:newtab for the first time:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;The Firefox New Tab page with an unstyled in-page search bar in the center, showing Google search suggestions for &amp;quot;what's a scotch bonnet&amp;quot;&quot; class=&quot;aligncenter size-full wp-image-2126&quot; height=&quot;1028&quot; src=&quot;https://blog.nightly.mozilla.org/files/2026/09/image1-1.png&quot; width=&quot;1850&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2002830&quot;&gt;Post-MVP work continues on refining the new search bar&lt;/a&gt; that can be added to the toolbar.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2062823&quot;&gt;Let Tab land on the search input rather than the search button, behind a Nightly-only pref&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://experimenter.services.mozilla.com/nimbus/address-bar-tips-v2-expansion-in-2026-re-launch-2/summary/&quot;&gt;Google address bar messaging&lt;/a&gt; experiment relaunched.&lt;/li&gt;
&lt;li&gt;Search &amp;amp; Suggest Telemetry&lt;b&gt;:&lt;/b&gt; Development is ongoing for search term telemetry, specifically regarding fetching results from Merino for online suggestions. Also preparing to retire legacy telemetry for certain search service metrics.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Favicon &amp;amp; Places:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2047549&quot;&gt;Bookmarks for Google Apps use the root icon instead of the newly released one&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053482&quot;&gt;CopyFavicon should only copy across same origin pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=418144&quot;&gt;Favicons are not affected by a hard refresh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2054381&quot;&gt;Bookmarks/history locked error at startup despite no external process holding places.sqlite&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1736955&quot;&gt;Also trim www from URLs, behind pref&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded>
	<dc:date>2026-09-11T17:32:05+00:00</dc:date>
	<dc:creator>Katherine Patenio</dc:creator>
</item>
<item rdf:about="yt:video:nZupfJy6I0A">
	<title>Mozilla Data YouTube Channel: Data Club: Jan-Erik Rediger - Little Bobby Tables - from metrics.yaml to data-filled columns</title>
	<link>https://www.youtube.com/watch?v=nZupfJy6I0A</link>
	<content:encoded>A short story about Little Bobby Tables and how we know what data to fill in where.</content:encoded>
	<dc:date>2026-09-11T11:25:48+00:00</dc:date>
	<dc:creator>Mozilla Data</dc:creator>
</item>
<item rdf:about="yt:video:E5j6BoxZ-7w">
	<title>Mozilla Data YouTube Channel: Last Lecture: Writing the Data Docs</title>
	<link>https://www.youtube.com/watch?v=E5j6BoxZ-7w</link>
	<content:encoded>Will Lachance gives a last lecture on writing data documentation at Mozilla.</content:encoded>
	<dc:date>2026-09-11T10:42:15+00:00</dc:date>
	<dc:creator>Mozilla Data</dc:creator>
</item>
<item rdf:about="yt:video:Y3IOY-kmk70">
	<title>Mozilla Data YouTube Channel: Data Club Talk: Jan-Erik Rediger - The Glean UniFFI migration and how no one noticed</title>
	<link>https://www.youtube.com/watch?v=Y3IOY-kmk70</link>
	<content:encoded>Given at the Mozilla Data Club on August 12th, 2022.</content:encoded>
	<dc:date>2026-09-11T06:45:45+00:00</dc:date>
	<dc:creator>Mozilla Data</dc:creator>
</item>
<item rdf:about="yt:video:BZVugz_yzzg">
	<title>Mozilla Data YouTube Channel: Monitoring Sensitive Data: How do we monitor data we don't store?</title>
	<link>https://www.youtube.com/watch?v=BZVugz_yzzg</link>
	<content:encoded>We try to be responsible with data. For example, we:

- store as little sensitive data as possible
- monitor changes in incoming data on which we've built models

But what happens when those two approaches conflict?

How do we monitor changes in incoming data that we don't want to store?

This talk explains the schema we use to monitor changes in what people are searching for in Firefox...even when we deliberately don't store some of what people are searching for.</content:encoded>
	<dc:date>2026-09-11T00:19:06+00:00</dc:date>
	<dc:creator>Mozilla Data</dc:creator>
</item>
<item rdf:about="https://jonalmeida.com/til/do-not-relocate-objdir/">
	<title>Jonathan Almeida: Perf wins from relocating MOZ_OBJDIR have a dev experience cost</title>
	<link>https://jonalmeida.com/til/do-not-relocate-objdir/</link>
	<content:encoded>&lt;p&gt;This is the opposite of what I wanted to write about: relocating your MOZ_OBJDIR outside of your source directory will make your IDE faster.&lt;/p&gt;
&lt;p&gt;In mozilla-central (the firefox monorepo), a default object files directory is created within the same source directory. This is equivalent to the &lt;code&gt;build/&lt;/code&gt; directory you would typically see in other projects.&lt;/p&gt;
&lt;p&gt;While this is typically fine, I've found that Android Studio indexes many of these files and that can be slow when you're not working across all the layers in Gecko and Firefox. I ended up with these build directories that grew over time:&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Directory&lt;/th&gt;&lt;th&gt;Last touched&lt;/th&gt;&lt;th&gt;Size&lt;/th&gt;&lt;th&gt;Files&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;obj-aarch64-unknown-linux-android&lt;/td&gt;&lt;td&gt;2025-11-04&lt;/td&gt;&lt;td&gt;29 G&lt;/td&gt;&lt;td&gt;113,116&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;objdir-desktop&lt;/td&gt;&lt;td&gt;2025-11-04&lt;/td&gt;&lt;td&gt;19 G&lt;/td&gt;&lt;td&gt;41,010&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;objdir-frontend&lt;/td&gt;&lt;td&gt;2026-09-09&lt;/td&gt;&lt;td&gt;6.3 G&lt;/td&gt;&lt;td&gt;66,930&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;obj-aarch64-apple-darwin24.5.0&lt;/td&gt;&lt;td&gt;2025-06-16&lt;/td&gt;&lt;td&gt;4 K&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;That's a lot to index! I figured a way around this problem is to move the OBJDIRs out of the source directory and into something like &lt;code&gt;~/.mozbuild&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot;&gt;&lt;code&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;mk_add_options&lt;/span&gt;&lt;span&gt; MOZ_OBJDIR=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;HOME&lt;/span&gt;&lt;span&gt;/.mozbuild/objdir-frontend&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;While this does speed up IDE indexing, it's at the cost of developer experience, because now our generated code (e.g. &lt;code&gt;FxNimbus&lt;/code&gt;) shows up as red symbols everywhere.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;[insert sad trombone sound clip]&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I'm uncertain if trimming what we index in these OBJDIRs is worth a large enough performance win, so for now I'll ensure I clean-up my stale copies which I'm not actively using.&lt;/p&gt;</content:encoded>
	<dc:date>2026-09-11T00:00:00+00:00</dc:date>
	<dc:creator>Jonathan Almeida</dc:creator>
</item>
<item rdf:about="https://blog.mozilla.org/community/?p=2550">
	<title>About:Community: Game on: Play, share, and help shape Mozilla</title>
	<link>https://blog.mozilla.org/community/2026/09/10/newsletter-aug-2026/</link>
	<content:encoded>&lt;p&gt;P.S. Apologies for the delay in publishing this edition on the community blog. The original newsletter was sent to subscribers on August 27.&lt;/p&gt;
&lt;p&gt;Firefox was leveling up in August! GeForce NOW arrived on Firefox for Windows, JPEG XL support was on the way, and the Firefox + NVIDIA teams joined forces for a Reddit AMA. We also invited SUMO and Mozilla Connect contributors to share their experiences through the Mozilla Contributor Survey, which has since closed (thank you to everyone who took the time to participate!).&lt;/p&gt;
&lt;p&gt;Read on to catch up on what you may have missed and see what the community was up to!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; GeForce NOW is now available on Firefox for Windows&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.mozilla.org/community/files/2026/09/Kit_Gamer_Purple-BG.gif&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-full wp-image-2552&quot; height=&quot;1080&quot; src=&quot;https://blog.mozilla.org/community/files/2026/09/Kit_Gamer_Purple-BG.gif&quot; width=&quot;1920&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Firefox has joined NVIDIA GeForce NOW’s supported browser lineup, making it possible to stream more than 2,000 PC games directly from Firefox on Windows. There are no downloads, installs, or hardware upgrades required! Just a Windows PC, a GeForce NOW account, and your existing game library.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.mozilla.org/firefox/firefox-nvidia-geforce-now-partnership/&quot;&gt;Learn more&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; Share your voice in the Mozilla Contributor Survey 2026&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We’re gathering feedback from SUMO and Mozilla Connect contributors to help shape the future of Mozilla’s contributor community. The 2026 Contributor Survey explores what motivates you to contribute, what matters most throughout your contributor journey, and how we can improve areas such as onboarding, recognition, and the upcoming Mozilla Connect migration to SUMO. The survey takes about 10 minutes to complete and is now open until &lt;strong&gt;September 1, 2026, end of day UTC&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://support.mozilla.org/forums/contributors/717716/&quot;&gt;Complete the survey&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; JPEG XL is coming to Firefox&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Firefox plans to ship support for JPEG XL, a modern image format designed to deliver high-quality images more efficiently. With progressive rendering, images can start appearing before they have fully downloaded so it helps make pages feel faster, especially on slower connections.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://hacks.mozilla.org/2026/08/intent-to-ship-jpeg-xl/&quot;&gt;Learn more&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; From the Reddit Community&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Firefox and NVIDIA GeForce NOW teams are hosting a Reddit AMA on &lt;strong&gt;September 2&lt;/strong&gt; to celebrate GeForce NOW support on Firefox for Windows. Bring your questions about the integration, share your cloud-gaming setup, and let the teams know what else you’d love Firefox to support for online play.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.reddit.com/r/firefox/comments/1vrrvuh/firefox_now_supports_online_gaming_with_nvidia/&quot;&gt;Join the AMA&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;P.S.&lt;/p&gt;
&lt;p&gt;Enjoyed these updates? Subscribe to the &lt;a href=&quot;https://community.mozilla.org/newsletter&quot;&gt;Mozilla Community Newsletter&lt;/a&gt; and get the latest updates delivered straight to your inbox.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</content:encoded>
	<dc:date>2026-09-10T15:05:52+00:00</dc:date>
	<dc:creator>Rizki Kelimutu</dc:creator>
</item>
<item rdf:about="yt:video:B635wgZy7Iw">
	<title>Mozilla Data YouTube Channel: Glean Dictionary Looker Demo</title>
	<link>https://www.youtube.com/watch?v=B635wgZy7Iw</link>
	<content:encoded>A quick demonstration of the Glean Dictionary's new integration with Mozilla's instance of Looker.</content:encoded>
	<dc:date>2026-09-10T06:48:16+00:00</dc:date>
	<dc:creator>Mozilla Data</dc:creator>
</item>
<item rdf:about="yt:video:myHH89j0JQU">
	<title>Mozilla Data YouTube Channel: Responsible Data Collection is Good, Actually (Ubisoft Data Summit 2021)</title>
	<link>https://www.youtube.com/watch?v=myHH89j0JQU</link>
	<content:encoded>Firefox Telemetry Engineer and Data Steward Chris H-C (:chutten) gives a talk at Ubisoft's Data Summit 2021 about how Responsible Data Collection as practised at Mozilla makes cataloguing easy, stops instrumentation mistakes before they ship, and allows you to build self-serve analysis tooling that gets everyone invested in data quality. Oh, and it's cheaper, too.</content:encoded>
	<dc:date>2026-09-10T06:18:04+00:00</dc:date>
	<dc:creator>Mozilla Data</dc:creator>
</item>
<item rdf:about="yt:video:y7msgjoLjNk">
	<title>Mozilla Data YouTube Channel: Mozillians sharing the 2021 SciPy Conference experience</title>
	<link>https://www.youtube.com/watch?v=y7msgjoLjNk</link>
	<content:encoded>The 2021 SciPy conference (https://www.scipy2021.scipy.org/) involved the showcasing of the latest open source Python projects for advancement in scientific computing. Mozilla was a diversity sponsor and a few Mozillians attended and shared their experience of the event.</content:encoded>
	<dc:date>2026-09-10T04:38:29+00:00</dc:date>
	<dc:creator>Mozilla Data</dc:creator>
</item>
<item rdf:about="yt:video:V5FgVbxm-cc">
	<title>Mozilla Data YouTube Channel: Data Club Lightning Talk: Jan-Erik Rediger - Your personal Glean data pipeline</title>
	<link>https://www.youtube.com/watch?v=V5FgVbxm-cc</link>
	<content:encoded>This talk was given as part of the Data Club Lightning Talk Session on February 11th, 2022.
More on https://blog.mozilla.org/data/2022/02/25/this-week-in-glean-your-personal-glean-data-pipeline
Information about Glean: https://mozilla.github.io/glean/book/index.html</content:encoded>
	<dc:date>2026-09-10T04:35:53+00:00</dc:date>
	<dc:creator>Mozilla Data</dc:creator>
</item>
<item rdf:about="discourse.mozilla.org-topic-149413">
	<title>Firefox Tooling Announcements: Happy BMO Push Day! (20260908.1)</title>
	<link>https://discourse.mozilla.org/t/happy-bmo-push-day-20260908-1/149413</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;https://github.com/mozilla-bteam/bmo/tree/release-20260908.1&quot; rel=&quot;noopener nofollow ugc&quot;&gt;Github Link&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The following changes have been pushed to &lt;a href=&quot;https://bugzilla.mozilla.org&quot;&gt;bugzilla.mozilla.org&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1205300&quot;&gt;Bug 1205300&lt;/a&gt; - Missing: related documentation “Reporting”&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2068120&quot;&gt;Bug 2068120&lt;/a&gt; - Thunderbird access to “Iteration” and “Due Date” fields&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2066252&quot;&gt;Bug 2066252&lt;/a&gt; - Prevent save if keyword checkin-needed-tb exists without target milestone&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2070017&quot;&gt;Bug 2070017&lt;/a&gt; - Reinstate web bounty form&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2059948&quot;&gt;Bug 2059948&lt;/a&gt; - Do not offer printable recovery codes to Duo users&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Discuss these changes in the &lt;a href=&quot;https://matrix.to/#/#bmo:mozilla.org&quot; rel=&quot;noopener nofollow ugc&quot;&gt;BMO Matrix Room&lt;/a&gt;&lt;/p&gt;
            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;
            &lt;p&gt;&lt;a href=&quot;https://discourse.mozilla.org/t/happy-bmo-push-day-20260908-1/149413&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2026-09-10T02:34:16+00:00</dc:date>
	<dc:creator>dkl1</dc:creator>
</item>
<item rdf:about="yt:video:k1cvnVKOmM8">
	<title>Mozilla Data YouTube Channel: GLAM Datasets</title>
	<link>https://www.youtube.com/watch?v=k1cvnVKOmM8</link>
	<content:encoded>Marina Samuel and Anthony Miyaguchi talk about the ETL pipeline created for the GLAM project (https://github.com/mozilla/glam).</content:encoded>
	<dc:date>2026-09-09T22:01:52+00:00</dc:date>
	<dc:creator>Mozilla Data</dc:creator>
</item>
<item rdf:about="discourse.mozilla.org-topic-149411">
	<title>Firefox Tooling Announcements: MozPhab 2.19.0 Released</title>
	<link>https://discourse.mozilla.org/t/mozphab-2-19-0-released/149411</link>
	<content:encoded>&lt;p&gt;Bugs resolved in Moz-Phab 2.19.0:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/1987220&quot;&gt;bug 1987220&lt;/a&gt; &lt;code&gt;moz-phab patch --apply-to here&lt;/code&gt; should apply to the original base revision and rebase, rather than applying the raw diff on HEAD&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/2016442&quot;&gt;bug 2016442&lt;/a&gt; add &lt;code&gt;moz-phab list&lt;/code&gt; subcommand&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Discuss these changes in &lt;span class=&quot;hashtag-raw&quot;&gt;#engineering-workflow&lt;/span&gt; on Slack or &lt;span class=&quot;hashtag-raw&quot;&gt;#Conduit&lt;/span&gt; Matrix.&lt;/p&gt;
            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;
            &lt;p&gt;&lt;a href=&quot;https://discourse.mozilla.org/t/mozphab-2-19-0-released/149411&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2026-09-09T20:59:02+00:00</dc:date>
	<dc:creator>sheehan</dc:creator>
</item>
<item rdf:about="https://blog.thunderbird.net/?p=4543">
	<title>Thunderbird Blog: Desktop Settings: Removing technical jargon</title>
	<link>https://blog.thunderbird.net/2026/09/desktop-settings-removing-technical-jargon/</link>
	<content:encoded>&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;attachment-640x360 size-640x360 wp-post-image&quot; height=&quot;360&quot; src=&quot;https://blog.thunderbird.net/files/2026/09/blog-banner-generic1-768x432.jpg&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;

&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;Our goal for this phase of work is to remove the technical jargon, use plain language, and make it effortless for everyone to make informed decisions about their settings. With over 250 blocks of settings content to untangle, we aimed for incremental improvements rather than striving for perfection.&lt;/p&gt;



&lt;p&gt;While our &lt;a href=&quot;https://blog.thunderbird.net/2026/07/desktopsettings/&quot;&gt;previous research&lt;/a&gt; leaned heavily on our technical power users, this round intentionally focused on new users to make sure Thunderbird is intuitive from day one.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Summary of research&lt;/strong&gt;&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The new copy tested well:&lt;/strong&gt; We achieved &lt;strong&gt;&amp;gt;80% comprehension&lt;/strong&gt; across our tested copy for Notifications, Appearance, and Composition settings.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;High confidence levels: &lt;/strong&gt;Users felt confident to change settings without external help (asking someone, referencing docs, or using AI for support).&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Interactions need refinement:&lt;/strong&gt; We found spots where the interface didn’t always match expectations, like using a checkbox instead of an on/off toggle.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Using our &lt;a href=&quot;https://bolt.thunderbird.net/8b179dbfd/p/241b87-content-guidelines&quot;&gt;content guidelines&lt;/a&gt;, we audited all 250+ content blocks to check accuracy, what was overly technical, and if anything was outdated. Our strategy was built up into steps to make it more achievable.&lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;Step 1: Research &amp;amp; prioritization&lt;/strong&gt;&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2026/09/Blog-inline-image_1-1-scaled.jpg&quot;&gt;&lt;img alt=&quot;Figjam board with user journey, personas, and user research&quot; class=&quot;wp-image-4554&quot; height=&quot;338&quot; src=&quot;https://blog.thunderbird.net/files/2026/09/Blog-inline-image_1-1-600x338.jpg&quot; style=&quot;width: 836px; height: auto;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;User journey mapping, insights from research and user needs&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;Last month, we conducted research where we used a &lt;a href=&quot;https://www.nngroup.com/articles/card-sorting-definition/&quot;&gt;card sorting method&lt;/a&gt; to understand what users actually care about most and where they expect settings to live. &lt;em&gt;Catch up on the &lt;a href=&quot;https://blog.thunderbird.net/2026/07/desktopsettings/&quot;&gt;Research Summary&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;Step 2: Inventory audit&lt;/strong&gt;&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2026/09/Blog-inline-image_2-scaled.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-4559&quot; height=&quot;1440&quot; src=&quot;https://blog.thunderbird.net/files/2026/09/Blog-inline-image_2-scaled.jpg&quot; style=&quot;width: 838px; height: auto;&quot; width=&quot;2560&quot; /&gt;&lt;/a&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Content inventory with Thunderbird on the left and the content table on the right.&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;We mapped every piece of text in the app to build a full content inventory, assessing each piece of text for accuracy, freshness, and 8th-grade readability.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;Step 3: Content redesign&lt;/strong&gt;&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2026/09/content-blocks.gif&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-4564&quot; height=&quot;532&quot; src=&quot;https://blog.thunderbird.net/files/2026/09/content-blocks.gif&quot; style=&quot;width: 841px; height: auto;&quot; width=&quot;960&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2026/09/Blog-inline-image_3-scaled.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-4574&quot; height=&quot;1440&quot; src=&quot;https://blog.thunderbird.net/files/2026/09/Blog-inline-image_3-scaled.jpg&quot; style=&quot;width: 838px; height: auto;&quot; width=&quot;2560&quot; /&gt;&lt;/a&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Example of how we updated the notifications content&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;We removed any developer or system updates from the interface and replaced it with language that speaks to what the setting actually &lt;em&gt;does&lt;/em&gt; for the user.&lt;/p&gt;



&lt;p class=&quot;has-large-font-size&quot;&gt;&lt;strong&gt;Our findings &lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;We tested prototypes for Notifications, Appearance, and Composition and asked 4 questions to test the purpose of each setting category, scenario comprehension, and user confidence. Our target threshold was 80% comprehension. &lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2026/09/Blog-inline-image_2-2-scaled.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-4604&quot; height=&quot;1440&quot; src=&quot;https://blog.thunderbird.net/files/2026/09/Blog-inline-image_2-2-scaled.jpg&quot; style=&quot;width: 841px; height: auto;&quot; width=&quot;2560&quot; /&gt;&lt;/a&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Lyssna prototype displaying Appearance settings and question&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;Here is how the new copy tested with room for improvement around the interactions, visuals, and how the language can be even more clear and user friendly. &lt;/p&gt;



&lt;figure class=&quot;wp-block-table is-style-stripes&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Settings Category&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Purpose Comprehension&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Scenario Accuracy&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Confidence Score (out of 5)&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Notifications&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;86%&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;71%&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;4.00&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Appearance&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;86%&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;86%&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;4.14&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Composition&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;100%&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;100%&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;4.43&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p class=&quot;has-large-font-size&quot;&gt;&lt;strong&gt;What’s next&lt;/strong&gt;&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Improve the interactions:&lt;/strong&gt; Aligning component types with immediate vs. batch actions so the UI behaves the way people expect. &lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Sharper indicators:&lt;/strong&gt; Testers liked the visual diagrams for Threaded, Unthreaded, and Grouped messages, but they need a bit more detail to make the visual distinction instant.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Continue iterating on copy:&lt;/strong&gt; Cleaning up remaining awkward phrasing (like &lt;em&gt;Autosave 5 seconds&lt;/em&gt;) that still makes the experience feel slightly dated.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Next, we are taking everything we learned from this copy testing and applying it to the overall settings navigation and layout structure.&lt;/p&gt;



&lt;p&gt;Redesigning settings isn’t always glamorous, which is why our team internally nicknamed this effort &lt;strong&gt;“Project Toto”&lt;/strong&gt; inspired by high-tech Japanese toilets. Settings are something most people prefer not to think about, but when they are designed thoughtfully, the experience becomes seamless, intuitive, and surprisingly delightful.&lt;/p&gt;



&lt;p&gt;As our new designs take shape, we’ll be reaching back out to both new and long-time users for feedback. Stay tuned for our next update, and let us know your thoughts in the comments!&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://blog.thunderbird.net/2026/09/desktop-settings-removing-technical-jargon/&quot;&gt;Desktop Settings: Removing technical jargon&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.thunderbird.net&quot;&gt;The Thunderbird Blog&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2026-09-09T15:25:40+00:00</dc:date>
	<dc:creator>Aly Blenkin</dc:creator>
</item>
<item rdf:about="tag:this-week-in-rust.org,2026-09-09:/blog/2026/09/09/this-week-in-rust-668/">
	<title>This Week In Rust: This Week in Rust 668</title>
	<link>https://this-week-in-rust.org/blog/2026/09/09/this-week-in-rust-668/</link>
	<content:encoded>&lt;p&gt;Hello and welcome to another issue of &lt;em&gt;This Week in Rust&lt;/em&gt;!
&lt;a href=&quot;https://www.rust-lang.org/&quot;&gt;Rust&lt;/a&gt; is a programming language empowering everyone to build reliable and efficient software.
This is a weekly summary of its progress and community.
Want something mentioned? Tag us at
&lt;a href=&quot;https://bsky.app/profile/thisweekinrust.bsky.social&quot;&gt;@thisweekinrust.bsky.social&lt;/a&gt; on Bluesky or
&lt;a href=&quot;https://mastodon.social/@thisweekinrust&quot;&gt;@ThisWeekinRust&lt;/a&gt; on mastodon.social, or
&lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;send us a pull request&lt;/a&gt;.
Want to get involved? &lt;a href=&quot;https://github.com/rust-lang/rust/blob/main/CONTRIBUTING.md&quot;&gt;We love contributions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This Week in Rust&lt;/em&gt; is openly developed &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;on GitHub&lt;/a&gt; and archives can be viewed at &lt;a href=&quot;https://this-week-in-rust.org/&quot;&gt;this-week-in-rust.org&lt;/a&gt;.
If you find any errors in this week's issue, &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust/pulls&quot;&gt;please submit a PR&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Want TWIR in your inbox? &lt;a href=&quot;https://this-week-in-rust.us11.list-manage.com/subscribe?u=fd84c1c757e02889a9b08d289&amp;amp;id=0ed8b72485&quot;&gt;Subscribe here&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#updates-from-rust-community&quot;&gt;Updates from Rust Community&lt;/a&gt;&lt;/h4&gt;


&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#official&quot;&gt;Official&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/&quot;&gt;Rust debugging survey 2026 results&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#foundation&quot;&gt;Foundation&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://rustfoundation.org/media/rust-cpp-interop-initiative-progress-update/&quot;&gt;Rust/C++ Interop Initiative: Progress Update, September 2026&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#newsletters&quot;&gt;Newsletters&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://rust-trends.com/newsletter/rust-1-98-ships-as-the-supply-chain-gets-tested/&quot;&gt;Rust Trends Issue 81 - Rust 1.98 Ships as the Supply Chain Gets Tested&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#projecttooling-updates&quot;&gt;Project/Tooling Updates&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://rustls.dev/blog/2026-09-08-a-decade-of-rustls/&quot;&gt;A Decade of Rustls&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#observationsthoughts&quot;&gt;Observations/Thoughts&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://kerkour.com/rust-microcontrollers&quot;&gt;Microcontrollers with good support for Rust&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://teaql.io/blog/musicbrainz-rust-orm-benchmark/&quot;&gt;What Does a Governed Data Runtime Cost? TeaQL vs Diesel and SeaORM on MusicBrainz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://lwn.net/SubscriberLink/1091015/5009546caa744c57/&quot;&gt;Stabilizing Rust's never type&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pid7.com/blog/searching-150gb-text-per-second/&quot;&gt;Searching through 150 GiB of Text per Second with SIMD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://levelup.gitconnected.com/nine-rules-for-compile-time-work-with-rust-const-fn-part-2-76ccd0e8a965&quot;&gt;Nine Rules for Compile-Time Work with Rust &lt;code&gt;const fn&lt;/code&gt;: Parse files, build tables, and catch mistakes … without a build script (Part 2)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cel.cs.brown.edu/blog/design-space-async-await/&quot;&gt;A Design Space Exploration of Async/Await&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ettolrach.com/blog/rust_when_empty_isnt_bottom.html&quot;&gt;Rust: When Empty Isn't Bottom&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rust-walkthroughs&quot;&gt;Rust Walkthroughs&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.debugdiary.dev/log/rust-simd128-what-changed-in-webassembly&quot;&gt;What Rust's +simd128 Actually Changed in My WebAssembly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.sheerluck.dev/posts/understanding-rust-control-flow-by-building-a-number-guessing-game/&quot;&gt;Rust Control Flow in Practice - Build a Number Guessing Game&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hackmd.io/@WorldSEnder/Hkyqni6Ofl&quot;&gt;Unsizing unsized values&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://quietism.art/posts/game-architecture/&quot;&gt;Game architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.nvidia.com/blog/introducing-cuda-rust-two-tracks-for-writing-gpu-kernels/&quot;&gt;Introducing CUDA Rust: Two Tracks for Writing GPU Kernels&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cetra3.github.io/blog/state-of-allocators-2026-part-2/&quot;&gt;The State of Allocators in 2026 - 6 Months Later&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sofiabelen.github.io/projects/visualizing-rusts-vtables-how-dyn-trait-works-in-memory/&quot;&gt;Visualizing Rust's Vtables: How dyn Trait Works In Memory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bamburac.com/blog/chess-engine/&quot;&gt;Safely generating legal chess moves at 475,000,000 nodes/s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sam.dev/blog/gearhash-on-arm64&quot;&gt;Speeding up gearhash on ARM64 (2× faster)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ochagavia.nl/blog/lets-build-a-compressor-from-scratch/&quot;&gt;Let's build a compressor from scratch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bensimms.moe/reverse-engineering-scooter/&quot;&gt;Reverse engineering my e-scooter and rewriting the firmware in rust&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hemomorphic.alexblood.net/posts/gloo-yew-for-persistent-webapp-state/&quot;&gt;Gloo + Yew for persistent webapp state&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#miscellaneous&quot;&gt;Miscellaneous&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kevincouton/awesome-rust-migrations&quot;&gt;Awesome Rust Migrations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#crate-of-the-week&quot;&gt;Crate of the Week&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;This week's crate is &lt;a href=&quot;https://github.com/roeeshoshani/tokio_rcu&quot;&gt;tokio-rcu&lt;/a&gt;, a user-space RCU implementation specifically built around the semantics of async rust and tokio.&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/t/crate-of-the-week/2704/1662&quot;&gt;Roee Shoshani&lt;/a&gt; for the self-suggestion!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://users.rust-lang.org/t/crate-of-the-week/2704&quot;&gt;Please submit your suggestions and votes for next week&lt;/a&gt;!&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#calls-for-testing&quot;&gt;Calls for Testing&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;An important step for RFC implementation is for people to experiment with the
implementation and give feedback, especially before stabilization.&lt;/p&gt;
&lt;p&gt;If you are a feature implementer and would like your RFC to appear in this list, add a
&lt;code&gt;call-for-testing&lt;/code&gt; label to your RFC along with a comment providing testing instructions and/or guidance on which aspect(s) of the feature need testing.&lt;/p&gt;
&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#cargo&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen&quot;&gt;Cargo&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/issues/14136&quot;&gt;Tracking Issue for checksum freshness&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;No calls for testing were issued this week by
&lt;a href=&quot;https://github.com/rust-lang/rust/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen&quot;&gt;Rust&lt;/a&gt;,
&lt;a href=&quot;https://github.com/rust-lang/rustup/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen&quot;&gt;Rustup&lt;/a&gt; or
&lt;a href=&quot;https://github.com/rust-lang/rfcs/issues?q=label%3Acall-for-testing%20state%3Aopen&quot;&gt;Rust language RFCs&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust/issues&quot;&gt;Let us know&lt;/a&gt; if you would like your feature to be tracked as a part of this list.&lt;/p&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/issues?q=label%3Acall-for-testing&quot;&gt;RFCs&lt;/a&gt;&lt;/h5&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rust&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/labels/call-for-testing&quot;&gt;Rust&lt;/a&gt;&lt;/h5&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rustup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rustup/labels/call-for-testing&quot;&gt;Rustup&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;If you are a feature implementer and would like your RFC to appear on the above list, add the new &lt;code&gt;call-for-testing&lt;/code&gt;
label to your RFC along with a comment providing testing instructions and/or guidance on which aspect(s) of the feature
need testing.&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#call-for-participation-projects-and-speakers&quot;&gt;Call for Participation; projects and speakers&lt;/a&gt;&lt;/h4&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#cfp-projects&quot;&gt;CFP - Projects&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Always wanted to contribute to open-source projects but did not know where to start?
Every week we highlight some tasks from the Rust community for you to pick and get started!&lt;/p&gt;
&lt;p&gt;Some of these tasks may also have mentors available, visit the task page for more information.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lacs-project/sysknife/issues/345&quot;&gt;sysknife - action_reference_doc_is_current prints two 44 KB documents instead of the line that differs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lacs-project/sysknife/issues/327&quot;&gt;sysknife - packages/setup claims Node 18 support, and Node 18 has been end-of-life since 2025-04-30&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lacs-project/sysknife/issues/356&quot;&gt;sysknife - cargo test fails intermittently on main: a test sets a process-global env var&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;If you are a Rust project owner and are looking for contributors, please submit tasks &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust?tab=readme-ov-file#call-for-participation-guidelines&quot;&gt;here&lt;/a&gt; or through a &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;PR to TWiR&lt;/a&gt; or by reaching out on &lt;a href=&quot;https://bsky.app/profile/thisweekinrust.bsky.social&quot;&gt;Bluesky&lt;/a&gt; or &lt;a href=&quot;https://mastodon.social/@thisweekinrust&quot;&gt;Mastodon&lt;/a&gt;!&lt;/p&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#cfp-events&quot;&gt;CFP - Events&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Are you a new or experienced speaker looking for a place to share something cool? This section highlights events that are being planned and are accepting submissions to join their event as a speaker.&lt;/p&gt;


&lt;ul&gt;
&lt;li&gt;&lt;em&gt;No Calls for papers or presentations were submitted this week.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are an event organizer hoping to expand the reach of your event, please submit a link to the website through a &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;PR to TWiR&lt;/a&gt; or by reaching out on &lt;a href=&quot;https://bsky.app/profile/thisweekinrust.bsky.social&quot;&gt;Bluesky&lt;/a&gt; or &lt;a href=&quot;https://mastodon.social/@thisweekinrust&quot;&gt;Mastodon&lt;/a&gt;!&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#updates-from-the-rust-project&quot;&gt;Updates from the Rust Project&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;613 pull requests were &lt;a href=&quot;https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2026-09-01..2026-09-08&quot;&gt;merged in the last week&lt;/a&gt;&lt;/p&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#compiler&quot;&gt;Compiler&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161795&quot;&gt;always rerun if we normalize local opaques&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/162047&quot;&gt;optimize empty token streams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161850&quot;&gt;store LiveLoans more densely packed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/162422&quot;&gt;use IndexVec instead of BTreeMap for polonius variances&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#library&quot;&gt;Library&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161893&quot;&gt;add custom allocator support to &lt;code&gt;(try_)map&lt;/code&gt; on &lt;code&gt;UniqueArc&lt;/code&gt; and &lt;code&gt;UniqueRc&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/162285&quot;&gt;box: fixup &lt;code&gt;map/try_map&lt;/code&gt; deallocate calls&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160534&quot;&gt;stabilize smart pointer map functions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#cargo_1&quot;&gt;Cargo&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17441&quot;&gt;&lt;code&gt;docs(lints)&lt;/code&gt;: how to configure Cargo lints&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17425&quot;&gt;&lt;code&gt;docs(trim-paths)&lt;/code&gt;: add limitations and polish&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17433&quot;&gt;&lt;code&gt;docs(trim-paths)&lt;/code&gt;: workspace remap begins with &lt;code&gt;.&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17437&quot;&gt;&lt;code&gt;fix(git)&lt;/code&gt;: Apply pr hint to git-fetch-with-cli&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17436&quot;&gt;&lt;code&gt;fix(git)&lt;/code&gt;: Make PR dep note cloer to our style guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17429&quot;&gt;&lt;code&gt;fix(git)&lt;/code&gt;: Simplify error message&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17422&quot;&gt;&lt;code&gt;fix(git)&lt;/code&gt;: Use git's 429 retry, when available&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17428&quot;&gt;&lt;code&gt;fix(parser)&lt;/code&gt;: Resolve theoretical use-after-free&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17410&quot;&gt;avoid passing search path (-L) args when they are passed as --extern&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17430&quot;&gt;docs: switch from &quot;target triple&quot; to &quot;target tuple&quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17362&quot;&gt;fix relative symlink handling in &lt;code&gt;write_atomic&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17432&quot;&gt;fix(trim-paths)!: limit options to &lt;code&gt;none|object|all&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17424&quot;&gt;fix(trim-paths)!: remove default scope from release profile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17450&quot;&gt;fixed stale comment about fingerprint checking method&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rustdoc&quot;&gt;Rustdoc&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/151618&quot;&gt;add &lt;code&gt;--print&lt;/code&gt; option&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rustfmt&quot;&gt;Rustfmt&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustfmt/pull/7017&quot;&gt;fix non-idempotent block doc comment closer rewrite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustfmt/pull/7089&quot;&gt;prevent infinite loops when parsing items from &lt;code&gt;cfg_select!&lt;/code&gt; arms&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#clippy&quot;&gt;Clippy&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17653&quot;&gt;&lt;code&gt;unnecessary_self_imports&lt;/code&gt;: lint nested imports&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17490&quot;&gt;&lt;code&gt;legacy_numeric_constants&lt;/code&gt;: make fixes machine-applicable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17648&quot;&gt;&lt;code&gt;std_instead_of_core&lt;/code&gt;: don't suggest a path that does not resolve&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17583&quot;&gt;&lt;code&gt;useless_conversion&lt;/code&gt;: ignore &lt;code&gt;From::from&lt;/code&gt; in generated code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/16595&quot;&gt;&lt;code&gt;useless_format&lt;/code&gt;: improve suggestion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17681&quot;&gt;&lt;code&gt;regex_creation_in_loops&lt;/code&gt;: check MIR loop structure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17504&quot;&gt;check that intra-doc links are not broken&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/16786&quot;&gt;detect integration tests in &lt;code&gt;is_in_test&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17049&quot;&gt;do not trigger &lt;code&gt;integer_division_remainder_used&lt;/code&gt; in macros&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17644&quot;&gt;improve &lt;code&gt;map_unwrap_or&lt;/code&gt; lint to support &lt;code&gt;map(f).unwrap_or_default()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17502&quot;&gt;move the &lt;code&gt;clippy_ci_panic_test&lt;/code&gt; integration into a regular test&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17665&quot;&gt;respect inline allows in &lt;code&gt;needless_pass_by_value&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/14689&quot;&gt;soft rename &lt;code&gt;clippy::all&lt;/code&gt; to &lt;code&gt;clippy::default&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rust-analyzer&quot;&gt;Rust-Analyzer&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23262&quot;&gt;add diagnostics for missing bodies for free and associated items&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23292&quot;&gt;fix &lt;code&gt;NamedTempFile&lt;/code&gt; constructors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23249&quot;&gt;accept Self as non-leading path segment in attribute paths&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23246&quot;&gt;allow inner attributes on blocks in tuple expressions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/22662&quot;&gt;avoid type unification errors in term search&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23270&quot;&gt;fix handling of &lt;code&gt;#[unsafe()]&lt;/code&gt; attrs without inner meta&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23163&quot;&gt;fix parsing of &lt;code&gt;self:&lt;/code&gt;: in fn param list&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23279&quot;&gt;hover &lt;code&gt;1f64&lt;/code&gt; use float instead of integer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23297&quot;&gt;follow symlinks when scanning the sysroot for proc-macro dylibs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23248&quot;&gt;install cargo tools with locked dependencies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23271&quot;&gt;merge &lt;code&gt;hir_def::hir::Expr::Unsafe&lt;/code&gt; into &lt;code&gt;Expr::Block&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23266&quot;&gt;render const value in completions label details&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rust-compiler-performance-triage&quot;&gt;Rust Compiler Performance Triage&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;This week we've hit quite a few regressions, both expected and unexpected.
One of them has already been fixed, with fixes for a few others being discussed.
One big improvement comes from caching the sanitizer set in &lt;code&gt;Session&lt;/code&gt;, which fixes a large regression from last week.
A few minor improvements landed, including a 75% reduction in memory usage while compiling &lt;code&gt;bevy_render&lt;/code&gt; with the next trait solver.&lt;/p&gt;
&lt;p&gt;Triage done by &lt;strong&gt;@JonathanBrouwer&lt;/strong&gt;.
Revision range: &lt;a href=&quot;https://perf.rust-lang.org/?start=5321a4f40c957cf3587c055e77461febc2ebc865&amp;amp;end=656a9da186dacaf3bf8f7f7296a825d256cb4ae3&amp;amp;absolute=false&amp;amp;stat=instructions%3Au&quot;&gt;5321a4f4..656a9da1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align: center;&quot;&gt;(instructions:u)&lt;/th&gt;
&lt;th style=&quot;text-align: center;&quot;&gt;mean&lt;/th&gt;
&lt;th style=&quot;text-align: center;&quot;&gt;range&lt;/th&gt;
&lt;th style=&quot;text-align: center;&quot;&gt;count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Regressions ❌ &lt;br /&gt; (primary)&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;0.5%&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;[0.1%, 1.3%]&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;121&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Regressions ❌ &lt;br /&gt; (secondary)&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;0.6%&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;[0.1%, 10.3%]&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;106&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Improvements ✅ &lt;br /&gt; (primary)&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;-0.6%&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;[-1.9%, -0.1%]&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;63&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Improvements ✅ &lt;br /&gt; (secondary)&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;-0.6%&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;[-2.4%, -0.1%]&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;65&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;All ❌✅ (primary)&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;0.1%&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;[-1.9%, 1.3%]&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;184&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;3 Regressions, 2 Improvements, 8 Mixed; 6 of them in rollups
33 artifact comparisons made in total&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-lang/rustc-perf/blob/a953e9c59b18feffa9dc06bee4ab30ad5a5700e8/triage/2026/2026-09-07.md&quot;&gt;Full report here&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#calls-for-testing_1&quot;&gt;Calls for Testing&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;An important step for RFC implementation is for people to experiment with the
implementation and give feedback, especially before stabilization.&lt;/p&gt;
&lt;p&gt;If you are a feature implementer and would like your RFC to appear in this list, add a
&lt;code&gt;call-for-testing&lt;/code&gt; label to your RFC along with a comment providing testing instructions and/or guidance on which aspect(s) of the feature need testing.&lt;/p&gt;
&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#cargo_2&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen&quot;&gt;Cargo&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/issues/14136&quot;&gt;Tracking Issue for checksum freshness&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;No calls for testing were issued this week by
&lt;a href=&quot;https://github.com/rust-lang/rust/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen&quot;&gt;Rust&lt;/a&gt;,
&lt;a href=&quot;https://github.com/rust-lang/rustup/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen&quot;&gt;Rustup&lt;/a&gt; or
&lt;a href=&quot;https://github.com/rust-lang/rfcs/issues?q=label%3Acall-for-testing%20state%3Aopen&quot;&gt;Rust language RFCs&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust/issues&quot;&gt;Let us know&lt;/a&gt; if you would like your feature to be tracked as a part of this list.&lt;/p&gt;
&lt;hr /&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#approved-rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/commits/master&quot;&gt;Approved RFCs&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Changes to Rust follow the Rust &lt;a href=&quot;https://github.com/rust-lang/rfcs#rust-rfcs&quot;&gt;RFC (request for comments) process&lt;/a&gt;. These
are the RFCs that were approved for implementation this week:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3958&quot;&gt;Rustdoc LaTeX math&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3485&quot;&gt;RFC: Cargo feature descriptions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3999&quot;&gt;Change &lt;code&gt;i686-pc-windows-msvc&lt;/code&gt; from Tier 1 with host tools =&amp;gt; Tier 1 without host tools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#final-comment-period&quot;&gt;Final Comment Period&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Every week, &lt;a href=&quot;https://www.rust-lang.org/team.html&quot;&gt;the team&lt;/a&gt; announces the 'final comment period' for RFCs and key PRs
which are reaching a decision. Express your opinions now.&lt;/p&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#tracking-issues-prs&quot;&gt;Tracking Issues &amp;amp; PRs&lt;/a&gt;&lt;/h6&gt;
&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rust_1&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen&quot;&gt;Rust&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161385&quot;&gt;riscv: stabilize 'd' and 'f' target features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161583&quot;&gt;x86: on targets that requires SSE, use those registers for ABI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161430&quot;&gt;Re-export &lt;code&gt;core::fmt::NumBuffer&lt;/code&gt; in &lt;code&gt;alloc&lt;/code&gt; (and &lt;code&gt;std&lt;/code&gt;)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161005&quot;&gt;fix: unfulfilled nested dead code lint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/162160&quot;&gt;turn aligned-in-packed error into lint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/158186&quot;&gt;Guarantee 8 bytes of alignment of RawWakerVTable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161312&quot;&gt;libtest: Allow passing --test-threads and --color multiple times, with later arguments overriding earlier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161520&quot;&gt;Stabilize &lt;code&gt;core::mem::DropGuard&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#cargo_3&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen&quot;&gt;Cargo&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17388&quot;&gt;fix(install): use packaged lockfile by default&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#language-reference&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/reference/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen&quot;&gt;Language Reference&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/reference/pull/2320&quot;&gt;UB does not time travel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#unsafe-code-guidelines&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/unsafe-code-guidelines/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen&quot;&gt;Unsafe Code Guidelines&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/unsafe-code-guidelines/issues/621&quot;&gt;Can references inside an enum transiently set an invalid enum discriminant?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;No Items entered Final Comment Period this week for
&lt;a href=&quot;https://github.com/rust-lang/rfcs/issues?q=state%3Aopen%20label%3Afinal-comment-period%20state%3Aopen&quot;&gt;Rust RFCs&lt;/a&gt;,
&lt;a href=&quot;https://github.com/rust-lang/compiler-team/issues?q=label%3Amajor-change%20label%3Afinal-comment-period%20state%3Aopen&quot;&gt;Compiler Team&lt;/a&gt;,
&lt;a href=&quot;https://github.com/rust-lang/lang-team/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen&quot;&gt;Language Team&lt;/a&gt; or
&lt;a href=&quot;https://github.com/rust-lang/leadership-council/issues?q=state%3Aopen%20label%3Afinal-comment-period%20state%3Aopen&quot;&gt;Leadership Council&lt;/a&gt;.&lt;/em&gt;
Let us know if you would like your PRs, Tracking Issues or RFCs to be tracked as a part of this list.&lt;/p&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#new-and-updated-rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pulls&quot;&gt;New and Updated RFCs&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;No New or Updated RFCs were created this week.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#upcoming-events&quot;&gt;Upcoming Events&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Rusty Events between 2026-09-09 - 2026-10-07 🦀&lt;/p&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#virtual&quot;&gt;Virtual&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;2026-09-09 | Virtual (Cardiff, UK) | &lt;a href=&quot;https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/&quot;&gt;Rust and C++ Cardiff&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/316283651/&quot;&gt;&lt;strong&gt;Operating Systems Book Club: Address spaces and Memory API&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-10 | Virtual | &lt;a href=&quot;https://luma.com/rust-maven&quot;&gt;Rust 🦀 Maven&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/rfbzk3ae&quot;&gt;&lt;strong&gt;Solving Real-World Planning Problems in Rust with SolverForge&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-10 | Virtual (Berlin, DE) | &lt;a href=&quot;https://www.meetup.com/rust-berlin&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-berlin/events/315691423/&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-10 | Virtual (Nürnberg, DE) | &lt;a href=&quot;https://www.meetup.com/rust-noris&quot;&gt;Rust Nuremberg&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-noris/events/315619611/&quot;&gt;&lt;strong&gt;Rust Nürnberg online&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-15 | Virtual (Washington, DC, US) | &lt;a href=&quot;https://www.meetup.com/rustdc&quot;&gt;Rust DC&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rustdc/events/fhvsztyjcmbtb/&quot;&gt;&lt;strong&gt;Mid-month Rustful&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-16 | Hybrid (Vancouver, CA) | &lt;a href=&quot;https://www.meetup.com/vancouver-rust&quot;&gt;Vancouver Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/vancouver-rust/events/314233757/&quot;&gt;&lt;strong&gt;Building a Rust GPU driver in the Linux kernel&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-17 | Hybrid (Seattle, WA, US) | &lt;a href=&quot;https://www.meetup.com/join-srug&quot;&gt;Seattle Rust User Group&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/seattle-rust-user-group/events/315635881/&quot;&gt;&lt;strong&gt;September, 2026 SRUG (Seattle Rust User Group) Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-18 | Virtual | &lt;a href=&quot;https://luma.com/rust-girona&quot;&gt;Rust Girona&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/ibaxicxv&quot;&gt;&lt;strong&gt;Sessió setmanal de codificació / Weekly coding session&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-20 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust&quot;&gt;Dallas Rust User Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/316133974/&quot;&gt;&lt;strong&gt;Rust Deep Learning: Third Sunday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-22 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust&quot;&gt;Dallas Rust User Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/310254773/&quot;&gt;&lt;strong&gt;Fourth Tuesday Rust Bookclub&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-24 | Virtual (Berlin, DE) | &lt;a href=&quot;https://www.meetup.com/rust-berlin/events/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-berlin/events/315907979/&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-24 | Virtual (Charlottesville, VA, US) | &lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/events/&quot;&gt;Charlottesville Rust Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/events/316460694/&quot;&gt;&lt;strong&gt;Rust Cells — Interior Mutability from Rust Core to Tock OS&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-29 | Virtual (London, UK) | &lt;a href=&quot;https://www.meetup.com/women-in-rust/events/&quot;&gt;Women in Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/women-in-rust/events/315691730/&quot;&gt;&lt;strong&gt;Lunch &amp;amp; Learn: Crates, Tips &amp;amp; Tricks Lightning Talks - Bring your ideas!&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-10-02 | Virtual | &lt;a href=&quot;https://luma.com/rust-girona&quot;&gt;Rust Girona&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/yqxvguts&quot;&gt;&lt;strong&gt;Sessió setmanal de codificació / Weekly coding session&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-10-04 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust/events/&quot;&gt;Dallas Rust User Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/316134009/&quot;&gt;&lt;strong&gt;Rust Deep Learning: First Sunday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-10-06 | Virtual (London, UK) | &lt;a href=&quot;https://www.meetup.com/women-in-rust/events/&quot;&gt;Women in Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/women-in-rust/events/315773044/&quot;&gt;&lt;strong&gt;👋 Community Catch Up&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-10-07 | Virtual (Indianapolis, IN, US) | &lt;a href=&quot;https://www.meetup.com/indyrs/events/&quot;&gt;Indy Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/indyrs/events/wqzhftyjcnbkb/&quot;&gt;&lt;strong&gt;Indy.rs - with Social Distancing&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#europe&quot;&gt;Europe&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;2026-09-10 | Geneva, CH | &lt;a href=&quot;https://www.posttenebraslab.ch/wiki/events/monthly_meeting/rust_meetup&quot;&gt;Rust Geneva&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.posttenebraslab.ch/wiki/events/monthly_meeting/rust_meetup&quot;&gt;&lt;strong&gt;Rust Meetup Geneva&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-14 - 2026-09-16 | Berlin, DE | &lt;a href=&quot;https://oxidizeconf.com/&quot;&gt;Oxidize 2026&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://oxidizeconf.com/&quot;&gt;&lt;strong&gt;Oxidize 2026&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-15 | Leipzig, DE | &lt;a href=&quot;https://www.meetup.com/rust-modern-systems-programming-in-leipzig&quot;&gt;Rust - Modern Systems Programming in Leipzig&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-modern-systems-programming-in-leipzig/events/313816477/&quot;&gt;&lt;strong&gt;Reproducing scientific papers - with Rust &amp;amp; &quot;AI&quot;&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-15 | Madrid, ES | &lt;a href=&quot;https://www.meetup.com/madrust/events/&quot;&gt;MadRust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/madrust/events/316361267/&quot;&gt;&lt;strong&gt;Tras la Máscara de Async Rust&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-17 | Dortmund, DE | &lt;a href=&quot;https://www.meetup.com/rust-dortmund/events/&quot;&gt;Rust Dortmund&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-dortmund/events/316428507/&quot;&gt;&lt;strong&gt;Rust Dortmund Meetup - From Segfault to Safety @DiWoDo&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-22 | Prague, CZ | &lt;a href=&quot;https://www.meetup.com/rust-prague&quot;&gt;Rust Prague&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-prague/events/316070376/&quot;&gt;&lt;strong&gt;Rust Meetup Prague @ Rockwell Automation&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-24 | Aarhus, DK | &lt;a href=&quot;https://www.meetup.com/rust-aarhus/events/&quot;&gt;Rust Aarhus&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-aarhus/events/316236528/&quot;&gt;&lt;strong&gt;Talk Night at SkyTEM&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-24 | Amsterdam, NL | &lt;a href=&quot;https://www.meetup.com/rust-amsterdam-group/events/&quot;&gt;Rust Developers Amsterdam Group&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-amsterdam-group/events/316162802/&quot;&gt;&lt;strong&gt;Rust Meetup @ BlockTech&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-24 | Frankfurt, DE | &lt;a href=&quot;https://www.meetup.com/rust-rhein-main/events/&quot;&gt;Rust Rhein-Main&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-rhein-main/events/316328297/&quot;&gt;&lt;strong&gt;AI Agentic Coding&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-28 | Augsburg, DE | &lt;a href=&quot;https://rust-augsburg.github.io/meetup&quot;&gt;Rust Meetup Augsburg&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://rust-augsburg.github.io/meetup/Meetup_21.html&quot;&gt;&lt;strong&gt;Rust Meetup #21: Maximilian Grauvogl &amp;amp; Marcel Fink - From Bits to Bugs: A Rust generator for SUIT Manifests and Structure-Aware Parser Fuzzing&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-29 | Manchester, UK | &lt;a href=&quot;https://www.meetup.com/rust-manchester/events/&quot;&gt;Rust Manchester&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-manchester/events/316200964/&quot;&gt;&lt;strong&gt;Rust Manchester September Code Night&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-30 | Basel, CH | &lt;a href=&quot;https://www.meetup.com/rust-basel/events/&quot;&gt;Rust Basel&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-basel/events/315986893/&quot;&gt;&lt;strong&gt;Rust Meetup #16 @ ERNI&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-10-05 | München, DE | &lt;a href=&quot;https://www.meetup.com/rust-munich/events/&quot;&gt;Rust Munich&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-munich/events/316244709/&quot;&gt;&lt;strong&gt;Rust Munich 2026 / 3&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#north-america&quot;&gt;North America&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;2026-09-08 - 2026-09-11 | Hybrid (Montreal, CA) | &lt;a href=&quot;https://rustconf.com/&quot;&gt;RustConf 2026&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://rustconf.com/&quot;&gt;&lt;strong&gt;RustConf 2026&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-09 | Montreal, CA | &lt;a href=&quot;https://www.meetup.com/women-in-rust&quot;&gt;Women in Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/women-in-rust/events/315773005/&quot;&gt;&lt;strong&gt;RustConf Coffee Break Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-10 | Lehi, UT, US | &lt;a href=&quot;https://www.meetup.com/utah-rust&quot;&gt;Utah Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/utah-rust/events/316198046/&quot;&gt;&lt;strong&gt;Hands-on Embedded Rust&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-10 | San Diego, CA, US | &lt;a href=&quot;https://www.meetup.com/san-diego-rust&quot;&gt;San Diego Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/san-diego-rust/events/315601104/&quot;&gt;&lt;strong&gt;San Diego Rust September Meetup - Back in person!&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-12 | Boston, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/events/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/310983699/&quot;&gt;&lt;strong&gt;Somerville Union Square Rust Lunch, Sep 12&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-15 | San Francisco, CA, US | &lt;a href=&quot;https://www.meetup.com/san-francisco-rust-study-group&quot;&gt;San Francisco Rust Study Group&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/san-francisco-rust-study-group/events/314997217/&quot;&gt;&lt;strong&gt;Rust Hacking in Person&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-16 | San Francisco, CA, US | &lt;a href=&quot;https://luma.com/bayarearust&quot;&gt;Bay Area Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/9oiujuyw&quot;&gt;&lt;strong&gt;Bay Area Rust - Graphics Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-16 | Hybrid (Vancouver, CA) | &lt;a href=&quot;https://www.meetup.com/vancouver-rust&quot;&gt;Vancouver Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/vancouver-rust/events/314233757/&quot;&gt;&lt;strong&gt;Building a Rust GPU driver in the Linux kernel&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-17 | Hybrid (Seattle, WA, US) | &lt;a href=&quot;https://www.meetup.com/join-srug&quot;&gt;Seattle Rust User Group&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/seattle-rust-user-group/events/315635881/&quot;&gt;&lt;strong&gt;September, 2026 SRUG (Seattle Rust User Group) Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-17 | Mountain View, CA, US | &lt;a href=&quot;https://www.meetup.com/hackerdojo&quot;&gt;Hacker Dojo&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/hackerdojo/events/316176445/&quot;&gt;&lt;strong&gt;RUST MEETUP at HACKER DOJO&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-19 | Boston, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/events/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/316378813/&quot;&gt;&lt;strong&gt;Boston Common Rust Lunch, Sep 19&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-23 | Austin, TX, US | &lt;a href=&quot;https://www.meetup.com/rust-atx&quot;&gt;Rust ATX&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-atx/events/xvkdgtyjcmbfc/&quot;&gt;&lt;strong&gt;Rust Lunch - Fareground&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-24 | Atlanta, GA, US | &lt;a href=&quot;https://www.meetup.com/rust-atl/events/&quot;&gt;Rust Atlanta&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-atl/events/313539333/&quot;&gt;&lt;strong&gt;Rust-Atl&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-26 | Boston, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/events/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/316378817/&quot;&gt;&lt;strong&gt;Harvard Rust Lunch, Sep 26&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-10-01 | Saint Louis, MO, US | &lt;a href=&quot;https://www.meetup.com/stl-rust/events/&quot;&gt;STL Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/stl-rust/events/316410027/&quot;&gt;&lt;strong&gt;Building a Minimal, Rootless Container in Rust&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-10-03 | Boston, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/events/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/316378820/&quot;&gt;&lt;strong&gt;Alewife Rust Lunch, Oct 3&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#oceania&quot;&gt;Oceania&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;2026-09-29 | Barton, AU | &lt;a href=&quot;https://www.meetup.com/rust-canberra/events/&quot;&gt;Canberra Rust User Group&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-canberra/events/316398052/&quot;&gt;&lt;strong&gt;September Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are running a Rust event please add it to the &lt;a href=&quot;https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com&quot;&gt;calendar&lt;/a&gt; to get
it mentioned here. Please remember to add a link to the event too.
Email the &lt;a href=&quot;mailto:community-team@rust-lang.org&quot;&gt;Rust Community Team&lt;/a&gt; for access.&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#jobs&quot;&gt;Jobs&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Please see the latest &lt;a href=&quot;https://www.reddit.com/r/rust/comments/1vtuq1b/official_rrust_whos_hiring_thread_for_jobseekers/&quot;&gt;Who's Hiring thread on r/rust&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#quote-of-the-week&quot;&gt;Quote of the Week&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;The Demon has access to a Super Turing Machine.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;– &lt;a href=&quot;https://rust-lang.zulipchat.com/#narrow/channel/136281-t-opsem/topic/.E2.9C.94.20Can.20IO.20provide.20angelic.20choice/near/621828055&quot;&gt;Connor Horman on rust zulip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/t/twir-quote-of-the-week/328/1798&quot;&gt;Theemathas&lt;/a&gt; for the suggestion!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://users.rust-lang.org/t/twir-quote-of-the-week/328&quot;&gt;Please submit quotes and vote for next week!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This Week in Rust is edited by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nellshamrell&quot;&gt;nellshamrell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/llogiq&quot;&gt;llogiq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ericseppanen&quot;&gt;ericseppanen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/extrawurst&quot;&gt;extrawurst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/U007D&quot;&gt;U007D&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mariannegoldin&quot;&gt;mariannegoldin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bdillo&quot;&gt;bdillo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/opeolluwa&quot;&gt;opeolluwa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bnchi&quot;&gt;bnchi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/KannanPalani57&quot;&gt;KannanPalani57&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tzilist&quot;&gt;tzilist&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Email list hosting is sponsored by &lt;a href=&quot;https://foundation.rust-lang.org/&quot;&gt;The Rust Foundation&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://www.reddit.com/r/rust/comments/1wc8sbm/this_week_in_rust_668/&quot;&gt;Discuss on r/rust&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2026-09-09T04:00:00+00:00</dc:date>
	<dc:creator>TWiR Contributors</dc:creator>
</item>
<item rdf:about="https://blog.nightly.mozilla.org/?p=2108">
	<title>Firefox Nightly: Motion, Colour, Captions, Kit – These Weeks in Firefox: Issue 207</title>
	<link>https://blog.nightly.mozilla.org/2026/09/08/motion-colour-captions-kit-these-weeks-in-firefox-issue-207/</link>
	<content:encoded>&lt;h3&gt;Highlights&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://shop.mozilla.com/&quot;&gt;Want some Kit? Check out the store!&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.nightly.mozilla.org/files/2026/08/image7.png&quot;&gt;&lt;img alt=&quot;Mozilla Store product grid showing three items: a cream-colored T-shirt featuring a colorful Kit graphic, a compact mechanical keyboard with blue, red, and peach keys, and a purple baseball cap embroidered with the words “Give a fox.”&quot; class=&quot;aligncenter size-full wp-image-2106&quot; height=&quot;369&quot; src=&quot;https://blog.nightly.mozilla.org/files/2026/08/image7.png&quot; width=&quot;1065&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=446518&quot;&gt;Sebastian Zartner [:sebo]&lt;/a&gt; added a panel to expose @media emulation (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1692434&quot;&gt;#1692434&lt;/a&gt;) and provided a way to emulate @media (prefers-reduced-motion: reduce) (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1477920&quot;&gt;#1477920&lt;/a&gt;)
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.nightly.mozilla.org/files/2026/08/image3-1.png&quot;&gt;&lt;img alt=&quot;Firefox Developer Tools Rules panel showing controls for emulating CSS media features. Print media can be enabled with a toggle, prefers-color-scheme offers Light, Dark, or No emulation, and prefers-reduced-motion offers Reduce, No preference, or No emulation. “No emulation” is selected for color scheme, while “Reduce” is selected for reduced motion.&quot; class=&quot;aligncenter size-full wp-image-2102&quot; height=&quot;376&quot; src=&quot;https://blog.nightly.mozilla.org/files/2026/08/image3-1.png&quot; width=&quot;1110&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;More theme controls have been added to the New Tab customization panel:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.nightly.mozilla.org/files/2026/08/image1-1.png&quot;&gt;&lt;img alt=&quot;Firefox's New Tab customization panel showing an Appearance section with theme color options as pastel circular swatches. A light purple theme is selected, with additional yellow, pink, blue, green, and white options. Below the swatches is a “See more themes” button, with the Wallpapers setting partially visible.&quot; class=&quot;aligncenter size-full wp-image-2100&quot; height=&quot;345&quot; src=&quot;https://blog.nightly.mozilla.org/files/2026/08/image1-1.png&quot; width=&quot;470&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Improved Picture-in-Picture caption support from some volunteer contributors
&lt;ul&gt;
&lt;li&gt;Thanks to Lukáš Lipinský for &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2056714&quot;&gt;adding caption support to Česká televize!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Thanks to kernp25 for &lt;a href=&quot;http://ardmediathek.de&quot;&gt;adding caption support to ardmediathek.de!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Friends of the Firefox team&lt;/h3&gt;
&lt;h4&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/buglist.cgi?title=Resolved%20bugs%20(excluding%20employees)&amp;amp;quicksearch=2040756%2C1685123%2C1800148%2C2052560%2C1927615%2C2008143%2C2040057%2C2049302%2C2054083%2C1251981%2C2029514%2C2039590%2C2049912%2C2050546%2C445000%2C2052932%2C2016932%2C2052956%2C2055555%2C2048463%2C2052320%2C2053182%2C2056102%2C1692434%2C2051545%2C2052046%2C2052047%2C2053550%2C2053333%2C2054036%2C2056714%2C2040752%2C2053568%2C2056856%2C1418178%2C2048884%2C1910767%2C2033570%2C2053551%2C2057472%2C2058146%2C2058381%2C2057710%2C2025999%2C2053689%2C1988723%2C2039596%2C2046156%2C1477920%2C2044483%2C2057835%2C2053543%2C2055774%2C2057645&quot;&gt;Resolved bugs (excluding employees)&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/niklasbaumgardner/NewContributorScraper&quot;&gt;Script to find new contributors from bug list&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Volunteers that fixed more than one bug&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;:Vincent&lt;/li&gt;
&lt;li&gt;japandi&lt;/li&gt;
&lt;li&gt;Nirmal Advani&lt;/li&gt;
&lt;li&gt;Sebastian Zartner [:sebo]&lt;/li&gt;
&lt;li&gt;tanvi.manku&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;New contributors (🌟 = first patch)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Aditi:&lt;a href=&quot;http://pdf.js&quot;&gt; Increase the maximum number of PDF.js preferences&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🌟 Anil Verman: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2040057&quot;&gt;[Docs] Trigger listeners doc is seriously out of date&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fede: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1418178&quot;&gt;more than six thumbnails needed when Ctrl+Tab is used&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Giulio B: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2048884&quot;&gt;frameId is wrong in webRequest events triggered via importScripts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🌟 Luiz Henrique Vieira: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2050546&quot;&gt;Remove dead CSS rule .alltabs-item[selected=”true”] &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🌟 Devin Rousso: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2052932&quot;&gt;`emulation.setLocaleOverride` does not override `Accept-Language` header for in `Worker` for `fetch` and `WebSocket`&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🌟 muhammad shaikh: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2016932&quot;&gt;Profile delete page heading should enclose profile name in quotes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🌟 Kevin Gosse: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2054036&quot;&gt;nsDataObj::QueryGetData in Firefox returns E_FAIL for formats it doesn’t carry, instead of DV_E_FORMATETC per the COM contract&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Lukáš Lipinský:&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2056714&quot;&gt; Česká televize captions do not display in the Picture-in-Picture window&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🌟 mikey gough: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053551&quot;&gt;Remove three unused devtools.debugger.file-search-* preferences&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🌟 Nathan Leuz: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053550&quot;&gt;Remove unused legacy preference browser.translation.neverForLanguages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🌟 Shawn Zivontsis: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2025999&quot;&gt;Reorder moz_origins composite unique index to UNIQUE(host, prefix)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;tanvi.manku:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2048463&quot;&gt;Remove or update metrics expiring at the end of Firefox 154: pwmgr.doorhanger_submitted_* before Gecko switches to version 155 on 2026-07-20&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2052320&quot;&gt;unnecessary scrollbars in edit dialogs for payments and addresses&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;🌟 &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2052560&quot;&gt;Tim McNulty: Remove always-true clause from NS_ASSERTION in nsNavBookmarks::AdjustIndices (Coverity CID 1274453)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Project Updates&lt;/h3&gt;
&lt;h4&gt;Add-ons / Web Extensions&lt;/h4&gt;
&lt;h5&gt;Addon Manager &amp;amp; about:addons&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;As part of Nova about:addons work:
&lt;ul&gt;
&lt;li&gt;Introduced a shared localization module for built-in and curated AMO-hosted theme names, and updated the corresponding about:addons theme test to expect the new “Default” theme name shown when Nova is enabled –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2055936&quot;&gt; Bug 2055936&lt;/a&gt; /&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2058235&quot;&gt; Bug 2058235&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Added a message bar to the about:addons themes picker to surface AMO-hosted Nova theme download and install failures instead of failing silently –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2054548&quot;&gt; Bug 2054548&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;WebExtensions Framework&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Fixed a startup race where an extension’s restored dynamic content scripts could be missing from the parent WebExtensionPolicy due to stale shared data –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2058719&quot;&gt; Bug 2058719&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;WebExtension APIs&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Fixed publicSuffix.isKnownSuffix() to reject invalid domain-name characters, including wildcard suffixes, that could previously be matched as a known public suffix –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2059819&quot;&gt; Bug 2059819&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fixed the frameId reported by webRequest events for requests made from workers, including importScripts()-loaded scripts, which were previously attributed to the wrong frame –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2048884&quot;&gt; Bug 2048884&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Thanks to Giulio B for the fix to webRequest frameId attribution for worker requests.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;DevTools&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=786821&quot;&gt;Benoit&lt;/a&gt; made it possible to display &lt;a href=&quot;https://jsonlines.org/&quot;&gt;JSON Lines (JSONL/NDJSON) documents&lt;/a&gt; in the JSON Viewer (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2055774&quot;&gt;#2055774&lt;/a&gt;)
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.nightly.mozilla.org/files/2026/08/image4-1.png&quot;&gt;&lt;img alt=&quot;Firefox’s built-in JSON viewer displaying a local JSONL file. Valid entries are shown as expandable arrays and objects, including a large integer with its JavaScript representation highlighted. A malformed entry is highlighted in red with a JSON.parse error explaining that a comma or closing brace was expected after a property value.&quot; class=&quot;aligncenter size-full wp-image-2103&quot; height=&quot;414&quot; src=&quot;https://blog.nightly.mozilla.org/files/2026/08/image4-1.png&quot; width=&quot;1574&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=347081&quot;&gt;Leo McArdle [:leo]&lt;/a&gt; continues his quest to add MDN icons next links to MDN (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2049610&quot;&gt;#2049610&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2050159&quot;&gt;#2050159&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=559949&quot;&gt;Julian Descottes [:jdescottes]&lt;/a&gt; vastly improved DevTools screenshot performance (by up to 35%) (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2056716&quot;&gt;#2056716&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=656417&quot;&gt;Hubert Boma Manilla (:bomsy)&lt;/a&gt; fixed keyboard navigation for about:debugging (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2050797&quot;&gt;#2050797&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=559949&quot;&gt;Julian Descottes [:jdescottes]&lt;/a&gt; fixed a bug that was preventing to show error messages in about:debugging (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2058021&quot;&gt;#2058021&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=557153&quot;&gt;Nicolas Chevobbe [:nchevobbe]&lt;/a&gt; made ::checkmark pseudo element visible in the Inspector (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2009909&quot;&gt;#2009909&lt;/a&gt;)
&lt;ul&gt;
&lt;li&gt;Used by customizable select (&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Forms/Customizable_select&quot;&gt;MDN&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Preference: dom.select.customizable_select.enabled&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.nightly.mozilla.org/files/2026/08/image2-1.png&quot;&gt;&lt;img alt=&quot;Firefox Developer Tools Inspector examining a customized HTML menu labeled “Select pet.” The open menu contains “Please select a pet,” “Cat,” and “Dog,” with emoji and a checkmark beside the selected option. In the Inspector, the ::checkmark pseudo-element is selected in the Inspector, and the Rules panel shows CSS customizing its position and content.&quot; class=&quot;aligncenter size-full wp-image-2101&quot; height=&quot;1122&quot; src=&quot;https://blog.nightly.mozilla.org/files/2026/08/image2-1.png&quot; width=&quot;1350&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;WebDriver&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Nirmal Advani cleaned up our codebase by &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2046156&quot;&gt;removing the executeSoon helper&lt;/a&gt;, which was just a thin wrapper on top of Services.tm.dispatchToMainThread().&lt;/li&gt;
&lt;li&gt;Sameem &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1988723&quot;&gt;removed support for the “contexts” argument in the “session.unsubscribe” command&lt;/a&gt;. From now on, clients can unsubscribe only by event names or subscription ids.&lt;/li&gt;
&lt;li&gt;John Schanck added support for validating &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1976492&quot;&gt;if an authentication id is stored in the Virtual Authenticator Database&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Alexandra Borovova disabled &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2035439&quot;&gt;the download panel to prevent the loss of the focus of the current document when a download begins&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Fluent&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Here are &lt;a href=&quot;https://searchfox.org/firefox-main/rev/7f451c7918ffe36840b0ef31dfc2272ded671f81/intl/locale/mozILocaleService.idl#212-233&quot;&gt;utilities for measuring localization coverage at runtime&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Lint, Docs and Workflow&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Sylvestre has converted all our in-tree documents to be &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2038819&quot;&gt;Markdown instead of reStructuredText&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Standard8 adjusted the &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1890526&quot;&gt;source doc&lt;/a&gt; &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2051591&quot;&gt;upload task&lt;/a&gt;, that runs on code review, to report failures into phabricator, rather than having a generic error message.&lt;/li&gt;
&lt;li&gt;Standard8 &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2058922&quot;&gt;made it so that test-manifest-toml issues for out-of-order entries&lt;/a&gt; should show up in phabricator more often.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://arewemozsrcyet.com/&quot;&gt;https://arewemozsrcyet.com/&lt;/a&gt; continues to head (mostly) in the right direction.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;New Tab Page&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;HNT Eng had a work week last week. Did a lot of prep for big cleanups (Nova, Widget cleanup post WCW)
&lt;ul&gt;
&lt;li&gt;Also worked on ways to automate trainhops / make them easier to deploy&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Jack Brown&lt;a href=&quot;https://bugzil.la/1995391&quot;&gt; updated newtabTrainhopAddon to allow co-enrollment and prioritize the highest version number&lt;/a&gt;, which ensures the New Tab Page picks the newest addon build when multiple enrollments overlap and prevents older experiment variants from replacing newer installs.&lt;/li&gt;
&lt;li&gt;Fred Chasen&lt;a href=&quot;https://bugzil.la/2031665&quot;&gt; fixed AccuWeather sponsored text overlapping the “Tell us what you think” link&lt;/a&gt; by adjusting medium weather card CSS (z-index and pointer-events), restoring hover and click behavior for the feedback link on affected New Tab Page cards.&lt;/li&gt;
&lt;li&gt;Mike Kaply&lt;a href=&quot;https://bugzil.la/2035221&quot;&gt; fixed wallpaper uploads failing when the wallpaper list can’t be queried from remote settings&lt;/a&gt; by adding a remote‑settings query fallback/local cache and defensive error handling so users can upload custom wallpapers during remote‑settings outages or timeouts.&lt;/li&gt;
&lt;li&gt;japandi&lt;a href=&quot;https://bugzil.la/2044483&quot;&gt; added the widgets.clocks.interaction pref and wired interaction tracking&lt;/a&gt; so World Clocks now emits telemetry/events for taps and opens (pref registration + tracker hooks), enabling accurate UX metrics without changing visible UI behavior.&lt;/li&gt;
&lt;li&gt;Maxx Crawford&lt;a href=&quot;https://bugzil.la/2046143&quot;&gt; prevented the weather widget from activating without user opt‑in&lt;/a&gt; by gating activation on the opt‑in pref and updating the onboarding flow, so weather and related location/telemetry remain disabled by default until explicit user consent.&lt;/li&gt;
&lt;li&gt;Irene Ni&lt;a href=&quot;https://bugzil.la/2051413&quot;&gt; made the New Tab client request layouts from remote-settings so NTP layouts and remote-config-driven content now update on load instead of remaining stale&lt;/a&gt;; this fixes cases where layout changes pushed via the remote-settings service (layouts collection) weren’t applied, improving consistency on desktop and Android clients that rely on remote layouts.&lt;/li&gt;
&lt;li&gt;Nirmal Advani&lt;a href=&quot;https://bugzil.la/2053568&quot;&gt; removed three unused activity-stream preferences (discoverystream.thumbsUpDown.*) from prefs and related code paths&lt;/a&gt;, reducing prefs surface area and avoiding confusion in about:config/telemetry without changing user-visible behavior.&lt;/li&gt;
&lt;li&gt;Mike Conley&lt;a href=&quot;https://bugzil.la/2054581&quot;&gt; fixed ExternalComponentWrapper to forward “live” properties like isIntersecting from MessageWrapper&lt;/a&gt;, restoring correct IntersectionObserver-driven behavior (visibility-based lazy-load and impression tracking) for remote components in the New Tab Page and discovery streams that relied on isIntersecting for render/telemetry triggers.&lt;/li&gt;
&lt;li&gt;Irene Ni standardized New Tab widgets and sections header spacing (&lt;a href=&quot;https://bugzil.la/2055029&quot;&gt;standardize spacing&lt;/a&gt;) to remove misaligned tiles and reduce visual jitter when resizing or toggling sections in the New Tab Page.&lt;/li&gt;
&lt;li&gt;Mike Conley removed version-153 train-hop compatibility shims for the World Cup newtab logo variations (&lt;a href=&quot;https://bugzil.la/2055939&quot;&gt;remove compatibility shims&lt;/a&gt;), an internal cleanup that prevents legacy logo-selection fallbacks from influencing current logo variations.&lt;/li&gt;
&lt;li&gt;Maxx Crawford exposed available browser themes to New Tab and added apply/install actions (&lt;a href=&quot;https://bugzil.la/2056300&quot;&gt;expose and apply themes&lt;/a&gt;), allowing users to install or immediately apply themes from the New Tab surface via ThemeManager/Theme API hooks.&lt;/li&gt;
&lt;li&gt;Maxx Crawford added New Tab Customize Panel browser theme selection strings (&lt;a href=&quot;https://bugzil.la/2056301&quot;&gt;add theme selection strings&lt;/a&gt;) so the new theme-selection UI is localized and displays correct labels across locales.&lt;/li&gt;
&lt;li&gt;Maxx Crawford added a full browser theme selection sub-panel to the New Tab Customize Panel (&lt;a href=&quot;https://bugzil.la/2056304&quot;&gt;theme selection sub-panel&lt;/a&gt;) to let users browse, preview, and pick themes directly inside the New Tab customization flow.&lt;/li&gt;
&lt;li&gt;Scott Downe fixed&lt;a href=&quot;https://bugzil.la/2056650&quot;&gt; Custom newtab wallpapers flash / blink some seconds after loading newtab&lt;/a&gt; by ensuring the custom wallpaper is painted only after image data is ready, which removes the multi-second visual flash on about:newtab for users with custom backgrounds and improves perceived stability during initial new-tab load.&lt;/li&gt;
&lt;li&gt;Maxx Crawford exposed&lt;a href=&quot;https://bugzil.la/2056937&quot;&gt; trainhopConfig values in Discovery Stream Admin tooling&lt;/a&gt;, giving operators direct access to trainhop routing/weight values from the admin UI/API so content trains and experiment routing can be adjusted without code deploys—this has no immediate end-user UI change but reduces time-to-rollout for Discovery Stream content changes.&lt;/li&gt;
&lt;li&gt;Dre fixed&lt;a href=&quot;https://bugzil.la/2057217&quot;&gt; Newtab custom wallpapers flash when selecting from picture of the day widget&lt;/a&gt; by deferring the wallpaper swap until the selected Picture of the Day is decoded and ready, which prevents the transient blank/flash users saw when changing wallpapers via the widget and makes wallpaper selection feel instantaneous and stable.&lt;/li&gt;
&lt;li&gt;Maxx Crawford&lt;a href=&quot;https://bugzil.la/2057280&quot;&gt; used the POTD thumbnailUrl image for the widget background (instead of the high-res image)&lt;/a&gt;, which reduces bandwidth, memory footprint, and New Tab Page widget load latency for users who see the Picture‑of‑the‑Day widget.&lt;/li&gt;
&lt;li&gt;Kyle Jones&lt;a href=&quot;https://bugzil.la/2059030&quot;&gt; added MAC support to TopSitesFeed when fetching tiles from MARS&lt;/a&gt;, which enforces authenticated tile retrieval and reduces missing/401 tile failures for users relying on MARS‑served Top Sites tiles.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Performance Tools (aka &lt;a href=&quot;https://profiler.firefox.com/&quot;&gt;Firefox Profiler&lt;/a&gt;)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2050028&quot;&gt;Bug 2050028 – Enable the Gecko profiler by default with low-overhead features when running mochitests&lt;/a&gt; landed, which means mochitest failures now upload profiles by default:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.nightly.mozilla.org/files/2026/08/image6.png&quot;&gt;&lt;img alt=&quot;Treeherder's Failure Summary panel showing several TEST-UNEXPECTED-FAIL results for a test called browser_findbar_marks.js. One failure includes a suggested tracking bug, while another provides a link to open a captured test profile in the Firefox Profiler. The Firefox Profiler button is hovered, displaying the tooltip “open in Firefox Profiler.”&quot; class=&quot;aligncenter size-full wp-image-2105&quot; height=&quot;552&quot; src=&quot;https://blog.nightly.mozilla.org/files/2026/08/image6.png&quot; width=&quot;1934&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tests.firefox.dev/try.html&quot;&gt;https://tests.firefox.dev/try.html&lt;/a&gt; can give you a prompt to ask an AI agent to look at the profile for you using profiler-cli:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.nightly.mozilla.org/files/2026/08/image5-1.png&quot;&gt;&lt;img alt=&quot;Caption: The Try Push Results dashboard showing a Firefox test run with 377 total jobs, 7 failed test jobs, 8 unique failing tests, 12 total failures, and 1 intermittent failure. Below, a table lists permanent test failures. A Firefox Profiler icon beside a failed test is hovered, displaying a tooltip offering to analyze the failure with the profiler tool.&quot; class=&quot;aligncenter size-full wp-image-2104&quot; height=&quot;1031&quot; src=&quot;https://blog.nightly.mozilla.org/files/2026/08/image5-1.png&quot; width=&quot;1999&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Search and Urlbar&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Dao and Moritz continue work on MCAB working on making the address bar’s contents to be&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053407&quot;&gt; content-process-safe&lt;/a&gt; and preparing to&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2049112&quot;&gt; allow cross-process IPC for the address bar&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Mike Kaply&lt;a href=&quot;https://bugzil.la/1989252&quot;&gt; fixed hidden actions still visible in Quick Actions mode&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Daisuke and Drew continued work on supporting Nova on the&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2035512&quot;&gt; address&lt;/a&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2051426&quot;&gt; bar&lt;/a&gt; and search bar components.&lt;/li&gt;
&lt;li&gt;Caleb continued work to&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053824&quot;&gt; use&lt;/a&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053825&quot;&gt; array&lt;/a&gt;–&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053826&quot;&gt;binding&lt;/a&gt; for places sql queries, to improve performance.&lt;/li&gt;
&lt;/ul&gt;</content:encoded>
	<dc:date>2026-09-08T18:38:38+00:00</dc:date>
	<dc:creator>Mike Conley</dc:creator>
</item>
<item rdf:about="https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/">
	<title>The Rust Programming Language Blog: Rust debugging survey 2026 results</title>
	<link>https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/</link>
	<content:encoded>&lt;p&gt;One of the biggest challenges Rust developers report in our
&lt;a href=&quot;https://blog.rust-lang.org/2026/03/02/2025-State-Of-Rust-Survey-results/#challenges-and-wishes-about-rust&quot; rel=&quot;external&quot;&gt;annual surveys&lt;/a&gt; is a subpar debugging experience. So, back
in February, we ran our first &lt;a href=&quot;https://blog.rust-lang.org/2026/02/23/rust-debugging-survey-2026/&quot; rel=&quot;external&quot;&gt;Rust Debugging Survey&lt;/a&gt;,
in the hopes of identifying how Rust developers are using debuggers and what
problems they are facing when doing so. We received over 2,300 responses, and
we'd like to thank everyone who took the time to participate in the survey!&lt;/p&gt;
&lt;p&gt;In this report, we'll go over some of the results of the survey. If you'd like,
you can also check out &lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/surveys/main/surveys/2026/debugging/report/debugging-survey-2026-report.pdf&quot; rel=&quot;external&quot;&gt;the complete results of the survey&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you'd like to skip ahead to any particular section, you can do so with this
index:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/#who-uses-debuggers&quot;&gt;Who Uses Debuggers?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/#how-are-debuggers-used&quot;&gt;How Are Debuggers Used?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/#challenges&quot;&gt;Challenges&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/#debugger-visualizers&quot;&gt;Debugger Visualizers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/#closing-remarks&quot;&gt;Closing Remarks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/#who-uses-debuggers&quot;&gt;&lt;/a&gt;
Who Uses Debuggers?&lt;/h3&gt;
&lt;p&gt;The first step to making sense of the survey results is understanding who took
the survey. We asked respondents to rate their Rust expertise, from &quot;Never used
it&quot; to &quot;Advanced&quot;. Over 80% reported themselves as &quot;Advanced&quot; or &quot;Intermediate&quot;,
split roughly evenly between the two:&lt;/p&gt;

&lt;div&gt;
    &lt;div class=&quot;class&quot; id=&quot;how-would-you-rate-your-rust-expertise&quot;&gt;&amp;lt;noscript&amp;gt;
&amp;lt;img alt=&quot;how-would-you-rate-your-rust-expertise&quot; src=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/how-would-you-rate-your-rust-expertise.png&quot; /&amp;gt;
&amp;lt;/noscript&amp;gt;&lt;/div&gt;
    &lt;div style=&quot;display: flex; margin-bottom: 10px;&quot;&gt;
        &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/how-would-you-rate-your-rust-expertise.png&quot; target=&quot;_href_&quot; title=&quot;Download chart as PNG&quot;&gt;PNG&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/how-would-you-rate-your-rust-expertise.svg&quot; target=&quot;_href_&quot; title=&quot;Download chart as SVG&quot;&gt;SVG&lt;/a&gt;]&lt;/span&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;We also asked respondents if they currently use or have used debuggers in Rust.
Over 46% said they currently do, with the remaining responses split between
&quot;have in the past&quot; and &quot;never have&quot;. That means that over half of respondents do
not currently use a debugger for Rust!&lt;/p&gt;

&lt;div&gt;
    &lt;div class=&quot;class&quot; id=&quot;do-you-use-debuggers-in-rust&quot;&gt;&amp;lt;noscript&amp;gt;
&amp;lt;img alt=&quot;do-you-use-debuggers-in-rust&quot; src=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/do-you-use-debuggers-in-rust.png&quot; /&amp;gt;
&amp;lt;/noscript&amp;gt;&lt;/div&gt;
    &lt;div style=&quot;display: flex; margin-bottom: 10px;&quot;&gt;
        &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/do-you-use-debuggers-in-rust.png&quot; target=&quot;_href_&quot; title=&quot;Download chart as PNG&quot;&gt;PNG&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/do-you-use-debuggers-in-rust.svg&quot; target=&quot;_href_&quot; title=&quot;Download chart as SVG&quot;&gt;SVG&lt;/a&gt;]&lt;/span&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Categorized by expertise, the responses reveal that roughly half of &quot;beginners&quot;
have never used debuggers in Rust! On the other hand, nearly half of &quot;advanced
users&quot; currently do use debuggers in Rust:&lt;/p&gt;

&lt;div&gt;
    &lt;div class=&quot;pie-chart&quot; id=&quot;do-you-use-debuggers-in-rust-per-expertise&quot;&gt;&amp;lt;noscript&amp;gt;
&amp;lt;img alt=&quot;do-you-use-debuggers-in-rust-per-expertise&quot; src=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/do-you-use-debuggers-in-rust-per-expertise.png&quot; /&amp;gt;
&amp;lt;/noscript&amp;gt;&lt;/div&gt;
    &lt;div style=&quot;display: flex; margin-bottom: 10px;&quot;&gt;
        &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/do-you-use-debuggers-in-rust-per-expertise.png&quot; target=&quot;_href_&quot; title=&quot;Download chart as PNG&quot;&gt;PNG&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/do-you-use-debuggers-in-rust-per-expertise.svg&quot; target=&quot;_href_&quot; title=&quot;Download chart as SVG&quot;&gt;SVG&lt;/a&gt;]&lt;/span&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;For respondents who indicated they had previously used Rust but no longer did,
we asked if challenges with debugging support were why they stopped. For nearly
3%, the answer was &quot;yes&quot;, with an additional 24% reporting debugging issues as
being partially responsible (though mind the small response count; most
respondents were active users of Rust):&lt;/p&gt;

&lt;div&gt;
    &lt;div class=&quot;class&quot; id=&quot;were-issues-with-debugging-support-the-primary-reason-why-you-stopped-using-rust&quot;&gt;&amp;lt;noscript&amp;gt;
&amp;lt;img alt=&quot;were-issues-with-debugging-support-the-primary-reason-why-you-stopped-using-rust&quot; src=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/were-issues-with-debugging-support-the-primary-reason-why-you-stopped-using-rust.png&quot; /&amp;gt;
&amp;lt;/noscript&amp;gt;&lt;/div&gt;
    &lt;div style=&quot;display: flex; margin-bottom: 10px;&quot;&gt;
        &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/were-issues-with-debugging-support-the-primary-reason-why-you-stopped-using-rust.png&quot; target=&quot;_href_&quot; title=&quot;Download chart as PNG&quot;&gt;PNG&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/were-issues-with-debugging-support-the-primary-reason-why-you-stopped-using-rust.svg&quot; target=&quot;_href_&quot; title=&quot;Download chart as SVG&quot;&gt;SVG&lt;/a&gt;]&lt;/span&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/#how-are-debuggers-used&quot;&gt;&lt;/a&gt;
How Are Debuggers Used?&lt;/h3&gt;
&lt;p&gt;Knowing what debuggers developers are using and how is another important part of
understanding the challenges they face. To this end, we asked respondents how
they were debugging their programs. Unsurprisingly, most developers make use of
print debugging and the &lt;code&gt;dbg!&lt;/code&gt; macro. Excluding those, using &lt;code&gt;lldb&lt;/code&gt; inside an
IDE was the most popular choice, followed by &lt;code&gt;gdb&lt;/code&gt; on the command line:&lt;/p&gt;

&lt;div&gt;
    &lt;div class=&quot;bar-chart&quot; id=&quot;what-tools-and-workflows-do-you-use-to-debug-rust-programs&quot;&gt;&amp;lt;noscript&amp;gt;
&amp;lt;img alt=&quot;what-tools-and-workflows-do-you-use-to-debug-rust-programs&quot; src=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/what-tools-and-workflows-do-you-use-to-debug-rust-programs.png&quot; /&amp;gt;
&amp;lt;/noscript&amp;gt;&lt;/div&gt;
    &lt;div style=&quot;display: flex; margin-bottom: 10px;&quot;&gt;
        &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/what-tools-and-workflows-do-you-use-to-debug-rust-programs.png&quot; target=&quot;_href_&quot; title=&quot;Download chart as PNG&quot;&gt;PNG&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/what-tools-and-workflows-do-you-use-to-debug-rust-programs.svg&quot; target=&quot;_href_&quot; title=&quot;Download chart as SVG&quot;&gt;SVG&lt;/a&gt;]&lt;/span&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;We can get a more detailed breakdown of these results if we include the
operating system on which the respondents use a given debugging approach. We
examine this from two different angles. The first angle being, &quot;On operating
system X, what percent of responses are using debugger Y?&quot;. Print debugging and
the &lt;code&gt;dbg!&lt;/code&gt; macro are consistently the top two yet again, but looking beyond
that, things get more interesting. On Linux, using &lt;code&gt;gdb&lt;/code&gt; on the command line was
the most popular choice by a thin margin, beating &lt;code&gt;lldb&lt;/code&gt; in an IDE by only 0.4%.
On Windows, Windows Subsystem for Linux (WSL), and macOS, &lt;code&gt;lldb&lt;/code&gt; in an IDE was
the top pick by at least 6%, making it a very popular choice in general. On
Windows, the three least popular choices were the command line debuggers (&lt;code&gt;gdb&lt;/code&gt;
CLI, &lt;code&gt;lldb&lt;/code&gt; CLI, and BugStalker), and on both Windows and macOS the third most
popular pick was, &quot;I don't know&quot;. Those who were debugging on operating systems
not listed (Other) most frequently used some kind of special embedded debugger
or &lt;code&gt;gdb&lt;/code&gt;:&lt;/p&gt;

&lt;div&gt;
    &lt;div class=&quot;pie-chart&quot; id=&quot;what-tools-and-workflows-do-you-use-to-debug-rust-programs-per-os-1&quot;&gt;&amp;lt;noscript&amp;gt;
&amp;lt;img alt=&quot;what-tools-and-workflows-do-you-use-to-debug-rust-programs-per-os-1&quot; src=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/what-tools-and-workflows-do-you-use-to-debug-rust-programs-per-os-1.png&quot; /&amp;gt;
&amp;lt;/noscript&amp;gt;&lt;/div&gt;
    &lt;div style=&quot;display: flex; margin-bottom: 10px;&quot;&gt;
        &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/what-tools-and-workflows-do-you-use-to-debug-rust-programs-per-os-1.png&quot; target=&quot;_href_&quot; title=&quot;Download chart as PNG&quot;&gt;PNG&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/what-tools-and-workflows-do-you-use-to-debug-rust-programs-per-os-1.svg&quot; target=&quot;_href_&quot; title=&quot;Download chart as SVG&quot;&gt;SVG&lt;/a&gt;]&lt;/span&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The other angle we can look at these responses from is, &quot;For users of debugger
X, what percent of responses are using it on operating system Y?&quot;. For most
debuggers, Linux makes up the largest portion of uses, ranging from about 45% to
about 77%, followed by Windows, then macOS. The most notable exceptions are
WinDbg and the Visual Studio debugger, which are primarily used on Windows, and
&lt;code&gt;lldb&lt;/code&gt;, which is used more on macOS than Windows in an IDE and on the command
line:&lt;/p&gt;

&lt;div&gt;
    &lt;div class=&quot;pie-chart&quot; id=&quot;what-tools-and-workflows-do-you-use-to-debug-rust-programs-per-os-2&quot;&gt;&amp;lt;noscript&amp;gt;
&amp;lt;img alt=&quot;what-tools-and-workflows-do-you-use-to-debug-rust-programs-per-os-2&quot; src=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/what-tools-and-workflows-do-you-use-to-debug-rust-programs-per-os-2.png&quot; /&amp;gt;
&amp;lt;/noscript&amp;gt;&lt;/div&gt;
    &lt;div style=&quot;display: flex; margin-bottom: 10px;&quot;&gt;
        &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/what-tools-and-workflows-do-you-use-to-debug-rust-programs-per-os-2.png&quot; target=&quot;_href_&quot; title=&quot;Download chart as PNG&quot;&gt;PNG&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/what-tools-and-workflows-do-you-use-to-debug-rust-programs-per-os-2.svg&quot; target=&quot;_href_&quot; title=&quot;Download chart as SVG&quot;&gt;SVG&lt;/a&gt;]&lt;/span&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;To the 6 respondents who use WinDbg on Linux: we wish you luck!&lt;/p&gt;
&lt;p&gt;As for how people actually use their debugger of choice, the aggregate results
are not particularly surprising. Roughly 87% of users are using debuggers for
stepping line-by-line through programs and a little over half of users are using
debuggers to obtain stack traces from hung/crashed processes. Only a quarter of
the respondents use a debugger to debug async code. That might be partially
caused by the async Rust debugging experience being clumsy and incomplete, or it
could just be that users aren't writing much async code:&lt;/p&gt;

&lt;div&gt;
    &lt;div class=&quot;bar-chart&quot; id=&quot;what-are-you-using-debuggers-for&quot;&gt;&amp;lt;noscript&amp;gt;
&amp;lt;img alt=&quot;what-are-you-using-debuggers-for&quot; src=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/what-are-you-using-debuggers-for.png&quot; /&amp;gt;
&amp;lt;/noscript&amp;gt;&lt;/div&gt;
    &lt;div style=&quot;display: flex; margin-bottom: 10px;&quot;&gt;
        &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/what-are-you-using-debuggers-for.png&quot; target=&quot;_href_&quot; title=&quot;Download chart as PNG&quot;&gt;PNG&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/what-are-you-using-debuggers-for.svg&quot; target=&quot;_href_&quot; title=&quot;Download chart as SVG&quot;&gt;SVG&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/what-are-you-using-debuggers-for-wordcloud.png&quot; target=&quot;_href_&quot; title=&quot;Download open answers as wordcloud PNG&quot;&gt;Wordcloud of open answers&lt;/a&gt;]&lt;/span&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;If we break these results down by expertise, we can learn a bit more about usage
patterns. As users become more experienced with Rust, their use of debuggers for
learning purposes decreases, and they get more stack traces from crashed
processes:&lt;/p&gt;

&lt;div&gt;
    &lt;div class=&quot;pie-chart&quot; id=&quot;what-are-you-using-debuggers-for-per-expertise&quot;&gt;&amp;lt;noscript&amp;gt;
&amp;lt;img alt=&quot;what-are-you-using-debuggers-for-per-expertise&quot; src=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/what-are-you-using-debuggers-for-per-expertise.png&quot; /&amp;gt;
&amp;lt;/noscript&amp;gt;&lt;/div&gt;
    &lt;div style=&quot;display: flex; margin-bottom: 10px;&quot;&gt;
        &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/what-are-you-using-debuggers-for-per-expertise.png&quot; target=&quot;_href_&quot; title=&quot;Download chart as PNG&quot;&gt;PNG&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/what-are-you-using-debuggers-for-per-expertise.svg&quot; target=&quot;_href_&quot; title=&quot;Download chart as SVG&quot;&gt;SVG&lt;/a&gt;]&lt;/span&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The final bit of insight into how Rustaceans use debuggers is if they are
debugging programs that use Rust alongside other programming languages. For 44%
of respondents, the answer is &quot;yes&quot;, which is a pretty high number!&lt;/p&gt;
&lt;p&gt;As for which languages those are, C dominates the scene at a little over 70%,
followed by C++ at about 43% and Python at about 20%:&lt;/p&gt;

&lt;div&gt;
    &lt;div class=&quot;bar-chart&quot; id=&quot;do-you-debug-programs-that-combine-rust-with-any-of-the-following-languages&quot;&gt;&amp;lt;noscript&amp;gt;
&amp;lt;img alt=&quot;do-you-debug-programs-that-combine-rust-with-any-of-the-following-languages&quot; src=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/do-you-debug-programs-that-combine-rust-with-any-of-the-following-languages.png&quot; /&amp;gt;
&amp;lt;/noscript&amp;gt;&lt;/div&gt;
    &lt;div style=&quot;display: flex; margin-bottom: 10px;&quot;&gt;
        &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/do-you-debug-programs-that-combine-rust-with-any-of-the-following-languages.png&quot; target=&quot;_href_&quot; title=&quot;Download chart as PNG&quot;&gt;PNG&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/do-you-debug-programs-that-combine-rust-with-any-of-the-following-languages.svg&quot; target=&quot;_href_&quot; title=&quot;Download chart as SVG&quot;&gt;SVG&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/do-you-debug-programs-that-combine-rust-with-any-of-the-following-languages-wordcloud.png&quot; target=&quot;_href_&quot; title=&quot;Download open answers as wordcloud PNG&quot;&gt;Wordcloud of open answers&lt;/a&gt;]&lt;/span&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/#challenges&quot;&gt;&lt;/a&gt;
Challenges&lt;/h3&gt;
&lt;p&gt;Instead of diving right into asking, &quot;what problems do you face when using
debuggers?&quot;, or something to that effect, we first asked respondents why they
decide against using debuggers whenever they do, including for reasons that
aren't necessarily &quot;problems with debuggers&quot;.&lt;/p&gt;
&lt;p&gt;The most commonly reported reason was that it was easier or faster to use logs
or print debugging to solve problems, reported by a little over 81% of
respondents. This could partially be explained by the open responses, which
featured complaints that debuggers were too difficult to set up and/or use
(especially on Windows, when dealing with Web Assembly, or in embedded
contexts) and sentiment suggesting that small and/or simple problems just don't
really need a debugger. It does leave one wondering if the user experience could
be made convenient enough to dethrone print debugging, but it seems hard to beat
something so intuitive. This is followed by roughly 37% of respondents who write
code that Just Works. Fair enough. After that, about 26% of respondents
indicated that they've decided not to use debuggers in situations where the
language features they were working with had poor support. This is slightly more
than issues with standard library types, at about 22%, which is slightly more
than issues with external library types, at about 20%:&lt;/p&gt;

&lt;div&gt;
    &lt;div class=&quot;bar-chart&quot; id=&quot;when-you-dont-use-a-debugger-why-dont-you&quot;&gt;&amp;lt;noscript&amp;gt;
&amp;lt;img alt=&quot;when-you-dont-use-a-debugger-why-dont-you&quot; src=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/when-you-dont-use-a-debugger-why-dont-you.png&quot; /&amp;gt;
&amp;lt;/noscript&amp;gt;&lt;/div&gt;
    &lt;div style=&quot;display: flex; margin-bottom: 10px;&quot;&gt;
        &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/when-you-dont-use-a-debugger-why-dont-you.png&quot; target=&quot;_href_&quot; title=&quot;Download chart as PNG&quot;&gt;PNG&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/when-you-dont-use-a-debugger-why-dont-you.svg&quot; target=&quot;_href_&quot; title=&quot;Download chart as SVG&quot;&gt;SVG&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/when-you-dont-use-a-debugger-why-dont-you-wordcloud.png&quot; target=&quot;_href_&quot; title=&quot;Download open answers as wordcloud PNG&quot;&gt;Wordcloud of open answers&lt;/a&gt;]&lt;/span&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;As stepping through code was anticipated to be one of the most common uses for
debuggers, we directly asked respondents if they faced any issues when doing so.
A little over 51% of respondents said they did! Of those who reported that they
experienced issues stepping through code, we asked when they were experiencing
issues. Async code was the most common case reported at slightly over 28%,
followed by code involving macros at about 23%. The least common case reported
was code involving function pointers, at almost 6%:&lt;/p&gt;

&lt;div&gt;
    &lt;div class=&quot;bar-chart&quot; id=&quot;when-do-you-experience-issues-with-trying-to-step-through-code-with-your-debugger&quot;&gt;&amp;lt;noscript&amp;gt;
&amp;lt;img alt=&quot;when-do-you-experience-issues-with-trying-to-step-through-code-with-your-debugger&quot; src=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/when-do-you-experience-issues-with-trying-to-step-through-code-with-your-debugger.png&quot; /&amp;gt;
&amp;lt;/noscript&amp;gt;&lt;/div&gt;
    &lt;div style=&quot;display: flex; margin-bottom: 10px;&quot;&gt;
        &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/when-do-you-experience-issues-with-trying-to-step-through-code-with-your-debugger.png&quot; target=&quot;_href_&quot; title=&quot;Download chart as PNG&quot;&gt;PNG&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/when-do-you-experience-issues-with-trying-to-step-through-code-with-your-debugger.svg&quot; target=&quot;_href_&quot; title=&quot;Download chart as SVG&quot;&gt;SVG&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/when-do-you-experience-issues-with-trying-to-step-through-code-with-your-debugger-wordcloud.png&quot; target=&quot;_href_&quot; title=&quot;Download open answers as wordcloud PNG&quot;&gt;Wordcloud of open answers&lt;/a&gt;]&lt;/span&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;We also directly asked respondents which types in the standard library were hard
to work with, if any. This was an open-response question, and reading through
the responses, some particularly common complaints were with &lt;code&gt;enum&lt;/code&gt;s and
collections, particularly &lt;code&gt;std::collections::HashMap&lt;/code&gt; and &lt;code&gt;std::vec::Vec&lt;/code&gt;. This
is also visible in the word cloud in the &lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/surveys/main/surveys/2026/debugging/report/debugging-survey-2026-report.pdf&quot; rel=&quot;external&quot;&gt;full report&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We asked respondents to indicate which pain points, if any, they have
encountered when using debuggers with Rust. At slightly over 74%, poor
representation of values was the most common pain point by a decent margin,
followed by being unable to print variables at just over 55%:&lt;/p&gt;

&lt;div&gt;
    &lt;div class=&quot;bar-chart&quot; id=&quot;which-of-these-pain-points-have-you-experienced-using-a-debugger-with-rust&quot;&gt;&amp;lt;noscript&amp;gt;
&amp;lt;img alt=&quot;which-of-these-pain-points-have-you-experienced-using-a-debugger-with-rust&quot; src=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/which-of-these-pain-points-have-you-experienced-using-a-debugger-with-rust.png&quot; /&amp;gt;
&amp;lt;/noscript&amp;gt;&lt;/div&gt;
    &lt;div style=&quot;display: flex; margin-bottom: 10px;&quot;&gt;
        &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/which-of-these-pain-points-have-you-experienced-using-a-debugger-with-rust.png&quot; target=&quot;_href_&quot; title=&quot;Download chart as PNG&quot;&gt;PNG&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/which-of-these-pain-points-have-you-experienced-using-a-debugger-with-rust.svg&quot; target=&quot;_href_&quot; title=&quot;Download chart as SVG&quot;&gt;SVG&lt;/a&gt;]&lt;/span&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/#debugger-visualizers&quot;&gt;&lt;/a&gt;
Debugger Visualizers&lt;/h3&gt;
&lt;p&gt;We asked respondents to indicate if they were library authors, and if so, if
they were aware of and using the &lt;code&gt;debugger_visualizer&lt;/code&gt; attribute. Nearly 62% of
respondents indicated that they were library authors who were not aware of this
attribute:&lt;/p&gt;

&lt;div&gt;
    &lt;div class=&quot;class&quot; id=&quot;if-you-are-a-library-author-are-you-aware-of-and-using-the-debugger-visualizer-attribute&quot;&gt;&amp;lt;noscript&amp;gt;
&amp;lt;img alt=&quot;if-you-are-a-library-author-are-you-aware-of-and-using-the-debugger-visualizer-attribute&quot; src=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/if-you-are-a-library-author-are-you-aware-of-and-using-the-debugger-visualizer-attribute.png&quot; /&amp;gt;
&amp;lt;/noscript&amp;gt;&lt;/div&gt;
    &lt;div style=&quot;display: flex; margin-bottom: 10px;&quot;&gt;
        &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/if-you-are-a-library-author-are-you-aware-of-and-using-the-debugger-visualizer-attribute.png&quot; target=&quot;_href_&quot; title=&quot;Download chart as PNG&quot;&gt;PNG&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/if-you-are-a-library-author-are-you-aware-of-and-using-the-debugger-visualizer-attribute.svg&quot; target=&quot;_href_&quot; title=&quot;Download chart as SVG&quot;&gt;SVG&lt;/a&gt;]&lt;/span&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;For those who indicated that they were library authors who knew about the
attribute but did not use it, we also asked why. This represented a much smaller
fraction of respondents, so keep that in mind! That said, half of these library
authors indicated that they didn't have the time to maintain visualizer
attributes, and just under half indicated they didn't know how to write
visualizer scripts:&lt;/p&gt;

&lt;div&gt;
    &lt;div class=&quot;bar-chart&quot; id=&quot;why-dont-you-use-the-debugger-visualizer-attribute&quot;&gt;&amp;lt;noscript&amp;gt;
&amp;lt;img alt=&quot;why-dont-you-use-the-debugger-visualizer-attribute&quot; src=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/why-dont-you-use-the-debugger-visualizer-attribute.png&quot; /&amp;gt;
&amp;lt;/noscript&amp;gt;&lt;/div&gt;
    &lt;div style=&quot;display: flex; margin-bottom: 10px;&quot;&gt;
        &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/why-dont-you-use-the-debugger-visualizer-attribute.png&quot; target=&quot;_href_&quot; title=&quot;Download chart as PNG&quot;&gt;PNG&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/why-dont-you-use-the-debugger-visualizer-attribute.svg&quot; target=&quot;_href_&quot; title=&quot;Download chart as SVG&quot;&gt;SVG&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;[&lt;a href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/why-dont-you-use-the-debugger-visualizer-attribute-wordcloud.png&quot; target=&quot;_href_&quot; title=&quot;Download open answers as wordcloud PNG&quot;&gt;Wordcloud of open answers&lt;/a&gt;]&lt;/span&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;For those of you who have been reading this section asking yourself what the
&lt;code&gt;debugger_visualizer&lt;/code&gt; attribute is, you can read up on it in
&lt;a href=&quot;https://doc.rust-lang.org/reference/attributes/debugger.html&quot; rel=&quot;external&quot;&gt;The Rust Reference: Debugger Attributes&lt;/a&gt;. The quick
explanation is that the &lt;code&gt;debugger_visualizer&lt;/code&gt; attribute can be applied to
modules or the crate root to embed files in the debug information which improve
the display of values with certain debuggers. The two currently supported file
types are Natvis files, used by Microsoft debuggers such as WinDbg, and GDB
&quot;pretty printers&quot;, which are structured Python scripts used by GDB.&lt;/p&gt;
&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/09/07/rust-debugging-survey-2026-results/#closing-remarks&quot;&gt;&lt;/a&gt;
Closing Remarks&lt;/h3&gt;
&lt;p&gt;Thanks to your participation in this survey, we've gained some great insights
about how Rustaceans are using debuggers and what issues they are facing. For
example, knowing that such a high number of users are dealing with poor
representation of values pairs well with knowing which standard library types
are causing issues, knowing that many library authors haven't heard of the
&lt;code&gt;debugger_visualizer&lt;/code&gt; attribute, and knowing that many of those who have but
don't use it either don't know how or don't have time to maintain visualizer
scripts.&lt;/p&gt;
&lt;p&gt;Looking to the future, the survey results have suggested that there are a few
notable ways we could most significantly improve the debugging experience in
Rust, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixing the way &lt;code&gt;enum&lt;/code&gt;s are represented by debuggers so they show actual
variants&lt;/li&gt;
&lt;li&gt;Fixing the way collections (such as &lt;code&gt;HashMap&lt;/code&gt;) are represented by debuggers so
they show their contents, rather than their implementation details&lt;/li&gt;
&lt;li&gt;Fixing the way string types (such as &lt;code&gt;String&lt;/code&gt; and &lt;code&gt;CString&lt;/code&gt;) are represented
by debuggers so they render as text, rather than their implementation details&lt;/li&gt;
&lt;li&gt;Improving the &lt;code&gt;async&lt;/code&gt; debugging experience, particularly with stack traces&lt;/li&gt;
&lt;li&gt;Improving stepping through certain state machines (such as iterators and
&lt;code&gt;Future&lt;/code&gt;s)&lt;/li&gt;
&lt;li&gt;Providing documentation on basic set up and use of some common debuggers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A common suggestion that could resolve those first three points is to use the
&lt;code&gt;Debug&lt;/code&gt; implementation of types to display them in debuggers. There are
challenges to that approach, such as the fact that the &lt;code&gt;Debug&lt;/code&gt; implementation is
not present in the final binary unless it is actually used somewhere in the
program, but it isn't impossible. Notably, this is already supported by the
&lt;a href=&quot;https://github.com/godzie44/BugStalker&quot; rel=&quot;external&quot;&gt;&lt;code&gt;BugStalker&lt;/code&gt;&lt;/a&gt; debugger (given the same condition that the &lt;code&gt;Debug&lt;/code&gt;
implementation must actually be used), which some of you first heard about from
the survey! It also appears to have some support for &lt;code&gt;async&lt;/code&gt;, with plans to
expand.&lt;/p&gt;
&lt;p&gt;One notable way the debugger experience is currently being improved is through
the &lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2026/projects/gzkF5BG0&quot; rel=&quot;external&quot;&gt;ongoing Google Summer of Code project&lt;/a&gt; improving how we test debug info and
visualizer scripts, making it easier to maintain and improve our own visualizer
scripts and general compatibility with visualizer scripts without silent
breakage or regressions.&lt;/p&gt;
&lt;p&gt;Once again, we'd like to thank everyone who took the time to participate in the
survey!&lt;/p&gt;</content:encoded>
	<dc:date>2026-09-07T00:00:00+00:00</dc:date>
	<dc:creator>Sam Kellam</dc:creator>
</item>
<item rdf:about="discourse.mozilla.org-topic-149369">
	<title>Firefox Tooling Announcements: Firefox DevTools MCP 0.10.2 released</title>
	<link>https://discourse.mozilla.org/t/firefox-devtools-mcp-0-10-2-released/149369</link>
	<content:encoded>&lt;p&gt;Firefox DevTools MCP (firefox-devtools-mcp) 0.10.2 is out on &lt;a href=&quot;https://www.npmjs.com/package/@mozilla/firefox-devtools-mcp&quot; rel=&quot;noopener nofollow ugc&quot;&gt;npm&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;New tools:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;press_key&lt;/code&gt; — sends a single key, optionally with modifiers, to a snapshot element or the focused element (Return, Escape, Tab, arrows, ctrl+shift+t, …).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;type_text&lt;/code&gt; — types text key by key into the focused element, with an optional key to press afterwards.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;set_network_cache&lt;/code&gt; — bypass or restore the HTTP cache, for the selected tab or browser-wide. Useful before a performance measurement or when verifying a change a cached asset would otherwise hide.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Other changes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;navigate_page&lt;/code&gt; and &lt;code&gt;new_page&lt;/code&gt; take an optional &lt;code&gt;wait&lt;/code&gt; argument (none, interactive, complete), so an agent can wait for the load event before deciding a page is done.&lt;/li&gt;
&lt;li&gt;Windows: per-user Firefox installs are now detected, instead of failing with “unable to find binary in default location”.&lt;/li&gt;
&lt;li&gt;aarch64 Linux: geckodriver is now resolved on all platforms, fixing “Unable to obtain browser driver” when a native geckodriver is on PATH.&lt;/li&gt;
&lt;li&gt;Several Windows path fixes for --output-file, --log-file and saveTo.&lt;/li&gt;
&lt;li&gt;New generated reference page documenting every tool and its parameters: docs/tools.md (&lt;a class=&quot;inline-onebox&quot; href=&quot;https://github.com/mozilla/firefox-devtools-mcp/blob/main/docs/tools.md&quot; rel=&quot;noopener nofollow ugc&quot;&gt;firefox-devtools-mcp/docs/tools.md at main · mozilla/firefox-devtools-mcp · GitHub&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Install:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;claude mcp add firefox-devtools npx &lt;span class=&quot;mention&quot;&gt;@mozilla&lt;/span&gt;/firefox-devtools-mcp@latest&lt;/p&gt;
&lt;p&gt;codex mcp add firefox-devtools – npx &lt;span class=&quot;mention&quot;&gt;@mozilla&lt;/span&gt;/firefox-devtools-mcp@latest&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For internal Firefox development, swap &lt;code&gt;firefox-devtools-mcp&lt;/code&gt; with &lt;code&gt;firefox-devtools-mcp-moz&lt;/code&gt; in order to benefit from additional tools, such as chrome-privileged script execution.&lt;/p&gt;
&lt;p&gt;Special thanks to all the contributors who filed issues and submitted patches for this release: &lt;a href=&quot;https://github.com/freema&quot; rel=&quot;noopener nofollow ugc&quot;&gt;freema&lt;/a&gt;, &lt;a href=&quot;https://matrix.to/#/@f3tch:mozilla.org&quot; rel=&quot;noopener nofollow ugc&quot;&gt;f3tch&lt;/a&gt; (&lt;a href=&quot;https://github.com/f3tchcodes&quot; rel=&quot;noopener nofollow ugc&quot;&gt;github&lt;/a&gt;), &lt;a href=&quot;https://github.com/jasonanovak&quot; rel=&quot;noopener nofollow ugc&quot;&gt;jasonanovak&lt;/a&gt; and &lt;a href=&quot;https://github.com/shoemoney&quot; rel=&quot;noopener nofollow ugc&quot;&gt;shoemoney&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Full changelog: &lt;a href=&quot;https://github.com/mozilla/firefox-devtools-mcp/releases/tag/v0.10.2&quot; rel=&quot;noopener nofollow ugc&quot;&gt;https://github.com/mozilla/firefox-devtools-mcp/releases/tag/v0.10.2&lt;/a&gt;&lt;br /&gt;
Repository and issues: &lt;a class=&quot;inline-onebox&quot; href=&quot;https://github.com/mozilla/firefox-devtools-mcp&quot; rel=&quot;noopener nofollow ugc&quot;&gt;GitHub - mozilla/firefox-devtools-mcp: Model Context Protocol server for Firefox DevTools - enables AI assistants to inspect and control Firefox browser through the Remote Debugging Protocol · GitHub&lt;/a&gt;&lt;br /&gt;
Public chatroom: &lt;a href=&quot;https://chat.mozilla.org/#/room/#firefox-devtools-mcp:mozilla.org&quot; rel=&quot;noopener nofollow ugc&quot;&gt;https://chat.mozilla.org/#/room/#firefox-devtools-mcp:mozilla.org&lt;/a&gt;&lt;/p&gt;
            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;
            &lt;p&gt;&lt;a href=&quot;https://discourse.mozilla.org/t/firefox-devtools-mcp-0-10-2-released/149369&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2026-09-04T13:41:12+00:00</dc:date>
	<dc:creator>jdescottes</dc:creator>
</item>
<item rdf:about="discourse.mozilla.org-topic-149361">
	<title>Firefox Tooling Announcements: PerfCompare just deployed (Sept 3, 2026)</title>
	<link>https://discourse.mozilla.org/t/perfcompare-just-deployed-sept-3-2026/149361</link>
	<content:encoded>&lt;p&gt;The latest version of&lt;a href=&quot;https://perf.compare&quot; rel=&quot;noopener nofollow ugc&quot;&gt; PerfCompare&lt;/a&gt; is now live! This includes the launch of PerfCompare’s Simple View. Read the following blog post, &lt;a href=&quot;https://blog.mozilla.org/performance/2026/09/03/introducing-perfcompares-simple-view/&quot;&gt;Introducing PerfCompare’s Simple View&lt;/a&gt;, to learn more.&lt;/p&gt;
&lt;p&gt;Check out the change-log below to see the updates:&lt;/p&gt;
&lt;p&gt;Highlights:&lt;/p&gt;
&lt;p&gt;[kala-moz]&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://discourse.mozilla.org#p-296400-bug-2059826-simplified-view-create-checkbox-selection-for-advanced-columns-and-display-how-to-read-the-resultshttpsgithubcommozillaperfcomparecommitcc86b883c12e68b3e573774284d498b30a0837c6-1069-1&quot; name=&quot;p-296400-bug-2059826-simplified-view-create-checkbox-selection-for-advanced-columns-and-display-how-to-read-the-resultshttpsgithubcommozillaperfcomparecommitcc86b883c12e68b3e573774284d498b30a0837c6-1069-1&quot;&gt;&lt;/a&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/commit/cc86b883c12e68b3e573774284d498b30a0837c6&quot; rel=&quot;noopener nofollow ugc&quot;&gt;Bug 2059826 - Simplified View: Create checkbox selection for advanced columns and display how to read the results&lt;/a&gt;&lt;/strong&gt; &lt;span class=&quot;hashtag-raw&quot;&gt;#1069&lt;/span&gt;&lt;/h4&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://discourse.mozilla.org#p-296400-bug-2059830-simplified-view-create-checkbox-selection-for-expanded-row-components-httpsgithubcommozillaperfcomparecommit4a27e29ac04fdeaf7e23cc965beda1c851f50b481089httpsgithubcommozillaperfcomparepull1089httpsgithubcommozillaperfcomparecommit4a27e29ac04fdeaf7e23cc965beda1c851f50b48-2&quot; name=&quot;p-296400-bug-2059830-simplified-view-create-checkbox-selection-for-expanded-row-components-httpsgithubcommozillaperfcomparecommit4a27e29ac04fdeaf7e23cc965beda1c851f50b481089httpsgithubcommozillaperfcomparepull1089httpsgithubcommozillaperfcomparecommit4a27e29ac04fdeaf7e23cc965beda1c851f50b48-2&quot;&gt;&lt;/a&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/commit/4a27e29ac04fdeaf7e23cc965beda1c851f50b48&quot; rel=&quot;noopener nofollow ugc&quot;&gt;Bug 2059830 Simplified View: Create checkbox selection for expanded row components (&lt;/a&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/pull/1089&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#1089&lt;/a&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/commit/4a27e29ac04fdeaf7e23cc965beda1c851f50b48&quot; rel=&quot;noopener nofollow ugc&quot;&gt;)&lt;/a&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://discourse.mozilla.org#p-296400-bug-2068296-simplified-view-follow-up-for-expanded-view-httpsgithubcommozillaperfcomparecommit14f94a803c50e27936902ea13179e491ab16b6a71094httpsgithubcommozillaperfcomparepull1094httpsgithubcommozillaperfcomparecommit14f94a803c50e27936902ea13179e491ab16b6a7-3&quot; name=&quot;p-296400-bug-2068296-simplified-view-follow-up-for-expanded-view-httpsgithubcommozillaperfcomparecommit14f94a803c50e27936902ea13179e491ab16b6a71094httpsgithubcommozillaperfcomparepull1094httpsgithubcommozillaperfcomparecommit14f94a803c50e27936902ea13179e491ab16b6a7-3&quot;&gt;&lt;/a&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/commit/14f94a803c50e27936902ea13179e491ab16b6a7&quot; rel=&quot;noopener nofollow ugc&quot;&gt;Bug 2068296 Simplified View Follow up for expanded view (&lt;/a&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/pull/1094&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#1094&lt;/a&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/commit/14f94a803c50e27936902ea13179e491ab16b6a7&quot; rel=&quot;noopener nofollow ugc&quot;&gt;)&lt;/a&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://discourse.mozilla.org#p-296400-bug-2058240-filters-from-cookies-dont-make-it-into-the-url-httpsgithubcommozillaperfcomparecommit220ed6d400c9e8237861f1a510a910421b2a41641076httpsgithubcommozillaperfcomparepull1076httpsgithubcommozillaperfcomparecommit220ed6d400c9e8237861f1a510a910421b2a4164-4&quot; name=&quot;p-296400-bug-2058240-filters-from-cookies-dont-make-it-into-the-url-httpsgithubcommozillaperfcomparecommit220ed6d400c9e8237861f1a510a910421b2a41641076httpsgithubcommozillaperfcomparepull1076httpsgithubcommozillaperfcomparecommit220ed6d400c9e8237861f1a510a910421b2a4164-4&quot;&gt;&lt;/a&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/commit/220ed6d400c9e8237861f1a510a910421b2a4164&quot; rel=&quot;noopener nofollow ugc&quot;&gt;Bug 2058240: Filters from cookies don’t make it into the URL (&lt;/a&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/pull/1076&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#1076&lt;/a&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/commit/220ed6d400c9e8237861f1a510a910421b2a4164&quot; rel=&quot;noopener nofollow ugc&quot;&gt;)&lt;/a&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://discourse.mozilla.org#p-296400-simplified-view-follow-up-reduce-size-of-cols-and-link-subtest-pills-to-subtests-page-httpsgithubcommozillaperfcomparecommit75c8e8375c714e2bc49efb6f70159fb70efb62611083httpsgithubcommozillaperfcomparepull1083httpsgithubcommozillaperfcomparecommit75c8e8375c714e2bc49efb6f70159fb70efb6261-5&quot; name=&quot;p-296400-simplified-view-follow-up-reduce-size-of-cols-and-link-subtest-pills-to-subtests-page-httpsgithubcommozillaperfcomparecommit75c8e8375c714e2bc49efb6f70159fb70efb62611083httpsgithubcommozillaperfcomparepull1083httpsgithubcommozillaperfcomparecommit75c8e8375c714e2bc49efb6f70159fb70efb6261-5&quot;&gt;&lt;/a&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/commit/75c8e8375c714e2bc49efb6f70159fb70efb6261&quot; rel=&quot;noopener nofollow ugc&quot;&gt;Simplified View Follow-up: reduce size of cols and link subtest pills to subtests page (&lt;/a&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/pull/1083&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#1083&lt;/a&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/commit/75c8e8375c714e2bc49efb6f70159fb70efb6261&quot; rel=&quot;noopener nofollow ugc&quot;&gt;)&lt;/a&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other changes:&lt;/p&gt;
&lt;p&gt;[kala-moz]&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://discourse.mozilla.org#p-296400-removed-silverman-and-kde-warnings-httpsgithubcommozillaperfcomparecommite519b8d9cf7878fd1a42149d5cc471a83d24a00e1082httpsgithubcommozillaperfcomparepull1082httpsgithubcommozillaperfcomparecommite519b8d9cf7878fd1a42149d5cc471a83d24a00e-6&quot; name=&quot;p-296400-removed-silverman-and-kde-warnings-httpsgithubcommozillaperfcomparecommite519b8d9cf7878fd1a42149d5cc471a83d24a00e1082httpsgithubcommozillaperfcomparepull1082httpsgithubcommozillaperfcomparecommite519b8d9cf7878fd1a42149d5cc471a83d24a00e-6&quot;&gt;&lt;/a&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/commit/e519b8d9cf7878fd1a42149d5cc471a83d24a00e&quot; rel=&quot;noopener nofollow ugc&quot;&gt;Removed silverman and kde warnings (&lt;/a&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/pull/1082&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#1082&lt;/a&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/commit/e519b8d9cf7878fd1a42149d5cc471a83d24a00e&quot; rel=&quot;noopener nofollow ugc&quot;&gt;)&lt;/a&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://discourse.mozilla.org#p-296400-bug-2059493-clean-up-components-in-perfcompare-frontend-using-the-unecessary-silverman_kde-data-httpsgithubcommozillaperfcomparecommitf50b4a4e37650bb007c407dd9134e49a180882b31079httpsgithubcommozillaperfcomparepull1079httpsgithubcommozillaperfcomparecommitf50b4a4e37650bb007c407dd9134e49a180882b3-7&quot; name=&quot;p-296400-bug-2059493-clean-up-components-in-perfcompare-frontend-using-the-unecessary-silverman_kde-data-httpsgithubcommozillaperfcomparecommitf50b4a4e37650bb007c407dd9134e49a180882b31079httpsgithubcommozillaperfcomparepull1079httpsgithubcommozillaperfcomparecommitf50b4a4e37650bb007c407dd9134e49a180882b3-7&quot;&gt;&lt;/a&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/commit/f50b4a4e37650bb007c407dd9134e49a180882b3&quot; rel=&quot;noopener nofollow ugc&quot;&gt;Bug 2059493: Clean up components in perfcompare frontend using the unecessary silverman_kde data (&lt;/a&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/pull/1079&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#1079&lt;/a&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/commit/f50b4a4e37650bb007c407dd9134e49a180882b3&quot; rel=&quot;noopener nofollow ugc&quot;&gt;)&lt;/a&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://discourse.mozilla.org#p-296400-fix-for-bug-2060613-perfcompare-statistical-analysis-has-some-nan-values-in-explanations-httpsgithubcommozillaperfcomparecommit9806c7be506c10328f9d8d321341967c5d6a356b1077httpsgithubcommozillaperfcomparepull1077httpsgithubcommozillaperfcomparecommit9806c7be506c10328f9d8d321341967c5d6a356b-8&quot; name=&quot;p-296400-fix-for-bug-2060613-perfcompare-statistical-analysis-has-some-nan-values-in-explanations-httpsgithubcommozillaperfcomparecommit9806c7be506c10328f9d8d321341967c5d6a356b1077httpsgithubcommozillaperfcomparepull1077httpsgithubcommozillaperfcomparecommit9806c7be506c10328f9d8d321341967c5d6a356b-8&quot;&gt;&lt;/a&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/commit/9806c7be506c10328f9d8d321341967c5d6a356b&quot; rel=&quot;noopener nofollow ugc&quot;&gt;Fix for Bug 2060613: PerfCompare statistical analysis has some NaN values in explanations (&lt;/a&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/pull/1077&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#1077&lt;/a&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/commit/9806c7be506c10328f9d8d321341967c5d6a356b&quot; rel=&quot;noopener nofollow ugc&quot;&gt;)&lt;/a&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[gopar]&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/commit/375cd0f03b01b7be1452e5326ba8a0ed541c54f8&quot; rel=&quot;noopener nofollow ugc&quot;&gt;[&lt;/a&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2021092&quot;&gt;bug-2021092&lt;/a&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/commit/375cd0f03b01b7be1452e5326ba8a0ed541c54f8&quot; rel=&quot;noopener nofollow ugc&quot;&gt;] Update light/dark toggle wording to be less ambiguous (&lt;/a&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/pull/1073&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#1073&lt;/a&gt;&lt;a href=&quot;https://github.com/mozilla/perfcompare/commit/375cd0f03b01b7be1452e5326ba8a0ed541c54f8&quot; rel=&quot;noopener nofollow ugc&quot;&gt;)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Thank you for the contributions!&lt;/p&gt;
&lt;p&gt;Bugs or feature requests can be&lt;a href=&quot;https://bugzilla.mozilla.org/enter_bug.cgi?product=Testing&amp;amp;component=PerfCompare&amp;amp;status_whiteboard=%5Bpcf%5D&quot;&gt; filed on Bugzilla&lt;/a&gt;. The team can also be found on&lt;a href=&quot;https://matrix.to/#/#perfcompare:mozilla.org&quot; rel=&quot;noopener nofollow ugc&quot;&gt; the #perfcompare channel on &lt;/a&gt;Matrix. Come and chat!&lt;/p&gt;
            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;
            &lt;p&gt;&lt;a href=&quot;https://discourse.mozilla.org/t/perfcompare-just-deployed-sept-3-2026/149361&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2026-09-03T18:34:29+00:00</dc:date>
	<dc:creator>csevere</dc:creator>
</item>
<item rdf:about="https://blog.mozilla.org/performance/?p=580">
	<title>Mozilla Performance Blog: Introducing PerfCompare’s Simple View</title>
	<link>https://blog.mozilla.org/performance/2026/09/03/introducing-perfcompares-simple-view/</link>
	<content:encoded>&lt;p&gt;We heard you. You don’t want to open your PerfCompare performance comparison and feel like you need a background in statistics to interpret the Mann-Whitney-U results. Cliff’s Delta, CLES, and normality tests, oh my! It should not feel like you’ve blindly walked into a college stats exam, unless of course, you love statistics. For the rest, all you want is an easy answer to the question: Did my changes make things faster or slower?&lt;/p&gt;
&lt;p&gt;So we fixed that. PerfCompare now shows the bare essentials by default and tucks the heavy statistics one click away.&lt;/p&gt;
&lt;h3&gt;An approachable default for beginners and occasional users&lt;/h3&gt;
&lt;p&gt;The results table now leads with the platform, the Base and New values, how far the median moved and its direction, the status (which includes the option to filter out noise) and the size of the change. To create a more advanced view, a single “Advanced options” dropdown allows you to add the expert columns (Cliff’s Delta, CLES, Significance) and the info-rich expanded row details below the full-width graph. A small help section at the top of the results provides a quick explanation of the columns. The purpose is to serve a diverse audience while preserving your selections in the URL so a shared link reproduces your view.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;PerfCompare Results Table&quot; class=&quot;aligncenter wp-image-581 size-extra-large&quot; height=&quot;532&quot; src=&quot;http://blog.mozilla.org/performance/files/2026/09/simpleview-1000x532.png&quot; width=&quot;1000&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The “Advanced options” dropdown lets you add the precise statistics columns:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Cliff’s Delta&lt;/b&gt;: An effect-size measure of how far the Base and New distributions have pulled apart&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CLES (Common Language Effect Size):&lt;/b&gt; The chance a random New run beats a random Base run, e.g. “New wins 78% of the time”&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Significance&lt;/b&gt;:  Whether the difference is a real signal or just noise&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each one toggles on independently, so you can surface only Significance or the whole trio.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;PerfCompare Results Table&quot; class=&quot;aligncenter wp-image-583 size-extra-large&quot; height=&quot;613&quot; src=&quot;http://blog.mozilla.org/performance/files/2026/09/Screenshot-2026-09-03-at-11.26.06-1000x613.png&quot; width=&quot;1000&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Expand a result and you get a clean panel: a full-width graph of how your Base and New runs are spread out, a quick summary (platform, app, which direction is “better”), and a little “how to read this graph” tool-tip for anyone who hasn’t stared at a distribution curve before. You can still poke at the graph’s mode controls if you want to dig in.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;PerfCompare Expanded Row&quot; class=&quot;aligncenter wp-image-584 size-extra-large&quot; height=&quot;657&quot; src=&quot;http://blog.mozilla.org/performance/files/2026/09/Screenshot-2026-09-02-at-15.19.48-1000x657.png&quot; width=&quot;1000&quot; /&gt;&lt;/p&gt;
&lt;p&gt;You can access the extra expanded row details such as effect size and confidence intervals or the full stats table in the “Advanced options” dropdown. Turn on what you need, and the expanded extras lay out in neat two-column rows. If you turn on mode analysis and there aren’t multiple modes to show, we now say “No mode analysis available” instead of a blank space.&lt;/p&gt;
&lt;p&gt;Lastly, the advanced columns and expanded-row details you’ve switched on, along with your filters and sorting, are all encoded in the URL. Paste it to a coworker and they’ll land on the same result you were looking at; for filters and sorting, the shared link takes precedence over whatever they had saved locally. (One exception: the “How to read the results” panel is a personal per-browser preference, so it stays with you rather than tagging along on the link.)&lt;/p&gt;
&lt;h3&gt;What’s next&lt;/h3&gt;
&lt;p&gt;Several follow-ups on the way:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Remembering your advanced choices. &lt;/b&gt;Right now the advanced columns and expanded-row toggles start from the clean defaults each visit (they only persist in a link). Soon PerfCompare will remember them in your browser the same way we do for filters. However, if you open a shared link from a colleague, their specific view takes priority, overriding your own local settings so you both see the exact same data.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Carrying your selections into subtests. &lt;/b&gt;Today, the Advanced options you pick on the main results page don’t follow you when you open a test’s subtests. We’re wiring it up so whatever you’ve enabled up top is automatically enabled in the subtests dropdown too, for one consistent view.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Expanding the “How to read the results” cheat sheet &lt;/b&gt;to include Cliff’s Delta, CLES, and Significance definitions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Share your feedback&lt;/h3&gt;
&lt;p&gt;We want PerfCompare to work for all users, whether you’re chasing your first regression, or you’re an expert who doesn’t want to lose their favorite metrics to a cleaner view. Our answer is separating the simple view from the power user view, and making the toggle obvious and shareable.&lt;/p&gt;
&lt;p&gt;The great news is it’s live now! Go expand a Mann-Whitney-U result, click around the Advanced options, and tell us what you think. Please share your feedback, suggestions, or comments on &lt;a href=&quot;https://matrix.to/#/#perfcompare:mozilla.org&quot;&gt;the #perfcompare channel on Matrix&lt;/a&gt;. If you’ve encountered a bug or have a feature request, please file them &lt;a href=&quot;https://bugzilla.mozilla.org/enter_bug.cgi?product=Testing&amp;amp;component=PerfCompare&amp;amp;status_whiteboard=%5Bpcf%5D&quot;&gt;in Bugzilla&lt;/a&gt;. We’re listening.&lt;/p&gt;</content:encoded>
	<dc:date>2026-09-03T18:29:50+00:00</dc:date>
	<dc:creator>Kala Severe</dc:creator>
</item>
<item rdf:about="discourse.mozilla.org-topic-149360">
	<title>Firefox Tooling Announcements: Firefox Profiler Deployment (September 3, 2026)</title>
	<link>https://discourse.mozilla.org/t/firefox-profiler-deployment-september-3-2026/149360</link>
	<content:encoded>&lt;p&gt;The latest version of the &lt;a href=&quot;https://profiler.firefox.com/&quot; rel=&quot;noopener nofollow ugc&quot;&gt;Firefox Profiler&lt;/a&gt; is now live! Check out the full changelog below to see what’s changed:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Highlights:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[Andrew Creskey] Show which network requests were prefetched (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6259&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6259&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[Florian Quèze] profiler-cli: accept --limit 0 as unlimited, and make truncation loud (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6267&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6267&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Other Changes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[Nazım Can Altınova] Update oxfmt 0.59.0 → 0.63.0 (major) (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6262&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6262&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[Florian Quèze] profiler-cli: document the marker field:value search syntax (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6265&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6265&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[Florian Quèze] profiler-cli: report one time base for text and JSON output (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6266&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6266&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[Florian Quèze] profiler-cli: avoid a stack overflow on large marker threads (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6264&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6264&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[Markus Stange] Give the frameTable a lib column (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6258&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6258&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[Florian Quèze] profiler-cli: report the network request count the filters ran against (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6274&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6274&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[Nazım Can Altınova] Fix dark mode contrast of the warning icons in the publish panel (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6280&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6280&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[Nazım Can Altınova] Extract the publish panel warning indicator into a small component (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6282&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6282&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[Markus Stange] More typed arrays in the FrameTable (and a flags column) (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6173&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6173&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[Nazım Can Altınova] Improve the profiler-cli publish script and document the whole deployment in a better way (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6260&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6260&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[fatadel] &lt;img alt=&quot;:clockwise_vertical_arrows:&quot; class=&quot;emoji&quot; height=&quot;20&quot; src=&quot;https://emoji.discourse-cdn.com/twitter/clockwise_vertical_arrows.png?v=15&quot; title=&quot;:clockwise_vertical_arrows:&quot; width=&quot;20&quot; /&gt; Sync: l10n → main (September 3, 2026) (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6301&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6301&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[fatadel] Bump profiler-cli version to 0.9.0 (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6302&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6302&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Big thanks to our amazing localizers for making this release possible:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;es-CL: ravmn&lt;/li&gt;
&lt;li&gt;nl: Mark Heijl&lt;/li&gt;
&lt;li&gt;sv-SE: Andreas Pettersson&lt;/li&gt;
&lt;li&gt;sv-SE: Luna Jernberg&lt;/li&gt;
&lt;li&gt;sv-SE: Peter Kihlstedt&lt;/li&gt;
&lt;li&gt;tr: Selim Şumlu&lt;/li&gt;
&lt;li&gt;tr: giray&lt;/li&gt;
&lt;li&gt;zh-CN: 高乐喆&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Find out more about the Firefox Profiler on &lt;a href=&quot;https://profiler.firefox.com&quot; rel=&quot;noopener nofollow ugc&quot;&gt;profiler.firefox.com&lt;/a&gt;! If you have any questions, join the discussion on our &lt;a href=&quot;https://chat.mozilla.org/#/room/#profiler:mozilla.org&quot; rel=&quot;noopener nofollow ugc&quot;&gt;Matrix channel&lt;/a&gt;!&lt;/p&gt;
            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;
            &lt;p&gt;&lt;a href=&quot;https://discourse.mozilla.org/t/firefox-profiler-deployment-september-3-2026/149360&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2026-09-03T15:36:56+00:00</dc:date>
	<dc:creator>canova</dc:creator>
</item>
<item rdf:about="https://blog.rust-lang.org/2026/09/03/Rust-1.98.1/">
	<title>The Rust Programming Language Blog: Announcing Rust 1.98.1</title>
	<link>https://blog.rust-lang.org/2026/09/03/Rust-1.98.1/</link>
	<content:encoded>&lt;p&gt;The Rust team has published a new point release of Rust, 1.98.1. Rust is a programming language that is empowering everyone to build reliable and efficient software.&lt;/p&gt;
&lt;p&gt;If you have a previous version of Rust installed via rustup, getting Rust 1.98.1 is as easy as:&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;rustup update stable&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you don't have it already, you can &lt;a href=&quot;https://www.rust-lang.org/install.html&quot; rel=&quot;external&quot;&gt;get &lt;code&gt;rustup&lt;/code&gt;&lt;/a&gt; from the appropriate page on our website.&lt;/p&gt;
&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/09/03/Rust-1.98.1/#what-s-in-1-98-1&quot;&gt;&lt;/a&gt;
What's in 1.98.1&lt;/h3&gt;
&lt;p&gt;Rust 1.98.1 fixes a &lt;a href=&quot;https://github.com/rust-lang/rust/issues/161441&quot; rel=&quot;external&quot;&gt;miscompilation in vtable generation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In Rust 1.98.0, in some circumstances, rustc would incorrectly generate a trait object vtable with a null pointer
where a function pointer should be. This leads to undefined behavior in the
emitted code. In some cases this may 'just' cause segfaults due to the null
pointer being loaded, but it is possible for it to be justification for
arbitrary effects (as is typical for UB).&lt;/p&gt;
&lt;p&gt;If you'd like to help us out by testing future releases, you might consider
using the beta (&lt;code&gt;rustup default beta&lt;/code&gt;) and nightly (&lt;code&gt;rustup default nightly&lt;/code&gt;) channels locally and in your CI. Please
&lt;a href=&quot;https://github.com/rust-lang/rust/issues/new/choose&quot; rel=&quot;external&quot;&gt;report&lt;/a&gt; any bugs you
might come across!&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/09/03/Rust-1.98.1/#contributors-to-1-98-1&quot;&gt;&lt;/a&gt;
Contributors to 1.98.1&lt;/h4&gt;
&lt;p&gt;Many people came together to create Rust 1.98.1. We couldn't have done it without all of you. &lt;a href=&quot;https://thanks.rust-lang.org/rust/1.98.1/&quot; rel=&quot;external&quot;&gt;Thanks!&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2026-09-03T00:00:00+00:00</dc:date>
	<dc:creator>The Rust Release Team</dc:creator>
</item>
<item rdf:about="https://blog.thunderbird.net/?p=4540">
	<title>Thunderbird Blog: Thunderbird Desktop New Protocol Support: Microsoft Graph API</title>
	<link>https://blog.thunderbird.net/2026/09/thunderbird-desktop-new-protocol-support-microsoft-graph-api/</link>
	<content:encoded>&lt;p&gt;As many of you know, Microsoft will be disabling Exchange Web Services (EWS) support on its Microsoft 365 platform later this year. The Thunderbird Desktop team has been hard at work to ensure continuity of functionality through this transition, and today we are pleased to announce the release of native Thunderbird support for the Microsoft Graph API! Curious what this means for you? Then keep reading to find out!&lt;/p&gt;



&lt;h3&gt;IMAP and EWS and Graph, Oh My!&lt;/h3&gt;



&lt;p&gt;When connecting to either on-premises or hosted Microsoft accounts, Thunderbird users now have an array of options. Users might not know which option is best for their case, so we’ll start with a little bit of guidance to help users decide what will be best for them. First off, if you are currently using IMAP with an on-premises Exchange account or a Microsoft 365 hosted account, and it’s currently working for you, then there’s nothing you need to do! EWS and Graph support are for users whose organizations do not allow IMAP access.&lt;/p&gt;



&lt;p&gt;Now for the more complicated part. Last year, we released &lt;a href=&quot;https://blog.thunderbird.net/2025/11/thunderbird-adds-native-microsoft-exchange-email-support/&quot;&gt;EWS email support&lt;/a&gt; for both on-premises Exchange accounts and Microsoft 365 hosted accounts. If you are using the EWS protocol with an on-premises Exchange account, then you don’t need to do anything.&lt;/p&gt;



&lt;p&gt;However, if your organization uses Microsoft 365 for email, and you’re currently using EWS to connect to that account, then you need to take action before October of this year. Earlier this year, Microsoft &lt;a href=&quot;https://techcommunity.microsoft.com/blog/exchange/exchange-online-ews-your-time-is-almost-up/4492361&quot;&gt;announced&lt;/a&gt; that they would begin a phased shutdown of EWS on Microsoft 365/Exchange Online starting in October of 2026 with the goal of a complete shutdown in 2027. If you are currently using Thunderbird’s EWS support to connect to a Microsoft 365/Exchange Online email account, then you will need to switch to the Microsoft Graph API support to keep using Thunderbird beyond these dates. See below for details.&lt;/p&gt;



&lt;p&gt;So the TL;DR is:&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;IMAP for on-premises or Microsoft 365 hosted email =&amp;gt; No action required.&lt;/li&gt;



&lt;li&gt;EWS for on-premises Exchange =&amp;gt; No action required.&lt;/li&gt;



&lt;li&gt;EWS for Microsoft 365/Exchange Online =&amp;gt; Set up a new Microsoft Graph account in Thunderbird.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Microsoft only supports the Graph protocol on Microsoft 365, so that is the only provider that offers it. On-premises Exchange servers do not implement the Graph API, so Thunderbird’s EWS support will continue to be the primary mechanism for users on these servers to connect to their email accounts.&lt;/p&gt;



&lt;h3&gt;Microsoft Graph Account Set Up&lt;/h3&gt;



&lt;p&gt;Thunderbird does not support migrating accounts to different protocols. Instead, you will need to set up a new account. If you have an existing EWS-connected Microsoft 365 account, first you’ll need to delete that account in Thunderbird. You can do this from the account settings. Deleting the account locally in Thunderbird will not affect any data stored on Microsoft 365, so your data is safe.&lt;/p&gt;



&lt;p&gt;Once your previous EWS account has been deleted, you can use Account Hub to set up a new account. In the new account set up dialog, enter your Microsoft 365 hosted email account. Thunderbird should automatically detect that your email is hosted on Microsoft 365 and will give you a few options for getting connected. Choose the Microsoft Graph option, and you should be good to go! If for some reason automatic configuration doesn’t work, you can still configure your account manually using &lt;a href=&quot;https://wiki.mozilla.org/Thunderbird:Microsoft_Graph_API#Manual&quot;&gt;these instructions&lt;/a&gt;.&lt;/p&gt;



&lt;h3&gt;What is currently supported?&lt;/h3&gt;



&lt;p&gt;As with EWS, Thunderbird’s current Graph support extends only to email. Thunderbird does not yet support Calendar and Address Book functionality with either EWS or Graph.&lt;/p&gt;



&lt;h3&gt;What’s in ESR?&lt;/h3&gt;



&lt;p&gt;Thunderbird’s current Extended Support Release, version 153, supports the EWS protocol, but does not support the Microsoft Graph API, which was first enabled in the Thunderbird Release channel in version 154. Users on the ESR channel who are using Microsoft 365 will need to migrate to the Release channel in order to use the Microsoft Graph API support to continue accessing Microsoft 365 hosted mailboxes.&lt;/p&gt;



&lt;h3&gt;What’s Next?&lt;/h3&gt;



&lt;p&gt;Calendar and Address Book! The Thunderbird Desktop team has already started working on support for connecting to Microsoft 365-hosted calendars using the Graph protocol. We will be busily working on this throughout the rest of the year. As with our previous work on Thunderbird support for EWS, this is the first new calendar protocol to be added to Thunderbird in many years. We are currently doing some up-front design work to ensure a sustainable product going forward and hopefully make the next calendar protocol easier to add.&lt;/p&gt;



&lt;h3&gt;How can users give us feedback?&lt;/h3&gt;



&lt;p&gt;As with all new functionality, there may be features we are missing or unexpected issues. As always, Bugzilla is always open! You can send us feature requests and issue reports using &lt;a href=&quot;https://bugzilla.mozilla.org/enter_bug.cgi?product=MailNews+Core&amp;amp;component=Networking%3A+Exchange&quot;&gt;this Bugzilla link&lt;/a&gt;. Thunderbird’s greatest strength is its community of users, developers, and supporters who help us deliver the best tools we can to connect people with one another. We welcome community involvement to help us make everything better!&lt;/p&gt;



&lt;h3&gt;Nitty-Gritty development details&lt;/h3&gt;



&lt;p&gt;Those of you who have followed along with development throughout EWS and into Graph support might have noticed that, compared to EWS, we were able to implement support for the Microsoft Graph API relatively quickly. This is largely due to the up-front thought and work that went into the design and development of Thunderbird’s EWS support. The Graph implementation was the team’s first test of the extensibility of the new architecture, and we were very pleased with the results. It took 11 months to enable basic synchronization with EWS. With the new architecture, we were able to cut that time down to 4 months with Graph.&lt;/p&gt;



&lt;p&gt;Graph’s operations are similar to the operations that EWS provides, but different enough that it served as a great first test case for how the new email client architecture can support future protocols, such as JMAP. Given the results of the Graph implementation, we are optimistic that the same architecture will extend to JMAP once the team decides to move forward to that new protocol. We are hopeful that what we have built here can provide a sustainable base on which to build future protocol support in Thunderbird.&lt;/p&gt;



&lt;p&gt;This would not have been possible without many contributions from Thunderbird developers, past and present, and the community of users who have helped us improve Thunderbird by submitting issue reports and feature requests. We are grateful to everyone for their support!&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://blog.thunderbird.net/2026/09/thunderbird-desktop-new-protocol-support-microsoft-graph-api/&quot;&gt;Thunderbird Desktop New Protocol Support: Microsoft Graph API&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.thunderbird.net&quot;&gt;The Thunderbird Blog&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2026-09-02T19:58:47+00:00</dc:date>
	<dc:creator>Eleanor Dicharry</dc:creator>
</item>
<item rdf:about="https://blog.mozilla.org/?p=86867">
	<title>The Mozilla Blog: AI on your terms: Firefox meets you where you are</title>
	<link>https://blog.mozilla.org/en/firefox/firefox-ai-on-your-terms/</link>
	<content:encoded>&lt;p&gt;People feel differently about AI, and here at Firefox, we think that is completely reasonable. Something else that is completely reasonable: deciding for yourself how and when you engage with AI features.&lt;br /&gt;&lt;br /&gt;For some of you, AI is part of your everyday life, whether you are using it to summarize a large amount of information, brainstorm ideas for work, or research trips and personal purchases. Some of you interact with AI as little as possible, and prefer to keep it that way. And a lot of you are somewhere in between: curious, but exploring on your own terms and at your own pace.&lt;br /&gt;&lt;br /&gt;Your personal use of AI is just that, personal. Firefox offers various levels of AI integration into your browser, and the choice between them is entirely yours. &lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;Block new and current AI features in a single switch&lt;/strong&gt; &lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-86868&quot; height=&quot;576&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2026/08/Block-AI-enhancements-1024x576.jpg&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;



&lt;p&gt;Opting out of upcoming and current AI features on your browser should not require endless navigation through multiple Settings pages. That’s why Firefox offers an &lt;a href=&quot;https://blog.mozilla.org/en/firefox/ai-controls/&quot;&gt;AI controls&lt;/a&gt; section within its General Settings panel. A single, easily located place where you can block current and future AI features and related pop-ups with the swipe of a toggle.&lt;br /&gt;&lt;br /&gt;Not only do we want people to have the choice to remove certain AI features from their Firefox browsing experience, we make sure doing so is as easy and accessible as possible. &lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;Choose the features that work for you&lt;/strong&gt; &lt;/h3&gt;



&lt;p&gt;For the many people who sit in the middle of the AI usage spectrum, we made sure you can opt in and out of specific features in line with your preferences. Capabilities like AI translations, image alt text in Firefox PDF viewer, tab group suggestions, and key points in link previews can all be individually switched on and off, ensuring you can enjoy such offerings on a case by case basis as it suits your needs. &lt;br /&gt;&lt;br /&gt;In addition, if there is an &lt;a href=&quot;https://support.mozilla.org/en-US/kb/ai-chatbot&quot;&gt;AI chatbot&lt;/a&gt; provider you already trust or pay for, you can use it directly inside Firefox’s built-in desktop sidebar. This means you can use your chatbot of choice and browse side by side without ping-ponging between tabs.&lt;br /&gt;&lt;br /&gt;While some browsers integrate a singular AI model or chatbot into their system, this can restrict flexibility and concentrate data sharing. Firefox prioritizes transparency and user control by letting you select from multiple providers, allowing you to review each option’s policies before you engage with them.&lt;br /&gt;&lt;br /&gt;You can turn on AI chatbot providers in the AI controls section of browser settings and select one of the following: Anthropic Claude, ChatGPT, Google Gemini, and Le Chat Mistral. Once this feature is turned on, you can switch between chatbots within the sidebar itself based on your preferences and task at hand. &lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;Smart Window, for when you want help finishing what you started&lt;/strong&gt;&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-86879&quot; height=&quot;576&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2026/08/Firefox_SmartWindow_Distilled_Header_03-1024x576.png&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;



&lt;p&gt;&lt;a href=&quot;https://support.mozilla.org/en-US/kb/smart-window&quot;&gt;&lt;strong&gt;Smart Window&lt;/strong&gt;&lt;/a&gt; is Firefox’s most integrated AI experience, but that doesn’t mean it compromises our commitment to choice, privacy, and transparency. Our newest window type, which we’ve been polishing and testing in beta, uses only the context you share with it to help you move work forward and across the finish line.&lt;br /&gt;&lt;br /&gt;When permitted by you, its built-in, AI-powered assistant can work directly with your open tabs and browsing history to connect the dots. This means comparing information, generating recommendations, summarizing pages, and planning projects without having to feed every crumb of context from your previous and current browsing activity each time you enter a new prompt.&lt;br /&gt;&lt;br /&gt;As we’ve built out Smart Window, we’ve added a few &lt;a href=&quot;https://blog.mozilla.org/en/firefox/firefox-smart-window/&quot;&gt;additional features&lt;/a&gt; to align its design with how people actually browse. These include the ability to group related tabs together – so you can make sense of what’s open without spending time organizing everything yourself – and visual history previews that help you spot a page you visited earlier when you can’t remember the exact URL or phrase searched. In addition, a new partnership with &lt;a href=&quot;https://blog.mozilla.org/en/firefox/firefox-exa-partnership/&quot;&gt;Exa&lt;/a&gt; enables Smart Window to not only locate current web information to include in responses, but also display the sources behind these responses so you can verify what you’re seeing, without breaking your flow.&lt;br /&gt;&lt;br /&gt;We understand people use different Firefox windows for different reasons, and often switch between options based on the task at hand. Smart Window is the window you reach for when your browsing turns into a project. When your quick search becomes inspo for the girls’ trip you’ve been meaning to plan, or finding the perfect gift for your partner becomes a dozen tabs comparing prices and reviews, turn the window you’re already using into a Smart Window. Your tabs and progress stay in place while Smart Window helps organize the task and move it forward. Use it for one complex project, use it all the time, or switch it back when you’re done. &lt;s&gt;&lt;br /&gt;&lt;/s&gt;&lt;br /&gt;Smart Window remains in beta as we continue to learn and improve from our community’s feedback. At present, it’s available in English to people in the U.S. and Canada.&lt;br /&gt;&lt;br /&gt;To try Smart Window, visit: &lt;a href=&quot;https://www.firefox.com/smart-window&quot;&gt;https://www.firefox.com/smart-window&lt;/a&gt;&lt;/p&gt;



&lt;h3&gt;Always your call &lt;/h3&gt;



&lt;p&gt;Your opinions and preferences on AI usage are individual to you.&lt;br /&gt;&lt;br /&gt;We don’t think there is one right answer for how and when to engage with AI, and we’re not going to pretend there is one. What we can do is make sure that whatever level of engagement is right for you, Firefox supports it well. Because the only person telling you how much AI you need should be you.&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/firefox/firefox-ai-on-your-terms/&quot;&gt;AI on your terms: Firefox meets you where you are&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/en/&quot;&gt;The Mozilla Blog&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2026-09-02T13:00:00+00:00</dc:date>
	<dc:creator>Mozilla</dc:creator>
</item>
<item rdf:about="tag:this-week-in-rust.org,2026-09-02:/blog/2026/09/02/this-week-in-rust-667/">
	<title>This Week In Rust: This Week in Rust 667</title>
	<link>https://this-week-in-rust.org/blog/2026/09/02/this-week-in-rust-667/</link>
	<content:encoded>&lt;p&gt;Hello and welcome to another issue of &lt;em&gt;This Week in Rust&lt;/em&gt;!
&lt;a href=&quot;https://www.rust-lang.org/&quot;&gt;Rust&lt;/a&gt; is a programming language empowering everyone to build reliable and efficient software.
This is a weekly summary of its progress and community.
Want something mentioned? Tag us at
&lt;a href=&quot;https://bsky.app/profile/thisweekinrust.bsky.social&quot;&gt;@thisweekinrust.bsky.social&lt;/a&gt; on Bluesky or
&lt;a href=&quot;https://mastodon.social/@thisweekinrust&quot;&gt;@ThisWeekinRust&lt;/a&gt; on mastodon.social, or
&lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;send us a pull request&lt;/a&gt;.
Want to get involved? &lt;a href=&quot;https://github.com/rust-lang/rust/blob/main/CONTRIBUTING.md&quot;&gt;We love contributions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This Week in Rust&lt;/em&gt; is openly developed &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;on GitHub&lt;/a&gt; and archives can be viewed at &lt;a href=&quot;https://this-week-in-rust.org/&quot;&gt;this-week-in-rust.org&lt;/a&gt;.
If you find any errors in this week's issue, &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust/pulls&quot;&gt;please submit a PR&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Want TWIR in your inbox? &lt;a href=&quot;https://this-week-in-rust.us11.list-manage.com/subscribe?u=fd84c1c757e02889a9b08d289&amp;amp;id=0ed8b72485&quot;&gt;Subscribe here&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#updates-from-rust-community&quot;&gt;Updates from Rust Community&lt;/a&gt;&lt;/h4&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#official&quot;&gt;Official&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.rust-lang.org/2026/09/01/Rustup-1.29.1/&quot;&gt;Announcing rustup 1.29.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.rust-lang.org/inside-rust/2026/08/28/electing-new-project-directors-2026/&quot;&gt;Electing new Project Directors 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.rust-lang.org/inside-rust/2026/08/31/program-management-2026-jul-aug/&quot;&gt;Program management in July–August 2026&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#foundation&quot;&gt;Foundation&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://rustfoundation.org/media/how-the-rust-standard-library-verification-contest-scaled-past-manual-proof-engineering/&quot;&gt;How the Rust Standard Library Verification Contest Scaled Past Manual Proof Engineering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rustfoundation.org/media/welcoming-rust-program-manager-tomas-sedovic-to-the-rust-foundation-team/&quot;&gt;Welcoming Rust Program Manager, Tomáš Šedovič, to the Rust Foundation Team!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rustfoundation.org/media/welcoming-jess-izen-as-engineer-in-residence-at-the-rust-foundation/&quot;&gt;Welcoming Jess Izen as Engineer in Residence at the Rust Foundation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#newsletters&quot;&gt;Newsletters&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-79&quot;&gt;The Embedded Rustacean Issue #79&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#projecttooling-updates&quot;&gt;Project/Tooling Updates&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://wasmi-labs.github.io/blog/posts/wasmi-v2.0/&quot;&gt;Wasmi 2.0 - Engineering of the Fastest Wasm Interpreters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://noahlev.org/blog/2026/08/27/making-rustdoc-faster/&quot;&gt;How I made Rustdoc 33% faster in one week&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.scylladb.com/2026/08/31/async-ffi-framework-for-rust-c-interop/&quot;&gt;A Self-Baked Async FFI Framework for Rust C# Interop&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#observationsthoughts&quot;&gt;Observations/Thoughts&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://spirali.github.io/blog/cargo-scheduler/&quot;&gt;Could Cargo's scheduler be better?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.sonair.com/journal/how-we-safety-certified-the-worlds-first-rust-implementation&quot;&gt;How we developed the world's first safety-certified product written in Rust – and why we went bare metal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.cloudflare.com/dns-cache-memory-optimization-1111/&quot;&gt;How we saved 100 terabytes of memory by optimizing 1.1.1.1’s DNS cache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kerkour.com/rust-vs-go-concurrency&quot;&gt;Rust concurrency vs Go concurrency: stackless vs stackfull coroutines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/@carlmkadie/nine-rules-for-compile-time-work-with-rust-const-fn-part-1-a29f7dd62b2f&quot;&gt;Nine Rules for Compile-Time Work with Rust const fn: Parse files, build tables, and catch mistakes … without a build script  (Part 1)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/watch?v=d7jQXm1KcOA&quot;&gt;An Agentic VM in Rust — by Cristian Sánchez&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/watch?v=zQAia_u8WPM&quot;&gt;Making Progress on AsyncIterator — by Jack O'Connor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rust-walkthroughs&quot;&gt;Rust Walkthroughs&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://lwn.net/SubscriberLink/1090378/b33a6fe3f4033507/&quot;&gt;The 'rnull' Rust block driver&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.sheerluck.dev/posts/your-first-gpui-app-building-a-desktop-ui-in-rust/&quot;&gt;Your First GPUI App - Building a Desktop UI in Rust&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bitfieldconsulting.com/posts/welcome-to-machine&quot;&gt;Welcome to the machine: emulating a CPU&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://murlet.com/blog/hunting-rust-memory-leaks/&quot;&gt;Proving my Rust NVR doesn't leak memory (it did)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rust-blog.github.io/post/favi-child-property-tests&quot;&gt;Software That Must Not Be Wrong: Property Tests for a Pediatric Dosing Calculator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hlcfan.github.io/gpui-canvas-shapes.html&quot;&gt;Drawing Shapes with GPUI's Canvas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gmcgoldr.github.io/2026/08/27/pin-in-rust.html&quot;&gt;Pinning Down Rust’s Pin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#research&quot;&gt;Research&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dl.acm.org/doi/10.1145/3830438.3830958&quot;&gt;Functional State Machines in Rust: Typestate and Newtype Patterns&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#miscellaneous&quot;&gt;Miscellaneous&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.jetbrains.com/rust/2026/08/26/ubuntu-rust/&quot;&gt;Ubuntu Rust: How Canonical Is Modernizing Core System Tools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#crate-of-the-week&quot;&gt;Crate of the Week&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;This week's crate is &lt;a href=&quot;https://crates.io/crates/buf_read_splitter&quot;&gt;buf_read_splitter&lt;/a&gt;, a crate to split (separate) a stream into sub-subtreams.&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/t/crate-of-the-week/2704/1659&quot;&gt;flo&lt;/a&gt; for the self-suggestion!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://users.rust-lang.org/t/crate-of-the-week/2704&quot;&gt;Please submit your suggestions and votes for next week&lt;/a&gt;!&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#calls-for-testing&quot;&gt;Calls for Testing&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;An important step for RFC implementation is for people to experiment with the
implementation and give feedback, especially before stabilization.&lt;/p&gt;
&lt;p&gt;If you are a feature implementer and would like your RFC to appear in this list, add a
&lt;code&gt;call-for-testing&lt;/code&gt; label to your RFC along with a comment providing testing instructions and/or
guidance on which aspect(s) of the feature need testing.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;No calls for testing were issued this week by
&lt;a href=&quot;https://github.com/rust-lang/rust/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen&quot;&gt;Rust&lt;/a&gt;,
&lt;a href=&quot;https://github.com/rust-lang/cargo/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen&quot;&gt;Cargo&lt;/a&gt;,
&lt;a href=&quot;https://github.com/rust-lang/rustup/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen&quot;&gt;Rustup&lt;/a&gt; or
&lt;a href=&quot;https://github.com/rust-lang/rfcs/issues?q=label%3Acall-for-testing%20state%3Aopen&quot;&gt;Rust language RFCs&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust/issues&quot;&gt;Let us know&lt;/a&gt; if you would like your feature to be tracked as a part of this list.&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#call-for-participation-projects-and-speakers&quot;&gt;Call for Participation; projects and speakers&lt;/a&gt;&lt;/h4&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#cfp-projects&quot;&gt;CFP - Projects&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Always wanted to contribute to open-source projects but did not know where to start?
Every week we highlight some tasks from the Rust community for you to pick and get started!&lt;/p&gt;
&lt;p&gt;Some of these tasks may also have mentors available, visit the task page for more information.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/webtools-dotcom/Zynlex/issues/13&quot;&gt;Zynlex - Add case-sensitive and whole-word toggles to find-in-page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/d4vid87/hookecho/issues/12&quot;&gt;HookEcho - High-contrast theme: colormaps and stroke widths do not respond to it&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lacs-project/sysknife/issues/234&quot;&gt;sysknife - UfwDeleteRule needs a rule number that no action in the catalogue can produce&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lacs-project/sysknife/issues/250&quot;&gt;sysknife - peer_pidfd cannot tell a pre-6.5 kernel from a peer that already exited, so the PID-reuse check is off in the reuse case&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lacs-project/sysknife/issues/249&quot;&gt;sysknife - The signed trail names which account asked for a change, never which one approved it&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are a Rust project owner and are looking for contributors, please submit tasks &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust?tab=readme-ov-file#call-for-participation-guidelines&quot;&gt;here&lt;/a&gt; or through a &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;PR to TWiR&lt;/a&gt; or by reaching out on &lt;a href=&quot;https://bsky.app/profile/thisweekinrust.bsky.social&quot;&gt;Bluesky&lt;/a&gt; or &lt;a href=&quot;https://mastodon.social/@thisweekinrust&quot;&gt;Mastodon&lt;/a&gt;!&lt;/p&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#cfp-events&quot;&gt;CFP - Events&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Are you a new or experienced speaker looking for a place to share something cool? This section highlights events that are being planned and are accepting submissions to join their event as a speaker.&lt;/p&gt;
&lt;p&gt;If you are an event organizer hoping to expand the reach of your event, please submit a link to the website through a &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;PR to TWiR&lt;/a&gt; or by reaching out on &lt;a href=&quot;https://bsky.app/profile/thisweekinrust.bsky.social&quot;&gt;Bluesky&lt;/a&gt; or &lt;a href=&quot;https://mastodon.social/@thisweekinrust&quot;&gt;Mastodon&lt;/a&gt;!&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#updates-from-the-rust-project&quot;&gt;Updates from the Rust Project&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;522 pull requests were &lt;a href=&quot;https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2026-08-25..2026-09-01&quot;&gt;merged in the last week&lt;/a&gt;&lt;/p&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#compiler&quot;&gt;Compiler&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161888&quot;&gt;compiler: allow safestack to be togglable via &lt;code&gt;#[sanitize(safestack = &quot;...&quot;)]&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160473&quot;&gt;perf: push nominal obligations instead of returning them&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161456&quot;&gt;reduce perf impact of scalar size checks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/162004&quot;&gt;remove unneeded clone in macro deriving&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#library&quot;&gt;Library&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161617&quot;&gt;add custom allocators to &lt;code&gt;(try_)map&lt;/code&gt; on &lt;code&gt;Box&lt;/code&gt;, Rc&lt;code&gt;, Arc&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161081&quot;&gt;add intrinsics for integer minimum and maximum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161034&quot;&gt;add SVE-accelerated &lt;code&gt;Vec::retain_mut&lt;/code&gt; for aarch64&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/150067&quot;&gt;alloc &lt;code&gt;String::retain&lt;/code&gt; optimization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161301&quot;&gt;core: expose volatile atomic operations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161577&quot;&gt;implement &lt;code&gt;[u8]::split_ascii_whitespace&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/150075&quot;&gt;implement &lt;code&gt;clamp_to&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#cargo&quot;&gt;Cargo&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17298&quot;&gt;diag: Stabilize cargo-lints&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17335&quot;&gt;resolver: Stabilize min-publish-age&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17373&quot;&gt;run: Printing a new line to avoid overwriting error code after \r&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17366&quot;&gt;trim-paths: custom workspace-relative member paths remap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17406&quot;&gt;&lt;code&gt;perf(git)&lt;/code&gt;: Reduce extra work when using git-cli&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17411&quot;&gt;cargo profiling improvements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/15056&quot;&gt;manifest!: implement feature-metadata RFC3416&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17412&quot;&gt;perf: do not build SBOM if user has not set build.sbom&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rustdoc&quot;&gt;Rustdoc&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161876&quot;&gt;correctly handle when a macro generates multiple items in &lt;code&gt;--generate-macro-expansion&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161843&quot;&gt;fix lint &lt;code&gt;cargo::non_kebab_case_bins&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161944&quot;&gt;take into account edition information for keyword highlighting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rustfmt&quot;&gt;Rustfmt&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustfmt/pull/7080&quot;&gt;allow users to set the release channel when running the diff check&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#clippy&quot;&gt;Clippy&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17643&quot;&gt;&lt;code&gt;fix(cargo_common_metadata)&lt;/code&gt;: stop checking &lt;code&gt;package.readme&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17495&quot;&gt;&lt;code&gt;fix(redundant_clone)&lt;/code&gt;: Make &lt;code&gt;visit_local_usage&lt;/code&gt; analyse loop bodies instead of giving up on them&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17663&quot;&gt;add comma to &lt;code&gt;lint_groups_priority&lt;/code&gt; error message&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17632&quot;&gt;fix &lt;code&gt;--explain&lt;/code&gt; lint lookup being case-mismatched&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17163&quot;&gt;fix false positive for never type impls&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17611&quot;&gt;&lt;code&gt;missing_transmute_annotations&lt;/code&gt; should not contain fn name in suggestion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17605&quot;&gt;perf: bail early in &lt;code&gt;too_many_lines&lt;/code&gt; lint if rule is not enabled&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17486&quot;&gt;perf: skip redundant clone analysis for clone-free functions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rust-analyzer&quot;&gt;Rust-Analyzer&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23213&quot;&gt;allow “Extract variable” to be invoked on field names in record expressions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23162&quot;&gt;fix HIR lowering of params of trait assoc fns&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23256&quot;&gt;fix incorrect generic shown on hover&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23257&quot;&gt;fix &lt;code&gt;NamedTempFile&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23235&quot;&gt;fix some subtle bugs in docs rendering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23184&quot;&gt;fix unsafeck of &lt;code&gt;&amp;amp;raw *&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23229&quot;&gt;fix panic on accessing numeric fields in unions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23212&quot;&gt;fix panic on deref of unresolved aliases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23238&quot;&gt;fix panic when computing &lt;code&gt;extract_variable&lt;/code&gt; with macros&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23250&quot;&gt;fix panic when hovering a dyn trait with a binder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23245&quot;&gt;print the ABI for fn pointers (if not the default)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23176&quot;&gt;push a generic params scope for consts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23242&quot;&gt;range pattern inside a parenthesis parsed as tuple pattern&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23232&quot;&gt;reinfer never type in array repeat expressions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/22901&quot;&gt;strip leading asterisk decoration from block doc comments&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23206&quot;&gt;switch from &lt;code&gt;temp-dir&lt;/code&gt; to a homemade &lt;code&gt;NamedTempFile&lt;/code&gt; implementation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rust-compiler-performance-triage&quot;&gt;Rust Compiler Performance Triage&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;This week continues a steady stream of compile time improvements. Most of the impact this week comes from type system
micro-optimization in &lt;a href=&quot;https://github.com/rust-lang/rust/pull/160473&quot;&gt;#160473&lt;/a&gt; and &lt;code&gt;dead_code&lt;/code&gt; lint propagation 
fix in &lt;a href=&quot;https://github.com/rust-lang/rust/pull/161571&quot;&gt;#161571&lt;/a&gt;. We've also hit unexpected regression in a standard library 
refactor, but we expect that to be addressed soon.&lt;/p&gt;
&lt;p&gt;Triage done by &lt;strong&gt;@panstromek&lt;/strong&gt;.
Revision range: &lt;a href=&quot;https://perf.rust-lang.org/?start=9a4ad59ae3073b013cd62f53f8349ddc61a012e8&amp;amp;end=5321a4f40c957cf3587c055e77461febc2ebc865&amp;amp;absolute=false&amp;amp;stat=instructions%3Au&quot;&gt;9a4ad59a..5321a4f4&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align: center;&quot;&gt;(instructions:u)&lt;/th&gt;
&lt;th style=&quot;text-align: center;&quot;&gt;mean&lt;/th&gt;
&lt;th style=&quot;text-align: center;&quot;&gt;range&lt;/th&gt;
&lt;th style=&quot;text-align: center;&quot;&gt;count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Regressions ❌ &lt;br /&gt; (primary)&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;0.6%&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;[0.2%, 1.8%]&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Regressions ❌ &lt;br /&gt; (secondary)&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;0.6%&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;[0.2%, 1.8%]&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Improvements ✅ &lt;br /&gt; (primary)&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;-0.7%&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;[-2.4%, -0.1%]&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;135&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Improvements ✅ &lt;br /&gt; (secondary)&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;-0.7%&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;[-2.2%, -0.1%]&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;120&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;All ❌✅ (primary)&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;-0.5%&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;[-2.4%, 1.8%]&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;162&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;5 Regressions, 4 Improvements, 4 Mixed; 9 of them in rollups
39 artifact comparisons made in total&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-lang/rustc-perf/blob/e1439e38ea41334d013d9566c2d20a914e3378c7/triage/2026/2026-08-31.md&quot;&gt;Full report here&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#approved-rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/commits/master&quot;&gt;Approved RFCs&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Changes to Rust follow the Rust &lt;a href=&quot;https://github.com/rust-lang/rfcs#rust-rfcs&quot;&gt;RFC (request for comments) process&lt;/a&gt;. These
are the RFCs that were approved for implementation this week:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3999&quot;&gt;Change &lt;code&gt;i686-pc-windows-msvc&lt;/code&gt; from Tier 1 with host tools =&amp;gt; Tier 1 without host tools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#final-comment-period&quot;&gt;Final Comment Period&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Every week, &lt;a href=&quot;https://www.rust-lang.org/team.html&quot;&gt;the team&lt;/a&gt; announces the 'final comment period' for RFCs and key PRs
which are reaching a decision. Express your opinions now.&lt;/p&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#tracking-issues-prs&quot;&gt;Tracking Issues &amp;amp; PRs&lt;/a&gt;&lt;/h6&gt;
&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rust&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen&quot;&gt;Rust&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161430&quot;&gt;Re-export &lt;code&gt;core::fmt::NumBuffer&lt;/code&gt; in &lt;code&gt;alloc&lt;/code&gt; (and &lt;code&gt;std&lt;/code&gt;)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/158186&quot;&gt;Guarantee 8 bytes of alignment of RawWakerVTable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161520&quot;&gt;Stabilize &lt;code&gt;core::mem::DropGuard&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/issues/161925&quot;&gt;&quot;stabilize never type&quot; T-types FCP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rust-rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/issues?q=state%3Aopen%20label%3Afinal-comment-period%20state%3Aopen&quot;&gt;Rust RFCs&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3958&quot;&gt;Rustdoc LaTeX math&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3485&quot;&gt;RFC: Cargo feature descriptions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#leadership-council&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/leadership-council/issues?q=state%3Aopen%20label%3Afinal-comment-period%20state%3Aopen&quot;&gt;Leadership Council&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/leadership-council/issues/329&quot;&gt;Extend temporary funding team charter 2026-09&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/leadership-council/pull/286&quot;&gt;Update PD election process based on 2025 feedback&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;No Items entered Final Comment Period this week for
&lt;a href=&quot;https://github.com/rust-lang/cargo/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen&quot;&gt;Cargo&lt;/a&gt;,
&lt;a href=&quot;https://github.com/rust-lang/compiler-team/issues?q=label%3Amajor-change%20label%3Afinal-comment-period%20state%3Aopen&quot;&gt;Compiler Team&lt;/a&gt;,
&lt;a href=&quot;https://github.com/rust-lang/lang-team/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen&quot;&gt;Language Team&lt;/a&gt;,
&lt;a href=&quot;https://github.com/rust-lang/reference/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen&quot;&gt;Language Reference&lt;/a&gt; or
&lt;a href=&quot;https://github.com/rust-lang/unsafe-code-guidelines/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen&quot;&gt;Unsafe Code Guidelines&lt;/a&gt;.&lt;/em&gt;
Let us know if you would like your PRs, Tracking Issues or RFCs to be tracked as a part of this list.&lt;/p&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#new-and-updated-rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pulls&quot;&gt;New and Updated RFCs&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/4004&quot;&gt;Errata RFC 4004: Discourage locally recursive &lt;code&gt;accessible(..)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#upcoming-events&quot;&gt;Upcoming Events&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Rusty Events between 2026-09-02 - 2026-09-30 🦀&lt;/p&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#virtual&quot;&gt;Virtual&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;2026-09-02 | Virtual (Indianapolis, IN, US) | &lt;a href=&quot;https://www.meetup.com/indyrs/events/&quot;&gt;Indy Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/indyrs/events/wqzhftyjcmbdb/&quot;&gt;&lt;strong&gt;Indy.rs - with Social Distancing&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-02 | Virtual (Indianapolis, IN, US) | &lt;a href=&quot;https://www.meetup.com/indyrs&quot;&gt;Indy Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/indyrs/events/316107210/&quot;&gt;&lt;strong&gt;Indy.rs - with Social Distancing&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-04 | Virtual | &lt;a href=&quot;https://luma.com/rust-girona&quot;&gt;Rust Girona&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/sqf4ux01&quot;&gt;&lt;strong&gt;Sessió setmanal de codificació / Weekly coding session&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-06 | Virtual | &lt;a href=&quot;https://luma.com/rust-maven&quot;&gt;Rust 🦀 Maven&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/9lte7a58&quot;&gt;&lt;strong&gt;Facts: Curated Knowledge for Humans and Agents&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-06 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust&quot;&gt;Dallas Rust User Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/316133872/&quot;&gt;&lt;strong&gt;Rust Deep Learning: First Sunday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-08 - 2026-09-11 | Hybrid (Montreal, CA) | &lt;a href=&quot;https://rustconf.com/&quot;&gt;RustConf 2026&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://rustconf.com/&quot;&gt;&lt;strong&gt;RustConf 2026&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-08 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust&quot;&gt;Dallas Rust User Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/310254774/&quot;&gt;&lt;strong&gt;Second Tuesday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-08 | Virtual (London, UK) | &lt;a href=&quot;https://www.meetup.com/women-in-rust&quot;&gt;Women in Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/women-in-rust/events/315859305/&quot;&gt;&lt;strong&gt;👋 Community Catch Up&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-09 | Virtual (Cardiff, GB) | &lt;a href=&quot;https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/&quot;&gt;Rust and C++ Cardiff&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/316283651/&quot;&gt;&lt;strong&gt;Operating Systems Book Club: Address spaces and Memory API&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-10 | Virtual | &lt;a href=&quot;https://luma.com/rust-maven&quot;&gt;Rust 🦀 Maven&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/rfbzk3ae&quot;&gt;&lt;strong&gt;Solving Real-World Planning Problems in Rust with SolverForge&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-10 | Virtual (Berlin, DE) | &lt;a href=&quot;https://www.meetup.com/rust-berlin&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-berlin/events/315691423/&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-10 | Virtual (Nürnberg, DE) | &lt;a href=&quot;https://www.meetup.com/rust-noris&quot;&gt;Rust Nuremberg&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-noris/events/315619611/&quot;&gt;&lt;strong&gt;Rust Nürnberg online&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-15 | Virtual (Washington, DC, US) | &lt;a href=&quot;https://www.meetup.com/rustdc&quot;&gt;Rust DC&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rustdc/events/fhvsztyjcmbtb/&quot;&gt;&lt;strong&gt;Mid-month Rustful&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-16 | Hybrid (Vancouver, CA) | &lt;a href=&quot;https://www.meetup.com/vancouver-rust&quot;&gt;Vancouver Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/vancouver-rust/events/314233757/&quot;&gt;&lt;strong&gt;Building a Rust GPU driver in the Linux kernel&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-17 | Hybrid (Seattle, WA, US) | &lt;a href=&quot;https://www.meetup.com/join-srug&quot;&gt;Seattle Rust User Group&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/seattle-rust-user-group/events/315635881/&quot;&gt;&lt;strong&gt;September, 2026 SRUG (Seattle Rust User Group) Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-18 | Virtual | &lt;a href=&quot;https://luma.com/rust-girona&quot;&gt;Rust Girona&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/ibaxicxv&quot;&gt;&lt;strong&gt;Sessió setmanal de codificació / Weekly coding session&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-20 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust&quot;&gt;Dallas Rust User Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/316133974/&quot;&gt;&lt;strong&gt;Rust Deep Learning: Third Sunday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-22 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust&quot;&gt;Dallas Rust User Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/310254773/&quot;&gt;&lt;strong&gt;Fourth Tuesday Rust Bookclub&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-24 | Virtual (Berlin, DE) | &lt;a href=&quot;https://www.meetup.com/rust-berlin/events/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-berlin/events/315907979/&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-29 | Virtual (London, UK) | &lt;a href=&quot;https://www.meetup.com/women-in-rust/events/&quot;&gt;Women in Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/women-in-rust/events/315691730/&quot;&gt;&lt;strong&gt;Lunch &amp;amp; Learn: Crates, Tips &amp;amp; Tricks Lightning Talks - Bring your ideas!&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#africa&quot;&gt;Africa&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;2026-09-08 | Johannesburg, ZA | &lt;a href=&quot;https://www.meetup.com/johannesburg-rust-meetup&quot;&gt;Johannesburg Rust Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/johannesburg-rust-meetup/events/315750593/&quot;&gt;&lt;strong&gt;Rust's extended standard library&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#europe&quot;&gt;Europe&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;2026-09-03 | Berlin, DE | &lt;a href=&quot;https://www.meetup.com/rust-berlin/events/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-berlin/events/316311827/&quot;&gt;&lt;strong&gt;Rust Berlin on location 🏳️‍🌈 - Edition 017&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-03 | Oxford, GB | &lt;a href=&quot;https://www.meetup.com/oxford-rust-meetup-group/events/&quot;&gt;Oxford ACCU/Rust Meetup.&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/oxford-rust-meetup-group/events/316310712/&quot;&gt;&lt;strong&gt;Live coding a Sinclair Spectrum from scratch&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-08 | Paris, FR | &lt;a href=&quot;https://www.meetup.com/rust-paris&quot;&gt;Rust Paris&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-paris/events/316169040/&quot;&gt;&lt;strong&gt;Rust meetup #87&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-10-10 | Geneva, CH | &lt;a href=&quot;https://www.posttenebraslab.ch/wiki/events/monthly_meeting/rust_meetup&quot;&gt;Rust Geneva&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.posttenebraslab.ch/wiki/events/monthly_meeting/rust_meetup&quot;&gt;&lt;strong&gt;Rust Meetup Geneva&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-14 - 2026-09-16 | Berlin, DE | &lt;a href=&quot;https://oxidizeconf.com/&quot;&gt;Oxidize 2026&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://oxidizeconf.com/&quot;&gt;&lt;strong&gt;Oxidize 2026&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-15 | Leipzig, DE | &lt;a href=&quot;https://www.meetup.com/rust-modern-systems-programming-in-leipzig&quot;&gt;Rust - Modern Systems Programming in Leipzig&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-modern-systems-programming-in-leipzig/events/313816477/&quot;&gt;&lt;strong&gt;Reproducing scientific papers - with Rust &amp;amp; &quot;AI&quot;&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-15 | Madrid, ES | &lt;a href=&quot;https://www.meetup.com/madrust/events/&quot;&gt;MadRust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/madrust/events/316361267/&quot;&gt;&lt;strong&gt;Tras la Máscara de Async Rust&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-22 | Prague, CZ | &lt;a href=&quot;https://www.meetup.com/rust-prague&quot;&gt;Rust Prague&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-prague/events/316070376/&quot;&gt;&lt;strong&gt;Rust Meetup Prague @ Rockwell Automation&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-24 | Aarhus, DK | &lt;a href=&quot;https://www.meetup.com/rust-aarhus/events/&quot;&gt;Rust Aarhus&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-aarhus/events/316236528/&quot;&gt;&lt;strong&gt;Talk Night at SkyTEM&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-24 | Amsterdam, NL | &lt;a href=&quot;https://www.meetup.com/rust-amsterdam-group/events/&quot;&gt;Rust Developers Amsterdam Group&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-amsterdam-group/events/316162802/&quot;&gt;&lt;strong&gt;Rust Meetup @ BlockTech&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-24 | Frankfurt, DE | &lt;a href=&quot;https://www.meetup.com/rust-rhein-main/events/&quot;&gt;Rust Rhein-Main&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-rhein-main/events/316328297/&quot;&gt;&lt;strong&gt;AI Agentic Coding&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-29 | Manchester, GB | &lt;a href=&quot;https://www.meetup.com/rust-manchester/events/&quot;&gt;Rust Manchester&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-manchester/events/316200964/&quot;&gt;&lt;strong&gt;Rust Manchester September Code Night&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-30 | Basel, CH | &lt;a href=&quot;https://www.meetup.com/rust-basel/events/&quot;&gt;Rust Basel&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-basel/events/315986893/&quot;&gt;&lt;strong&gt;Rust Meetup #16 @ ERNI&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#north-america&quot;&gt;North America&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;2026-09-03 | Mountain View, CA, US | &lt;a href=&quot;https://www.meetup.com/hackerdojo&quot;&gt;Hacker Dojo&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/hackerdojo/events/316124372/&quot;&gt;&lt;strong&gt;RUST MEETUP at HACKER DOJO&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-03 | Saint Louis, MO, US | &lt;a href=&quot;https://www.meetup.com/stl-rust&quot;&gt;STL Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/stl-rust/events/315603673/&quot;&gt;&lt;strong&gt;Cryptography + Quantum Computers&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-05 | Boston, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/events/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/316378793/&quot;&gt;&lt;strong&gt;Allston-Brighton Rust Lunch, Sep 5&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-08 | Montreal, CA| &lt;a href=&quot;https://rustfoundation.org/event/rust-teams-health-summit/&quot;&gt;The Rust Foundation&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://rustfoundation.org/media/rust-teams-health-summit-september-8-in-montreal/&quot;&gt;&lt;strong&gt;Rust Teams Health Summit&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-08 - 2026-09-11 | Hybrid (Montreal, CA) | &lt;a href=&quot;https://rustconf.com/&quot;&gt;RustConf 2026&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://rustconf.com/&quot;&gt;&lt;strong&gt;RustConf 2026&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-09 | Montreal, CA | &lt;a href=&quot;https://www.meetup.com/women-in-rust&quot;&gt;Women in Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/women-in-rust/events/315773005/&quot;&gt;&lt;strong&gt;RustConf Coffee Break Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-10 | Lehi, UT, US | &lt;a href=&quot;https://www.meetup.com/utah-rust&quot;&gt;Utah Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/utah-rust/events/316198046/&quot;&gt;&lt;strong&gt;Hands-on Embedded Rust&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-10 | San Diego, CA, US | &lt;a href=&quot;https://www.meetup.com/san-diego-rust&quot;&gt;San Diego Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/san-diego-rust/events/315601104/&quot;&gt;&lt;strong&gt;San Diego Rust September Meetup - Back in person!&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-12 | Boston, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/events/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/310983699/&quot;&gt;&lt;strong&gt;Somerville Union Square Rust Lunch, Sep 12&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-15 | San Francisco, CA, US | &lt;a href=&quot;https://www.meetup.com/san-francisco-rust-study-group&quot;&gt;San Francisco Rust Study Group&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/san-francisco-rust-study-group/events/314997217/&quot;&gt;&lt;strong&gt;Rust Hacking in Person&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-16 | San Francisco, CA, US | &lt;a href=&quot;https://luma.com/bayarearust&quot;&gt;Bay Area Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/9oiujuyw&quot;&gt;&lt;strong&gt;Bay Area Rust - Graphics Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-16 | Hybrid (Vancouver, CA) | &lt;a href=&quot;https://www.meetup.com/vancouver-rust&quot;&gt;Vancouver Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/vancouver-rust/events/314233757/&quot;&gt;&lt;strong&gt;Building a Rust GPU driver in the Linux kernel&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-17 | Hybrid (Seattle, WA, US) | &lt;a href=&quot;https://www.meetup.com/join-srug&quot;&gt;Seattle Rust User Group&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/seattle-rust-user-group/events/315635881/&quot;&gt;&lt;strong&gt;September, 2026 SRUG (Seattle Rust User Group) Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-17 | Mountain View, CA, US | &lt;a href=&quot;https://www.meetup.com/hackerdojo&quot;&gt;Hacker Dojo&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/hackerdojo/events/316176445/&quot;&gt;&lt;strong&gt;RUST MEETUP at HACKER DOJO&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-23 | Austin, TX, US | &lt;a href=&quot;https://www.meetup.com/rust-atx&quot;&gt;Rust ATX&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-atx/events/xvkdgtyjcmbfc/&quot;&gt;&lt;strong&gt;Rust Lunch - Fareground&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-24 | Atlanta, GA, US | &lt;a href=&quot;https://www.meetup.com/rust-atl/events/&quot;&gt;Rust Atlanta&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-atl/events/313539333/&quot;&gt;&lt;strong&gt;Rust-Atl&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-26 | Boston, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/events/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/316378817/&quot;&gt;&lt;strong&gt;Harvard Rust Lunch, Sep 26&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are running a Rust event please add it to the &lt;a href=&quot;https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com&quot;&gt;calendar&lt;/a&gt; to get
it mentioned here. Please remember to add a link to the event too.
Email the &lt;a href=&quot;mailto:community-team@rust-lang.org&quot;&gt;Rust Community Team&lt;/a&gt; for access.&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#jobs&quot;&gt;Jobs&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Please see the latest &lt;a href=&quot;https://www.reddit.com/r/rust/comments/1vtuq1b/official_rrust_whos_hiring_thread_for_jobseekers/&quot;&gt;Who's Hiring thread on r/rust&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#quote-of-the-week&quot;&gt;Quote of the Week&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;I think you are inventing provenance for integers. Please, let's not.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;– &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/4001#discussion_r3825423816&quot;&gt;Ralf Jung in an RFC discussion&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/t/twir-quote-of-the-week/328/1792&quot;&gt;kleines Filmröllchen&lt;/a&gt; for the suggestion!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://users.rust-lang.org/t/twir-quote-of-the-week/328&quot;&gt;Please submit quotes and vote for next week!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This Week in Rust is edited by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nellshamrell&quot;&gt;nellshamrell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/llogiq&quot;&gt;llogiq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ericseppanen&quot;&gt;ericseppanen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/extrawurst&quot;&gt;extrawurst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/U007D&quot;&gt;U007D&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mariannegoldin&quot;&gt;mariannegoldin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bdillo&quot;&gt;bdillo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/opeolluwa&quot;&gt;opeolluwa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bnchi&quot;&gt;bnchi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/KannanPalani57&quot;&gt;KannanPalani57&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tzilist&quot;&gt;tzilist&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Email list hosting is sponsored by &lt;a href=&quot;https://foundation.rust-lang.org/&quot;&gt;The Rust Foundation&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://www.reddit.com/r/rust/comments/1w5wisv/this_week_in_rust_667/&quot;&gt;Discuss on r/rust&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2026-09-02T04:00:00+00:00</dc:date>
	<dc:creator>TWiR Contributors</dc:creator>
</item>
<item rdf:about="https://fxdx.dev/?p=560">
	<title>Firefox Developer Experience: Firefox WebDriver Newsletter 155</title>
	<link>https://fxdx.dev/firefox-webdriver-newsletter-155/</link>
	<content:encoded>&lt;p&gt;&lt;/p&gt;&lt;p id=&quot;block-625ec41a-ebba-4559-8294-ab8d43d24728&quot;&gt;&lt;em&gt;WebDriver is a remote control interface that enables introspection and control of user agents. As such, it can help developers to verify that their websites are working and performing well with all major browsers. The protocol is standardized by the&lt;a href=&quot;https://www.w3.org/&quot;&gt; W3C&lt;/a&gt; and consists of two separate specifications:&lt;a href=&quot;https://w3c.github.io/webdriver/&quot;&gt; WebDriver classic&lt;/a&gt; (HTTP) and the new&lt;a href=&quot;https://w3c.github.io/webdriver-bidi/&quot;&gt; WebDriver BiDi&lt;/a&gt; (Bi-Directional).This newsletter gives an overview of the work we’ve done as part of the Firefox 155 release cycle&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;



&lt;h3&gt;&lt;p id=&quot;block-625ec41a-ebba-4559-8294-ab8d43d24728&quot;&gt;Contributions&lt;/p&gt;&lt;/h3&gt;



&lt;p&gt;&lt;/p&gt;&lt;p id=&quot;block-625ec41a-ebba-4559-8294-ab8d43d24728&quot;&gt;Firefox is an open source project, and we are always happy to receive external code contributions to our WebDriver implementation. We want to give special thanks to everyone who filed issues, bugs, and submitted patches. In Firefox 155, several WebDriver bugs were fixed by contributors:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;Khalid AlHaddad updated the Mozilla-specific &lt;code&gt;moz:debugging&lt;/code&gt; module to &lt;a href=&quot;https://bugzil.la/2041335&quot;&gt;no longer rely on the same nested event loop API as DevTools&lt;/a&gt;, which prevents conflicts when WebDriver BiDi and DevTools are used in parallel.&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;mailto:nirmaladvani@proton.me&quot;&gt;Nirmal Advani&lt;/a&gt; cleaned up our codebase by &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2046156&quot;&gt;removing the executeSoon helper&lt;/a&gt;, which was just a thin wrapper on top of Services.tm.dispatchToMainThread().&lt;/li&gt;



&lt;li&gt;Nirmal Advani fixed the Actions API so that &lt;a href=&quot;https://bugzil.la/2058556&quot;&gt;the &lt;code&gt;dblclick&lt;/code&gt; event is fired when performing a double-click while holding down the &lt;code&gt;Ctrl&lt;/code&gt; key on non-macOS platforms&lt;/a&gt;.&lt;/li&gt;



&lt;li&gt;Sameem added &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1943359&quot;&gt;the cleanup logic for subscriptions when a browsing context is destroyed&lt;/a&gt;.&lt;/li&gt;



&lt;li&gt;Sameem &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1988723&quot;&gt;removed support for the &lt;code&gt;contexts&lt;/code&gt; argument in the &lt;code&gt;session.unsubscribe&lt;/code&gt; command&lt;/a&gt;. From now on, clients can unsubscribe only by event names or subscription ids.&lt;/li&gt;
&lt;/ul&gt;



&lt;p id=&quot;block-1dca3827-38c3-478d-a4b2-a1e39af880f5&quot;&gt;WebDriver code is written in JavaScript, Python, and Rust, so any web developer can contribute! Read&lt;a href=&quot;https://firefox-source-docs.mozilla.org/setup/index.html&quot;&gt; how to set up the work environment&lt;/a&gt; and check&lt;a href=&quot;https://codetribute.mozilla.org/projects/automation&quot;&gt; the list of mentored issues&lt;/a&gt; for Marionette or the&lt;a href=&quot;https://codetribute.mozilla.org/languages/javascript?project%3DWebDriver%2520BiDi&quot;&gt; list of mentored JavaScript bugs for WebDriver BiDi&lt;/a&gt;. Join&lt;a href=&quot;https://chat.mozilla.org/#/room/#webdriver:mozilla.org&quot;&gt; our chatroom&lt;/a&gt; if you need any help to get started!&lt;/p&gt;



&lt;h3&gt;All Changes&lt;/h3&gt;



&lt;p&gt;A complete list of developer-facing changes included in this Firefox release is available in the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/155#webdriver_conformance_webdriver_bidi_marionette&quot;&gt;MDN Firefox 155 Release Notes&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2026-09-01T16:00:00+00:00</dc:date>
	<dc:creator>Henrik Skupin</dc:creator>
</item>
<item rdf:about="https://blog.mozilla.org/netpolicy/?p=2611">
	<title>Mozilla Open Policy &amp; Advocacy Blog: Browsers compete on privacy. When the operating system allows.</title>
	<link>https://blog.mozilla.org/netpolicy/2026/09/01/browsers-compete-on-privacy-when-the-operating-system-allows/</link>
	<content:encoded>&lt;p&gt;For more than two decades, Mozilla has advocated for an internet where people, not powerful platforms, determine how technology works for them. Meaningful consumer choice requires more than&lt;a href=&quot;https://blog.mozilla.org/netpolicy/2026/05/11/six-million-selections-later-how-the-dma-is-giving-people-browser-choice/&quot;&gt; the ability to select a browser&lt;/a&gt;. People should also be able to choose what their browser can do, from the privacy protections it provides to the ways they can customize their experience.&lt;/p&gt;
&lt;p&gt;A recent Firefox product initiative brings that longstanding policy concern into focus.&lt;/p&gt;
&lt;p&gt;Firefox is&lt;a href=&quot;https://blog.mozilla.org/en/firefox/ad-blocker-on-ios/&quot;&gt; bringing a built-in Ad Blocker to Firefox for iOS&lt;/a&gt;, giving people an optional way to reduce intrusive ads and ad-related trackers while browsing. The feature uses an EasyList-based filter list and Apple’s WebKit Content Blocker framework. It is off by default and can be enabled or disabled at any time.&lt;/p&gt;
&lt;p&gt;The feature responds to years of requests from Firefox users on iPhone. It also illustrates a wider policy problem:&lt;b&gt; dominant mobile platforms can determine which privacy and customization tools competing browsers are able to offer.&lt;/b&gt;&lt;/p&gt;
&lt;h3&gt;On Firefox for desktop and Android, people can install add-ons that change how they experience the web.&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://addons.mozilla.org/blog/2025-staff-pick-add-ons/&quot;&gt;Almost 40%&lt;/a&gt; of all Firefox users take advantage of this functionality. They include content blockers, accessibility tools, password managers and other extensions that allow people to shape their browser around their own priorities.&lt;/p&gt;
&lt;p&gt;Firefox cannot offer that same add-on ecosystem on iOS. Apple’s App Review Guidelines generally require apps to remain self-contained and restrict them from downloading or executing code that introduces or changes an app’s functionality.&lt;/p&gt;
&lt;p&gt;Apple also controls the conditions under which browsers may use alternative browser engines, with entitlement pathways available only in certain jurisdictions and subject to detailed requirements that no browser developer has been able to meet. In practice, the combined effect of Apple’s app distribution and browser policies prevents Mozilla from bringing the full Firefox add-on experience available on other platforms to iPhone users.&lt;/p&gt;
&lt;p&gt;This is not simply a technical inconvenience but a competition and consumer-choice problem.&lt;/p&gt;
&lt;p&gt;A mobile platform owner controls the operating system, the primary app-distribution channel and its own browser.&lt;/p&gt;
&lt;p&gt;When that company can also determine which technologies, add-on models and operating-system capabilities competing browsers may use, it sets the boundaries within which browser competition takes place.&lt;/p&gt;
&lt;h3&gt;Operating system restrictions can prevent independent browsers from differentiating themselves.&lt;/h3&gt;
&lt;p&gt;Even when users want browsers to differentiate on privacy, operating system restrictions can prevent independent browsers from doing so. They can also force browser developers to recreate individual tools as platform-specific, built-in features rather than allowing people to choose from a broader add-on ecosystem. That increases development costs, slows or restricts innovation and produces uneven experiences across devices.&lt;/p&gt;
&lt;p&gt;The new Firefox Ad Blocker is a practical response to those constraints. It gives iPhone users more control today using the technical options currently available to us. But building one feature directly into a browser is not a replacement for a healthy, independent add-on ecosystem. It addresses a specific capability gap for Firefox users on iOS at this time.&lt;/p&gt;
&lt;h3&gt;A competitive browser ecosystem should focus on the entire user experience.&lt;/h3&gt;
&lt;p&gt;The EU’s Digital Markets Act has shown that policy interventions can improve user choice, with Mozilla and other browsers reporting significant growth following the introduction of browser choice screens. However, meaningful browser competition must extend to the full user experience. This includes whether people can easily choose and change their default browser. It also includes whether people can benefit from the full set of innovations developed by rival browsers by ensuring adequate interoperability with the operating system.  With this deeper focus on the full user experience, people can benefit from differentiated privacy and security features.&lt;/p&gt;
&lt;p&gt;People’s privacy choices should not depend on whether a dominant platform permits their browser to offer them.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/netpolicy/2026/09/01/browsers-compete-on-privacy-when-the-operating-system-allows/&quot;&gt;Browsers compete on privacy. When the operating system allows.&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/netpolicy&quot;&gt;Open Policy &amp;amp; Advocacy&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2026-09-01T12:59:52+00:00</dc:date>
	<dc:creator>Sema Karaman</dc:creator>
</item>
<item rdf:about="https://blog.mozilla.org/?p=86916">
	<title>The Mozilla Blog: Introducing Ad Blocker for Firefox on iOS: More Control, Fewer Distractions</title>
	<link>https://blog.mozilla.org/en/firefox/ad-blocker-on-ios/</link>
	<content:encoded>&lt;p&gt;There’s only so much room on your screen. Pop-ups, overlays, and ads can take over fast, getting between you and what you came to do.&lt;/p&gt;



&lt;p&gt;That’s where Ad Blocker for Firefox on iOS comes in: a built-in option that blocks many third-party ads and ad-related trackers before they load, helping reduce clutter and distractions while you browse.  &lt;/p&gt;



&lt;figure class=&quot;wp-block-video&quot;&gt;&lt;video controls=&quot;controls&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2026/08/ENG_Firefox_AdBlocker_16x9_Long.mp4&quot;&gt;&lt;/video&gt;&lt;/figure&gt;



&lt;h3&gt;&lt;br /&gt;&lt;strong&gt;How it works&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Ad Blocker uses Apple’s WebKit Content Blocker technology and the EasyList filter list to determine what gets blocked. There’s no separate extension to install, and you can turn it on in Settings &amp;gt; Browsing &amp;gt; Ad Blocker. It’s off by default, so you decide whether to use it.&lt;/p&gt;



&lt;p&gt;Ad Blocker won’t block every ad. Ads served directly by the site you’re visiting and ads shown in search results will still appear. Sponsored shortcuts and other sponsored content shown by Firefox when you open a new tab are separate from ads on the web pages you visit, so Ad Blocker doesn’t affect them.&lt;/p&gt;



&lt;p&gt;Ad Blocker works alongside the privacy protections already built into Firefox, including &lt;a href=&quot;https://support.mozilla.org/en-US/kb/enhanced-tracking-protection-firefox-ios&quot;&gt;Enhanced Tracking Protection&lt;/a&gt;, which blocks many trackers and limits tracking across the web. &lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;More control over how you experience the web&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;On Desktop and Android, Firefox already supports a strong ecosystem of &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/&quot;&gt;ad-blocking and privacy extensions&lt;/a&gt;, giving people the flexibility to choose the tools that work best for them. We value that ecosystem and will keep supporting it.&lt;/p&gt;



&lt;p&gt;iOS &lt;a href=&quot;http://blog.mozilla.org/netpolicy/2026/09/01/browsers-compete-on-privacy-when-the-operating-system-allows&quot;&gt;works differently&lt;/a&gt;. Extensions aren’t available in the same way, and we know people want more options. Bringing ad blocking to Firefox on iOS meant building it directly into the browser. &lt;br /&gt;&lt;br /&gt;Giving people choice in how they experience the web is important to us. Advertising helps fund much of the open web, supporting the publishers, creators and websites people rely on. We also know that ads can sometimes crowd the screen or interrupt what you’re trying to do.&lt;/p&gt;



&lt;p&gt;That’s why Ad Blocker is optional: you decide whether it’s part of how you browse. It’s part of a broader approach across Firefox to give you more control over your experience, from the &lt;a href=&quot;https://www.firefox.com/en-GB/features/add-ons/&quot;&gt;extensions&lt;/a&gt; you use to &lt;a href=&quot;https://blog.mozilla.org/en/firefox/how-to-use-ai-controls/&quot;&gt;how AI shows up&lt;/a&gt; in your browser.&lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;Try it&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;To turn on Ad Blocker, go to Settings &amp;gt; Browsing &amp;gt; Ad Blocker.&lt;/p&gt;



&lt;p&gt;If you find an ad you expected to be blocked, a site that behaves strangely or something we should improve, let us know on &lt;a href=&quot;https://connect.mozilla.org/t5/discussions/ios-ad-blocker-experiment/m-p/133902/highlight/true#M53829&quot;&gt;Mozilla Connect&lt;/a&gt;. &lt;/p&gt;



&lt;p&gt;Visit our &lt;a href=&quot;https://support.mozilla.org/en-US/kb/block-ads-firefox-ios&quot;&gt;Support page&lt;/a&gt; for more details on Ad Blocker for Firefox on iOS. For more on Firefox’s built-in privacy protections, check out &lt;a href=&quot;https://www.firefox.com/en-US/user-privacy/&quot;&gt;How Firefox Protects Your Data&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/firefox/ad-blocker-on-ios/&quot;&gt;Introducing Ad Blocker for Firefox on iOS: More Control, Fewer Distractions&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/en/&quot;&gt;The Mozilla Blog&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2026-09-01T12:45:52+00:00</dc:date>
	<dc:creator>Mozilla</dc:creator>
</item>
<item rdf:about="https://blog.rust-lang.org/2026/09/01/Rustup-1.29.1/">
	<title>The Rust Programming Language Blog: Announcing rustup 1.29.1</title>
	<link>https://blog.rust-lang.org/2026/09/01/Rustup-1.29.1/</link>
	<content:encoded>&lt;p&gt;The rustup team is happy to announce the release of rustup version 1.29.1.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://rustup.rs&quot; rel=&quot;external&quot;&gt;Rustup&lt;/a&gt; is the recommended tool to install &lt;a href=&quot;https://www.rust-lang.org&quot; rel=&quot;external&quot;&gt;Rust&lt;/a&gt;, a
programming language that empowers everyone to build reliable and efficient
software.&lt;/p&gt;
&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/09/01/Rustup-1.29.1/#what-s-new-in-rustup-1-29-1&quot;&gt;&lt;/a&gt;
What's new in rustup 1.29.1&lt;/h3&gt;
&lt;p&gt;The headlines of this release are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Concurrency in certain &lt;code&gt;rustup&lt;/code&gt; operations has been improved:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When running &lt;code&gt;rustup update&lt;/code&gt;, rustup will first check for possible updates in parallel. &lt;a href=&quot;https://github.com/rust-lang/rustup/pull/4752&quot; rel=&quot;external&quot;&gt;pr#4752&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;When running &lt;code&gt;rustup component add&lt;/code&gt; with multiple components, they will be installed concurrently. &lt;a href=&quot;https://github.com/rust-lang/rustup/pull/4790&quot; rel=&quot;external&quot;&gt;pr#4790&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Implicit installation of the active toolchain in &lt;code&gt;rustup-init&lt;/code&gt; and &lt;code&gt;rustup&lt;/code&gt; invocations has
been deprecated where deemed unnecessary and will now produce a warning. &lt;a href=&quot;https://github.com/rust-lang/rustup/pull/4840&quot; rel=&quot;external&quot;&gt;pr#4840&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Please see our
&lt;a href=&quot;https://blog.rust-lang.org/inside-rust/2026/07/03/rustup-update-1.30/#refining-the-implicit-installation-behavior&quot; rel=&quot;external&quot;&gt;blog post&lt;/a&gt;
for more details regarding this change.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;rustup doc&lt;/code&gt; now supports the &lt;code&gt;--serve&lt;/code&gt; flag which allows serving the docs over local HTTP.
This should help users with containerized browser and/or rustup setups. &lt;a href=&quot;https://github.com/rust-lang/rustup/pull/4986&quot; rel=&quot;external&quot;&gt;pr#4986&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Installing &lt;code&gt;i686-pc-windows-*&lt;/code&gt; host toolchains on 64-bit Windows now requires &lt;code&gt;--force-non-host&lt;/code&gt;.
&lt;a href=&quot;https://github.com/rust-lang/rustup/pull/4935&quot; rel=&quot;external&quot;&gt;pr#4935&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;rustup-init&lt;/code&gt; will no longer leave unexpected files on disk after cancelled installations. &lt;a href=&quot;https://github.com/rust-lang/rustup/pull/4996&quot; rel=&quot;external&quot;&gt;pr#4996&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A bug has been fixed which might cause Windows installation to fail when using &lt;code&gt;rustup-init.sh&lt;/code&gt;.
&lt;a href=&quot;https://github.com/rust-lang/rustup/pull/4756&quot; rel=&quot;external&quot;&gt;pr#4756&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&quot;Target &lt;strong&gt;triple&lt;/strong&gt;&quot; has been renamed to &quot;target &lt;strong&gt;tuple&lt;/strong&gt;&quot; across the project to reflect the
&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125579/changes/a26450cf81d67d68d3c6157579f8d968349129e7&quot; rel=&quot;external&quot;&gt;new terminology&lt;/a&gt;.
&lt;a href=&quot;https://github.com/rust-lang/rustup/pull/4743&quot; rel=&quot;external&quot;&gt;pr#4743&lt;/a&gt; &lt;a href=&quot;https://github.com/rust-lang/rustup/pull/4827&quot; rel=&quot;external&quot;&gt;pr#4827&lt;/a&gt; &lt;a href=&quot;https://github.com/rust-lang/rustup/pull/4834&quot; rel=&quot;external&quot;&gt;pr#4834&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Please note that this is not a breaking change in the CLI since the existing
options such as &lt;code&gt;--target&lt;/code&gt; are not using this terminology.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In addition, rustup now officially supports &lt;code&gt;aarch64-pc-windows-gnullvm&lt;/code&gt; as a host platform. &lt;a href=&quot;https://github.com/rust-lang/rustup/pull/4523&quot; rel=&quot;external&quot;&gt;pr#4523&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Further details are available in the &lt;a href=&quot;https://github.com/rust-lang/rustup/blob/stable/CHANGELOG.md&quot; rel=&quot;external&quot;&gt;changelog&lt;/a&gt;!&lt;/p&gt;
&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/09/01/Rustup-1.29.1/#how-to-update&quot;&gt;&lt;/a&gt;
How to update&lt;/h3&gt;
&lt;p&gt;If you have a previous version of rustup installed, getting the new one is as easy as stopping
any programs which may be using rustup (e.g. closing your IDE) and running:&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ rustup self update&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Rustup will also automatically update itself at the end of a normal toolchain update:&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ rustup update&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you don't have it already, you can &lt;a href=&quot;https://rustup.rs&quot; rel=&quot;external&quot;&gt;get rustup&lt;/a&gt; from the appropriate page on our website.&lt;/p&gt;
&lt;p&gt;Rustup's documentation is also available in &lt;a href=&quot;https://rust-lang.github.io/rustup/&quot; rel=&quot;external&quot;&gt;the rustup book&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/09/01/Rustup-1.29.1/#caveats&quot;&gt;&lt;/a&gt;
Caveats&lt;/h3&gt;
&lt;p&gt;Rustup releases can come with problems not caused by rustup itself but just due to having a new release.&lt;/p&gt;
&lt;p&gt;In particular, anti-malware scanners might block rustup or stop it from creating or copying
files, especially when installing &lt;code&gt;rust-docs&lt;/code&gt; which contains many small files.&lt;/p&gt;
&lt;p&gt;Issues like this should be automatically resolved in a few weeks when the anti-malware scanners are updated
to be aware of the new rustup release.&lt;/p&gt;
&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/09/01/Rustup-1.29.1/#thanks&quot;&gt;&lt;/a&gt;
Thanks&lt;/h3&gt;
&lt;p&gt;Thanks again to all the &lt;a href=&quot;https://github.com/rust-lang/rustup/blob/stable/CHANGELOG.md#detailed-changes&quot; rel=&quot;external&quot;&gt;contributors&lt;/a&gt; who made this rustup release possible!&lt;/p&gt;</content:encoded>
	<dc:date>2026-09-01T00:00:00+00:00</dc:date>
	<dc:creator>The Rustup Team</dc:creator>
</item>
<item rdf:about="https://blog.mozilla.org/netpolicy/?p=2619">
	<title>Mozilla Open Policy &amp; Advocacy Blog: How Challengers Thrive and Competition Survives In Today’s Ecosystem</title>
	<link>https://blog.mozilla.org/netpolicy/2026/08/31/how-challengers-thrive-and-competition-survives-in-todays-ecosystem/</link>
	<content:encoded>&lt;p&gt;The web should be a place where people can choose how they connect, which tools they use, and who they trust. At Mozilla, we live these values, prioritizing products that ensure users can control their experience and that the web remains a global public resource.&lt;/p&gt;
&lt;p&gt;Challengers across the tech ecosystem provide these competitive opportunities, but they contend with structural barriers imposed by tech giants leveraging market dominance. A healthy internet depends on ensuring that independent companies have a fair opportunity to innovate and compete on merit. That’s why Mozilla and many others&lt;a href=&quot;https://blog.mozilla.org/netpolicy/2026/06/11/a-handful-of-companies-control-the-web-aicoa-can-change-that/&quot;&gt; support key legislation like AICOA&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So how do we promote proposals like AICOA and ensure that challengers can thrive in markets controlled by powerful gatekeepers?  We explored these questions and more at the recent Mozilla Meetup, &lt;b&gt;“How Challengers Thrive: Why Competition Matters for AI, Security, and the Open Internet.”&lt;/b&gt;  Across panel events, a lightning discussion, and a networking happy hour, we discussed promoting an innovative, secure internet.&lt;/p&gt;
&lt;p&gt;Partnering with Internet Works, Mozilla invited leading minds in tech policy to explore the importance of Middle Tech, AI’s impact on security and competition, and new research on&lt;a href=&quot;https://research.mozilla.org/browser-competition/over-the-edge-2/&quot;&gt; deceptive design practices&lt;/a&gt;. Below are some highlights.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;On today’s competition landscape, and Middle Tech as a user-first alternative:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Peter Chandler, Executive Director, Internet Works:&lt;/p&gt;
&lt;p&gt;&lt;i&gt;“Less competition equals less innovation equals less choices for consumers. It’s that simple.”&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Charlotte Slaiman, Principal, Charlotte Slaiman Impact Advising:&lt;/p&gt;
&lt;p&gt;&lt;i&gt;“There are all sorts of reasons that competition is not just a click away. There are lock-in effects. There is gatekeeper power. Those things are protecting incumbents and making it much harder for consumers to switch to an alternative.”&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;On the impact of deceptive design tactics:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Gemma Petrie, Principal Researcher, Competition &amp;amp; Regulation, Mozilla:&lt;/p&gt;
&lt;p&gt;&lt;i&gt;“For independent browsers like Firefox, dominant operating systems are both the gateway to consumers and the direct competitor. When these platforms use harmful design to undermine free choice, this is not simply inconvenient. It can create consumer harm by overriding informed choice, social harm by eroding public trust in technology, and market harm by undermining competition and innovation.” &lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;On the role of AI in competition and security: &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Helen Toner, Executive Director, Georgetown’s Center for Security and Emerging Technology (CSET):&lt;/p&gt;
&lt;p&gt;&lt;i&gt;“It is really notable that in open source software, if you have more eyes on software and you can identify vulnerabilities, that makes it easier and quicker to patch those vulnerabilities to solve the problem. With AI, often we actually don’t have very good solutions when we identify problems, when we identify security risks, and so I think that can change some of the dynamics.”&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Chris Lewis, President &amp;amp; CEO, Public Knowledge:&lt;/p&gt;
&lt;p&gt;&lt;i&gt;“We have an opportunity. It’s not too late in the AI era to not only design for competition through open technology, open source AI, model weights, some of the things we heard in the introduction, but also to set policies that promote competition.”&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Avery Gardiner, Director of Global Competition Policy, Spotify:&lt;/p&gt;
&lt;p&gt;&lt;i&gt;“A big part of what I’m thinking about with AI is how quickly it allows us to innovate as an app developer, right, and how quickly we can speed up our coding, bring more features to consumers, bring more things to market, and be better at innovating for the consumer. And all of our competitors can do the same thing. So there’s this remarkable thing where the AI opportunities, the AI services, are getting better every passing day.”&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;There’s a reason we convene this community. As the web becomes both more complex and even more integral to our lives, competition offers people the ability to make meaningful choices about privacy, security, and control. Competition fosters innovation and spurs better products and services. Now is a particularly important moment to advance these priorities.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/netpolicy/2026/08/31/how-challengers-thrive-and-competition-survives-in-todays-ecosystem/&quot;&gt;How Challengers Thrive and Competition Survives In Today’s Ecosystem&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/netpolicy&quot;&gt;Open Policy &amp;amp; Advocacy&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-31T18:16:31+00:00</dc:date>
	<dc:creator>Jenn Taylor Hodges</dc:creator>
</item>
<item rdf:about="https://blog.mozilla.org/l10n/?p=1918">
	<title>Mozilla Localization (L10N): Minding My Language: My Internship Story</title>
	<link>https://blog.mozilla.org/l10n/2026/08/31/minding-my-language-my-internship-story/</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2026/08/mozilla-image-1.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-full wp-image-1919&quot; height=&quot;2048&quot; src=&quot;https://blog.mozilla.org/l10n/files/2026/08/mozilla-image-1.jpg&quot; width=&quot;2046&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hello everyone! It’s Jamie. My internship at Mozilla is quite unfortunately coming to an end, after which I will be heading back to study at the University of Toronto. In this post, I want to share a rundown of my story working on the Localization (L10N) team, break down the projects I built, and reflect on what made this experience so special.&lt;/p&gt;
&lt;h3&gt;The First Day&lt;/h3&gt;
&lt;p&gt;Before joining Mozilla I was quite a bit nervous, as I had never worked at such a large organization before. The first day shattered this perception, as getting an office tour and having a live Q&amp;amp;A with VPs of Engineering really set the expectations of what working at Mozilla would be like.&lt;/p&gt;
&lt;p&gt;The Toronto office became the go-to place for connecting with passionate, mission-oriented people across different teams. After getting my computer set up, I immediately got to work on &lt;a href=&quot;http://github.com/mozilla/pontoon/&quot;&gt;Pontoon&lt;/a&gt;, Mozilla’s Translation Management System (TMS). Since Pontoon’s codebase relies on React and Django — frameworks I’ve worked with before — I was able to set up my local environment running smoothly and ship code early on. Over time, I had the opportunity to meet my fellow interns, each on their own teams, and we had chances to bond over our shared experiences and different problems.&lt;/p&gt;
&lt;div class=&quot;wp-caption alignnone&quot; id=&quot;attachment_1920&quot; style=&quot;width: 2058px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2026/08/mozilla-image-2.jpg&quot;&gt;&lt;img alt=&quot;Spending my break time in the lounge with my fellow interns.&quot; class=&quot;wp-image-1920 size-full&quot; height=&quot;1536&quot; src=&quot;https://blog.mozilla.org/l10n/files/2026/08/mozilla-image-2.jpg&quot; width=&quot;2048&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1920&quot;&gt;Spending my break time in the lounge with my fellow interns.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Since Mozilla is a remote-first company, the L10N team is distributed across Europe and North America. Working with them was an absolute highlight. To put it simply, they are a brilliant group of people of engineers, project managers and open-source contributors who keep Mozilla, and by extension, the wider web open and accessible.&lt;/p&gt;
&lt;div class=&quot;wp-caption alignnone&quot; id=&quot;attachment_1922&quot; style=&quot;width: 2570px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2026/08/mozilla-image-3-scaled.jpeg&quot;&gt;&lt;img alt=&quot;Group photo with the L10N team! Taken August 2026&quot; class=&quot;wp-image-1922 size-full&quot; height=&quot;1881&quot; src=&quot;https://blog.mozilla.org/l10n/files/2026/08/mozilla-image-3-scaled.jpeg&quot; width=&quot;2560&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1922&quot;&gt;Group photo with the L10N team! Taken August 2026&lt;/p&gt;&lt;/div&gt;
&lt;h3&gt;So, what was working at Mozilla like?&lt;/h3&gt;
&lt;p&gt;Working at Mozilla, I had the opportunity to contribute to a variety of features involving Pontoon, associated localization workflows and other cool projects. During the duration of my internship, a great deal of localization related work was centralized and continues to be that way, which significantly influenced the projects that I worked on, and more generally, how the L10N team will continue to operate when I am gone.&lt;/p&gt;
&lt;p&gt;This work unfolded against the backdrop of an ever changing technological landscape, particularly involving industry adoption of AI tools for code generation. In 2025 and 2026, agentic coding assistants like Claude Code and Cursor began to achieve mass adoption in software development. At Mozilla, I was introduced to Claude Code as a tool later in my internship, which was excellent, as it allowed me to gain a broad understanding of how the codebase worked without the use of AI. After the introduction of Claude Code to my workflow, I was able to push code and conduct code reviews on a much greater scale. I appreciate that Mozilla does not shy away from the practical uses of AI, especially in the realm of improving engineer and localizer workflows, and importantly, making it a choice.&lt;/p&gt;
&lt;h3&gt;The Work&lt;/h3&gt;
&lt;p&gt;Here is a shortlist of the varying projects I had the opportunity to work on at my time with the L10N team.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;https://github.com/mozilla/pontoon/pulls?q=is%3Apr+%233666+%233691+%233699+%233702+%233703+%233704+%233727+%233825+%233775+%233761+%233827+%233834+%233837&quot;&gt;GraphQL Deprecation and REST API Implementation&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;The first task I was assigned to primarily revolved around the deprecation of Pontoon’s public-facing GraphQL API endpoints in favor of a Django REST Framework implementation. The motivations for this project included a preference for simplicity, desire for faster API response times and consistency with existing vanilla Django REST endpoints. The new public facing API lives &lt;a href=&quot;https://pontoon.mozilla.org/api/v2/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;https://github.com/mozilla/pontoon/pull/3729&quot;&gt;Personal Access Tokens&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;The next project I was given was to devise a new personal access token (PAT) implementation in Pontoon in order to gate permissions to the newly created REST API endpoints. I was inspired by the way that GitHub did their Classic personal access tokens so I tried to model my design around their implementation as much as possible.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;https://github.com/mozilla/pontoon/pulls?q=is%3Apr+%233799+%233926&quot;&gt;Pontoon Translation Search&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;The next project I took up was to reduce the feature gap between Pontoon and &lt;a href=&quot;https://transvision.mozfr.org/&quot;&gt;Transvision&lt;/a&gt;. For context, Transvision was and is used for searching available translations of strings across certain Mozilla products. It uses GitHub as its primary source, which is why it is limited only to the big projects. Thus the motivation was to create a similar service directly on Pontoon that has the most up to date strings with all Mozilla products, with data manipulation and access being a non-issue due to existing on Pontoon directly. Translation Search lives &lt;a href=&quot;https://pontoon.mozilla.org/search/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;wp-caption alignnone&quot; id=&quot;attachment_1831&quot; style=&quot;width: 2032px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2026/02/Screenshot-2026-02-11-at-6.35.43 PM.png&quot;&gt;&lt;img alt=&quot;Pontoon's Translation Search feature, which searches for strings across Mozilla's localized projects.&quot; class=&quot;wp-image-1831 size-full&quot; height=&quot;1468&quot; src=&quot;https://blog.mozilla.org/l10n/files/2026/02/Screenshot-2026-02-11-at-6.35.43 PM.png&quot; width=&quot;2022&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1831&quot;&gt;Pontoon’s Translation Search, which searches for strings across Mozilla’s localized projects.&lt;/p&gt;&lt;/div&gt;
&lt;h4&gt;&lt;a href=&quot;https://github.com/mozilla-l10n/pontoon-addon/pull/1060&quot;&gt;Taking responsibility for Pontoon Add-on&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;The &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/pontoon-tools/&quot;&gt;Pontoon Add-on&lt;/a&gt; was a community maintained browser extension that enabled localizers to keep track of their locale’s progress and receive any notifications from Pontoon directly in the browser. As part of the Pontoon API rework mentioned earlier, we needed to refactor the add-on code in order to maintain functionality. The main contributor had limited availability to continue maintaining the add-on anymore, so Mozilla assumed ownership of the extension, and we managed to clean up some of the backlog and redeploy.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;https://github.com/mozilla-l10n/android-l10n/pull/1093&quot;&gt;Firefox for Android localization workflow changes&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;For years, Firefox Desktop and Firefox for Android used to operate under different localization workflows. Firefox for Android’s workflow was written such that Android developers needed to maintain deprecated strings to prevent previous versions of localizations of Firefox for Android breaking. Firefox Desktop does not have this issue due to different logic, so I rewrote the whole Firefox for Android workflow to be closer in substance to Firefox Desktop’s localization process. This subsequently deprecated the need for Android engineers to maintain the string deprecation process needed, which was great.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;https://github.com/mozilla/pontoon/pulls?q=is%3Apr+%233965+%233968+%234189+%234258+%234277+%234282+%234336+%234338+%234366+%234367&quot;&gt;Insights Project Manager Dashboard and Alert system&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;The last main feature set I worked on was the Insights dashboard and accompanying alert system. For context, the Project Managers on the L10N team needed to calculate a score assigned to locales each month for community health analysis purposes using a mish mash of spreadsheets and Python scripts. This project automated the capture and calculation of these statistics to the first of each month and displayed them on a dashboard along with other useful information. The alert system was also implemented which notifies admins of significant changes of scores for specific locales, so certain locales can get increased focus.&lt;/p&gt;
&lt;div class=&quot;wp-caption alignnone&quot; id=&quot;attachment_1925&quot; style=&quot;width: 1964px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2026/08/Screenshot-2026-08-31-at-1.48.02 PM.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1925 size-full&quot; height=&quot;1660&quot; src=&quot;https://blog.mozilla.org/l10n/files/2026/08/Screenshot-2026-08-31-at-1.48.02 PM.png&quot; width=&quot;1954&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1925&quot;&gt;Insights dashboard, which enables our Project Managers to track locale health over time.&lt;/p&gt;&lt;/div&gt;
&lt;h3&gt;Final Thoughts&lt;/h3&gt;
&lt;p&gt;Working at Mozilla has undoubtedly been an enriching experience. I have met a great number of incredible people who have guided me, encouraged me and shaped me into a better engineer and a better person. It has certainly widened my perspective on localization as a global effort, where peoples across different languages, cultures and creeds can work together to build a better web. I leave with sharper technical skills, amazing memories, and zero regrets, only immense gratitude for the opportunity to contribute to software that empowers millions. 🙂&lt;/p&gt;
&lt;h3&gt;Acknowledgements&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;To Matjaž (engineer and mentor):&lt;/strong&gt; Your presence has been invaluable, both as a mentor and a friend. Thank you for your patience with my 10 PM deployment requests, endless questions, and edge-case bugs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;To Flod (manager):&lt;/strong&gt; You are as always the backbone of the team, and have certainly taught me many lessons regarding leadership, professionalism and dependability. Thank you for reminding me about my deadlines and being the go-to for questions and feedback.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;To Eemeli (engineer):&lt;/strong&gt; Your Zoom call escapades have always been inspiring to me, from burning detritus, cooking random stuff, remote data lag spikes and such much more. I truly wish to become like you with such a vast and bottomless knowledge for so many facets of software engineering, &lt;i&gt;before&lt;/i&gt; AI completely rots my brain.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;To Ayush (fellow intern):&lt;/strong&gt; I hope my mentorship was as helpful to you as your camaraderie was to me. You are going to accomplish great things, my friend.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;To Eric (engineer):&lt;/strong&gt; I very much enjoyed your unique German humor, your kindness and passion for building cool technologies.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;To Camila (PM):&lt;/strong&gt; Your personality is incredibly energetic, and I’m sure you will continue to bring so much positive energy to the team. I hope that you continue to be ambitious in everything that you do.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;To Eda (PM):&lt;/strong&gt; I really hope you enjoy working as part of the L10N team. I hope that you continue to make an excellent contribution to Mozilla!&lt;/p&gt;
&lt;p&gt;Thank you for reading about my time at Mozilla! If you would like to learn more or wish to connect, feel free to contact me on &lt;a href=&quot;https://www.linkedin.com/in/jamie-hu-757785213/&quot;&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;em&gt;Fin.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</content:encoded>
	<dc:date>2026-08-31T18:07:31+00:00</dc:date>
	<dc:creator>Jamie Hu</dc:creator>
</item>
<item rdf:about="https://servo.org/blog/2026/08/31/july-in-servo/">
	<title>The Servo Blog: July in Servo: more platforms, faster canvas, web fonts in SVG, and more!</title>
	<link>https://servo.org/blog/2026/08/31/july-in-servo/</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;https://github.com/servo/servo/releases/tag/v0.5.0&quot;&gt;&lt;strong&gt;Servo 0.5.0&lt;/strong&gt;&lt;/a&gt; contains all of the changes we landed in July, which came out to &lt;strong&gt;488 commits&lt;/strong&gt;, and we now publish binaries for &lt;strong&gt;Linux aarch64&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46760&quot;&gt;#46760&lt;/a&gt;)!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DOM text selections&lt;/strong&gt; are now visible (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/SimonSapin&quot;&gt;@SimonSapin&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46698&quot;&gt;#46698&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46864&quot;&gt;#46864&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46742&quot;&gt;#46742&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46889&quot;&gt;#46889&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46126&quot;&gt;#46126&lt;/a&gt;).
Interactive selection is coming soon!&lt;/p&gt;
&lt;p&gt;For security fixes, see &lt;a href=&quot;https://servo.org/blog/2026/08/31/july-in-servo/#security&quot;&gt;&lt;strong&gt;§ Security&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;figure&gt;
    &lt;a href=&quot;https://servo.org/img/blog/2026-08-diffie.png&quot;&gt;&lt;img alt=&quot;servoshell 0.5.0 showing several new features: ‘text-decoration-thickness’, ‘box-decoration-break’, web fonts in inline `&amp;lt;svg&amp;gt;`, and DOM selection rendering&quot; src=&quot;https://servo.org/img/blog/2026-08-diffie.png&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;We’ve shipped several new web platform features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;‘Cache-Control: stale-while-revalidate’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/arayaryoma&quot;&gt;@arayaryoma&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46060&quot;&gt;#46060&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘text-decoration-thickness’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/nicoburns&quot;&gt;@nicoburns&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46592&quot;&gt;#46592&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘box-decoration-break’&lt;/strong&gt;, for the most part (&lt;a href=&quot;https://github.com/Psychpsyo&quot;&gt;@Psychpsyo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45492&quot;&gt;#45492&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘@font-feature-values’&lt;/strong&gt;, for the most part (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45308&quot;&gt;#45308&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘font-language-override’&lt;/strong&gt;, for the most part (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46618&quot;&gt;#46618&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘font-variant-alternates’&lt;/strong&gt;, for the most part (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45308&quot;&gt;#45308&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Plus a bunch of new DOM APIs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://wicg.github.io/webcrypto-secure-curves/#ed448&quot;&gt;&lt;strong&gt;Ed448&lt;/strong&gt;&lt;/a&gt;, &lt;a href=&quot;https://wicg.github.io/webcrypto-secure-curves/#x448&quot;&gt;&lt;strong&gt;X448&lt;/strong&gt;&lt;/a&gt;, and &lt;a href=&quot;https://wicg.github.io/webcrypto-modern-algos/#kmac&quot;&gt;&lt;strong&gt;KMAC&lt;/strong&gt;&lt;/a&gt; algorithms in &lt;strong&gt;Subtle­Crypto&lt;/strong&gt; (&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46402&quot;&gt;#46402&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46141&quot;&gt;#46141&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46180&quot;&gt;#46180&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46583&quot;&gt;#46583&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46606&quot;&gt;#46606&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46622&quot;&gt;#46622&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46334&quot;&gt;#46334&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46376&quot;&gt;#46376&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘insert­Horizontal­Rule’&lt;/strong&gt;, &lt;strong&gt;‘insert­Image’&lt;/strong&gt;, &lt;strong&gt;‘insert­Text’&lt;/strong&gt;, and &lt;strong&gt;‘forward­Delete’&lt;/strong&gt; commands in &lt;strong&gt;document.exec­Command()&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Psychpsyo&quot;&gt;@Psychpsyo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46608&quot;&gt;#46608&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46597&quot;&gt;#46597&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46538&quot;&gt;#46538&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46838&quot;&gt;#46838&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Animation­Effect&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46677&quot;&gt;#46677&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;new Touch()&lt;/strong&gt; (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46741&quot;&gt;#46741&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;duplex&lt;/strong&gt; property on &lt;strong&gt;Request&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46858&quot;&gt;#46858&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;effect&lt;/strong&gt; property on &lt;strong&gt;Animation&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46677&quot;&gt;#46677&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;get­Keyframes()&lt;/strong&gt; and &lt;strong&gt;set­Keyframes()&lt;/strong&gt; on &lt;strong&gt;Keyframe­Effect&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46118&quot;&gt;#46118&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;id&lt;/strong&gt; property on &lt;strong&gt;Largest­Contentful­Paint&lt;/strong&gt; (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46828&quot;&gt;#46828&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;read-only &lt;strong&gt;CSS­Font­Feature­Values­Rule&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46728&quot;&gt;#46728&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is another big update, so here’s an outline:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/blog/2026/08/31/july-in-servo/#you-can-help&quot;&gt;&lt;strong&gt;You can help!&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/blog/2026/08/31/july-in-servo/#security&quot;&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/blog/2026/08/31/july-in-servo/#real-world-compat&quot;&gt;&lt;strong&gt;Real world compat&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/blog/2026/08/31/july-in-servo/#work-in-progress&quot;&gt;&lt;strong&gt;Work in progress&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/blog/2026/08/31/july-in-servo/#embedding-api&quot;&gt;&lt;strong&gt;Embedding API&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/blog/2026/08/31/july-in-servo/#for-users-and-developers&quot;&gt;&lt;strong&gt;For users and developers&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/blog/2026/08/31/july-in-servo/#more-on-the-web-platform&quot;&gt;&lt;strong&gt;More on the web platform&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/blog/2026/08/31/july-in-servo/#performance-and-stability&quot;&gt;&lt;strong&gt;Performance and stability&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/blog/2026/08/31/july-in-servo/#new-contributors&quot;&gt;&lt;strong&gt;New contributors&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;You can help! &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2026/08/31/july-in-servo/#you-can-help!&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;If you’re working on a pull request that you think might be interesting for the next monthly update, even if you’re not 100% sure, tell us about it by following the steps below:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;You add the &lt;span&gt;&lt;span&gt;monthly update&lt;/span&gt;&lt;/span&gt; label to your pull request, or comment &lt;code&gt;&lt;a href=&quot;https://github.com/servo-highfive&quot;&gt;@servo-highfive&lt;/a&gt; monthly update&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Highfive posts a comment asking you some questions&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You answer those questions in a comment containing &lt;code&gt;&lt;a href=&quot;https://github.com/servo-highfive&quot;&gt;@servo-highfive&lt;/a&gt; monthly update answer&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Security &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2026/08/31/july-in-servo/#security&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Servo was potentially affected by vulnerabilities in &lt;a href=&quot;https://crates.io/crates/quick-xml&quot;&gt;&lt;strong&gt;quick-xml&lt;/strong&gt;&lt;/a&gt; and &lt;a href=&quot;https://crates.io/crates/crossbeam-epoch&quot;&gt;&lt;strong&gt;crossbeam-epoch&lt;/strong&gt;&lt;/a&gt; that have been fixed in Servo 0.5.0 (&lt;a href=&quot;https://github.com/atouchet&quot;&gt;@atouchet&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46737&quot;&gt;#46737&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46324&quot;&gt;#46324&lt;/a&gt;).
For more details, see &lt;a href=&quot;https://rustsec.org/advisories/RUSTSEC-2026-0194&quot;&gt;RUSTSEC-2026-0194&lt;/a&gt;, &lt;a href=&quot;https://rustsec.org/advisories/RUSTSEC-2026-0195&quot;&gt;RUSTSEC-2026-0195&lt;/a&gt;, and &lt;a href=&quot;https://rustsec.org/advisories/RUSTSEC-2026-0204&quot;&gt;RUSTSEC-2026-0204&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We’ve updated &lt;strong&gt;&lt;a href=&quot;https://github.com/servo/mozangle&quot;&gt;ANGLE&lt;/a&gt;&lt;/strong&gt; from a version based on Firefox 115.x ESR (&lt;a href=&quot;https://hg.mozilla.org/mozilla-unified/file/02755361e26d82768eb1d5f576145e19d7c265cd/gfx/angle&quot;&gt;02755361e26d8&lt;/a&gt;) to a version based on Firefox 140.12.0 ESR (&lt;a href=&quot;https://github.com/mozilla-firefox/firefox/commit/f8025617e815f21388b40baf189338d31a5f9a0a&quot;&gt;f8025617e815f&lt;/a&gt;), which likely includes many security fixes (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46455&quot;&gt;#46455&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/mozangle/pull/100&quot;&gt;mozangle#100&lt;/a&gt;).&lt;/p&gt;
&lt;h3&gt;Real world compat &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2026/08/31/july-in-servo/#real-world-compat&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The duck on the &lt;strong&gt;DuckDuckGo (&lt;a href=&quot;https://duckduckgo.com/&quot;&gt;duckduckgo.com&lt;/a&gt;)&lt;/strong&gt; landing page now renders in v0.5.0, after we fixed a preload bug that affected SVG images (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46668&quot;&gt;#46668&lt;/a&gt;).&lt;/p&gt;
&lt;figure class=&quot;_spaced&quot;&gt;
    &lt;div class=&quot;_peel&quot;&gt;
        &lt;div class=&quot;_line&quot;&gt;
            &lt;div class=&quot;_left&quot;&gt;&lt;div&gt;v0.4.0&lt;/div&gt;&lt;/div&gt;
            &lt;div class=&quot;_right&quot;&gt;&lt;div&gt;v0.5.0&lt;/div&gt;&lt;/div&gt;
        &lt;/div&gt;
        &lt;img src=&quot;https://servo.org/img/blog/2026-08-143728.png&quot; /&gt;
        &lt;img src=&quot;https://servo.org/img/blog/2026-08-143737.png&quot; /&gt;
    &lt;/div&gt;
    &lt;figcaption&gt;&lt;a href=&quot;https://duckduckgo.com/&quot;&gt;duckduckgo.com&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Most of &lt;strong&gt;Gumroad (&lt;a href=&quot;https://gumroad.com/&quot;&gt;gumroad.com&lt;/a&gt;)&lt;/strong&gt;, except for the landing page, did not render at all in v0.4.0, but as of v0.5.0, pages like the &lt;a href=&quot;https://gumroad.com/discover&quot;&gt;&lt;strong&gt;Discover page&lt;/strong&gt;&lt;/a&gt; or &lt;a href=&quot;https://harrycraft2.gumroad.com/l/theworldslongestcity&quot;&gt;&lt;strong&gt;this product page&lt;/strong&gt;&lt;/a&gt; render almost perfectly.&lt;/p&gt;
&lt;figure class=&quot;_spaced&quot;&gt;
    &lt;div class=&quot;_peel&quot;&gt;
        &lt;div class=&quot;_line&quot;&gt;
            &lt;div class=&quot;_left&quot;&gt;&lt;div&gt;v0.4.0&lt;/div&gt;&lt;/div&gt;
            &lt;div class=&quot;_right&quot;&gt;&lt;div&gt;v0.5.0&lt;/div&gt;&lt;/div&gt;
        &lt;/div&gt;
        &lt;img src=&quot;https://servo.org/img/blog/2026-08-165201.png&quot; /&gt;
        &lt;img src=&quot;https://servo.org/img/blog/2026-08-164722.png&quot; /&gt;
    &lt;/div&gt;
    &lt;figcaption&gt;&lt;a href=&quot;https://gumroad.com/discover&quot;&gt;gumroad.com&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;_spaced&quot;&gt;
    &lt;div class=&quot;_peel&quot;&gt;
        &lt;div class=&quot;_line&quot;&gt;
            &lt;div class=&quot;_left&quot;&gt;&lt;div&gt;v0.4.0&lt;/div&gt;&lt;/div&gt;
            &lt;div class=&quot;_right&quot;&gt;&lt;div&gt;v0.5.0&lt;/div&gt;&lt;/div&gt;
        &lt;/div&gt;
        &lt;img src=&quot;https://servo.org/img/blog/2026-08-162729.png&quot; /&gt;
        &lt;img src=&quot;https://servo.org/img/blog/2026-08-162731.png&quot; /&gt;
    &lt;/div&gt;
    &lt;figcaption&gt;&lt;a href=&quot;https://harrycraft2.gumroad.com/l/theworldslongestcity&quot;&gt;gumroad.com&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;p&gt;We’re interested to hear how well your favourite websites run in Servo!
Report successes in &lt;a href=&quot;https://servo.zulipchat.com/#narrow/channel/263398-general/topic/Servo.20web.20compat.20success.20stories/with/612898341&quot;&gt;this Zulip thread&lt;/a&gt;, and failures &lt;a href=&quot;https://github.com/servo/servo/issues&quot;&gt;in our GitHub issues&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Work in progress &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2026/08/31/july-in-servo/#work-in-progress&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The upgrade to Stylo 2026-07-01 brings several changes to built-in &lt;strong&gt;CSS functions&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46129&quot;&gt;#46129&lt;/a&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;‘alpha()’&lt;/strong&gt; is now supported, under &lt;code&gt;--pref layout­_css­_alpha­_color­_function­_enabled&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;‘progress()’&lt;/strong&gt; is now supported, under &lt;code&gt;--pref layout­_css­_progress­_function­_enabled&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;‘ellipse()’&lt;/strong&gt; values &lt;strong&gt;‘closest-corner’&lt;/strong&gt; and &lt;strong&gt;‘farthest-corner’&lt;/strong&gt; are no longer stable due to spec uncertainty, but they are still experimental, under &lt;code&gt;--pref layout­_css­_ellipse­_corners­_enabled&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;‘attr()’&lt;/strong&gt; is more conformant, under &lt;code&gt;--pref layout­_css­_attr­_enabled&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Web­GPU&lt;/strong&gt; content can now enjoy better conformance and use &lt;strong&gt;GPU­External­Texture&lt;/strong&gt; and &lt;strong&gt;import­External­Texture()&lt;/strong&gt; on &lt;strong&gt;GPU­Device&lt;/strong&gt;, under &lt;code&gt;--pref dom­_webgpu­_enabled&lt;/code&gt; (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45873&quot;&gt;#45873&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46178&quot;&gt;#46178&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46286&quot;&gt;#46286&lt;/a&gt;).&lt;/p&gt;
&lt;figure&gt;
    &lt;a href=&quot;https://servo.org/img/blog/2026-08-webgpu.png&quot;&gt;&lt;img alt=&quot;servoshell 0.5.0 showing four tilted rectangles (in WebGPU), textured with a picture of a dog (which is a frame from an external video)&quot; src=&quot;https://servo.org/img/blog/2026-08-webgpu.png&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;Indexed­DB&lt;/strong&gt; content can now use the &lt;strong&gt;name&lt;/strong&gt; property on &lt;strong&gt;IDB­Index&lt;/strong&gt;, under &lt;code&gt;--pref dom­_indexeddb­_enabled&lt;/code&gt; (&lt;a href=&quot;https://github.com/skyz1&quot;&gt;@skyz1&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45512&quot;&gt;#45512&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;document.fonts&lt;/strong&gt; now includes a &lt;strong&gt;Font­Face&lt;/strong&gt; for each valid &lt;strong&gt;‘@font-face’&lt;/strong&gt;, under &lt;code&gt;--pref dom­_fontface­_enabled&lt;/code&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46509&quot;&gt;#46509&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46537&quot;&gt;#46537&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;All of the features above are enabled in servoshell’s &lt;a href=&quot;https://book.servo.org/design-documentation/experimental-features.html#experimental-web-platform-features&quot;&gt;experimental mode&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We’ve started implementing &lt;strong&gt;WebVTT&lt;/strong&gt; for native &lt;strong&gt;subtitles&lt;/strong&gt; and &lt;strong&gt;captions&lt;/strong&gt;, enabled by default (no &lt;code&gt;--pref&lt;/code&gt;).
While they don’t render just yet, we can now fetch each &amp;lt;track src&amp;gt;, parse the WebVTT, and expose cues via the &lt;strong&gt;track&lt;/strong&gt; property on &lt;strong&gt;HTML­Track­Element&lt;/strong&gt; (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46289&quot;&gt;#46289&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46383&quot;&gt;#46383&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;July was a big month for &lt;strong&gt;accessibility&lt;/strong&gt; in Servo, under &lt;code&gt;--pref accessibility­_enabled&lt;/code&gt;.
The focus for this month has been on &lt;strong&gt;performance&lt;/strong&gt;, with the accessibility tree now supporting &lt;strong&gt;incremental updates&lt;/strong&gt; (&lt;a href=&quot;https://github.com/alice&quot;&gt;@alice&lt;/a&gt;, &lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45578&quot;&gt;#45578&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45971&quot;&gt;#45971&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46589&quot;&gt;#46589&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46691&quot;&gt;#46691&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46385&quot;&gt;#46385&lt;/a&gt;), requiring &lt;strong&gt;fewer HashMap lookups&lt;/strong&gt; and &lt;strong&gt;tree walks&lt;/strong&gt; (&lt;a href=&quot;https://github.com/alice&quot;&gt;@alice&lt;/a&gt;, &lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45798&quot;&gt;#45798&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46740&quot;&gt;#46740&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46348&quot;&gt;#46348&lt;/a&gt;), and allowing for &lt;strong&gt;faster DOM mutations&lt;/strong&gt; (&lt;a href=&quot;https://github.com/alice&quot;&gt;@alice&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46348&quot;&gt;#46348&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46530&quot;&gt;#46530&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve also started working on the &lt;a href=&quot;https://wicg.github.io/entries-api/&quot;&gt;&lt;strong&gt;File and Directory Entries API&lt;/strong&gt;&lt;/a&gt;, to allow users to &lt;strong&gt;select&lt;/strong&gt; and &lt;strong&gt;upload entire directories&lt;/strong&gt; via &lt;strong&gt;&amp;lt;input type=file&amp;gt;&lt;/strong&gt; and &lt;strong&gt;drag-and-drop&lt;/strong&gt;.
To that end, we now have &lt;strong&gt;webkit­Get­As­Entry()&lt;/strong&gt; on &lt;strong&gt;Data­Transfer­Item&lt;/strong&gt;, plus minimal support for &lt;strong&gt;File­System­Entry&lt;/strong&gt;, &lt;strong&gt;File­System­Directory­Entry&lt;/strong&gt;, and &lt;strong&gt;File­System­File­Entry&lt;/strong&gt;, under &lt;code&gt;--pref dom­_entries­_api­_enabled&lt;/code&gt; (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46456&quot;&gt;#46456&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46879&quot;&gt;#46879&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46832&quot;&gt;#46832&lt;/a&gt;).&lt;/p&gt;
&lt;h3&gt;Embedding API &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2026/08/31/july-in-servo/#embedding-api&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We’ve improved the docs for the &lt;a href=&quot;https://doc.servo.org/servo/index.html&quot;&gt;&lt;code&gt;servo&lt;/code&gt;&lt;/a&gt; crate, and for &lt;a href=&quot;https://doc.servo.org/servo/trait.WebViewDelegate.html&quot;&gt;Web­View­Delegate&lt;/a&gt; (&lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46193&quot;&gt;#46193&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Breaking change:&lt;/strong&gt; &lt;a href=&quot;https://doc.servo.org/servo/struct.ServoBuilder.html&quot;&gt;&lt;code&gt;Servo­Builder&lt;/code&gt;&lt;/a&gt;::&lt;code&gt;webxr­_registry()&lt;/code&gt; has been &lt;strong&gt;removed&lt;/strong&gt;.
Instead use the new &lt;a href=&quot;https://doc.servo.org/servo/struct.Servo.html&quot;&gt;&lt;code&gt;Servo&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.Servo.html#method.register_webxr_registry&quot;&gt;&lt;code&gt;register­_webxr­_registry&lt;/code&gt;&lt;/a&gt;, which is a &lt;strong&gt;lazy&lt;/strong&gt; design that has allowed servoshell to &lt;strong&gt;halve its startup time&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46494&quot;&gt;#46494&lt;/a&gt;).&lt;/p&gt;
&lt;h3&gt;For users and developers &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2026/08/31/july-in-servo/#for-users-and-developers&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;servoshell&lt;/strong&gt; for &lt;strong&gt;Android&lt;/strong&gt; now runs on &lt;strong&gt;Android 10+&lt;/strong&gt; (91% market share), not just Android 13+ (68% market share), improving adaptability and reducing waste (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46142&quot;&gt;#46142&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46308&quot;&gt;#46308&lt;/a&gt;).
We’ve also fixed a problem with building for Android on macOS (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46128&quot;&gt;#46128&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;servoshell&lt;/strong&gt; for &lt;strong&gt;Windows&lt;/strong&gt; is now better behaved when run in a console window, making the command prompt wait until servoshell exits (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43010&quot;&gt;#43010&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;When using the Firefox &lt;strong&gt;DevTools&lt;/strong&gt;, the &lt;strong&gt;Console&lt;/strong&gt; tab now supports some basic &lt;strong&gt;autocomplete&lt;/strong&gt; (&lt;a href=&quot;https://github.com/freyacodes&quot;&gt;@freyacodes&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46382&quot;&gt;#46382&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve finished modernising servoshell for Android to use Compose UI (&lt;a href=&quot;https://github.com/veyndan&quot;&gt;@veyndan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46085&quot;&gt;#46085&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46164&quot;&gt;#46164&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46253&quot;&gt;#46253&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46257&quot;&gt;#46257&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46317&quot;&gt;#46317&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46353&quot;&gt;#46353&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46565&quot;&gt;#46565&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46612&quot;&gt;#46612&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46626&quot;&gt;#46626&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46666&quot;&gt;#46666&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46663&quot;&gt;#46663&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46700&quot;&gt;#46700&lt;/a&gt;), and we’re now migrating Servo as a library to use Kotlin (&lt;a href=&quot;https://github.com/veyndan&quot;&gt;@veyndan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46817&quot;&gt;#46817&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46895&quot;&gt;#46895&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46772&quot;&gt;#46772&lt;/a&gt;).&lt;/p&gt;
&lt;h3&gt;More on the web platform &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2026/08/31/july-in-servo/#more-on-the-web-platform&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Inline SVG&lt;/strong&gt; can now use &lt;strong&gt;web fonts&lt;/strong&gt; defined in the containing page (&lt;a href=&quot;https://github.com/yodalee&quot;&gt;@yodalee&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45979&quot;&gt;#45979&lt;/a&gt;).
We’re also implementing the &lt;strong&gt;SVG DOM&lt;/strong&gt;, starting with stub interfaces for &lt;strong&gt;SVG­Element&lt;/strong&gt;, SVG­Circle­Element, SVG­Defs­Element, SVG­Ellipse­Element, SVG­Line­Element, SVG­Linear­Gradient­Element, SVG­Path­Element, SVG­Polygon­Element, SVG­Polyline­Element, SVG­Radial­Gradient­Element, SVG­Stop­Element, SVG­Rect­Element, SVG­Symbol­Element, and SVG­Use­Element (&lt;a href=&quot;https://github.com/mu-mostafa98&quot;&gt;@mu-mostafa98&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46558&quot;&gt;#46558&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;button&amp;gt;&lt;/strong&gt; now &lt;strong&gt;vertically centers&lt;/strong&gt; its contents (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46590&quot;&gt;#46590&lt;/a&gt;), and behaves better with ‘display: block’ and ‘display: inline’ (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46536&quot;&gt;#46536&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve improved the conformance of &lt;strong&gt;&amp;lt;form&amp;gt;&lt;/strong&gt; without &lt;strong&gt;&amp;lt;form action&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/kevlu93&quot;&gt;@kevlu93&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46860&quot;&gt;#46860&lt;/a&gt;), &lt;strong&gt;&amp;lt;color&amp;gt; values&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46129&quot;&gt;#46129&lt;/a&gt;), &lt;strong&gt;Gamepad­Event&lt;/strong&gt; (&lt;a href=&quot;https://github.com/log101&quot;&gt;@log101&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46788&quot;&gt;#46788&lt;/a&gt;), &lt;strong&gt;document.execCommand(“delete”)&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Psychpsyo&quot;&gt;@Psychpsyo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46539&quot;&gt;#46539&lt;/a&gt;), the &lt;strong&gt;selector­Text&lt;/strong&gt; property on &lt;strong&gt;CSS­Style­Rule&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46687&quot;&gt;#46687&lt;/a&gt;), and &lt;strong&gt;Set Window Rect&lt;/strong&gt; in WebDriver (&lt;a href=&quot;https://github.com/janeoa&quot;&gt;@janeoa&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46475&quot;&gt;#46475&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46477&quot;&gt;#46477&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve fixed bugs related to &lt;strong&gt;&amp;lt;iframe&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46587&quot;&gt;#46587&lt;/a&gt;), &lt;strong&gt;&amp;lt;img&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/yodalee&quot;&gt;@yodalee&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46892&quot;&gt;#46892&lt;/a&gt;), &lt;strong&gt;&amp;lt;textarea&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/SimonSapin&quot;&gt;@SimonSapin&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46309&quot;&gt;#46309&lt;/a&gt;), &lt;strong&gt;custom properties&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46129&quot;&gt;#46129&lt;/a&gt;), &lt;strong&gt;‘::before’&lt;/strong&gt; and &lt;strong&gt;‘::after’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46640&quot;&gt;#46640&lt;/a&gt;), &lt;strong&gt;‘flex-direction: column’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46697&quot;&gt;#46697&lt;/a&gt;), &lt;strong&gt;‘float’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46407&quot;&gt;#46407&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46500&quot;&gt;#46500&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46505&quot;&gt;#46505&lt;/a&gt;), &lt;strong&gt;‘@font-face’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46568&quot;&gt;#46568&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46271&quot;&gt;#46271&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46436&quot;&gt;#46436&lt;/a&gt;), &lt;strong&gt;‘position: absolute’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46358&quot;&gt;#46358&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46637&quot;&gt;#46637&lt;/a&gt;), &lt;strong&gt;Blob&lt;/strong&gt; (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46881&quot;&gt;#46881&lt;/a&gt;), &lt;strong&gt;IDB­Database&lt;/strong&gt; and &lt;strong&gt;IDB­Object­Store&lt;/strong&gt; and &lt;strong&gt;IDB­Index&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46615&quot;&gt;#46615&lt;/a&gt;), the &lt;strong&gt;adopted­Style­Sheets&lt;/strong&gt; property on &lt;strong&gt;Shadow­Root&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46738&quot;&gt;#46738&lt;/a&gt;), &lt;strong&gt;delete()&lt;/strong&gt; on &lt;strong&gt;Font­Face­Set&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46634&quot;&gt;#46634&lt;/a&gt;), &lt;strong&gt;move­Before()&lt;/strong&gt; on &lt;strong&gt;Element&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46599&quot;&gt;#46599&lt;/a&gt;), &lt;strong&gt;resize­To()&lt;/strong&gt; on &lt;strong&gt;Window&lt;/strong&gt; (&lt;a href=&quot;https://github.com/janeoa&quot;&gt;@janeoa&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46477&quot;&gt;#46477&lt;/a&gt;), the &lt;strong&gt;selected&lt;/strong&gt; property on &lt;strong&gt;HTML­Option­Element&lt;/strong&gt; (&lt;a href=&quot;https://github.com/rhit-kapilaar&quot;&gt;@rhit-kapilaar&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46386&quot;&gt;#46386&lt;/a&gt;), and the &lt;strong&gt;value&lt;/strong&gt; property on &lt;strong&gt;HTML­Select­Element&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46230&quot;&gt;#46230&lt;/a&gt;).&lt;/p&gt;
&lt;h3&gt;Performance and stability &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2026/08/31/july-in-servo/#performance-and-stability&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;2D canvas&lt;/strong&gt; rendering is now &lt;strong&gt;multithreaded&lt;/strong&gt;, improving frame rates by &lt;strong&gt;up to 55%&lt;/strong&gt; and power consumption per frame by &lt;strong&gt;up to 42%&lt;/strong&gt; (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46410&quot;&gt;#46410&lt;/a&gt;), and should use a lot less memory too (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46786&quot;&gt;#46786&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Text rendering&lt;/strong&gt; is &lt;strong&gt;up to 10x faster&lt;/strong&gt; for cases with the same text and different ‘font-size’ (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46129&quot;&gt;#46129&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Flex layout&lt;/strong&gt; benchmarks are up to &lt;strong&gt;3%&lt;/strong&gt; faster, and an improvement to &lt;strong&gt;get­Elements­By­Class­Name()&lt;/strong&gt; has made some websites up to &lt;strong&gt;1%&lt;/strong&gt; faster (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46563&quot;&gt;#46563&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46595&quot;&gt;#46595&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46594&quot;&gt;#46594&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve also reduced memory usage, allocations, GC rooting steps, and other operations in many parts of Servo (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/Gae24&quot;&gt;@Gae24&lt;/a&gt;, &lt;a href=&quot;https://github.com/SimonSapin&quot;&gt;@SimonSapin&lt;/a&gt;, &lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/cychronex-labs&quot;&gt;@cychronex-labs&lt;/a&gt;, &lt;a href=&quot;https://github.com/arayaryoma&quot;&gt;@arayaryoma&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46499&quot;&gt;#46499&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46411&quot;&gt;#46411&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46659&quot;&gt;#46659&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45974&quot;&gt;#45974&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46377&quot;&gt;#46377&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45758&quot;&gt;#45758&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46440&quot;&gt;#46440&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46762&quot;&gt;#46762&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46301&quot;&gt;#46301&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46349&quot;&gt;#46349&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46419&quot;&gt;#46419&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46418&quot;&gt;#46418&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46420&quot;&gt;#46420&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46460&quot;&gt;#46460&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46633&quot;&gt;#46633&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46638&quot;&gt;#46638&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46690&quot;&gt;#46690&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46745&quot;&gt;#46745&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46726&quot;&gt;#46726&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46564&quot;&gt;#46564&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46144&quot;&gt;#46144&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46664&quot;&gt;#46664&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46462&quot;&gt;#46462&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46139&quot;&gt;#46139&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46430&quot;&gt;#46430&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46446&quot;&gt;#46446&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46498&quot;&gt;#46498&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46548&quot;&gt;#46548&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46598&quot;&gt;#46598&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46632&quot;&gt;#46632&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46656&quot;&gt;#46656&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46678&quot;&gt;#46678&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46718&quot;&gt;#46718&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46722&quot;&gt;#46722&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46238&quot;&gt;#46238&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46072&quot;&gt;#46072&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46408&quot;&gt;#46408&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46438&quot;&gt;#46438&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46437&quot;&gt;#46437&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46528&quot;&gt;#46528&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46124&quot;&gt;#46124&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46330&quot;&gt;#46330&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46412&quot;&gt;#46412&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46807&quot;&gt;#46807&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve fixed a crash regression with memory corruption (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46316&quot;&gt;#46316&lt;/a&gt;), several dynamic-borrow-related crashes (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/SharanRP&quot;&gt;@SharanRP&lt;/a&gt;, &lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/agrawalx&quot;&gt;@agrawalx&lt;/a&gt;, &lt;a href=&quot;https://github.com/amittenak47&quot;&gt;@amittenak47&lt;/a&gt;, &lt;a href=&quot;https://github.com/sungmen&quot;&gt;@sungmen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46381&quot;&gt;#46381&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46384&quot;&gt;#46384&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46405&quot;&gt;#46405&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46684&quot;&gt;#46684&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46452&quot;&gt;#46452&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46770&quot;&gt;#46770&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46830&quot;&gt;#46830&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46763&quot;&gt;#46763&lt;/a&gt;), plus crashes related to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;area&amp;gt;&lt;/strong&gt; without &lt;strong&gt;&amp;lt;area href&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46341&quot;&gt;#46341&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;progress&amp;gt;&lt;/strong&gt; or shadow DOM (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46188&quot;&gt;#46188&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;table&amp;gt;&lt;/strong&gt; layout (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46775&quot;&gt;#46775&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;td rowspan&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46841&quot;&gt;#46841&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;svg&amp;gt;&lt;/strong&gt; without &lt;strong&gt;&amp;lt;svg viewBox&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46199&quot;&gt;#46199&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;use&amp;gt;&lt;/strong&gt; in SVG (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46261&quot;&gt;#46261&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘animation’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46689&quot;&gt;#46689&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘content’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46314&quot;&gt;#46314&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘mix-blend-mode’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45624&quot;&gt;#45624&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Array­Buffer&lt;/strong&gt; (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46504&quot;&gt;#46504&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;adopted­Style­Sheets&lt;/strong&gt; on &lt;strong&gt;Document&lt;/strong&gt; (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46373&quot;&gt;#46373&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;exec­Command(&lt;code&gt;&quot;delete&quot;&lt;/code&gt;)&lt;/strong&gt; on &lt;strong&gt;Document&lt;/strong&gt; (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46265&quot;&gt;#46265&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;removing DOM nodes (&lt;a href=&quot;https://github.com/SimonSapin&quot;&gt;@SimonSapin&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46866&quot;&gt;#46866&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’ve continued our long-running effort to use the Rust type system to make Servo’s integration with SpiderMonkey safer and more reliable (&lt;a href=&quot;https://github.com/Gae24&quot;&gt;@Gae24&lt;/a&gt;, &lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/kunalmohan&quot;&gt;@kunalmohan&lt;/a&gt;, &lt;a href=&quot;https://github.com/lumiscosity&quot;&gt;@lumiscosity&lt;/a&gt;, &lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46191&quot;&gt;#46191&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46777&quot;&gt;#46777&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46890&quot;&gt;#46890&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46243&quot;&gt;#46243&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46248&quot;&gt;#46248&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46246&quot;&gt;#46246&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46310&quot;&gt;#46310&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46312&quot;&gt;#46312&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46333&quot;&gt;#46333&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46147&quot;&gt;#46147&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46150&quot;&gt;#46150&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46151&quot;&gt;#46151&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46229&quot;&gt;#46229&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46262&quot;&gt;#46262&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46375&quot;&gt;#46375&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46374&quot;&gt;#46374&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46529&quot;&gt;#46529&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46584&quot;&gt;#46584&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46585&quot;&gt;#46585&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46593&quot;&gt;#46593&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46693&quot;&gt;#46693&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46166&quot;&gt;#46166&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46156&quot;&gt;#46156&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46254&quot;&gt;#46254&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46267&quot;&gt;#46267&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46268&quot;&gt;#46268&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46269&quot;&gt;#46269&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46270&quot;&gt;#46270&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46284&quot;&gt;#46284&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46285&quot;&gt;#46285&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46318&quot;&gt;#46318&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46435&quot;&gt;#46435&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46461&quot;&gt;#46461&lt;/a&gt;).&lt;/p&gt;
&lt;h3&gt;New contributors &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2026/08/31/july-in-servo/#new-contributors&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A special thanks to the following people for landing their first patch in Servo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Umut Cevdet Koçak (&lt;a href=&quot;https://github.com/UMCEKO&quot;&gt;@UMCEKO&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46256&quot;&gt;#46256&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Yash Agrawal (&lt;a href=&quot;https://github.com/agrawalx&quot;&gt;@agrawalx&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46770&quot;&gt;#46770&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;amittenak47 (&lt;a href=&quot;https://github.com/amittenak47&quot;&gt;@amittenak47&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46743&quot;&gt;#46743&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Apoorva Pendse (&lt;a href=&quot;https://github.com/apoorvapendse&quot;&gt;@apoorvapendse&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46739&quot;&gt;#46739&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;dDostalker (&lt;a href=&quot;https://github.com/dDostalker&quot;&gt;@dDostalker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46181&quot;&gt;#46181&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Oisín Ó Maolchathail (&lt;a href=&quot;https://github.com/eachra-bawn&quot;&gt;@eachra-bawn&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46478&quot;&gt;#46478&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Kevin Lu (&lt;a href=&quot;https://github.com/kevlu93&quot;&gt;@kevlu93&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46860&quot;&gt;#46860&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Mohamed Mostafa (&lt;a href=&quot;https://github.com/mu-mostafa98&quot;&gt;@mu-mostafa98&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45405&quot;&gt;#45405&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;SeongMan Jeon (&lt;a href=&quot;https://github.com/sungmen&quot;&gt;@sungmen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46763&quot;&gt;#46763&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Yoda Lee (&lt;a href=&quot;https://github.com/yodalee&quot;&gt;@yodalee&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45979&quot;&gt;#45979&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Interested in helping build a web browser?
Take a look at our &lt;a href=&quot;https://starters.servo.org/&quot;&gt;curated list&lt;/a&gt; of issues that are good for new contributors!&lt;/p&gt;
&lt;h3&gt;Donations &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2026/08/31/july-in-servo/#donations&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Thanks again for your generous support!
We are now receiving &lt;strong&gt;7824 USD/month&lt;/strong&gt; (+1.8% from June) in recurring donations.
This helps us cover the cost of our &lt;strong&gt;&lt;a href=&quot;https://ci0.servo.org/&quot;&gt;speedy&lt;/a&gt; &lt;a href=&quot;https://ci1.servo.org/&quot;&gt;CI&lt;/a&gt; &lt;a href=&quot;https://ci2.servo.org/&quot;&gt;and&lt;/a&gt; &lt;a href=&quot;https://ci3.servo.org/&quot;&gt;benchmarking&lt;/a&gt; &lt;a href=&quot;https://ci4.servo.org/&quot;&gt;servers&lt;/a&gt;&lt;/strong&gt;, one of our latest &lt;strong&gt;&lt;a href=&quot;https://www.outreachy.org/alums/2026-05/#:~:text=Servo&quot;&gt;Outreachy interns&lt;/a&gt;&lt;/strong&gt;, and funding &lt;strong&gt;&lt;a href=&quot;https://servo.org/blog/2025/09/17/your-donations-at-work-funding-jdm/&quot;&gt;maintainer work&lt;/a&gt;&lt;/strong&gt; that helps more people contribute to Servo.&lt;/p&gt;
&lt;p&gt;Servo is also on &lt;a href=&quot;https://thanks.dev/&quot;&gt;thanks.dev&lt;/a&gt;, and already &lt;strong&gt;35 GitHub users&lt;/strong&gt; (same as June) that depend on Servo are sponsoring us there.
If you use Servo libraries like &lt;a href=&quot;https://crates.io/crates/url/reverse_dependencies&quot;&gt;url&lt;/a&gt;, &lt;a href=&quot;https://crates.io/crates/html5ever/reverse_dependencies&quot;&gt;html5ever&lt;/a&gt;, &lt;a href=&quot;https://crates.io/crates/selectors/reverse_dependencies&quot;&gt;selectors&lt;/a&gt;, or &lt;a href=&quot;https://crates.io/crates/cssparser/reverse_dependencies&quot;&gt;cssparser&lt;/a&gt;, signing up for &lt;a href=&quot;https://thanks.dev/&quot;&gt;thanks.dev&lt;/a&gt; could be a good way for you (or your employer) to give back to the community.&lt;/p&gt;
&lt;p&gt;We now have &lt;a href=&quot;https://servo.org/blog/2025/11/21/sponsorship-tiers/&quot;&gt;&lt;strong&gt;sponsorship tiers&lt;/strong&gt;&lt;/a&gt; that allow you or your organisation to donate to the Servo project with public acknowlegement of your support.
If you’re interested in this kind of sponsorship, please contact us at &lt;a href=&quot;mailto:join@servo.org&quot;&gt;join@servo.org&lt;/a&gt;.&lt;/p&gt;
&lt;figure class=&quot;_fig&quot; style=&quot;width: 100%; margin: 1em 0;&quot;&gt;&lt;div class=&quot;_flex&quot;&gt;
    &lt;div style=&quot;text-align: right;&quot;&gt;
        &lt;div&gt;&lt;strong&gt;7824&lt;/strong&gt; USD/month&lt;/div&gt;
        &lt;div&gt;&lt;/div&gt;
        &lt;div&gt;&lt;/div&gt;
        &lt;div style=&quot;padding-right: 1em;&quot;&gt;&lt;strong&gt;10000&lt;/strong&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;progress max=&quot;10000&quot; value=&quot;7824&quot;&gt;&lt;/progress&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Use of donations is decided transparently via the Technical Steering Committee’s public &lt;strong&gt;&lt;a href=&quot;https://github.com/servo/project/blob/main/FUNDING_REQUEST.md&quot;&gt;funding request process&lt;/a&gt;&lt;/strong&gt;, and active proposals are tracked in &lt;a href=&quot;https://github.com/servo/project/issues/187&quot;&gt;servo/project#187&lt;/a&gt;.
For more details, head to our &lt;a href=&quot;https://servo.org/sponsorship/&quot;&gt;Sponsorship page&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-31T00:00:00+00:00</dc:date>
</item>
<item rdf:about="discourse.mozilla.org-topic-149287">
	<title>Firefox Tooling Announcements: MozPhab 2.18.0 Released</title>
	<link>https://discourse.mozilla.org/t/mozphab-2-18-0-released/149287</link>
	<content:encoded>&lt;p&gt;Bugs resolved in Moz-Phab 2.18.0:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/1898339&quot;&gt;bug 1898339&lt;/a&gt; &lt;code&gt;moz-phab&lt;/code&gt; incorrectly uploads symlinks as text files when using Mercurial&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/2063674&quot;&gt;bug 2063674&lt;/a&gt; Consider reminding people of their review queue when they push to try or moz-phab&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/2064223&quot;&gt;bug 2064223&lt;/a&gt; Add pyrefly type checking to moz-phab test suite&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Discuss these changes in &lt;span class=&quot;hashtag-raw&quot;&gt;#engineering-workflow&lt;/span&gt; on Slack or &lt;span class=&quot;hashtag-raw&quot;&gt;#Conduit&lt;/span&gt; Matrix.&lt;/p&gt;
            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;
            &lt;p&gt;&lt;a href=&quot;https://discourse.mozilla.org/t/mozphab-2-18-0-released/149287&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-27T18:43:01+00:00</dc:date>
	<dc:creator>sheehan</dc:creator>
</item>
<item rdf:about="tag:serge-sans-paille.github.io,2026-08-27:/pythran-stories/pros-and-cons-of-unified-build.html">
	<title>Serge Guelton: Pros and Cons of Unified Build</title>
	<link>http://serge-sans-paille.github.io/pythran-stories/pros-and-cons-of-unified-build.html</link>
	<content:encoded>&lt;p&gt;Unified builds (also know as &lt;em&gt;Jumbo Builds&lt;/em&gt;) is a build techniques that aims at
improving build time through the concatenation of several sources as a single
&lt;em&gt;unified&lt;/em&gt; source before compilation.&lt;/p&gt;
&lt;p&gt;The goal is obtained through implicit caching of header instantiation, although it
implies a trade-off with parallelism.&lt;/p&gt;
&lt;p&gt;Let's illustrate this behavior through a simple example, two codes that implement variation of the same approach:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;cm&quot;&gt;/* algo0.cpp */&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cpf&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cpf&quot;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cpf&quot;&gt;&amp;lt;vector&amp;gt;&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;translate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;vector&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;translate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;vector&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;w_out&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;vector&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;w_in&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;[log] through transform&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;w_out&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;w_in&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;translate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;w_out&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;cm&quot;&gt;/* algo1.cpp */&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cpf&quot;&gt;&amp;lt;algorithm&amp;gt;&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cpf&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cpf&quot;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cpf&quot;&gt;&amp;lt;vector&amp;gt;&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;translate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;vector&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;[log] through for_each&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;for_each&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;begin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;](&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Compiling individual files take the following times:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;%&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;hyperfine&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--warmup&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/usr/bin/clang++ -O2 algo0.cpp -c&quot;&lt;/span&gt;
Benchmark&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;:&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/usr/bin/clang++&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-O2&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;algo0.cpp&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-c
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;Time&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;mean&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;±&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;σ&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;267&lt;/span&gt;.7&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ms&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;±&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;7&lt;/span&gt;.4&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ms&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;User:&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;234&lt;/span&gt;.6&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ms,&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;System:&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;30&lt;/span&gt;.4&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ms&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;Range&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;min&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;…&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;max&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;259&lt;/span&gt;.7&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ms&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;…&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;277&lt;/span&gt;.3&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ms&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;runs

%&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;hyperfine&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--warmup&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/usr/bin/clang++ -O2 algo1.cpp -c&quot;&lt;/span&gt;
Benchmark&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;:&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/usr/bin/clang++&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-O2&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;algo1.cpp&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-c
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;Time&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;mean&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;±&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;σ&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;173&lt;/span&gt;.6&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ms&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;±&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;46&lt;/span&gt;.3&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ms&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;User:&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;149&lt;/span&gt;.6&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ms,&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;System:&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;22&lt;/span&gt;.1&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ms&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;Range&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;min&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;…&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;max&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;130&lt;/span&gt;.4&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ms&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;…&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;231&lt;/span&gt;.6&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ms&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;13&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;runs
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Creation of the unified file is just a matter of invoking &lt;tt class=&quot;docutils literal&quot;&gt;cat&lt;/tt&gt;, let's
benchmark the compilation of the unified source:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;%&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;cat&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;algo&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;,1&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;.cpp&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&amp;gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;unified_algo.cpp
%&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;hyperfine&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--warmup&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/usr/bin/clang++ -O2 unified_algo.cpp -c&quot;&lt;/span&gt;
Benchmark&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;:&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/usr/bin/clang++&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-O2&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;unified_algo.cpp&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-c
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;Time&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;mean&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;±&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;σ&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;223&lt;/span&gt;.8&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ms&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;±&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;64&lt;/span&gt;.5&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ms&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;User:&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;193&lt;/span&gt;.0&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ms,&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;System:&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;28&lt;/span&gt;.4&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ms&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;Range&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;min&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;…&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;max&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;160&lt;/span&gt;.8&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ms&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;…&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;301&lt;/span&gt;.8&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ms&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;runs
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;In that simple case, the weight of headers with respect to actual user code is such that
compilation of the unified file takes almost the same time as the max compilation time among each individual file. That's roughly a 1.97x speedup on compilation time.&lt;/p&gt;
&lt;p&gt;That's the promise given by unified builds. And it's a promise held.&lt;/p&gt;
&lt;p&gt;Now let's have a look at the consequences of that deal.&lt;/p&gt;
&lt;p&gt;Beforehand, we still need to introduce another parameter tied to unified builds: the
&lt;em&gt;unification parameter&lt;/em&gt;, say &lt;tt class=&quot;docutils literal&quot;&gt;P&lt;/tt&gt;. That parameter bounds the number of files
that are unified together. Let's imagine we have a hundred of individual source
files compiled with exactly the same compilation flags. Setting &lt;tt class=&quot;docutils literal&quot;&gt;P&lt;/tt&gt; to &lt;tt class=&quot;docutils literal&quot;&gt;5&lt;/tt&gt;
leads to the generation of &lt;tt class=&quot;docutils literal&quot;&gt;20&lt;/tt&gt; unified sources compiled independently.&lt;/p&gt;
&lt;p&gt;Remember the parameter &lt;tt class=&quot;docutils literal&quot;&gt;P&lt;/tt&gt;.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;quality-of-the-generated-code&quot;&gt;
&lt;h3&gt;Quality of the Generated Code&lt;/h3&gt;
&lt;p&gt;Let's create a shared object from &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;algo{0,1}.o&lt;/span&gt;&lt;/tt&gt; (this implies a recompilation with &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;-fPIC&lt;/span&gt;&lt;/tt&gt; of the sources):&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;%&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/usr/bin/clang++&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-O2&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;algo0.cpp&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-c&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-fPIC
%&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/usr/bin/clang++&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-O2&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;algo1.cpp&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-c&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-fPIC
%&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/usr/bin/clang++&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-shared&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;algo&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;,1&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;.o&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-fPIC&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-o&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;algo.so
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And do the same from &lt;tt class=&quot;docutils literal&quot;&gt;unified_algo.o&lt;/tt&gt;:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;%&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/usr/bin/clang++&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-O2&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;unified_algo.cpp&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-c&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-fPIC
%&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/usr/bin/clang++&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-shared&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;unified_algo.o&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-fPIC&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-o&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;unified_algo.so
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;After stripping, comparing the size of the binaries yield a difference of a few bytes. After disassembling, it turns out the compiler decides to inline the call to &lt;tt class=&quot;docutils literal&quot;&gt;void &lt;span class=&quot;pre&quot;&gt;translate(std::vector&amp;lt;std::string&amp;gt;&amp;amp;&lt;/span&gt; w, void &lt;span class=&quot;pre&quot;&gt;(&amp;amp;t)(std::string&amp;amp;))&lt;/span&gt;&lt;/tt&gt; from &lt;tt class=&quot;docutils literal&quot;&gt;algo0.cpp&lt;/tt&gt; when compiling the unified source, something the compiler cannot do when doing split compilation, as it does &lt;em&gt;not&lt;/em&gt; know anything about the implementation of that function.&lt;/p&gt;
&lt;p&gt;Interestingly, compiling with &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;-flto=thin&lt;/span&gt;&lt;/tt&gt; still lead the compiler instantiation through different optimization path.&lt;/p&gt;
&lt;p&gt;Falling back to &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;-flto=full&lt;/span&gt;&lt;/tt&gt; finally yields to the same shared object, which makes sense because Full LTO is very close to performing source unification at the bytecode level &lt;em&gt;and&lt;/em&gt; our sources are very simple. It's not a given though because the actual optimisation pipeline is still different in the two scenario.&lt;/p&gt;
&lt;p&gt;Why does it matter? Depending on the value of &lt;tt class=&quot;docutils literal&quot;&gt;P&lt;/tt&gt;, the compiler will see
different sets of files per unified file, which will result in different binary
code. It's actually even worse: depending on the way we fill those unification
sets, event with the same parameter &lt;tt class=&quot;docutils literal&quot;&gt;P&lt;/tt&gt;, we end up with different binaries.
Let's call that the &lt;em&gt;reunifying problem&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Even if we have an algorithm that seems to guarantee reproducibility, for
instance working on a sorted list of files with a fixed &lt;tt class=&quot;docutils literal&quot;&gt;P&lt;/tt&gt;, variation can
arise: the introduction of a new source file can lead to changes in every
unified file (e.g. if the split is done by chunks and the new file ends up at
the beginning of the file list).&lt;/p&gt;
&lt;p&gt;So &lt;strong&gt;unified builds tend to improve performance, but they do not interact in a gentle way with performance reproducibility&lt;/strong&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;recompilation-times&quot;&gt;
&lt;h3&gt;Recompilation Times&lt;/h3&gt;
&lt;p&gt;Let's denote &lt;tt class=&quot;docutils literal&quot;&gt;S&lt;/tt&gt; as the number of sources and &lt;tt class=&quot;docutils literal&quot;&gt;C&lt;/tt&gt; as the number of CPUs.&lt;/p&gt;
&lt;p&gt;Intuitively, setting &lt;tt class=&quot;docutils literal&quot;&gt;P=1&lt;/tt&gt; yields to the faster recompilation time when a
single file is touched---a usual scenario when developing a new feature.&lt;/p&gt;
&lt;p&gt;On the opposite, setting &lt;tt class=&quot;docutils literal&quot;&gt;P=S&lt;/tt&gt; yields to the slower recompilation time (if &lt;tt class=&quot;docutils literal&quot;&gt;S &amp;gt;&amp;gt;
C&lt;/tt&gt;!) under the same scenario as all sources are recompiled under that
scenario.&lt;/p&gt;
&lt;p&gt;The form of the curve between those two extreme varies depending on the nature
of the files, and the amount of header sharing between individual sources.&lt;/p&gt;
&lt;p&gt;Caching tools like &lt;tt class=&quot;docutils literal&quot;&gt;sccache&lt;/tt&gt; is impacted by the same mechanism: as &lt;tt class=&quot;docutils literal&quot;&gt;P&lt;/tt&gt; gets
greater, more cache misses are hit and more recompilation are done.&lt;/p&gt;
&lt;p&gt;Marginally, introducing a new source also pollutes the cache or triggers
recompilation for the unified source it gets added to, and eventually for all
the unified sources derived from the associated file list. The &lt;em&gt;reunifying problem&lt;/em&gt; strikes again.&lt;/p&gt;
&lt;p&gt;So &lt;strong&gt;unified build make compilation faster, but recompilation slower&lt;/strong&gt;. Setting
&lt;tt class=&quot;docutils literal&quot;&gt;P&lt;/tt&gt; to an acceptable value is important depending on the usage scenario.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;correctness&quot;&gt;
&lt;h4&gt;Correctness&lt;/h4&gt;
&lt;p&gt;Unified build changing the compilation unit frontier, which in turns &lt;em&gt;modifies
the semantic of the program&lt;/em&gt;. This change can be straight-forward or complex to
debug, and even remain silent. I've listed a few instances of the two first
categories below, and a crafted one for the latter category.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;macro-symbol-redefinition&quot;&gt;
&lt;h5&gt;Macro / Symbol Redefinition&lt;/h5&gt;
&lt;p&gt;This one is trivial to spot (a preprocessor-warning is issued for the macro,
and a compiler error is issued for the symbol redefinition):&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;cm&quot;&gt;/* pi0.cpp */&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#define PI 3.141593&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;constexpr&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;double&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;pi&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.141593&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;cm&quot;&gt;/* pi1.cpp */&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#define PI 3.14159265&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;constexpr&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;double&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;pi&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.14159265&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The solution usually lies in moving the definition in a shared header, moving the declaration in a shared header and the definition in a single file, or renaming identifiers to avoid the name conflict. Note that depending on the solution we may change the visibility of the symbols, or impact code readability (assuming the identifier name was perfectly chosen in the first place).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;overload-conflicts&quot;&gt;
&lt;h5&gt;Overload Conflicts&lt;/h5&gt;
&lt;p&gt;This one is also trivial to spot and may hint toward debatable design. But it exists and may be more complex to understand than the above:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;cm&quot;&gt;/* overload0.cpp */&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;doit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;}&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;doit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;cm&quot;&gt;/* overload1.cpp */&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;double&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;doit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;double&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;}&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;double&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;doit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The fix is generally to provide a perfect match for the overload, change the call site to avoid the ambiguity, or rename the functions/change their namespace to make the call site explicit.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;using-namespace-confusion&quot;&gt;
&lt;h5&gt;Using Namespace Confusion&lt;/h5&gt;
&lt;p&gt;This one tends to creep a lot in codebase where &lt;tt class=&quot;docutils literal&quot;&gt;using namespace&lt;/tt&gt; is used. It generates ambiguity among potential symbols.&lt;/p&gt;
&lt;p&gt;A caricatured situation is exhibited with the following situation:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;cm&quot;&gt;/* using.h */&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#pragma once&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;namespace&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;namespace&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;cm&quot;&gt;/* using0.cpp */&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cpf&quot;&gt;&quot;using.h&quot;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;using&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;namespace&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;cm&quot;&gt;/* using1.cpp */&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cpf&quot;&gt;&quot;using.h&quot;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;using&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;namespace&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Once &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;using{0,1}.cpp&lt;/span&gt;&lt;/tt&gt; unified, the second &lt;tt class=&quot;docutils literal&quot;&gt;using namespace a;&lt;/tt&gt; directive is ambiguous.&lt;/p&gt;
&lt;p&gt;A more realistic (but similar in spirit) situation arises when the same symbol is defined in different namespaces:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;cm&quot;&gt;/* namespace0.cpp */&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;namespace&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;a0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;using&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;namespace&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;a0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;foo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;cm&quot;&gt;/* namespace1.cpp */&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;namespace&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;a1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;using&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;namespace&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;a1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bar&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The problem with that category is that the fix is quite unsatisfying: there is no way to limit the scope of a &lt;tt class=&quot;docutils literal&quot;&gt;using&lt;/tt&gt; directive, removing &lt;tt class=&quot;docutils literal&quot;&gt;using&lt;/tt&gt; directive can lead to very verbose codebase, renaming symbols to avoid conflicts goes against the very purpose of namespaces...&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;delicatessen&quot;&gt;
&lt;h5&gt;Delicatessen&lt;/h5&gt;
&lt;p&gt;I spent a lot of time nailing that one down, so I wrote a small reproducer to illustrate the problem.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;%&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;tail&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-n&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;+1&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;*.h&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;*.cpp
&lt;span class=&quot;o&quot;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;header0.h&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&quot;o&quot;&gt;==&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;#ifndef H0&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;#define H0&lt;/span&gt;
namespace&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;mozilla::dom&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;

class&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;Lock&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;final&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;{}&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;#endif&lt;/span&gt;

&lt;span class=&quot;o&quot;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;header1.h&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&quot;o&quot;&gt;==&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;#ifndef H1&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;#define H1&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;#include &quot;header0.h&quot;&lt;/span&gt;

class&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;Lock&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;{}&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

class&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;AutoUnlock&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;Lock&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;*lock_&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;#endif&lt;/span&gt;

&lt;span class=&quot;o&quot;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;src0.cpp&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&quot;o&quot;&gt;==&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;#include &quot;header1.h&quot;&lt;/span&gt;

&lt;span class=&quot;o&quot;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;src1.cpp&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&quot;o&quot;&gt;==&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;#include &quot;header0.h&quot;&lt;/span&gt;

&lt;span class=&quot;o&quot;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;src2.cpp&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&quot;o&quot;&gt;==&lt;/span&gt;
namespace&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;mozilla::dom&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;{}&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
using&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;namespace&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;mozilla::dom&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
using&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;namespace&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;mozilla&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;


&lt;span class=&quot;o&quot;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;src3.cpp&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&quot;o&quot;&gt;==&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;#include &quot;header1.h&quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Let me comment that layout a bit: We basically have two different classes named &lt;tt class=&quot;docutils literal&quot;&gt;Lock&lt;/tt&gt;: one lives in the &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;mozilla::dom&lt;/span&gt;&lt;/tt&gt; namespace, and one lives at top-level. In &lt;tt class=&quot;docutils literal&quot;&gt;header1.h&lt;/tt&gt;, although we include the definition of &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;mozilla::dom::Lock&lt;/span&gt;&lt;/tt&gt;, we also get the definition of &lt;tt class=&quot;docutils literal&quot;&gt;::Lock&lt;/tt&gt;, so a straight reference to &lt;tt class=&quot;docutils literal&quot;&gt;Lock&lt;/tt&gt; is not ambiguous.&lt;/p&gt;
&lt;p&gt;Concerning source files, &lt;tt class=&quot;docutils literal&quot;&gt;src0.cpp&lt;/tt&gt;, &lt;tt class=&quot;docutils literal&quot;&gt;src1.cpp&lt;/tt&gt; and &lt;tt class=&quot;docutils literal&quot;&gt;src3.cpp&lt;/tt&gt; just include headers while &lt;tt class=&quot;docutils literal&quot;&gt;src2.cpp&lt;/tt&gt; contains the infamous &lt;tt class=&quot;docutils literal&quot;&gt;using namespace &lt;span class=&quot;pre&quot;&gt;modilla::dom;&lt;/span&gt;&lt;/tt&gt; statement.&lt;/p&gt;
&lt;p&gt;Let's now consider various partition of the file list &lt;tt class=&quot;docutils literal&quot;&gt;src0.cpp, src1.cpp, src2.cpp, src3.cpp&lt;/tt&gt;:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;%&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;perm&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;,1&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;,3&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;,1,2&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;,2,3&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;,1,2,3&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;printf&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;unifying &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$perm&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;... &quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;cat&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;eval&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;src&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$perm&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;.cpp&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;clang++&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-xc++&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-fsyntax-only&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;&amp;gt;/dev/null&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ok&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;||&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ko&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;
unifying&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;,1...&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ok
unifying&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;,3...&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ko
unifying&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;,1,2...&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ok
unifying&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;,2,3...&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ko
unifying&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;,1,2,3...&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ok
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Isn't that amazing? Some intermediate unification, namely &lt;tt class=&quot;docutils literal&quot;&gt;0,1;2,3&lt;/tt&gt; and &lt;tt class=&quot;docutils literal&quot;&gt;0;1,2,3&lt;/tt&gt; fail, but other unifications, namely &lt;tt class=&quot;docutils literal&quot;&gt;0,1,2,3&lt;/tt&gt; and &lt;tt class=&quot;docutils literal&quot;&gt;0;1,2,3&lt;/tt&gt; fail. Did you notice that both non-unified and full unified build succeeds, while some intermediate unification fail? What a disaster. This basically mean that given a set of sources, and without putting restriction on the language (like banning &lt;tt class=&quot;docutils literal&quot;&gt;using&lt;/tt&gt; statement), the only way to be sure that a unified build always succeeds whatever the chosen partition is to test every partition. Not very satisfying.&lt;/p&gt;
&lt;p&gt;As a side effect, we can also deduce that adding a new source file to a set of files to be unified can break compilation in files that used to compile fine. That's another instance of the &lt;em&gt;reunifying problem&lt;/em&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;changing-semantic&quot;&gt;
&lt;h5&gt;Changing Semantic&lt;/h5&gt;
&lt;p&gt;It is quite easy to derive from the above an example whose semantic change once unified. Let's slightly change the overload conflict example from above:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;cm&quot;&gt;/* silent0.cpp */&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cpf&quot;&gt;&amp;lt;cstdio&amp;gt;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;doit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;putchar&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sc&quot;&gt;'0'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;}&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;doit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;cm&quot;&gt;/* silent1.cpp */&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cpf&quot;&gt;&amp;lt;cstdio&amp;gt;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;double&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;doit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;double&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;putchar&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sc&quot;&gt;'1'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;}&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;double&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;doit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;When compiled independently, this results in a binary that prints a &lt;tt class=&quot;docutils literal&quot;&gt;0&lt;/tt&gt; and a &lt;tt class=&quot;docutils literal&quot;&gt;1&lt;/tt&gt; on the screen. But when compiled as a unified source, we only get a pair of &lt;tt class=&quot;docutils literal&quot;&gt;0&lt;/tt&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;concluding-words&quot;&gt;
&lt;h4&gt;Concluding Words&lt;/h4&gt;
&lt;p&gt;Remember that discussion between Luke and Yoda?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;LUKE
Vader. Is the dark side stronger?&lt;/p&gt;
&lt;p&gt;YODA
No… no… no. Quicker, easier, more seductive.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That's exactly my thoughts on unified builds: they give you quick wins in
term of cold build speed and give faster builds. That's very good
properties, and you rip the benefit of them very quickly. Then you realize
that you're tied to a monster in terms of maintainability and developer
experience, but you're already addict to the speed it gave you.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</content:encoded>
	<dc:date>2026-08-26T22:00:00+00:00</dc:date>
	<dc:creator>serge-sans-paille</dc:creator>
</item>
<item rdf:about="https://blog.mozilla.org/performance/?p=561">
	<title>Mozilla Performance Blog: The Road to Better Performance Profiles – Part 2</title>
	<link>https://blog.mozilla.org/performance/2026/08/26/the-road-to-better-performance-profiles-part-2/</link>
	<content:encoded>&lt;p&gt;Following the symbolication work from &lt;a href=&quot;https://blog.mozilla.org/performance/2026/02/03/the-road-to-better-performance-profiles/&quot;&gt;Part 1&lt;/a&gt;, I undertook two more efforts to improve performance profiles for the Performance team.&lt;/p&gt;
&lt;h3&gt;&lt;b&gt;Native Profiling (Bugs &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2030161&quot;&gt;2030161&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2030166&quot;&gt;2030166&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2047451&quot;&gt;2047451&lt;/a&gt;, and &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2030423&quot;&gt;2030423&lt;/a&gt;)&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;The first effort was to use platform-specific profilers to generate profiles in CI of browsers running the &lt;a href=&quot;https://browserbench.org/Speedometer3.1/&quot;&gt;Speedometer 3 benchmark&lt;/a&gt;, the industry-leading benchmark for browser performance. These ‘native’ profiles provide rich, system-wide insight into how browsers handle Speedometer 3, helping developers analyze and diagnose behaviour. They also provide us with profiles we can use to generate comparison reports for patches. We needed &lt;a href=&quot;https://firefox-source-docs.mozilla.org/testing/perfdocs/raptor.html&quot;&gt;Raptor&lt;/a&gt; to generate native profiles for all of our platforms, namely Windows, macOS, Linux, and Android.&lt;/p&gt;
&lt;p&gt;At a high level, the pipeline to generate native profiles is as follows:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Start the system profiler.&lt;/li&gt;
&lt;li&gt;Run Speedometer 3 on Firefox or Chromium as Release using Raptor and &lt;a href=&quot;https://github.com/sitespeedio/browsertime&quot;&gt;Browsertime&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Stop the system profiler.&lt;/li&gt;
&lt;li&gt;Symbolicate the profiles using &lt;code&gt;&lt;a href=&quot;https://github.com/mstange/samply&quot;&gt;samply&lt;/a&gt;&lt;/code&gt; and the corresponding build symbols.&lt;/li&gt;
&lt;li&gt;Post-process the symbolicated profiles using &lt;a href=&quot;https://github.com/firefox-devtools/profiler/blob/24e597342e8f862bbc0163470ab9fef766514dc1/src/node-tools/profiler-edit.ts#L1-L487&quot;&gt;&lt;code&gt;profiler-edit&lt;/code&gt;&lt;/a&gt; (formerly &lt;code&gt;symbolicator-cli&lt;/code&gt;) and create compact and labelled variants of the profiles.&lt;/li&gt;
&lt;li&gt;Upload the processed profiles as artifacts.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To run tests with native profiling, you can use &lt;code&gt;./mach try fuzzy --full&lt;/code&gt; or &lt;code&gt;./mach try perf --full&lt;/code&gt; and run any test that has the &lt;code&gt;-native-profiling&lt;/code&gt; suffix.&lt;/p&gt;
&lt;p&gt;On Windows, we produced profiles using &lt;code&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/windows-hardware/test/wpt/xperf-command-line-reference&quot;&gt;xperf&lt;/a&gt;&lt;/code&gt;, a tracer that uses the &lt;a href=&quot;https://learn.microsoft.com/en-us/windows-hardware/test/wpt/event-tracing-for-windows&quot;&gt;Event Tracing for Windows framework&lt;/a&gt; (ETW) to capture system-level data on applications running on Windows. To use &lt;code&gt;xperf&lt;/code&gt; with our CI machines, scheduled tasks to run the tracer were configured in Puppet (see our &lt;code&gt;&lt;a href=&quot;https://github.com/mozilla-platform-ops/ronin_puppet/tree/b70c4621e47e47100f3ef643620bcd9f5439029a/modules/win_hw_profiling&quot;&gt;ronin_puppet&lt;/a&gt;&lt;/code&gt; repository).&lt;/p&gt;
&lt;p&gt;After adding support to Raptor to trigger these &lt;code&gt;xperf&lt;/code&gt; tasks, we can start a trace and run the Speedometer 3 benchmark on Firefox or Chromium as Release (our custom Chromium build configured with release flags) using Browsertime. The Speedometer 3 benchmark runs 20 times, with each run in a separate browser cycle, to ensure we collect enough samples before stopping the trace.&lt;/p&gt;
&lt;p&gt;Once completed, &lt;code&gt;xperf&lt;/code&gt; provides a user trace and a kernel trace, which are combined into a full trace. We can then use &lt;code&gt;samply&lt;/code&gt; to convert and symbolicate these traces into Firefox Profiler profiles, complete with markers and JIT information (Figure 1 and Figure 2).&lt;/p&gt;
&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_564&quot; style=&quot;width: 3142px;&quot;&gt;&lt;img alt=&quot;Native profile of Speedometer 3 running on Firefox on Windows&quot; class=&quot;wp-image-564 size-full&quot; height=&quot;2122&quot; src=&quot;http://blog.mozilla.org/performance/files/2026/08/speedometer-3-on-firefox-windows-native-profile.png&quot; width=&quot;3132&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-564&quot;&gt;Figure 1: Native profile of Speedometer 3 running on Firefox on Windows&lt;/p&gt;&lt;/div&gt;
&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_565&quot; style=&quot;width: 3142px;&quot;&gt;&lt;img alt=&quot;Native profile of Speedometer 3 running on Chromium as Release on Windows&quot; class=&quot;wp-image-565 size-full&quot; height=&quot;2122&quot; src=&quot;http://blog.mozilla.org/performance/files/2026/08/speedometer-3-on-custom-car-windows-native-profile.png&quot; width=&quot;3132&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-565&quot;&gt;Figure 2: Native profile of Speedometer 3 running on Chromium as Release on Windows&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;On macOS, we took a similar approach. We used &lt;code&gt;samply&lt;/code&gt; to collect and symbolicate profiles. After implementing a &lt;a href=&quot;https://github.com/mozilla-firefox/firefox/commit/e782ba253fa2730b7d7a0baec617566f5f5955b2&quot;&gt;workaround&lt;/a&gt; to allow &lt;code&gt;samply&lt;/code&gt; to profile across multiple browser cycles and sorting out permission issues in CI, &lt;code&gt;samply&lt;/code&gt; could profile Speedometer 3 on Firefox with minimal CI configuration and symbolicate the profiles afterwards.&lt;/p&gt;
&lt;p&gt;On Linux, we ran &lt;code&gt;perf&lt;/code&gt; with elevated privileges to collect profiling data system-wide before using &lt;code&gt;samply&lt;/code&gt; to symbolicate and convert the data into a &lt;a href=&quot;https://profiler.firefox.com/&quot;&gt;Firefox Profiler&lt;/a&gt; profile. Other than enabling our CI machines to run &lt;code&gt;sudo perf&lt;/code&gt;, no additional machine configuration or workarounds were needed.&lt;/p&gt;
&lt;p&gt;For Android, we took a slightly different approach. We used &lt;code&gt;simpleperf&lt;/code&gt; to collect profiles on our mobile devices in CI (Samsung A55, Google Pixel 6, and Samsung S24) and &lt;code&gt;samply&lt;/code&gt; to symbolicate them.&lt;/p&gt;
&lt;p&gt;Initially, we wanted to profile 20 Speedometer 3 runs in a single &lt;code&gt;simpleperf&lt;/code&gt; session, matching our desktop profiling workflow, but this proved unreliable during testing, as the on-device profiling appeared to be resource-intensive and would intermittently fail or crash.&lt;/p&gt;
&lt;p&gt;We decided to use our &lt;code&gt;simpleperf&lt;/code&gt; support introduced in Browsertime in Part 1 to profile the 20 individual test suites that make up a single Speedometer 3 run separately, which proved to be more stable (Figure 3). In the long term, we plan to support profiling complete Speedometer 3 runs with &lt;code&gt;simpleperf&lt;/code&gt; on Android, bringing the workflow closer to what we currently use for desktop profiling (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2032007&quot;&gt;Bug 2032007&lt;/a&gt;). We will introduce native profiles for Chromium as Release (mobile) on Android in &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2067157&quot;&gt;Bug 2067157&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;wp-caption alignnone&quot; id=&quot;attachment_576&quot; style=&quot;width: 3142px;&quot;&gt;&lt;img alt=&quot;Native profile of the TodoMVC-Vue Speedometer 3 test running on Firefox for Android&quot; class=&quot;wp-image-576 size-full&quot; height=&quot;2122&quot; src=&quot;http://blog.mozilla.org/performance/files/2026/08/speedometer-3-suite-on-fenix-android-native-profile.png&quot; width=&quot;3132&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-576&quot;&gt;Figure 3: Native profile of the &lt;code&gt;TodoMVC-Vue&lt;/code&gt; Speedometer 3 test running on Fenix (Firefox for Android)&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;To make our Speedometer 3 profiles clearer and more helpful, we post-process them with &lt;code&gt;profiler-edit&lt;/code&gt;, which adds labels (groupings of JS frames) to the profile (Figure 5) and also provides a more compact version (Figure 4) where all runs are placed on the same process track.&lt;/p&gt;
&lt;div class=&quot;wp-caption alignnone&quot; id=&quot;attachment_569&quot; style=&quot;width: 3142px;&quot;&gt;&lt;img alt=&quot;Compact Speedometer 3 native profile&quot; class=&quot;wp-image-569 size-full&quot; height=&quot;2122&quot; src=&quot;http://blog.mozilla.org/performance/files/2026/08/speedometer-3-on-firefox-windows-compact-native-profile.png&quot; width=&quot;3132&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-569&quot;&gt;Figure 4: Compact Speedometer 3 native profile&lt;/p&gt;&lt;/div&gt;
&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_570&quot; style=&quot;width: 3142px;&quot;&gt;&lt;img alt=&quot;Labelled Speedometer 3 native profile&quot; class=&quot;wp-image-570 size-full&quot; height=&quot;2122&quot; src=&quot;http://blog.mozilla.org/performance/files/2026/08/speedometer-3-on-firefox-windows-labelled-native-profile.png&quot; width=&quot;3132&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-570&quot;&gt;Figure 5: Labelled Speedometer 3 native profile&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;In CI, we routinely generate Firefox profiles on &lt;a href=&quot;https://treeherder.mozilla.org/jobs?repo=autoland&amp;amp;tier=1%2C2%2C3&amp;amp;searchStr=-native-profiling&quot;&gt;autoland&lt;/a&gt; (Figure 6) and Chromium as Release profiles on &lt;a href=&quot;https://treeherder.mozilla.org/jobs?repo=mozilla-central&amp;amp;tier=1%2C2%2C3&amp;amp;searchStr=-native-profiling&quot;&gt;mozilla-central&lt;/a&gt;. These native profiles have already been used to produce Speedometer 3 comparison reports (Figure 7) and investigate incidents in CI. Currently, profiles for Chromium as Release on macOS and Linux are works in progress (see &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2050869&quot;&gt;Bug 2050869&lt;/a&gt; and &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2065970&quot;&gt;Bug 2065970&lt;/a&gt;, respectively).&lt;/p&gt;
&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_567&quot; style=&quot;width: 3142px;&quot;&gt;&lt;img alt=&quot;Native profiles running routinely on autoland&quot; class=&quot;wp-image-567 size-full&quot; height=&quot;2122&quot; src=&quot;http://blog.mozilla.org/performance/files/2026/08/profiles-on-autoland-1.png&quot; width=&quot;3132&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-567&quot;&gt;Figure 6: Native profiles running routinely on autoland&lt;/p&gt;&lt;/div&gt;
&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_568&quot; style=&quot;width: 3142px;&quot;&gt;&lt;img alt=&quot;Comparison reports using native profiles (preview courtesy of Markus Stange)&quot; class=&quot;wp-image-568 size-full&quot; height=&quot;2122&quot; src=&quot;http://blog.mozilla.org/performance/files/2026/08/comparsion-report.png&quot; width=&quot;3132&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-568&quot;&gt;Figure 7:  Comparison reports using native profiles (preview courtesy of &lt;a href=&quot;https://github.com/mstange&quot;&gt;Markus Stange)&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;h3&gt;&lt;b&gt;Modernizing mozgeckoprofiler (Bug &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1992000&quot;&gt;1992000&lt;/a&gt;)&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;The second effort was to fully modernize symbolication in &lt;code&gt;&lt;a href=&quot;https://firefox-source-docs.mozilla.org/mozbase/mozgeckoprofiler.html&quot;&gt;mozgeckoprofiler&lt;/a&gt;&lt;/code&gt;, the module responsible for symbolication across four performance testing frameworks: Raptor, &lt;a href=&quot;https://firefox-source-docs.mozilla.org/testing/perfdocs/talos.html&quot;&gt;Talos&lt;/a&gt;, &lt;a href=&quot;https://firefox-source-docs.mozilla.org/testing/xpcshell/index.html&quot;&gt;XPCShell&lt;/a&gt;, and &lt;a href=&quot;https://firefox-source-docs.mozilla.org/testing/mochitest-plain/index.html&quot;&gt;Mochitest&lt;/a&gt;. This mainly involved phasing out &lt;a href=&quot;https://github.com/mozilla-services/eliot&quot;&gt;Eliot&lt;/a&gt;, an older symbolication API service scheduled to sunset in the near future, and fully transitioning the module’s symbolication workflow to use &lt;code&gt;samply&lt;/code&gt; and &lt;code&gt;profiler-edit&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In Part 1, we added support that allowed Raptor and Talos to symbolicate their profiles using our new approach. This left two main cases that were still handled by Eliot: XPCShell and Mochitest symbolication, and local profile symbolication.&lt;/p&gt;
&lt;p&gt;Implementing XPCShell and Mochitest profile symbolication (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1998767&quot;&gt;Bug 1998767&lt;/a&gt;) was relatively straightforward. We followed the same approach used for Talos and Raptor by adding our new symbolication dependencies to XPCShell and Mochitest taskgraph configurations. Since these tests and their profiles (Figure 8) can be generated in parallel, we made sure to perform symbolication only after all profiles had been generated. You can try these jobs by running &lt;code&gt;./mach try fuzzy --profiler&lt;/code&gt; and selecting any XPCShell and/or Mochitest job (Figure 9).&lt;/p&gt;
&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_572&quot; style=&quot;width: 3142px;&quot;&gt;&lt;img alt=&quot;Symbolicated Mochitest profile&quot; class=&quot;wp-image-572 size-full&quot; height=&quot;2122&quot; src=&quot;http://blog.mozilla.org/performance/files/2026/08/mochitest-profile-on-linux.png&quot; width=&quot;3132&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-572&quot;&gt;Figure 8:  Symbolicated Mochitest profile&lt;/p&gt;&lt;/div&gt;
&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_571&quot; style=&quot;width: 3142px;&quot;&gt;&lt;img alt=&quot;Mochitest tests running in CI produce symbolicated profiles&quot; class=&quot;wp-image-571 size-full&quot; height=&quot;2122&quot; src=&quot;http://blog.mozilla.org/performance/files/2026/08/mochitest-profiles-on-autoland.png&quot; width=&quot;3132&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-571&quot;&gt;Figure 9:  Mochitest tests running in CI produce symbolicated profiles&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Originally, when generating profiles locally from one of our performance frameworks, Eliot was used to symbolicate those profiles. To replace it with our new approach, we needed to bootstrap &lt;code&gt;samply&lt;/code&gt; and &lt;code&gt;profiler-edit&lt;/code&gt; onto local developer machines. Now, when you run &lt;code&gt;./mach bootstrap&lt;/code&gt;, the latest builds of &lt;code&gt;samply&lt;/code&gt; and &lt;code&gt;profiler-edit&lt;/code&gt; available in CI for your platform are automatically installed under the local &lt;code&gt;.mozbuild/&lt;/code&gt; directory. With this change, the use of Eliot in PerfTest has been completely replaced by our new symbolication approach, and Eliot can safely be retired from &lt;code&gt;mozgeckoprofiler&lt;/code&gt;!&lt;/p&gt;
&lt;h3&gt;What’s Next&lt;/h3&gt;
&lt;p&gt;These patches are part of an ongoing effort to make performance profiling easier, more standardized, and more useful for Firefox developers. Here are a few related bugs to keep an eye on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2050869&quot;&gt;Bug 2050869&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2065970&quot;&gt;Bug 2065970&lt;/a&gt;, and &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2067157&quot;&gt;Bug 2067157&lt;/a&gt;, we’ll add Chromium-as-Release profiling support for macOS, Linux, and Android, respectively.&lt;/li&gt;
&lt;li&gt;In &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2066906&quot;&gt;Bug 2066906&lt;/a&gt;, we’ll officially remove Eliot as &lt;code&gt;mozgeckoprofiler&lt;/code&gt;’s fallback symbolication service.&lt;/li&gt;
&lt;li&gt;In &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2032007&quot;&gt;Bug 2032007&lt;/a&gt;, we’ll add support for profiling full Speedometer 3 runs with &lt;code&gt;simpleperf&lt;/code&gt;, rather than producing a profile for each test suite.&lt;/li&gt;
&lt;li&gt;In &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2036104&quot;&gt;Bug 2036104&lt;/a&gt;, we’ll continue developing reports that compare native profiles across patches, making it easier for developers to investigate performance differences and regressions.&lt;/li&gt;
&lt;/ul&gt;</content:encoded>
	<dc:date>2026-08-26T19:28:35+00:00</dc:date>
	<dc:creator>Abhishek Nimalan</dc:creator>
</item>
<item rdf:about="tag:this-week-in-rust.org,2026-08-26:/blog/2026/08/26/this-week-in-rust-666/">
	<title>This Week In Rust: This Week in Rust 666</title>
	<link>https://this-week-in-rust.org/blog/2026/08/26/this-week-in-rust-666/</link>
	<content:encoded>&lt;p&gt;Hello and welcome to another issue of &lt;em&gt;This Week in Rust&lt;/em&gt;!
&lt;a href=&quot;https://www.rust-lang.org/&quot;&gt;Rust&lt;/a&gt; is a programming language empowering everyone to build reliable and efficient software.
This is a weekly summary of its progress and community.
Want something mentioned? Tag us at
&lt;a href=&quot;https://bsky.app/profile/thisweekinrust.bsky.social&quot;&gt;@thisweekinrust.bsky.social&lt;/a&gt; on Bluesky or
&lt;a href=&quot;https://mastodon.social/@thisweekinrust&quot;&gt;@ThisWeekinRust&lt;/a&gt; on mastodon.social, or
&lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;send us a pull request&lt;/a&gt;.
Want to get involved? &lt;a href=&quot;https://github.com/rust-lang/rust/blob/main/CONTRIBUTING.md&quot;&gt;We love contributions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This Week in Rust&lt;/em&gt; is openly developed &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;on GitHub&lt;/a&gt; and archives can be viewed at &lt;a href=&quot;https://this-week-in-rust.org/&quot;&gt;this-week-in-rust.org&lt;/a&gt;.
If you find any errors in this week's issue, &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust/pulls&quot;&gt;please submit a PR&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Want TWIR in your inbox? &lt;a href=&quot;https://this-week-in-rust.us11.list-manage.com/subscribe?u=fd84c1c757e02889a9b08d289&amp;amp;id=0ed8b72485&quot;&gt;Subscribe here&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#updates-from-rust-community&quot;&gt;Updates from Rust Community&lt;/a&gt;&lt;/h4&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#official&quot;&gt;Official&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.rust-lang.org/2026/08/26/announcing-our-first-maintainers-in-residence/&quot;&gt;Announcing our first Maintainers in Residence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.rust-lang.org/2026/08/21/enabling-next-solver-on-nightly/&quot;&gt;Enabling the next-generation trait solver on nightly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.rust-lang.org/2026/08/20/supply-chain-attack-on-arrayref/&quot;&gt;Supply chain attack on arrayref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.rust-lang.org/inside-rust/2026/08/19/overloading-experiment/&quot;&gt;Rust Function Overloading - Call for Experimentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#projecttooling-updates&quot;&gt;Project/Tooling Updates&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://hacks.mozilla.org/2026/08/intent-to-ship-jpeg-xl/&quot;&gt;Intent to Ship: JPEG XL – Mozilla Hacks - the Web developer blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#observationsthoughts&quot;&gt;Observations/Thoughts&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bughunters.google.com/blog/scaling-memory-safety&quot;&gt;Scaling Memory Safety: AI-Assisted Rewrites of C/C++ Dependencies to Rust&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pointersgonewild.com/2026-08-25-replacing-a-rust-enum-with-a-64-bit-word/&quot;&gt;Replacing a Rust Enum with a 64-bit Word Made My Interpreter 17% Faster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.goose.love/posts/three-seconds-of-compilation-shaved-by-metadata-analysis/&quot;&gt;3 Seconds of compilation shaved by metadata analysis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://msj.prose.sh/epaper-retained-state&quot;&gt;Your E-Paper Panel Isn't Broken: How Retained State Makes Drivers Look Buggy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developerlife.com/2026/08/22/to-async-or-not-to-async-rust-mcp-server/&quot;&gt;To Async or Not to Async: Building a Rust MCP Server for rust-analyzer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://akesson.io/wordtree/&quot;&gt;One trie, three jobs, zero benchmarks won&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kerkour.com/fixing-rust-supply-chain-security&quot;&gt;Fixing Rust's supply chain security: The good, the bad and the ugly&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rust-walkthroughs&quot;&gt;Rust Walkthroughs&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/yetmike/the-22-rust-errors-every-beginner-hits-in-the-order-they-hit-them-13gi&quot;&gt;Rust errors every beginner hits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.sheerluck.dev/posts/understanding-rust-variables-and-types-by-building-a-scientific-calculator/&quot;&gt;Build a Scientific Calculator in Rust - Understanding Variables and Types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://flakm.com/posts/sqlx_caches_til/&quot;&gt;Proving SQLx’s Statement Cache with bpftrace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://labs.leaningtech.com/blog/browserpod-rust&quot;&gt;Beyond WASI: Rust applications in-browser&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#miscellaneous&quot;&gt;Miscellaneous&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://rustfoundation.org/media/jetbrains-partners-with-the-rust-foundation-for-an-ai-livestream-series/&quot;&gt;JetBrains Partners with the Rust Foundation for an AI Livestream&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#crate-of-the-week&quot;&gt;Crate of the Week&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;This week's crate is &lt;a href=&quot;https://github.com/swiftlogicsystems/swifttopology&quot;&gt;swift-topomap&lt;/a&gt;, a microarchitectural observability tool.&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/t/crate-of-the-week/2704/1658&quot;&gt;Ankur Rathore&lt;/a&gt; for the self-suggestion!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://users.rust-lang.org/t/crate-of-the-week/2704&quot;&gt;Please submit your suggestions and votes for next week&lt;/a&gt;!&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#calls-for-testing&quot;&gt;Calls for Testing&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;An important step for RFC implementation is for people to experiment with the
implementation and give feedback, especially before stabilization.&lt;/p&gt;
&lt;p&gt;If you are a feature implementer and would like your RFC to appear in this list, add a
&lt;code&gt;call-for-testing&lt;/code&gt; label to your RFC along with a comment providing testing instructions and/or
guidance on which aspect(s) of the feature need testing.&lt;/p&gt;
&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rust&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen&quot;&gt;Rust&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/issues/155451&quot;&gt;Tracking Issue for &lt;code&gt;--remap-path-scope&lt;/code&gt; in rustdoc&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#cargo&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen&quot;&gt;Cargo&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/issues/15495&quot;&gt;Tracking Issue for &lt;code&gt;-Zembed-metadata&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;No calls for testing were issued this week by
&lt;a href=&quot;https://github.com/rust-lang/rustup/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen&quot;&gt;Rustup&lt;/a&gt; or
&lt;a href=&quot;https://github.com/rust-lang/rfcs/issues?q=label%3Acall-for-testing%20state%3Aopen&quot;&gt;Rust language RFCs&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust/issues&quot;&gt;Let us know&lt;/a&gt; if you would like your feature to be tracked as a part of this list.&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#call-for-participation-projects-and-speakers&quot;&gt;Call for Participation; projects and speakers&lt;/a&gt;&lt;/h4&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#cfp-projects&quot;&gt;CFP - Projects&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Always wanted to contribute to open-source projects but did not know where to start?
Every week we highlight some tasks from the Rust community for you to pick and get started!&lt;/p&gt;
&lt;p&gt;Some of these tasks may also have mentors available, visit the task page for more information.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lacs-project/sysknife/issues/237&quot;&gt;sysknife - Split the Ubuntu-only actions out of DEBIAN_ONLY_ACTIONS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lacs-project/sysknife/issues/238&quot;&gt;sysknife - Make Debian eligible: a version floor of 12, and a reason in is_supported&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lacs-project/sysknife/issues/239&quot;&gt;sysknife - Debian's default firewall is nftables, and the catalogue has no nftables vocabulary&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kkir/stomatopod/issues/40&quot;&gt;stomatopod - Add a Docker Compose healthcheck on /health&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kkir/stomatopod/issues/41&quot;&gt;stomatopod - Add a custom GitHub social preview image&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kkir/stomatopod/issues/42&quot;&gt;stomatopod - Document the v0.1.0 GHCR tag next to :latest&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are a Rust project owner and are looking for contributors, please submit tasks &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust?tab=readme-ov-file#call-for-participation-guidelines&quot;&gt;here&lt;/a&gt; or through a &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;PR to TWiR&lt;/a&gt; or by reaching out on &lt;a href=&quot;https://bsky.app/profile/thisweekinrust.bsky.social&quot;&gt;Bluesky&lt;/a&gt; or &lt;a href=&quot;https://mastodon.social/@thisweekinrust&quot;&gt;Mastodon&lt;/a&gt;!&lt;/p&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#cfp-events&quot;&gt;CFP - Events&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Are you a new or experienced speaker looking for a place to share something cool? This section highlights events that are being planned and are accepting submissions to join their event as a speaker.&lt;/p&gt;



&lt;p&gt;If you are an event organizer hoping to expand the reach of your event, please submit a link to the website through a &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;PR to TWiR&lt;/a&gt; or by reaching out on &lt;a href=&quot;https://bsky.app/profile/thisweekinrust.bsky.social&quot;&gt;Bluesky&lt;/a&gt; or &lt;a href=&quot;https://mastodon.social/@thisweekinrust&quot;&gt;Mastodon&lt;/a&gt;!&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#updates-from-the-rust-project&quot;&gt;Updates from the Rust Project&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;593 pull requests were &lt;a href=&quot;https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2026-08-18..2026-08-25&quot;&gt;merged in the last week&lt;/a&gt;&lt;/p&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#compiler&quot;&gt;Compiler&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161274&quot;&gt;add a cache to the &lt;code&gt;WfPredicates&lt;/code&gt; visitor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/157949&quot;&gt;allow self in const generics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/159940&quot;&gt;eliminate some buggy &lt;code&gt;unreachable!()&lt;/code&gt;s in &lt;code&gt;expand_&lt;/code&gt;(&lt;code&gt;option_&lt;/code&gt;)&lt;code&gt;env()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160619&quot;&gt;enable &lt;code&gt;-Znext-solver&lt;/code&gt; on nightly by default&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161211&quot;&gt;optimize &lt;code&gt;DeepRejectCtxt&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#library&quot;&gt;Library&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/159098&quot;&gt;add &lt;code&gt;Arc/Rc::strong_count_from_raw&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160136&quot;&gt;add &lt;code&gt;Default&lt;/code&gt; implementation for &lt;code&gt;std::sync::Once&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/156160&quot;&gt;add symmetric PartialEq impls for &lt;code&gt;Vec&lt;/code&gt;, &lt;code&gt;&amp;amp;[T]&lt;/code&gt;, &lt;code&gt;&amp;amp;mut [T]&lt;/code&gt; versus &lt;code&gt;Cow&amp;lt;'_, [T]&amp;gt;&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/159954&quot;&gt;core: implement float conversion methods&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160563&quot;&gt;make &lt;code&gt;BorrowedCursor&amp;lt;'a, T&amp;gt;&lt;/code&gt; covariant in &lt;code&gt;'a&lt;/code&gt; and drop an indirection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160819&quot;&gt;rework &lt;code&gt;div_ceil&lt;/code&gt; for nonzero integers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160299&quot;&gt;stabilize &lt;code&gt;bool::toggle&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/155499&quot;&gt;stabilize never type&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#cargo_1&quot;&gt;Cargo&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17382&quot;&gt;&lt;code&gt;config&lt;/code&gt;: Add build.fingerprint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17370&quot;&gt;fix &lt;code&gt;git gc&lt;/code&gt; with &lt;code&gt;safe.bareRepository=explicit&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17377&quot;&gt;install cargo tools with locked dependencies&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rustdoc&quot;&gt;Rustdoc&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/159583&quot;&gt;add new &lt;code&gt;invalid_markdown_table&lt;/code&gt; rustdoc lint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160639&quot;&gt;only generate search DOM elements if the search is actually needed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161340&quot;&gt;enable scrolling only on table/code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161553&quot;&gt;fix issue preventing &quot;read more&quot; links from generating&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rustfmt&quot;&gt;Rustfmt&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustfmt/pull/7063&quot;&gt;fix ICE on &lt;code&gt;for await&lt;/code&gt; loops with separated keyword tokens&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustfmt/pull/7005&quot;&gt;fix brace placement for multiline control flow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustfmt/pull/6802&quot;&gt;fix comments rewritten too long&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustfmt/pull/7066&quot;&gt;correct the span used when rewriting &lt;code&gt;ast::TyKind::FnPtr&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustfmt/pull/7064&quot;&gt;correct visibility and defaultness order on associated impl type alias&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustfmt/pull/7042&quot;&gt;inconsistent formatting of doc comments in macros&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#clippy&quot;&gt;Clippy&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/159642&quot;&gt;optimize Clippy with PGO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17445&quot;&gt;&lt;code&gt;unnecessary_fold&lt;/code&gt;: lint folding over an Option's iterator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17589&quot;&gt;&lt;code&gt;unused_trait_names&lt;/code&gt;: make the suggestion nicer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17575&quot;&gt;avoid &lt;code&gt;manual_assert_eq&lt;/code&gt; for byte slice-like types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17564&quot;&gt;don't fire &lt;code&gt;manual_contains&lt;/code&gt; when both sides use the slice element&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17601&quot;&gt;fix &lt;code&gt;large_futures&lt;/code&gt; ICE with the next solver&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17547&quot;&gt;avoid &lt;code&gt;double_must_use&lt;/code&gt; in macro-generated code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17598&quot;&gt;make &lt;code&gt;needless_bool&lt;/code&gt; less aggressive for chained &lt;code&gt;if&lt;/code&gt;s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17584&quot;&gt;perf: check &lt;code&gt;first_node_in_macro&lt;/code&gt; before the root macro walk in &lt;code&gt;useless_format&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17127&quot;&gt;remove broken suggestion for &lt;code&gt;blocks_in_conditions&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17600&quot;&gt;suggest &lt;code&gt;hypot&lt;/code&gt; for &lt;code&gt;x.mul_add(x, y * y).sqrt()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17537&quot;&gt;suggest &lt;code&gt;is_ok/is_err&lt;/code&gt; for boolean Result mappings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/16493&quot;&gt;trigger &lt;code&gt;integer_division_remainder_used&lt;/code&gt; on &lt;code&gt;DivAssign&lt;/code&gt;/&lt;code&gt;RemAssign&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rust-analyzer&quot;&gt;Rust-Analyzer&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23202&quot;&gt;&lt;code&gt;hir&lt;/code&gt;: Use expression store of parent body if available&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23216&quot;&gt;adds-arrow unmap ranges when fn inside macro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23186&quot;&gt;allow &lt;code&gt;asm!&lt;/code&gt; label blocks to diverge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23201&quot;&gt;prevent stack overflow for recursive ADT layouts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23079&quot;&gt;optimize the heck out of the storage of token trees&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23214&quot;&gt;use Cargo build directory for flycheck logs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rust-compiler-performance-triage&quot;&gt;Rust Compiler Performance Triage&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;A busy week, with a continued stream of improvements to the next trait solver
and next borrow check implementations. Other than those changes, the week was
pretty quiet for performance.&lt;/p&gt;
&lt;p&gt;Triage done by &lt;strong&gt;@simulacrum&lt;/strong&gt;.
Revision range: &lt;a href=&quot;https://perf.rust-lang.org/?start=8fa1c96cfd489e4c27654c144ae871ce2c4db6c6&amp;amp;end=9a4ad59ae3073b013cd62f53f8349ddc61a012e8&amp;amp;absolute=false&amp;amp;stat=instructions%3Au&quot;&gt;8fa1c96c..9a4ad59a&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2 Regressions, 4 Improvements, 2 Mixed; 2 of them in rollups. 28 artifact comparisons made in total.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-lang/rustc-perf/blob/main/triage/2026/2026-08-23.md&quot;&gt;Full report here&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#approved-rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/commits/master&quot;&gt;Approved RFCs&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Changes to Rust follow the Rust &lt;a href=&quot;https://github.com/rust-lang/rfcs#rust-rfcs&quot;&gt;RFC (request for comments) process&lt;/a&gt;. These
are the RFCs that were approved for implementation this week:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;No RFCs were approved this week.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#final-comment-period&quot;&gt;Final Comment Period&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Every week, &lt;a href=&quot;https://www.rust-lang.org/team.html&quot;&gt;the team&lt;/a&gt; announces the 'final comment period' for RFCs and key PRs
which are reaching a decision. Express your opinions now.&lt;/p&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#tracking-issues-prs&quot;&gt;Tracking Issues &amp;amp; PRs&lt;/a&gt;&lt;/h6&gt;
&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rust_1&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen&quot;&gt;Rust&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161280&quot;&gt;make target feature ABI check a hard error on ARM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160534&quot;&gt;stabilize smart pointer map functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160564&quot;&gt;volatile: allow accesses to non-AM memory to trap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/148605&quot;&gt;Stabilize the &lt;code&gt;supertrait_item_shadowing&lt;/code&gt; feature&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161081&quot;&gt;Add intrinsics for integer minimum and maximum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/158303&quot;&gt;Always escape grapheme extenders in &lt;code&gt;str::escape_debug&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rust-rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/issues?q=state%3Aopen%20label%3Afinal-comment-period%20state%3Aopen&quot;&gt;Rust RFCs&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3999&quot;&gt;Change &lt;code&gt;i686-pc-windows-msvc&lt;/code&gt; from Tier 1 with host tools =&amp;gt; Tier 1 without host tools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#cargo_2&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen&quot;&gt;Cargo&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17335&quot;&gt;feat(resolver): Stabilize min-publish-age&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#compiler-team-mcps-only&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/compiler-team/issues?q=label%3Amajor-change%20label%3Afinal-comment-period%20state%3Aopen&quot;&gt;Compiler Team&lt;/a&gt; &lt;a href=&quot;https://forge.rust-lang.org/compiler/mcp.html&quot;&gt;(MCPs only)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/compiler-team/issues/1026&quot;&gt;Add &lt;code&gt;codeview_annotation&lt;/code&gt; intrinsic&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#leadership-council&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/leadership-council/issues?q=state%3Aopen%20label%3Afinal-comment-period%20state%3Aopen&quot;&gt;Leadership Council&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/leadership-council/pull/286&quot;&gt;Update PD election process based on 2025 feedback&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/leadership-council/issues/308&quot;&gt;Create an LLM policy team&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;No Items entered Final Comment Period this week for
&lt;a href=&quot;https://github.com/rust-lang/lang-team/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen&quot;&gt;Language Team&lt;/a&gt;,
&lt;a href=&quot;https://github.com/rust-lang/reference/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen&quot;&gt;Language Reference&lt;/a&gt; or
&lt;a href=&quot;https://github.com/rust-lang/unsafe-code-guidelines/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen&quot;&gt;Unsafe Code Guidelines&lt;/a&gt;.&lt;/em&gt;
Let us know if you would like your PRs, Tracking Issues or RFCs to be tracked as a part of this list.&lt;/p&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#new-and-updated-rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pulls&quot;&gt;New and Updated RFCs&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/4003&quot;&gt;Add &lt;code&gt;core::ffi::c_longdouble&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/4001&quot;&gt;RFC: add &lt;code&gt;freeze&lt;/code&gt; operation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#upcoming-events&quot;&gt;Upcoming Events&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Rusty Events between 2026-08-26 - 2026-09-23 🦀&lt;/p&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#virtual&quot;&gt;Virtual&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;2026-08-26 | Virtual (Cardiff, UK) | &lt;a href=&quot;https://www.meetup.com/rust-and-c-plus-plus-in-cardiff&quot;&gt;Rust and C++ Cardiff&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/316083375/&quot;&gt;&lt;strong&gt;Operating Systems Book Club: Lottery and Multi-CPU Scheduling&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-27 | Virtual (Berlin, DE) | &lt;a href=&quot;https://www.meetup.com/rust-berlin&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-berlin/events/313345334/&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-28 | Virtual | &lt;a href=&quot;https://luma.com/rust-girona&quot;&gt;Rust Girona&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/arkkrcj5&quot;&gt;&lt;strong&gt;Sessió setmanal de codificació / Weekly coding session&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-31 | Virtual | &lt;a href=&quot;https://luma.com/rust-maven&quot;&gt;Rust 🦀 Maven&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/nwfmsdtf&quot;&gt;&lt;strong&gt;Workshop: Add tests to an open source Rust project&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-01 | Virtual | &lt;a href=&quot;https://luma.com/rust-maven&quot;&gt;Rust 🦀 Maven&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/d9w26vav&quot;&gt;&lt;strong&gt;Tauri: Cross-Platform desktop applications with Rust and web technologies&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-02 | Virtual (Indianapolis, IN, US) | &lt;a href=&quot;https://www.meetup.com/indyrs/events/&quot;&gt;Indy Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/indyrs/events/wqzhftyjcmbdb/&quot;&gt;&lt;strong&gt;Indy.rs - with Social Distancing&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-02 | Virtual (Indianapolis, IN, US) | &lt;a href=&quot;https://www.meetup.com/indyrs&quot;&gt;Indy Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/indyrs/events/316107210/&quot;&gt;&lt;strong&gt;Indy.rs - with Social Distancing&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-04 | Virtual | &lt;a href=&quot;https://luma.com/rust-girona&quot;&gt;Rust Girona&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/sqf4ux01&quot;&gt;&lt;strong&gt;Sessió setmanal de codificació / Weekly coding session&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-06 | Virtual | &lt;a href=&quot;https://luma.com/rust-maven&quot;&gt;Rust 🦀 Maven&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/9lte7a58&quot;&gt;&lt;strong&gt;Facts: Curated Knowledge for Humans and Agents&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-06 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust&quot;&gt;Dallas Rust User Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/316133872/&quot;&gt;&lt;strong&gt;Rust Deep Learning: First Sunday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-08 - 2026-09-11 | Hybrid (Montreal, CA) | &lt;a href=&quot;https://rustconf.com/&quot;&gt;RustConf 2026&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://rustconf.com/&quot;&gt;&lt;strong&gt;RustConf 2026&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-08 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust&quot;&gt;Dallas Rust User Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/310254774/&quot;&gt;&lt;strong&gt;Second Tuesday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-08 | Virtual (London, UK) | &lt;a href=&quot;https://www.meetup.com/women-in-rust&quot;&gt;Women in Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/women-in-rust/events/315859305/&quot;&gt;&lt;strong&gt;👋 Community Catch Up&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-10 | Virtual | &lt;a href=&quot;https://luma.com/rust-maven&quot;&gt;Rust 🦀 Maven&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/rfbzk3ae&quot;&gt;&lt;strong&gt;Solving Real-World Planning Problems in Rust with SolverForge&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-10 | Virtual (Berlin, DE) | &lt;a href=&quot;https://www.meetup.com/rust-berlin&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-berlin/events/315691423/&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-10 | Virtual (Nürnberg, DE) | &lt;a href=&quot;https://www.meetup.com/rust-noris&quot;&gt;Rust Nuremberg&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-noris/events/315619611/&quot;&gt;&lt;strong&gt;Rust Nürnberg online&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-15 | Virtual (Washington, DC, US) | &lt;a href=&quot;https://www.meetup.com/rustdc&quot;&gt;Rust DC&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rustdc/events/fhvsztyjcmbtb/&quot;&gt;&lt;strong&gt;Mid-month Rustful&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-16 | Hybrid (Vancouver, CA) | &lt;a href=&quot;https://www.meetup.com/vancouver-rust&quot;&gt;Vancouver Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/vancouver-rust/events/314233757/&quot;&gt;&lt;strong&gt;Rust Study/Hack/Hang-out&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-17 | Hybrid (Seattle, WA, US) | &lt;a href=&quot;https://www.meetup.com/join-srug&quot;&gt;Seattle Rust User Group&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/seattle-rust-user-group/events/315635881/&quot;&gt;&lt;strong&gt;September, 2026 SRUG (Seattle Rust User Group) Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-18 | Virtual | &lt;a href=&quot;https://luma.com/rust-girona&quot;&gt;Rust Girona&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/ibaxicxv&quot;&gt;&lt;strong&gt;Sessió setmanal de codificació / Weekly coding session&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-20 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust&quot;&gt;Dallas Rust User Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/316133974/&quot;&gt;&lt;strong&gt;Rust Deep Learning: Third Sunday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-22 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust&quot;&gt;Dallas Rust User Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/310254773/&quot;&gt;&lt;strong&gt;Fourth Tuesday Rust Bookclub&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#africa&quot;&gt;Africa&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;2026-09-08 | Johannesburg, ZA | &lt;a href=&quot;https://www.meetup.com/johannesburg-rust-meetup&quot;&gt;Johannesburg Rust Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/johannesburg-rust-meetup/events/315750593/&quot;&gt;&lt;strong&gt;Rust's extended standard library&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#asia&quot;&gt;Asia&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;2026-08-29 | Pune, IN | &lt;a href=&quot;https://hasgeek.com/rustpune/&quot;&gt;Rust Pune&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://hasgeek.com/rustpune/meetup-august-2026/&quot;&gt;&lt;strong&gt;Rust Pune Meetup: August 2026&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#europe&quot;&gt;Europe&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;2026-08-26 | Copenhagen, DK | &lt;a href=&quot;https://www.meetup.com/copenhagen-rust-community&quot;&gt;Copenhagen Rust Community&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/copenhagen-rust-community/events/316180984/&quot;&gt;&lt;strong&gt;Rust meetup #71 Sponsored by Factbird&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-26 | Dresden, DE | &lt;a href=&quot;https://github.com/rust-dresden&quot;&gt;Rust Dresden&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://pretix.eu/rust-dresden/on-location-3&quot;&gt;&lt;strong&gt;Third Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-27 | London, UK | &lt;a href=&quot;https://www.meetup.com/rust-london-user-group&quot;&gt;Rust London User Group&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-london-user-group/events/316197176/&quot;&gt;&lt;strong&gt;LDN Talks August Community Showcase&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-27 | Manchester, UK | &lt;a href=&quot;https://www.meetup.com/rust-manchester&quot;&gt;Rust Manchester&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-manchester/events/315891530/&quot;&gt;&lt;strong&gt;Rust Manchester August Talks&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-29 | Stockholm, SE | &lt;a href=&quot;https://www.meetup.com/stockholm-rust&quot;&gt;Stockholm Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/stockholm-rust/events/316130996/&quot;&gt;&lt;strong&gt;Ferris' Fika Forum #29&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-08 | Paris, FR | &lt;a href=&quot;https://www.meetup.com/rust-paris&quot;&gt;Rust Paris&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-paris/events/316169040/&quot;&gt;&lt;strong&gt;Rust meetup #87&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-14 - 2026-09-16 | Berlin, DE | &lt;a href=&quot;https://oxidizeconf.com/&quot;&gt;Oxidize 2026&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://oxidizeconf.com/&quot;&gt;&lt;strong&gt;Oxidize 2026&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-15 | Leipzig, DE | &lt;a href=&quot;https://www.meetup.com/rust-modern-systems-programming-in-leipzig&quot;&gt;Rust - Modern Systems Programming in Leipzig&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-modern-systems-programming-in-leipzig/events/313816477/&quot;&gt;&lt;strong&gt;Reproducing scientific papers - with Rust &amp;amp; &quot;AI&quot;&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-22 | Prague, CZ | &lt;a href=&quot;https://www.meetup.com/rust-prague&quot;&gt;Rust Prague&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-prague/events/316070376/&quot;&gt;&lt;strong&gt;Rust Meetup Prague @ Rockwell Automation&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#north-america&quot;&gt;North America&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;2026-08-26 | Austin, TX, US | &lt;a href=&quot;https://www.meetup.com/rust-atx&quot;&gt;Rust ATX&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-atx/events/315171660/&quot;&gt;&lt;strong&gt;Rust Lunch - Fareground&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-26 | Los Angeles, CA, US | &lt;a href=&quot;https://www.meetup.com/rust-los-angeles&quot;&gt;Rust Los Angeles&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-los-angeles/events/315963062/&quot;&gt;&lt;strong&gt;Rust LA August! Rust in Quantum Computing&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-27 | Atlanta, GA, US | &lt;a href=&quot;https://www.meetup.com/rust-atl&quot;&gt;Rust Atlanta&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-atl/events/313539331/&quot;&gt;&lt;strong&gt;Rust-Atl&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-03 | Mountain View, CA, US | &lt;a href=&quot;https://www.meetup.com/hackerdojo&quot;&gt;Hacker Dojo&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/hackerdojo/events/316124372/&quot;&gt;&lt;strong&gt;RUST MEETUP at HACKER DOJO&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-03 | Saint Louis, MO, US | &lt;a href=&quot;https://www.meetup.com/stl-rust&quot;&gt;STL Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/stl-rust/events/315603673/&quot;&gt;&lt;strong&gt;Cryptography + Quantum Computers&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-08 - 2026-09-11 | Hybrid (Montreal, CA) | &lt;a href=&quot;https://rustconf.com/&quot;&gt;RustConf 2026&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://rustconf.com/&quot;&gt;&lt;strong&gt;RustConf 2026&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-09 | Montreal, CA | &lt;a href=&quot;https://www.meetup.com/women-in-rust&quot;&gt;Women in Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/women-in-rust/events/315773005/&quot;&gt;&lt;strong&gt;RustConf Coffee Break Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-10 | Lehi, UT, US | &lt;a href=&quot;https://www.meetup.com/utah-rust&quot;&gt;Utah Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/utah-rust/events/316198046/&quot;&gt;&lt;strong&gt;Hands-on Embedded Rust&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-10 | San Diego, CA, US | &lt;a href=&quot;https://www.meetup.com/san-diego-rust&quot;&gt;San Diego Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/san-diego-rust/events/315601104/&quot;&gt;&lt;strong&gt;San Diego Rust September Meetup - Back in person!&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-15 | San Francisco, CA, US | &lt;a href=&quot;https://www.meetup.com/san-francisco-rust-study-group&quot;&gt;San Francisco Rust Study Group&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/san-francisco-rust-study-group/events/314997217/&quot;&gt;&lt;strong&gt;Rust Hacking in Person&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-16 | Hybrid (Vancouver, CA) | &lt;a href=&quot;https://www.meetup.com/vancouver-rust&quot;&gt;Vancouver Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/vancouver-rust/events/314233757/&quot;&gt;&lt;strong&gt;Rust Study/Hack/Hang-out&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-17 | Hybrid (Seattle, WA, US) | &lt;a href=&quot;https://www.meetup.com/join-srug&quot;&gt;Seattle Rust User Group&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/seattle-rust-user-group/events/315635881/&quot;&gt;&lt;strong&gt;September, 2026 SRUG (Seattle Rust User Group) Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-17 | Mountain View, CA, US | &lt;a href=&quot;https://www.meetup.com/hackerdojo&quot;&gt;Hacker Dojo&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/hackerdojo/events/316176445/&quot;&gt;&lt;strong&gt;RUST MEETUP at HACKER DOJO&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-23 | Austin, TX, US | &lt;a href=&quot;https://www.meetup.com/rust-atx&quot;&gt;Rust ATX&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-atx/events/xvkdgtyjcmbfc/&quot;&gt;&lt;strong&gt;Rust Lunch - Fareground&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#oceania&quot;&gt;Oceania&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;2026-08-27 | Melbourne, AU | &lt;a href=&quot;https://www.meetup.com/rust-melbourne&quot;&gt;Rust Melbourne&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-melbourne/events/315039490/&quot;&gt;&lt;strong&gt;Rust Melbourne August 2026&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are running a Rust event please add it to the &lt;a href=&quot;https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com&quot;&gt;calendar&lt;/a&gt; to get
it mentioned here. Please remember to add a link to the event too.
Email the &lt;a href=&quot;mailto:community-team@rust-lang.org&quot;&gt;Rust Community Team&lt;/a&gt; for access.&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#jobs&quot;&gt;Jobs&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Please see the latest &lt;a href=&quot;https://www.reddit.com/r/rust/comments/1vtuq1b/official_rrust_whos_hiring_thread_for_jobseekers/&quot;&gt;Who's Hiring thread on r/rust&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#quote-of-the-week&quot;&gt;Quote of the Week&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;I care about this community, including its human and social nature. I want others to appreciate those qualities, and I don't want to see them compromised and replaced by excessive machine-generated content.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;– &lt;a href=&quot;https://users.rust-lang.org/t/use-of-ai-assitance-to-solve-issues-and-validate-to-reply/142029/11&quot;&gt;Quine Dot on rust-users&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/t/twir-quote-of-the-week/328/1791&quot;&gt;Jonas Fassbender&lt;/a&gt; for the suggestion!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://users.rust-lang.org/t/twir-quote-of-the-week/328&quot;&gt;Please submit quotes and vote for next week!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This Week in Rust is edited by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nellshamrell&quot;&gt;nellshamrell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/llogiq&quot;&gt;llogiq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ericseppanen&quot;&gt;ericseppanen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/extrawurst&quot;&gt;extrawurst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/U007D&quot;&gt;U007D&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mariannegoldin&quot;&gt;mariannegoldin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bdillo&quot;&gt;bdillo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/opeolluwa&quot;&gt;opeolluwa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bnchi&quot;&gt;bnchi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/KannanPalani57&quot;&gt;KannanPalani57&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tzilist&quot;&gt;tzilist&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Email list hosting is sponsored by &lt;a href=&quot;https://foundation.rust-lang.org/&quot;&gt;The Rust Foundation&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://www.reddit.com/r/rust/comments/1vzh4xx/this_week_in_rust_666/&quot;&gt;Discuss on r/rust&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-26T04:00:00+00:00</dc:date>
	<dc:creator>TWiR Contributors</dc:creator>
</item>
<item rdf:about="https://blog.rust-lang.org/2026/08/26/announcing-our-first-maintainers-in-residence/">
	<title>The Rust Programming Language Blog: Announcing our first Maintainers in Residence</title>
	<link>https://blog.rust-lang.org/2026/08/26/announcing-our-first-maintainers-in-residence/</link>
	<content:encoded>&lt;p&gt;We are very happy to announce the Rust Project's first round of Maintainers in Residence:
&lt;strong&gt;Gen Li&lt;/strong&gt; (&lt;a href=&quot;https://github.com/rami3l&quot; rel=&quot;external&quot;&gt;@rami3l&lt;/a&gt;), &lt;strong&gt;Chris Denton&lt;/strong&gt; (&lt;a href=&quot;https://github.com/ChrisDenton&quot; rel=&quot;external&quot;&gt;@ChrisDenton&lt;/a&gt;), &lt;strong&gt;Alejandra González&lt;/strong&gt; (&lt;a href=&quot;https://github.com/blyxyas&quot; rel=&quot;external&quot;&gt;@blyxyas&lt;/a&gt;), &lt;strong&gt;León Liehr&lt;/strong&gt; (&lt;a href=&quot;https://github.com/fmease&quot; rel=&quot;external&quot;&gt;@fmease&lt;/a&gt;), and Maintainer Grant recipients: &lt;strong&gt;Jason Newcomb&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Jarcho&quot; rel=&quot;external&quot;&gt;@Jarcho&lt;/a&gt;) and &lt;strong&gt;Jonas Böttiger&lt;/strong&gt; (&lt;a href=&quot;https://github.com/joboet&quot; rel=&quot;external&quot;&gt;@joboet&lt;/a&gt;). These contributors will be funded for their &lt;code&gt;rust-lang&lt;/code&gt; maintenance activities for (at least) the following 12 months!&lt;/p&gt;
&lt;p&gt;The funding of the Maintainer in Residence (MiR) and Maintainer Grantee roles is possible thanks to generous donations to the Rust Foundation Maintainers Fund (RFMF) from Google, AWS, OpenAI, the Rust Project Leadership Council and also individual sponsors. We also want to thank the people who advocated for maintainer funding within their companies; Tyler Mandry from Google, Niko Matsakis and Jess Izen from AWS and Predrag Gruevski from OpenAI, and also the whole &lt;a href=&quot;https://rust-lang.org/governance/teams/leadership-council/&quot; rel=&quot;external&quot;&gt;Rust Leadership Council&lt;/a&gt; and our &lt;a href=&quot;https://rust-lang.org/governance/teams/#team-funding-advisors&quot; rel=&quot;external&quot;&gt;funding advisors&lt;/a&gt;. If you would like to help us support even more Rust contributors, consider &lt;a href=&quot;https://github.com/sponsors/rustfoundation&quot; rel=&quot;external&quot;&gt;donating&lt;/a&gt; to RFMF.&lt;/p&gt;
&lt;p&gt;The Rust Foundation has published a &lt;a href=&quot;https://rustfoundation.org/media/rust-project-and-rust-foundation-announce-first-maintainers-in-residence/&quot; rel=&quot;external&quot;&gt;press release&lt;/a&gt; and a &lt;a href=&quot;https://rustfoundation.org/media/congratulations-to-the-first-round-of-rust-project-maintainers-in-residence/&quot; rel=&quot;external&quot;&gt;blog post&lt;/a&gt;, where you can learn more about the sponsors and the supported contributors.&lt;/p&gt;
&lt;p&gt;Read more below to learn about the MiR program, how we chose the funded contributors, and of course &lt;a href=&quot;https://blog.rust-lang.org/2026/08/26/announcing-our-first-maintainers-in-residence/#gen-li-rami3l&quot;&gt;who they are&lt;/a&gt;!&lt;/p&gt;
&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/08/26/announcing-our-first-maintainers-in-residence/#background&quot;&gt;&lt;/a&gt;
Background&lt;/h3&gt;
&lt;p&gt;The Maintainer in Residence program, established in &lt;a href=&quot;https://rust-lang.github.io/rfcs/3931-rfmf-rust-foundation-maintainer-fund.html&quot; rel=&quot;external&quot;&gt;RFC 3931&lt;/a&gt;, is designed to provide stable financial support for Rust contributors, so that they can truly focus on crucial &lt;a href=&quot;https://blog.rust-lang.org/inside-rust/2026/01/12/what-is-maintenance-anyway/&quot; rel=&quot;external&quot;&gt;maintenance&lt;/a&gt; activities. Currently, there are three categories of support that we offer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Full-time MiR: funded for 5 days/week of Rust Project work&lt;/li&gt;
&lt;li&gt;Half-time MiR: funded for ~2.5 days/week of Rust Project work&lt;/li&gt;
&lt;li&gt;Maintainer Grant: funded for ~1 day/week of Rust Project work&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Funding for this program comes from the Rust Foundation Maintainers Fund, which was &lt;a href=&quot;https://blog.rust-lang.org/2026/06/02/launching-the-rust-foundation-maintainers-fund/&quot; rel=&quot;external&quot;&gt;launched&lt;/a&gt; recently, and the whole program is managed by the Rust &lt;a href=&quot;https://rust-lang.org/governance/teams/#team-funding&quot; rel=&quot;external&quot;&gt;Funding team&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When deciding who to fund, we took a systematic approach. First, we looked at Rust teams to understand their maintenance baseline (the smallest number of maintainers they need to ensure a healthy long-term status of the given project or repository), and how far they currently are from that baseline. From there, we identified and prioritized Rust teams who were both critically underfunded, and have a high impact on the language and its users. These teams (in no particular order) were &lt;code&gt;rustdoc&lt;/code&gt;, &lt;code&gt;rustup&lt;/code&gt;, &lt;code&gt;cargo&lt;/code&gt;, &lt;code&gt;compiler&lt;/code&gt;, &lt;code&gt;libs&lt;/code&gt;, &lt;code&gt;clippy&lt;/code&gt;, &lt;code&gt;rustfmt&lt;/code&gt;, &lt;code&gt;rust analyzer&lt;/code&gt; and &lt;code&gt;mods&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The next step was pairing these teams with maintainers looking for funding. And it turns out that finding such maintainers for some teams turned out to be much more difficult than we originally assumed! For example, some maintainers are already employed, some do not want to be funded, and while we did our best to promote our funding efforts, not everyone looking for funding actually asked us for it. We also realized that some teams on our list have essentially no active members, which makes it tricky to onboard new contributors, even if they would like to help out.&lt;/p&gt;
&lt;p&gt;In the end, we decided to start by supporting six contributors, who will help maintain several critical Rust projects and teams and who could start immediately. However, we are not stopping there. Our funding efforts are ongoing, so stay tuned for more MiR announcements in the near future! If you would like to learn more about our process, check out our &lt;a href=&quot;https://blog.rust-lang.org/inside-rust/2026/08/04/funding-team-progress-update-july-2026/&quot; rel=&quot;external&quot;&gt;recent post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And now, without further ado, let's meet our newly funded maintainers!&lt;/p&gt;

&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/08/26/announcing-our-first-maintainers-in-residence/#gen-li-rami3l&quot;&gt;&lt;/a&gt;
Gen Li (@rami3l)&lt;/h3&gt;
&lt;div&gt;
    &lt;div class=&quot;mir&quot;&gt;
        &lt;img src=&quot;https://blog.rust-lang.org/2026/08/26/announcing-our-first-maintainers-in-residence/rami3l.png&quot; style=&quot;width: 200px; margin: 0 20px 20px 0;&quot; /&gt;
        &lt;div&gt;
            &lt;div&gt;Gen Li (&lt;a href=&quot;https://github.com/rami3l&quot;&gt;@rami3l&lt;/a&gt;) is a full-time MiR focusing on Rustup.&lt;/div&gt;
            &lt;div style=&quot;margin-top: 1em;&quot;&gt;He has been a Rustup team member since 2023 and its lead since 2025. He deeply cares about the facets of Rust that many might have taken for granted, and embodies all attributes we were looking for in a MiR: he wants to take on complex issues, continue mentoring, and work on important Rustup features, among many other things.&lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Turning volunteering into an actual job has really been an empowering experience so far! I finally have the bandwidth to take a careful look at my inbox and can actually read each message without the fear of missing crucial details while rushing prompt replies, which has really helped me retain the essential compassion as a maintainer. I also get to interact with regular contributors a lot more often. Finally, I can't wait to see what I can come up with in terms of Project Goals :)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/08/26/announcing-our-first-maintainers-in-residence/#chris-denton-chrisdenton&quot;&gt;&lt;/a&gt;
Chris Denton (@ChrisDenton)&lt;/h3&gt;
&lt;div&gt;
    &lt;div class=&quot;mir&quot;&gt;
        &lt;img src=&quot;https://blog.rust-lang.org/2026/08/26/announcing-our-first-maintainers-in-residence/chrisdenton.png&quot; style=&quot;width: 200px; margin: 0 20px 20px 0;&quot; /&gt;
        &lt;div&gt;
            &lt;div&gt;Chris Denton (&lt;a href=&quot;https://github.com/ChrisDenton&quot;&gt;@ChrisDenton&lt;/a&gt;) is a half-time MiR focusing on the standard library, compiler, Rustup and anything Windows-related.&lt;/div&gt;
            &lt;div style=&quot;margin-top: 1em;&quot;&gt;For the past five years Chris has been bringing his deep knowledge of Windows to help Rust sustain and improve its great cross-platform support. He will be unblocking other contributors in various Windows use cases, performing refactoring and code reviews and implementing new features across several areas of the Project.
&lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Even though it is still early days, I'm feeling pretty optimistic about the health of the Rust Project going forward, thanks to the recent funding efforts.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/08/26/announcing-our-first-maintainers-in-residence/#alejandra-gonzalez-blyxyas&quot;&gt;&lt;/a&gt;
Alejandra González (@blyxyas)&lt;/h3&gt;
&lt;div&gt;
    &lt;div class=&quot;mir&quot;&gt;
        &lt;img src=&quot;https://blog.rust-lang.org/2026/08/26/announcing-our-first-maintainers-in-residence/alejandra-gonzalez.jpg&quot; style=&quot;width: 200px; margin: 0 20px 20px 0;&quot; /&gt;
        &lt;div&gt;
            &lt;div&gt;Alejandra González (&lt;a href=&quot;https://github.com/blyxyas&quot;&gt;@blyxyas&lt;/a&gt;) is a half-time MiR focusing on Clippy.&lt;/div&gt;
            &lt;div style=&quot;margin-top: 1em;&quot;&gt;She is a Clippy team member always keen on improving performance and helping new contributors. She will focus on making Clippy faster and also reviewing its pull requests, to help get the ~300 pull request backlog down. Additionally, she is excited to mentor people from the Rust for Linux project to work on Clippy, and fine tune the &lt;a href=&quot;https://blog.rust-lang.org/inside-rust/2026/07/06/unite-for-clippy/&quot;&gt;open peer review system&lt;/a&gt; that Clippy started using earlier this year.&lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Funding is the system that helps me pour my heart into a project without worrying about making ends meet. Having those needs met is a game-changer and boosts my productivity. One of the areas where I want to focus my efforts is mentoring new contributors. If new people coming is the lifeblood of a project, I want to be the cardiologist!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/08/26/announcing-our-first-maintainers-in-residence/#leon-liehr-fmease&quot;&gt;&lt;/a&gt;
León Liehr (@fmease)&lt;/h3&gt;
&lt;div&gt;
    &lt;div class=&quot;mir&quot;&gt;
        &lt;img src=&quot;https://blog.rust-lang.org/2026/08/26/announcing-our-first-maintainers-in-residence/leon-liehr.jpg&quot; style=&quot;width: 200px; margin: 0 20px 20px 0;&quot; /&gt;
        &lt;div&gt;
            &lt;div&gt;León Liehr (&lt;a href=&quot;https://github.com/fmease&quot;&gt;@fmease&lt;/a&gt;) is a half-time MiR focusing on rustdoc and the compiler.&lt;/div&gt;
            &lt;div style=&quot;margin-top: 1em;&quot;&gt;He is a member of the rustdoc and compiler teams, who is usually working on the Rust type system or issues related to parsing. He will continue working on complex features that he started a few years ago, and also focus on general maintenance, code reviews, refactoring and mentoring.&lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Being funded to work on Rust means I can sustainably focus my time and energy on a project I call a passion of mine.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/08/26/announcing-our-first-maintainers-in-residence/#jonas-bottiger-joboet&quot;&gt;&lt;/a&gt;
Jonas Böttiger (@joboet)&lt;/h3&gt;
&lt;div&gt;
    &lt;div class=&quot;mir&quot;&gt;
        &lt;img src=&quot;https://blog.rust-lang.org/2026/08/26/announcing-our-first-maintainers-in-residence/jonas-boettiger.jpg&quot; style=&quot;width: 200px; margin: 0 20px 20px 0;&quot; /&gt;
        &lt;div&gt;
            &lt;div&gt;Jonas Böttiger (&lt;a href=&quot;https://github.com/joboet&quot;&gt;@joboet&lt;/a&gt;) is a maintainer grantee focusing on the standard library.&lt;/div&gt;
            &lt;div style=&quot;margin-top: 1em;&quot;&gt;He is a musicology student from Germany. When he is not playing the Cello or reading about Fanny Hensel, he applies his research skills to ensure that programs written in Rust run quickly and soundly on all platforms, no matter how quirky the operating system may be. He loves helping contributors write excellent code that they can be proud of; and considers it to be just as much fun as writing it himself.&lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Getting funding for my work is a dream come true. It will allow me to continue doing the thing I love instead of worrying about whether I should rather invest all that time in a money-earning job with much less positive impact on the world around me.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/08/26/announcing-our-first-maintainers-in-residence/#jason-newcomb-jarcho&quot;&gt;&lt;/a&gt;
Jason Newcomb (@Jarcho)&lt;/h3&gt;
&lt;div&gt;
    &lt;div class=&quot;mir&quot;&gt;
        &lt;img src=&quot;https://blog.rust-lang.org/2026/08/26/announcing-our-first-maintainers-in-residence/jason-newcomb.jpg&quot; style=&quot;width: 200px; margin: 0 20px 20px 0;&quot; /&gt;
        &lt;div&gt;
            &lt;div&gt;Jason Newcomb (&lt;a href=&quot;https://github.com/Jarcho&quot;&gt;@Jarcho&lt;/a&gt;) is a maintainer grantee focusing on Clippy.&lt;/div&gt;
            &lt;div style=&quot;margin-top: 1em;&quot;&gt;He is primarily working on fixing bugs and making it easier to develop and contribute to Clippy. He is also focusing on making the review process as smooth as possible.&lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Being funded allows me to work on something I care about and want to work on instead of what will get me paid. I'm looking forward to seeing how this will impact Clippy and the Rust project in general.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/08/26/announcing-our-first-maintainers-in-residence/#conclusion&quot;&gt;&lt;/a&gt;
Conclusion&lt;/h3&gt;
&lt;p&gt;The contributors presented above will be funded for the next 12 months, though of course we hope that we will be able to extend their support going further, as this program is designed to be for long-term stable maintenance funding. We are very excited about them; each one of them has been with the Project for years, and we are very glad that we can support their maintenance work! All of them have already signed their contracts, so they are already being funded as we speak.&lt;/p&gt;
&lt;p&gt;While there are many other Rust contributors who are doing awesome work, and who would also deserve to get proper funding for it, we think that this is a great start. We hope that the awesome work done by the funded maintainers will allow us to promote this program, so that we can fund even more Rust contributors!&lt;/p&gt;
&lt;p&gt;We would like to once again sincerely thank everyone who made this possible, especially our sponsors. If you would like to help us fund more maintainers, consider &lt;a href=&quot;https://github.com/sponsors/rustfoundation&quot; rel=&quot;external&quot;&gt;donating to RFMF&lt;/a&gt;. You can also sponsor individual Rust contributors &lt;a href=&quot;https://rust-lang.org/funding/&quot; rel=&quot;external&quot;&gt;directly&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-26T00:00:00+00:00</dc:date>
	<dc:creator>Lori Lorusso, Jakub Beránek</dc:creator>
</item>
<item rdf:about="https://blog.nightly.mozilla.org/?p=2098">
	<title>Firefox Nightly: Icons! Lots of them! – These Weeks in Firefox: Issue 206</title>
	<link>https://blog.nightly.mozilla.org/2026/08/25/icons-lots-of-them-these-weeks-in-firefox-issue-206/</link>
	<content:encoded>&lt;h3&gt;Highlights&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Starting in Firefox 154, we’ve added a new capability for changing the default browser icon for Windows (Windows-only, for now, and not MSIX / Store installs) in about:settings#appearance!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;Menu under Appearance settings containing a list of icons to choose from to customize the Firefox browser icon.&quot; class=&quot;aligncenter size-full wp-image-2096&quot; height=&quot;701&quot; src=&quot;https://blog.nightly.mozilla.org/files/2026/08/image2.png&quot; width=&quot;623&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;ul&gt;
&lt;li&gt;Notice any bugs? &lt;a href=&quot;https://bugzilla.mozilla.org/enter_bug.cgi?assigned_to=nobody%40mozilla.org&amp;amp;blocked=2039322&amp;amp;bug_ignored=0&amp;amp;bug_severity=--&amp;amp;bug_status=NEW&amp;amp;bug_type=defect&amp;amp;cf_a11y_review_project_flag=---&amp;amp;cf_accessibility_severity=---&amp;amp;cf_fx_iteration=---&amp;amp;cf_fx_points=---&amp;amp;cf_has_str=---&amp;amp;cf_install_update_workflow=---&amp;amp;cf_performance_impact=---&amp;amp;cf_status_firefox153=---&amp;amp;cf_status_firefox154=---&amp;amp;cf_status_firefox155=---&amp;amp;cf_status_firefox_esr115=---&amp;amp;cf_status_firefox_esr140=---&amp;amp;cf_status_firefox_esr153=---&amp;amp;cf_tracking_firefox153=---&amp;amp;cf_tracking_firefox154=---&amp;amp;cf_tracking_firefox155=---&amp;amp;cf_tracking_firefox_esr115=---&amp;amp;cf_tracking_firefox_esr140=---&amp;amp;cf_tracking_firefox_esr153=---&amp;amp;cf_tracking_firefox_relnote=---&amp;amp;cf_webcompat_priority=---&amp;amp;cf_webcompat_score=---&amp;amp;component=Shell%20Integration&amp;amp;contenttypemethod=list&amp;amp;contenttypeselection=text%2Fplain&amp;amp;defined_groups=1&amp;amp;filed_via=standard_form&amp;amp;flag_type-203=X&amp;amp;flag_type-37=X&amp;amp;flag_type-41=X&amp;amp;flag_type-607=X&amp;amp;flag_type-708=X&amp;amp;flag_type-721=X&amp;amp;flag_type-737=X&amp;amp;flag_type-748=X&amp;amp;flag_type-787=X&amp;amp;flag_type-799=X&amp;amp;flag_type-803=X&amp;amp;flag_type-846=X&amp;amp;flag_type-855=X&amp;amp;flag_type-864=X&amp;amp;flag_type-930=X&amp;amp;flag_type-936=X&amp;amp;flag_type-937=X&amp;amp;flag_type-963=X&amp;amp;flag_type-968=X&amp;amp;flag_type-970=X&amp;amp;needinfo_role=other&amp;amp;needinfo_type=needinfo_from&amp;amp;op_sys=Unspecified&amp;amp;priority=--&amp;amp;product=Firefox&amp;amp;rep_platform=Unspecified&amp;amp;target_milestone=---&amp;amp;version=unspecified&quot;&gt;File them here!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=656417&quot;&gt;Hubert Boma Manilla&lt;/a&gt; continued his work to handle CSS files in the Debugger (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2036376&quot;&gt;#2036376&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2037041&quot;&gt;#2037041&lt;/a&gt;). The feature can now be enabled from the Settings panel (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2051876&quot;&gt;#2051876&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;Settings panel checkbox to enable stylesheet handling in the debugger.&quot; class=&quot;aligncenter size-full wp-image-2097&quot; height=&quot;162&quot; src=&quot;https://blog.nightly.mozilla.org/files/2026/08/image1.png&quot; width=&quot;504&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Picture-in-Picture_API&quot;&gt;The Picture-in-Picture WebAPI&lt;/a&gt; is now available, starting with release version Firefox 153!
&lt;ul&gt;
&lt;li&gt;This does not replace the built-in Picture-in-Picture mechanism, and is in fact powered by it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Friends of the Firefox team&lt;/h3&gt;
&lt;h4&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/buglist.cgi?title=Resolved%20bugs%20(excluding%20employees)&amp;amp;quicksearch=2044003%2C2049302%2C1869522%2C2050420%2C2050554%2C2050598%2C2051064%2C2049311%2C2039595%2C2051493%2C2051557%2C2052165%2C2040756%2C1685123%2C1800148%2C2052560%2C1927615%2C2008143%2C2040057%2C2054083%2C1251981%2C2029514%2C2039590%2C2049912%2C2050546%2C445000%2C2052932%2C2016932%2C2052956%2C2055555%2C2053182%2C2056102&quot;&gt;Resolved bugs (excluding employees)&lt;/a&gt;&lt;/h4&gt;
&lt;h4&gt;Volunteers that fixed more than one bug&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;japandi&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;New contributors (🌟 = first patch)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;🌟 Luiz Henrique Vieira &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2050546&quot;&gt;helped remove some dead CSS from our tabbrowser code!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Project Updates&lt;/h3&gt;
&lt;h4&gt;Add-ons / Web Extensions&lt;/h4&gt;
&lt;h5&gt;Addon Manager &amp;amp; about:addons&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;As part of Project Nova work:
&lt;ul&gt;
&lt;li&gt;Added moz-promo cards to the about:addons extensions list recommendations footer and empty state, and updated the openAmoInTab helper to support a custom UTM content value –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2043615&quot;&gt; Bug 2043615&lt;/a&gt; /&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2050880&quot;&gt; Bug 2050880&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Introduced the building blocks for the Nova Themes Picker in about:addons: a shared Firefox Themes list source of truth, a light/dark/device theme-mode switcher, a reusable theme-preview webcomponent, and Nova-styled theme previews –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2051554&quot;&gt; Bug 2051554&lt;/a&gt; /&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2051559&quot;&gt; Bug 2051559&lt;/a&gt; /&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2051564&quot;&gt; Bug 2051564&lt;/a&gt; /&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2051573&quot;&gt; Bug 2051573&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Updated the Extensions panel empty state illustration and toolbar item icon for Project Nova –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2030715&quot;&gt; Bug 2030715&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Thanks to Michael Hynson for driving this.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Removed the legacy AddonManager Glean metrics used for mirroring legacy telemetry events, along with the corresponding legacy telemetry test checks –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1923949&quot;&gt; Bug 1923949&lt;/a&gt; /&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1981822&quot;&gt; Bug 1981822&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Thanks to Chris H-C for collaborating with us on this.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Fixed themes installed through the distribution mechanism not fetching their AMO metadata, which was resulting in distribution installed themes left without a preview image in about:addons –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1917279&quot;&gt; Bug 1917279&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Thanks to Mike Kaply for the fix to the distribution themes metadata handling.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Fixed amContentHandler to verify that a system triggeringPrincipal genuinely originated from the parent process, a regression introduced in Firefox 153 and fixed in Firefox 154 (with a beta 153 uplift requested) –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2048964&quot;&gt; Bug 2048964&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;WebExtensions Framework&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Fixed a startup performance regression by avoiding an NSS-initializing crypto.getRandomValues() call during extension startup, a regression introduced in Firefox 153 and fixed in Firefox 154 (with a beta 153 uplift requested) –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2050882&quot;&gt; Bug 2050882&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Enabled tier 3 TypeScript typecheck linting for the extensions framework code –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2050124&quot;&gt; Bug 2050124&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Implemented the WebExtensions manifest sandbox key, letting extensions keep using string-based code execution in unprivileged sandboxed extension documents –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1685123&quot;&gt; Bug 1685123&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Thanks to Robin for the implementation of the manifest sandbox support.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;WebExtension APIs&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Enabled storage.local database auto-reset on detected corrupted IndexedDB storage on all channels, starting in Firefox 154 –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1992973&quot;&gt; Bug 1992973&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Simplified registerTraceableChannel to make it synchronous again, removing the delay before blocking webRequest listeners can register a traceable channel –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2044518&quot;&gt; Bug 2044518&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Restored the contextualIdentities iconUrl container icons to their intrinsic 32×32 size, fixing a regression introduced earlier in the Firefox 154 cycle –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2048599&quot;&gt; Bug 2048599&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Thanks to Andrea Marchesini for the fix to the contextualIdentities container icons.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Fixed the MV2 userScripts API failing with an Xrays TypedArray access error due to a missing isWebExtensionContentScript flag –&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2054083&quot;&gt; Bug 2054083&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Thanks to erosman for the fix to the MV2 userScripts API.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;DevTools&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=546716&quot;&gt;Emilio Cobos Álvarez&lt;/a&gt; fixed the Inspector highlighters for SVG documents (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1850539&quot;&gt;#1850539&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=566192&quot;&gt;Andreas Farre&lt;/a&gt; made the Session History table header clickable to navigate the content page to given entry (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2018878&quot;&gt;#2018878&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=495955&quot;&gt;Sylvestre Ledru&lt;/a&gt; added Browser and Content filter to the Browser Toolbox Console and the Browser Console (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2048893&quot;&gt;#2048893&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=783718&quot;&gt;Adel Fatkhutdinov&lt;/a&gt; adapted the about:debugging Performance dialog for Nova (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2049348&quot;&gt;#2049348&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053817&quot;&gt;#2053817&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;The visually updated about:debugging Performance dialog&quot; class=&quot;aligncenter size-full wp-image-2094&quot; height=&quot;1322&quot; src=&quot;https://blog.nightly.mozilla.org/files/2026/08/image4.png&quot; width=&quot;1914&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=557153&quot;&gt;Nicolas Chevobbe&lt;/a&gt; about:debugging is now using moz-page-nav for its left sidebar (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2048544&quot;&gt;#2048544&lt;/a&gt;), thanks to Mark making it possible to disable collapsing that occurs on narrow screen (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2050907&quot;&gt;#2050907&lt;/a&gt;)
&lt;ul&gt;
&lt;li&gt;(not all items were migrated to moz-page-nav-button though, see &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2050746&quot;&gt;#2050746&lt;/a&gt; for remaining work)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=283262&quot;&gt;Alexandre Poirot&lt;/a&gt; made it possible to control the request and response body size limit from the Settings panel (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2040892&quot;&gt;#2040892&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;A control in the Firefox DevTools Settings panel to adjust the request and response body size limit.&quot; class=&quot;aligncenter size-full wp-image-2095&quot; height=&quot;178&quot; src=&quot;https://blog.nightly.mozilla.org/files/2026/08/image3.png&quot; width=&quot;768&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=283262&quot;&gt;Alexandre Poirot&lt;/a&gt; added a notification when DevTools are open and the user navigate to a file:// document to promote Local Mode (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2044464&quot;&gt;#2044464&lt;/a&gt;), and &lt;a href=&quot;https://firefox-source-docs.mozilla.org/devtools-user/local_mode/index.html&quot;&gt;added documentation&lt;/a&gt; for the feature (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2045987&quot;&gt;#2045987&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;A notification displayed above the DevTools Inspector panel promoting Local Mode.&quot; class=&quot;aligncenter size-full wp-image-2093&quot; height=&quot;576&quot; src=&quot;https://blog.nightly.mozilla.org/files/2026/08/image5.png&quot; width=&quot;1016&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=557153&quot;&gt;Nicolas Chevobbe&lt;/a&gt; improved Inspector performance for elements with lots of Rules (reported bug was causing a crash on Penpot) (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2034445&quot;&gt;#2034445&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=283262&quot;&gt;Alexandre Poirot&lt;/a&gt; made the Ruler to remain visible after reloading the page (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1247553&quot;&gt;#1247553&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=557153&quot;&gt;Nicolas Chevobbe&lt;/a&gt; made the DevTools splitter keyboard accessible (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2015949&quot;&gt;#2015949&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=557153&quot;&gt;Nicolas Chevobbe&lt;/a&gt; fixed pretty printing in Debugger for sources using Regex with the v flag (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053574&quot;&gt;#2053574&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;WebDriver&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Devin Rousso enhanced the emulation.setLocaleOverride command to allow overriding &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2052932&quot;&gt;the Accept-Language header for fetch and WebSocket requests in Workers&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Nazım Can Altınova &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1869522&quot;&gt;created the moz:profiler module&lt;/a&gt; (mozilla-only!), allowing clients to control the Firefox Profiler from WebDriver BiDi.&lt;/li&gt;
&lt;li&gt;Julian Descottes fixed a &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2049746&quot;&gt;bug in geckodriver which prevented connecting&lt;/a&gt; to a non-rooted device.&lt;/li&gt;
&lt;li&gt;Alexandra Borovova &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2042671&quot;&gt;implemented the “browsingContext.startScreencast” and “browsingContext.stopScreencast” commands&lt;/a&gt;, which will record a browsing context and save the result as a video file.&lt;/li&gt;
&lt;li&gt;Alexandra Borovova &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2040936&quot;&gt;added download id to “browsingContext.downloadWillBegin” and “browsingContext.downloadEnd” events”&lt;/a&gt; to make it easier to identify which events belong to the same download.&lt;/li&gt;
&lt;li&gt;Henrik Skupin fixed a bug in WebDriver BiDi where &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2051908&quot;&gt;same-document navigations or loading error pages in frames caused the browsingContext.navigate command to return prematurely&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Henrik Skupin &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2051391&quot;&gt;released geckodriver 0.37.1&lt;/a&gt;, including a fix for Android. See the &lt;a href=&quot;https://github.com/mozilla/geckodriver/releases/tag/v0.37.1&quot;&gt;release page for details&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Credential Management&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053724&quot;&gt;The new Rust-based storage mechanism for logins has been enabled by default, starting in Firefox 154&lt;/a&gt;. This component is an application-services component that can be shared with iOS and Android.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Migration Improvements&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;We recently &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1918085&quot;&gt;updated the Passwords import instructions for Safari to be up-to-date with macOS Sequoia and up&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;New Tab Page&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;That’s a wrap for the World Cup! We’re powering down the Sports widget today.
&lt;ul&gt;
&lt;li&gt;Some folks might see a survey about the Sports widget, to get feedback from the wild on whether or not it provided any user value (Telemetry points to “yes”, but it’s good to get qual data too)&lt;/li&gt;
&lt;li&gt;We’re replacing it with some new widgets. If you’re in an English-speaking region, you will probably see it replaced with a Daily Crossword widget. Otherwise, it’ll be replaced with a Picture of the Day widget.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Sections have rolled out to 100% in France! We’re now doing 10% Sections experiments in Spain, Italy, Austria, Switzerland and Belgium.&lt;/li&gt;
&lt;li&gt;Shout out to volunteer Sameeksha&lt;a href=&quot;https://bugzil.la/2008143&quot;&gt; who added an accessible name to the Task list widget ••• button&lt;/a&gt;, adding an aria-label/accessible-name so NVDA/VoiceOver announce the control and keyboard navigation/activation works correctly on New Tab.&lt;/li&gt;
&lt;li&gt;Joel&lt;a href=&quot;https://bugzil.la/2043730&quot;&gt; added WebNotifications to the newtab state&lt;/a&gt;, allowing New Tab widgets to observe and reflect WebNotification events (affects the notification-driven widget lifecycle and UI state updates).&lt;/li&gt;
&lt;li&gt;Reem Hamoui&lt;a href=&quot;https://bugzil.la/2044826&quot;&gt; adjusted the New-Tab Widgets 3-dot menu layout&lt;/a&gt; to vertically center menu entries inside the hover-granted colorful stripe, removing visual misalignment and small hit-area offsets on touch and pointer inputs.&lt;/li&gt;
&lt;li&gt;Dre&lt;a href=&quot;https://bugzil.la/2047788&quot;&gt; implemented the show less/show more transition animation&lt;/a&gt; for New Tab expand/collapse, smoothing layout shifts with a CSS transition to reduce perceived jank during widget list changes.&lt;/li&gt;
&lt;li&gt;Scott Downe fixed New Tab Page drag-and-drop so widgets no longer jump or keep moving during drags (&lt;a href=&quot;https://bugzil.la/2049472&quot;&gt;2049472&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Reem Hamoui rendered the Daily Crossword in a sandboxed iframe to isolate its scripts/CSP on the New Tab Page (&lt;a href=&quot;https://bugzil.la/2049489&quot;&gt;2049489&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Reem Hamoui added the Crossword option to about:preferences and wired the New Tab Page crossword widget into prefs (&lt;a href=&quot;https://bugzil.la/2050340&quot;&gt;2050340&lt;/a&gt;), so users can enable or disable the crossword via the standard Preferences UI rather than about:config.&lt;/li&gt;
&lt;li&gt;Dre set up the Picture of the Day boilerplate, including prefs and basic New Tab UI components (&lt;a href=&quot;https://bugzil.la/2050969&quot;&gt;2050969&lt;/a&gt;), which exposes a configurable PoD surface for users to opt into and customize.&lt;/li&gt;
&lt;li&gt;Dre added a dismiss control and persisted dismissal state to the daily photo UI (&lt;a href=&quot;https://bugzil.la/2050972&quot;&gt;2050972&lt;/a&gt;), allowing users to remove the current picture from their New Tab and avoid immediate reappearance.&lt;/li&gt;
&lt;li&gt;Dre added a “set as wallpaper” action and hooked it into New Tab wallpaper storage/prefs (&lt;a href=&quot;https://bugzil.la/2050973&quot;&gt;2050973&lt;/a&gt;), enabling users to promote a PoD image to their custom New Tab wallpaper persistently.&lt;/li&gt;
&lt;li&gt;Dre connected the Picture of the day widget to the Merino endpoint to set the background of the widget to the current picture (&lt;a href=&quot;https://bugzil.la/2050976&quot;&gt;2050976&lt;/a&gt;). He also added telemetry for the Picture of the day widget on the New Tab Page to capture impressions and clicks for usage analysis (&lt;a href=&quot;https://bugzil.la/2050977&quot;&gt;2050977&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Nina Pypchenko [:nina-py] added a small size variant for the Focus Timer widget in Nova so the timer can render compactly in narrow/new tab layouts and reduce vertical space usage (&lt;a href=&quot;https://bugzil.la/2051179&quot;&gt;2051179&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Maxx Crawford&lt;a href=&quot;https://bugzil.la/2051313&quot;&gt; created a DevTools ‘controls’ area on the New Tab Page to enable and configure the widget&lt;/a&gt;, exposing toggles and settings that let developers and experimenters flip the widget without changing prefs, which reduces friction when reproducing NTP widget behaviors during debugging and testing.&lt;/li&gt;
&lt;li&gt;Irene Ni&lt;a href=&quot;https://bugzil.la/2051333&quot;&gt; switched the New Tab ‘inferred personalization’ checkbox to the platform moz-checkbox control&lt;/a&gt;, restoring native checkbox semantics (role/keyboard focus/visual state) so users toggling inferred personalization see consistent a11y behavior and platform rendering across Windows/macOS/Linux.&lt;/li&gt;
&lt;li&gt;Scott Downe&lt;a href=&quot;https://bugzil.la/2051628&quot;&gt; fixed an intermittent visual reload/flicker of sponsored tiles and the Add Shortcut button when pinning/unpinning shortcuts&lt;/a&gt;, preventing momentary tile DOM reflows and layout thrash that caused perceived data loss or longer perceived latency during shortcut edits.&lt;/li&gt;
&lt;li&gt;Scott Downe&lt;a href=&quot;https://bugzil.la/2051915&quot;&gt; ensured custom image URLs persist on manually added Top Site tiles after edit&lt;/a&gt;, so users’ uploaded or external thumbnails no longer revert to the site’s homepage preview when saving edits and their custom thumbnails are correctly cached and displayed.&lt;/li&gt;
&lt;li&gt;Dre&lt;a href=&quot;https://bugzil.la/2052373&quot;&gt; introduced two variants of the World Cup widget survey message&lt;/a&gt;, changing the copy delivered in the widget to support an A/B/message-variant experiment and altering what users see when the World Cup widget surfaces survey prompts on their New Tab Page.&lt;/li&gt;
&lt;li&gt;Nina Pypchenko [:nina-py]&lt;a href=&quot;https://bugzil.la/2052416&quot;&gt; introduced a default state for Medium and Large Stocks widget sizes&lt;/a&gt; on the New Tab Page to surface placeholder content and avoid blank tiles when the Stocks feed is empty or slow to load.&lt;/li&gt;
&lt;li&gt;Nina Pypchenko [:nina-py]&lt;a href=&quot;https://bugzil.la/2052427&quot;&gt; added an error state to the Stocks widget&lt;/a&gt; on the New Tab Page to show an explicit failure UI when quote fetches or network requests fail, reducing user confusion.&lt;/li&gt;
&lt;li&gt;Alexandre Hanot&lt;a href=&quot;https://bugzil.la/2052616&quot;&gt; migrated AdsFeed to fetch New Tab ads through the MozAdsClient&lt;/a&gt;, changing the ad retrieval path (AdsFeed -&amp;gt; MozAdsClient) which affects ads loading behavior and telemetry for users who see New Tab Page ads.&lt;/li&gt;
&lt;li&gt;Irene Ni fixed the New Tab add-pin flow that was creating extra rows when grouped pins was off by changing the insertion logic to append into the existing grid, which eliminates unexpected row creation and layout shifts for users managing many pins (&lt;a href=&quot;https://bugzil.la/2053251&quot;&gt;2053251&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Scott Downe updated New Tab section rendering to hide cards that don’t fill their row by adjusting layout logic/CSS, removing orphaned placeholders and reducing blank space on narrow viewports or low-item sections for a cleaner grid appearance (&lt;a href=&quot;https://bugzil.la/2053264&quot;&gt;2053264&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Reem Hamoui added a context menu to the Crossword widget using a postMessage integration between the iframe and parent page, enabling right-click actions (copy/hint/theme) and making the embedded crossword more interactive and accessible to users who rely on context menus (&lt;a href=&quot;https://bugzil.la/2053311&quot;&gt;2053311&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Reem Hamoui added a visible “New” badge plus interaction handlers and state tracking to the Crossword widget on the New Tab Page to improve discoverability and make tapping/clicking behave reliably when launching puzzles (&lt;a href=&quot;https://bugzil.la/2053667&quot;&gt;2053667&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Irene Ni removed unused Add Shortcut OMC artifacts from the New Tab Page (&lt;a href=&quot;https://bugzil.la/2053843&quot;&gt;2053843&lt;/a&gt;); this is a cleanup of obsolete assets/templates and has no direct runtime user impact.&lt;/li&gt;
&lt;li&gt;Maxx Crawford added author and license attribution to the Picture of the Day widget (&lt;a href=&quot;https://bugzil.la/2053933&quot;&gt;2053933&lt;/a&gt;); this surfaces photographer credit and license metadata on the New Tab Page for users who want provenance information.&lt;/li&gt;
&lt;li&gt;Maxx Crawford applied UX refinements to the Picture of the Day widget (&lt;a href=&quot;https://bugzil.la/2054109&quot;&gt;2054109&lt;/a&gt;); users will see improved layout, spacing, and touch targets in the POTD area for clearer interactions.&lt;/li&gt;
&lt;li&gt;Maxx Crawford added a pref and trainhopConfig gate to toggle the POTD “Set as wallpaper” feature (&lt;a href=&quot;https://bugzil.la/2054111&quot;&gt;2054111&lt;/a&gt;); rollout and availability of the wallpaper action are now controllable via pref and remote trainhopConfig.&lt;/li&gt;
&lt;li&gt;Maxx Crawford added a dedicated trainhopConfig.widgetPictureOfTheDay payload for POTD feature config (&lt;a href=&quot;https://bugzil.la/2054112&quot;&gt;bug 2054112&lt;/a&gt;) so the New Tab Page train-hop widget can be controlled server-side — this delivers image URLs, attribution and display params remotely which lets us enable/disable POTD per cohort without ship-side changes and reduces rollout latency for users who see the Picture‑of‑the‑Day widget.&lt;/li&gt;
&lt;li&gt;Irene Ni updated the Shortcuts Add/Edit dialog for Nova (&lt;a href=&quot;https://bugzil.la/2054175&quot;&gt;bug 2054175&lt;/a&gt;) to improve the add/edit UX on the New Tab Shortcuts surface — the patch adjusts dialog layout and controls, tightens validation and accessibility labels, and reduces accidental duplicate/invalid shortcut creation so users editing shortcuts have a more reliable, faster flow.&lt;/li&gt;
&lt;li&gt;Maxx Crawford&lt;a href=&quot;https://bugzil.la/2054436&quot;&gt; fixed the Daily crossword widget content overflowing and clipping past the bottom container boundary&lt;/a&gt; by adjusting the crossword widget’s layout/CSS (container height calculations and overflow/overflow-anchor rules) on the New Tab Page, restoring full visibility of clues and controls across responsive breakpoints.&lt;/li&gt;
&lt;li&gt;Maxx Crawford&lt;a href=&quot;https://bugzil.la/2054463&quot;&gt; fixed Related articles not opening on click&lt;/a&gt; by repairing the related-articles component’s click handling and event delegation (anchor href/target behavior and JS listener) on the New Tab Page so article tiles now reliably open on click for users.&lt;/li&gt;
&lt;li&gt;Maxx Crawford&lt;a href=&quot;https://bugzil.la/2054568&quot;&gt; added a “New” badge and interactions to the Picture of the Day widget&lt;/a&gt;, implementing an isNew flag, local state/localStorage handling, ARIA label updates and click behavior so users can immediately see and act on newly added images.&lt;/li&gt;
&lt;li&gt;Maxx Crawford&lt;a href=&quot;https://bugzil.la/2054599&quot;&gt; updated the initial order of the Picture of the day widget&lt;/a&gt; by changing the PoD component’s initial ordering/priority algorithm so first-run and default NTP surfaces surface curated/high-priority images first.&lt;/li&gt;
&lt;li&gt;Maxx Crawford&lt;a href=&quot;https://bugzil.la/2054936&quot;&gt; migrated Crossword widget strings from Fluent back to inline markup&lt;/a&gt; to fix localization/formatting regressions in the crossword UI and ensure consistent rendering of labels and controls across locales.&lt;/li&gt;
&lt;li&gt;Irene Ni&lt;a href=&quot;https://bugzil.la/2054985&quot;&gt; migrated the New Tab Widgets expand button to moz-button&lt;/a&gt; which standardizes the expand/collapse control on the New Tab Page widgets area, fixing inconsistent styling and keyboard/click handling so users now get consistent visuals and improved accessibility across platforms.&lt;/li&gt;
&lt;li&gt;Reem Hamoui&lt;a href=&quot;https://bugzil.la/2055057&quot;&gt; added a dedicated trainhopConfig.widgetCrossword payload for Crossword feature config&lt;/a&gt; which isolates crossword rollout flags and content settings from other trainhop payloads, allowing targeted remote-config changes and safer A/B testing of the crossword widget without impacting unrelated New Tab features.&lt;/li&gt;
&lt;li&gt;Maxx Crawford&lt;a href=&quot;https://bugzil.la/2055158&quot;&gt; fixed the Daily crossword widget being blank after closing and reopening the browser&lt;/a&gt; by ensuring widget state is correctly initialized/persisted on startup (New Tab Page widget lifecycle), so users now reliably see the daily puzzle after a restart instead of an empty frame.&lt;/li&gt;
&lt;li&gt;Reem Hamoui fixed&lt;a href=&quot;https://bugzil.la/2055195&quot;&gt; Daily crossword completed puzzle and show clues are displayed in medium sized widget&lt;/a&gt;, restoring completed-puzzle rendering and clue visibility in the New Tab Page medium widget (widget template/CSS).&lt;/li&gt;
&lt;li&gt;Maxx Crawford updated&lt;a href=&quot;https://bugzil.la/2055304&quot;&gt; Discovery Stream Admin buttons to use moz-button components&lt;/a&gt;, replacing custom controls with moz-button to standardize admin UI styling and focus behavior.&lt;/li&gt;
&lt;li&gt;Maxx Crawford added&lt;a href=&quot;https://bugzil.la/2055306&quot;&gt; per-widget feature toggles and pref reset buttons&lt;/a&gt; to Discovery Stream Admin, enabling admins to toggle individual widgets and reset prefs without code deploys — changes here can alter what users see when toggled.&lt;/li&gt;
&lt;li&gt;Maxx Crawford migrated&lt;a href=&quot;https://bugzil.la/2055307&quot;&gt; Discovery Stream Admin unit tests to jest&lt;/a&gt;, moving tests to Jest for faster developer feedback and more consistent test tooling.&lt;/li&gt;
&lt;li&gt;Maxx Crawford enforced&lt;a href=&quot;https://bugzil.la/2055640&quot;&gt; Fail jest tests that emit console.error messages&lt;/a&gt;, making tests fail on console.error to catch regressions earlier and improve content quality before release.&lt;/li&gt;
&lt;li&gt;Kyle Jones&lt;a href=&quot;https://bugzil.la/2055643&quot;&gt; populated MozAdsRequestOptions flags from adsBackendConfig in AdsFeed&lt;/a&gt; on the New Tab Page, changing ad request parameters that may alter which ads or personalization users see.&lt;/li&gt;
&lt;li&gt;Mike Conley&lt;a href=&quot;https://bugzil.la/2055942&quot;&gt; removed the version 145 train-hop shim for the PrivacyFeed getTodayStats guard&lt;/a&gt;, simplifying guard logic in the New Tab Page with no direct user-visible change.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Search and Urlbar&lt;/h4&gt;
&lt;h5&gt;Search&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Mandy fixed the “New” label incorrectly appearing for user-installed third party search engines that override application-provided engines (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053710&quot;&gt;2053710&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Standard8 fixed search engine telemetry notifications and private browsing search engine defaults (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053129&quot;&gt;2053129&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1792669&quot;&gt; 1792669&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Suggest&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Adw added header_text support for AMP (AdMarketPlace) suggestions (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053626&quot;&gt;2053626&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Nova&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Adw continued working on Nova with visual improvements across the address bar, search UI, icons, spacing, hover states, and accessibility (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2019160&quot;&gt;2019160&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2050821&quot;&gt; 2050821&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053381&quot;&gt; 2053381&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2055109&quot;&gt; 2055109&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053652&quot;&gt; 2053652&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2054784&quot;&gt; 2054784&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2055353&quot;&gt; 2055353&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053927&quot;&gt; 2053927&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053332&quot;&gt; 2053332&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2050366&quot;&gt; 2050366&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053038&quot;&gt; 2053038&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Daisuke improved the legacy search bar for Nova and fixed several Nova UI issues (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053934&quot;&gt;2053934&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2050759&quot;&gt; 2050759&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2054304&quot;&gt; 2054304&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2046300&quot;&gt; 2046300&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2045993&quot;&gt; 2045993&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Address Bar&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Dharma improved Unified Search Button with search engine icons and a modernized result menu (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2052741&quot;&gt;2052741&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2039292&quot;&gt; 2039292&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;James continued work on adaptive autofill improvements (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2013362&quot;&gt;2013362&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053891&quot;&gt; 2053891&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2050379&quot;&gt; 2050379&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Dao and Mortiz continue multi-context address bar work (MCAB) (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2054328&quot;&gt;2054328&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2054207&quot;&gt; 2054207&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2054168&quot;&gt; 2054168&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2054110&quot;&gt; 2054110&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2054070&quot;&gt; 2054070&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2054066&quot;&gt; 2054066&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2051435&quot;&gt; 2051435&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2055474&quot;&gt; 2055474&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2054801&quot;&gt; 2054801&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2052555&quot;&gt; 2052555&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Places &amp;amp; Bookmarks&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Mak fixed several favicon and Places issues, including bookmark/history fixes (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=418144&quot;&gt;418144&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2055488&quot;&gt; 2055488&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053482&quot;&gt; 2053482&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2052799&quot;&gt; 2052799&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2050378&quot;&gt; 2050378&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Caleb improved Places performance by batching bookmark lookups and modernizing bookmark APIs (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2042098&quot;&gt;2042098&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2042099&quot;&gt; 2042099&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2042087&quot;&gt; 2042087&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2042097&quot;&gt; 2042097&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Storybook/Reusable Components/Acorn Design System&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Nova stuff&lt;/li&gt;
&lt;li&gt;Theme Picker for HNT, OMC and Profiles&lt;/li&gt;
&lt;li&gt;[mconley] There’s a new vertical variant for visual picker. Thanks for the reviews, hjones!&lt;/li&gt;
&lt;/ul&gt;</content:encoded>
	<dc:date>2026-08-25T17:43:36+00:00</dc:date>
	<dc:creator>Katherine Patenio</dc:creator>
</item>
<item rdf:about="discourse.mozilla.org-topic-149251">
	<title>Firefox Tooling Announcements: Happy BMO Push Day! (20260824.1)</title>
	<link>https://discourse.mozilla.org/t/happy-bmo-push-day-20260824-1/149251</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;https://github.com/mozilla-bteam/bmo/tree/release-20260820.1&quot; rel=&quot;noopener nofollow ugc&quot;&gt;Github Link&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The following changes have been pushed to &lt;a href=&quot;https://bugzilla.mozilla.org&quot;&gt;bugzilla.mozilla.org&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1224099&quot;&gt;Bug 1224099&lt;/a&gt; - create 2fa user documentation&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1832783&quot;&gt;Bug 1832783&lt;/a&gt; - Wrong error message for exceeding file size&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2064475&quot;&gt;Bug 2064475&lt;/a&gt; - phab-bot leaves &lt;span class=&quot;hashtag-raw&quot;&gt;#release-managers&lt;/span&gt; review as non-blocking when a user manually adds it first&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2043229&quot;&gt;Bug 2043229&lt;/a&gt; - Display a “Show External” button beneath attachments list to display all attachments that would redirect such as Github and Phabricator&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2057679&quot;&gt;Bug 2057679&lt;/a&gt; - Update docker build process to pull in latest builds of vendered javascript libraries needed by the client&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2061264&quot;&gt;Bug 2061264&lt;/a&gt; - Remove CSP header from REST API responses&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2061831&quot;&gt;Bug 2061831&lt;/a&gt; - Add additional information to bugzilla comments in REST API if comment edited before&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2061441&quot;&gt;Bug 2061441&lt;/a&gt; - Migrate Classification REST resource to native Mojo API&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2064523&quot;&gt;Bug 2064523&lt;/a&gt; - [meta] tracking bug for BMO dependency upgrades&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2053504&quot;&gt;Bug 2053504&lt;/a&gt; - Need to add index to tracking_flags_values table for better performance from /bzapi/bug and REST search&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2055001&quot;&gt;Bug 2055001&lt;/a&gt; - Github Pull Requests: Look for etag value before fetching pull request data to cut down on rate limiting&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Discuss these changes in the &lt;a href=&quot;https://matrix.to/#/#bmo:mozilla.org&quot; rel=&quot;noopener nofollow ugc&quot;&gt;BMO Matrix Room&lt;/a&gt;&lt;/p&gt;
            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;
            &lt;p&gt;&lt;a href=&quot;https://discourse.mozilla.org/t/happy-bmo-push-day-20260824-1/149251&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-24T20:29:42+00:00</dc:date>
	<dc:creator>dkl1</dc:creator>
</item>
<item rdf:about="https://hacks.mozilla.org/?p=48385">
	<title>Hacks.Mozilla.Org: Intent to Ship: JPEG XL</title>
	<link>https://hacks.mozilla.org/2026/08/intent-to-ship-jpeg-xl/</link>
	<content:encoded>&lt;p&gt;It isn’t often that new image formats land in browsers. In the early 2000s we had JPEG, GIF, and PNG. The 2010s gave us WebP, which was a modest step up from JPEG. But the 2020s have given us two new image formats that are a big step up from previous formats: AVIF and JPEG XL.&lt;/p&gt;
&lt;p&gt;We shipped AVIF back in 2021, and today we posted &lt;a href=&quot;https://groups.google.com/a/mozilla.org/g/dev-platform/c/3YMV4MS34KA?pli=1&quot;&gt;our intent to ship JPEG XL&lt;/a&gt;. &lt;a href=&quot;https://groups.google.com/a/chromium.org/g/blink-dev/c/-gDojQbDPRI&quot;&gt;Chrome are also intending to ship&lt;/a&gt;, and given there’s already a partial implementation in Safari, the format will be supported across browsers before the end of the year.&lt;/p&gt;
&lt;h3&gt;Shipping JPEG XL securely&lt;/h3&gt;
&lt;p&gt;We added experimental support for JPEG XL behind a flag back in 2021. But, at 100,000 lines of multithreaded C++, we were concerned about the attack surface this added to Firefox.&lt;/p&gt;
&lt;p&gt;So, &lt;a href=&quot;https://github.com/mozilla/standards-positions/pull/1064&quot;&gt;we laid down a challenge&lt;/a&gt; to the JPEG XL team at Google Research: Build a safe, performant, compact, and compatible JPEG XL decoder in Rust, and we’ll ship it. That challenge was met; Google Research built &lt;a href=&quot;https://github.com/libjxl/jxl-rs&quot;&gt;jxl-rs&lt;/a&gt;, and it’s the core of our JPEG XL support in Firefox.&lt;/p&gt;
&lt;p&gt;We also pushed for &lt;a href=&quot;https://github.com/web-platform-tests/interop-jpegxl&quot;&gt;high quality integration tests as part of an Interop 2026 investigation area&lt;/a&gt;, and &lt;a href=&quot;https://wpt.fyi/results/jpegxl?label=master&amp;amp;label=experimental&amp;amp;aligned&quot;&gt;they’re coming along nicely&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Progressive rendering&lt;/h3&gt;
&lt;p&gt;Although Safari shipped JPEG XL in 2023, their implementation lacked some key features of JPEG XL – our favourite is progressive rendering, which is something we pushed for in the Rust implementation.&lt;/p&gt;
&lt;p&gt;Progressive rendering means the image can render as it’s downloading.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;An image of a fox curled up in a ball, sleeping amongst some grass, divided into four columns, showing JPEG XL progressive rendering. At 4% it's very blurry. At 15% you can tell it's a picture of a fox. At 50% the full image is clear, but not full resolution. At 100% it's full resolution.&quot; class=&quot;aligncenter size-large&quot; height=&quot;793&quot; src=&quot;https://hacks.mozilla.org/wp-content/uploads/2026/08/progressive-stages.avif&quot; style=&quot;width: 100%;&quot; width=&quot;1190&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Although the full image is 135 kB, with only a few kB downloaded the user can determine the subject of the image. &lt;a href=&quot;https://random-stuff.jakearchibald.com/apps/partial-img-decode/?demo=sleeping-fox-progressive.jxl&amp;amp;density=2&quot;&gt;Try the above demo image&lt;/a&gt; in a browser that supports JPEG XL &amp;amp; progressive rendering, like &lt;a href=&quot;https://www.firefox.com/en-GB/channel/desktop/#nightly&quot;&gt;Firefox Nightly&lt;/a&gt; – move the slider to see how the image displays with just a portion downloaded.&lt;/p&gt;
&lt;h3&gt;&lt;b&gt;JPEG XL vs AVIF&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;Browsers will now have two modern image formats for developers to choose from. Which you choose depends on your use-case.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;JPEG XL:&lt;/b&gt; Excels at lossless imagery, progressive rendering, and further compressing JPEGs without quality loss.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AVIF:&lt;/b&gt; Excels at web-quality photographic images, and images that have a mix of sharp edges and flat surfaces.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;A fox curled up in a ball, sleeping amongst some grass.&quot; class=&quot;aligncenter size-large&quot; height=&quot;793&quot; src=&quot;https://hacks.mozilla.org/wp-content/uploads/2026/08/sleeping-fox.avif&quot; style=&quot;width: 100%;&quot; width=&quot;1190&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The image above is a 116 kB AVIF with a quality score (&lt;a href=&quot;https://github.com/cloudinary/ssimulacra2&quot;&gt;SSIMULACRA 2&lt;/a&gt;) of 62.8, meaning medium-high quality. To get the same quality, the JPEG XL image would be 134 kB.&lt;/p&gt;
&lt;p&gt;At a SSIMULACRA 2 score of 80 (very high quality), the AVIF is 227 kB, and the JPEG XL is 264 kB.&lt;/p&gt;
&lt;p&gt;But at lossless, the AVIF is 1.76 MB, and the JPEG XL is 1.45 MB. A lossless WebP is 1.55 MB.&lt;/p&gt;
&lt;p&gt;Another example is a screenshot of the Interop 2025 scores:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Interop dashboard showing browser scores. At the top are two large circles: ‘Interop’ with a score of 95 in green, and ‘Investigations’ with a score of 36 in orange. Below are four browser scores in green circles: Chrome 99, Edge 98, Firefox 99, and Safari 98, each shown with their respective browser icons.&quot; class=&quot;aligncenter size-large&quot; height=&quot;811&quot; src=&quot;https://hacks.mozilla.org/wp-content/uploads/2026/08/interop-2025.avif&quot; style=&quot;width: 100%;&quot; width=&quot;1190&quot; /&gt;&lt;/p&gt;
&lt;p&gt;At a SSIMULACRA 2 score of 78 (very high quality), the AVIF is 11.6 kB, and the JPEG XL is 23.8 kB.&lt;/p&gt;
&lt;p&gt;But at lossless, the AVIF is 164 kB, and the JPEG XL is 92 kB. A lossless WebP is 96 kB.&lt;/p&gt;
&lt;p&gt;Although AVIF tends to produce smaller files at web-quality than JPEG XL, AVIF only has basic progressive rendering support. So, for very large images, it may be worth taking the filesize hit with JPEG XL.&lt;/p&gt;
&lt;p&gt;The key is to test with a representative set of images for your site, at a quality that works best for your users, and remember to &lt;a href=&quot;https://jakearchibald.com/2021/serving-sharp-images-to-high-density-screens/&quot;&gt;optimise for high density.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://hacks.mozilla.org/2026/08/intent-to-ship-jpeg-xl/&quot;&gt;Intent to Ship: JPEG XL&lt;/a&gt; appeared first on &lt;a href=&quot;https://hacks.mozilla.org&quot;&gt;Mozilla Hacks - the Web developer blog&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-24T15:32:15+00:00</dc:date>
	<dc:creator>Jake Archibald</dc:creator>
</item>
<item rdf:about="https://jonalmeida.com/til/github-serves-ssh-over-tls-port/">
	<title>Jonathan Almeida: SSH access to Github over HTTPS</title>
	<link>https://jonalmeida.com/til/github-serves-ssh-over-tls-port/</link>
	<content:encoded>&lt;p&gt;While using guest wifi during travels, I was trying to fetch some changes from a github remote and my &lt;code&gt;git fetch&lt;/code&gt; is over SSH which happens over port 22. Most (TCP?) ports are blocked on public or hotel wifi, so with some help&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;https://jonalmeida.com/til/github-serves-ssh-over-tls-port/#1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; I learnt that Github serves SSH over 443 too.&lt;/p&gt;
&lt;p&gt;A simple ssh config fixes this:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot;&gt;&lt;code&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Host&lt;/span&gt;&lt;span&gt; github.com&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  HostName&lt;/span&gt;&lt;span&gt; ssh.github.com&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  Port&lt;/span&gt;&lt;span&gt; 443&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;1&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;1&lt;/sup&gt;
&lt;p&gt;Claude.&lt;/p&gt;
&lt;/div&gt;</content:encoded>
	<dc:date>2026-08-24T00:00:00+00:00</dc:date>
	<dc:creator>Jonathan Almeida</dc:creator>
</item>
<item rdf:about="urn:https-wrla-ch:-log-2026-08-glean-dictionary-duckdb">
	<title>William Lachance: Glean Dictionary + DuckDB</title>
	<link>https://wrla.ch/log/2026/08/glean-dictionary-duckdb/?utm_source=mozilla&amp;utm_medium=RSS</link>
	<content:encoded>&lt;p&gt;While working on &lt;a href=&quot;https://wrla.ch/log/2026/08/writing-the-docs-2026-edition/&quot;&gt;Writing the Docs: 2026 Edition&lt;/a&gt;,
I experimented a bit with updating the &lt;a href=&quot;https://github.com/mozilla/glean-dictionary&quot;&gt;Glean Dictionary&lt;/a&gt; to
incorporate some of the ideas in the essay, in particular those around reference documentation.&lt;/p&gt;
&lt;p&gt;As a sort of demonstration that documentation &lt;em&gt;about&lt;/em&gt; an application can be
treated as a data product in and of itself, I hacked up a &lt;a href=&quot;https://github.com/wlach/glean-dictionary/commit/13dbdb005b5ee8399e7169962711be418066def2#diff-d9d516c7dbf3d149aa587b0a96e73e2ab209d5d7753915f5e4ce304df5f757d8&quot;&gt;quick ETL pipeline&lt;/a&gt; to dump the JSON output of the Glean Dictionary into a &lt;a href=&quot;https://duckdb.org/&quot;&gt;DuckDB&lt;/a&gt; database that can be queried standalone.&lt;/p&gt;
&lt;p&gt;Since the Glean Dictionary is just a static &lt;a href=&quot;https://www.netlify.com/&quot;&gt;Netlify&lt;/a&gt; site, the DuckDB database can simply
be published alongside as a standard file.
This allows you to do fun things from the DuckDB console like:&lt;/p&gt;
&lt;div class=&quot;brush: &quot;&gt;&lt;div class=&quot;colorful&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;memory D ATTACH 'https://glean-dictionary-DuckDB.netlify.app/data/glean_dictionary.DuckDB' AS glean_dictionary (READ_ONLY);
memory D SELECT type, count(*) AS metrics
         FROM glean_dictionary.metrics
         GROUP BY type
         ORDER BY metrics DESC;
┌─────────────────────────────┬─────────┐
│            type             │ metrics │
│           varchar           │  int64  │
├─────────────────────────────┼─────────┤
│ counter                     │   20057 │
│ event                       │    7256 │
│ string                      │    3545 │
│ labeled_counter             │    3275 │
│ timing_distribution         │    2481 │
│ custom_distribution         │    2169 │
│ quantity                    │    1406 │
│ boolean                     │    1078 │
│ text                        │     588 │
│ labeled_timing_distribution │     569 │
│ datetime                    │     404 │
│ memory_distribution         │     389 │
│ object                      │     369 │
│ labeled_custom_distribution │     340 │
│ rate                        │     215 │
│ dual_labeled_counter        │     210 │
│ string_list                 │     204 │
│ uuid                        │     181 │
│ timespan                    │     149 │
│ labeled_boolean             │     118 │
│ labeled_string              │      84 │
│ labeled_memory_distribution │      66 │
│ labeled_quantity            │      42 │
│ url                         │      26 │
└─────────────────────────────┴─────────┘
  24 rows                     2 columns
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;From there, you could either build an interface like the Glean Dictionary itself (much easier to do from
a database than the somewhat harebrained dataclass soup I originally came up with) or any number
of other data products or analyses. Here's an example marimo notebook that tracks the metrics added
to each product over time:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Marimo Notebook examining the Glean Dictionary metrics&quot; src=&quot;https://wrla.ch/log/2026/08/glean-dictionary-duckdb/glean-dictionary-duckdb.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://molab.marimo.io/notebooks/nb_5vHgD1X1DY4RQV8rwgi7iu/app&quot;&gt;Open in Molab&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As you can see, the number of metrics did a big jump in 2024 (I imagine they finally moved Firefox Desktop over to Glean) with slower and steadier growth since.&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-23T21:11:16+00:00</dc:date>
	<dc:creator>Will Lachance</dc:creator>
</item>
<item rdf:about="https://blog.rust-lang.org/2026/08/21/enabling-next-solver-on-nightly/">
	<title>The Rust Programming Language Blog: Enabling the next-generation trait solver on nightly</title>
	<link>https://blog.rust-lang.org/2026/08/21/enabling-next-solver-on-nightly/</link>
	<content:encoded>&lt;p&gt;After nearly 4 years of active development, &lt;a href=&quot;https://github.com/rust-lang/rust-project-goals/issues/113&quot; rel=&quot;external&quot;&gt;the next-generation trait solver&lt;/a&gt; is close to stabilization. We are enabling it by default on nightly to surface any remaining issues and plan to stabilize it in the next months. This is the largest single change to the Rust compiler since its initial release. It completely replaces how we prove where-clauses, normalize associated types, and much more. &lt;strong&gt;Please try out the latest nightly and &lt;a href=&quot;https://github.com/rust-lang/rust/issues&quot; rel=&quot;external&quot;&gt;open an issue&lt;/a&gt; if you encounter any bugs or regressions.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is an internal component of the compiler. The main benefits of this rework will come in the future. The removal of the old implementation will unblock features such as &lt;a href=&quot;https://rust-lang.github.io/rust-project-goals/2026/rtn.html&quot; rel=&quot;external&quot;&gt;Type Alias Impl Trait and Return Type Notation&lt;/a&gt;, allow us to add new implicit default trait bounds (e.g., &lt;a href=&quot;https://rust-lang.github.io/rust-project-goals/2026/move-trait.html&quot; rel=&quot;external&quot;&gt;&lt;code&gt;Move&lt;/code&gt; and &lt;code&gt;Forget&lt;/code&gt;&lt;/a&gt;), and enable us to fix &lt;a href=&quot;https://rust-lang.github.io/rust-project-goals/2026/roadmap-project-zero.html&quot; rel=&quot;external&quot;&gt;the remaining type system unsoundnesses&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Even so, this already fixes a huge number of issues. As an underapproximation, we currently know of &lt;a href=&quot;https://github.com/rust-lang/rust/issues?q=is%3Aissue%20state%3Aopen%20label%3Afixed-by-next-solver&quot; rel=&quot;external&quot;&gt;more than 200 issues on GitHub fixed by this change&lt;/a&gt;. This also has a significant impact on compile times; more on that later. When developing on nightly, you may accidentally rely on behavior only supported by the new trait solver.&lt;/p&gt;
&lt;p&gt;This is an incredibly big change which results in a non-trivial amount of breakage. Most of these changes are intended improvements to type inference or the removal of undesirable behavior. We are tracking the known issues and breakage &lt;a href=&quot;https://github.com/rust-lang/rust/issues/160895&quot; rel=&quot;external&quot;&gt;in a pinned GitHub issue&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/08/21/enabling-next-solver-on-nightly/#what-can-i-do&quot;&gt;&lt;/a&gt;
What can I do?&lt;/h3&gt;
&lt;p&gt;Please update to the latest nightly version by using &lt;code&gt;rustup update nightly&lt;/code&gt; and use it to test your existing projects and libraries.&lt;/p&gt;
&lt;p&gt;Please tell us if you encounter any breakage, compile-time performance regression, or bad diagnostics. We have not yet spent too much time on error messages for the next-generation trait solver, so we would also appreciate you using this nightly for development to find poor diagnostics and other bugs in our error handling.&lt;/p&gt;
&lt;p&gt;If you encounter any issue, take a quick look at &lt;a href=&quot;https://github.com/rust-lang/rust/issues/160895&quot; rel=&quot;external&quot;&gt;the pinned GitHub issue&lt;/a&gt; to see if the affected crate is already listed, and if not, please open &lt;a href=&quot;https://github.com/rust-lang/rust/issues/new?template=bug_report.md&quot; rel=&quot;external&quot;&gt;a new issue&lt;/a&gt;! To disable the next-generation trait solver on nightly, you can pass &lt;code&gt;-Znext-solver=coherence&lt;/code&gt; to &lt;code&gt;rustc&lt;/code&gt;, use &lt;code&gt;RUSTFLAGS=-Znext-solver=coherence&lt;/code&gt;, or change your project's &lt;a href=&quot;https://doc.rust-lang.org/cargo/reference/config.html&quot; rel=&quot;external&quot;&gt;&lt;code&gt;.cargo/config.toml&lt;/code&gt;&lt;/a&gt; configuration file:&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable&quot;&gt;rustflags&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span class=&quot;z-punctuation z-definition z-array&quot;&gt; [&lt;/span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;z-string z-quoted z-string&quot;&gt;-Znext-solver=coherence&lt;/span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;z-punctuation z-definition z-array&quot;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/08/21/enabling-next-solver-on-nightly/#what-exactly-does-this-mean&quot;&gt;&lt;/a&gt;
What exactly does this mean?&lt;/h3&gt;
&lt;p&gt;We will go into more detail about the next-generation trait solver, how we got here, and what it changes when fully stabilizing it. This is a quick summary of its main impact.&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/08/21/enabling-next-solver-on-nightly/#impl-trait-handling&quot;&gt;&lt;/a&gt;
&lt;code&gt;impl Trait&lt;/code&gt; handling&lt;/h4&gt;
&lt;p&gt;The way opaque types — return-position &lt;code&gt;impl Trait&lt;/code&gt; (RPIT), but also the unstable &lt;a href=&quot;https://rust-lang.github.io/rust-project-goals/2026/rtn.html&quot; rel=&quot;external&quot;&gt;Type Alias Impl Trait (TAIT) and Return Type Notation (RTN)&lt;/a&gt; — are handled in the type system has nearly completely changed. This fixes a lot of bugs and edge cases with them and should make their behavior a lot more consistent in general. This change is why the next-generation trait solver is necessary to stabilize TAIT and RTN.&lt;/p&gt;
&lt;p&gt;The implementation change mostly does not matter for RPIT as we special-cased &lt;code&gt;impl Trait&lt;/code&gt; from the method signature when type checking the method body. This means the only way to observe the old behavior is via recursive function calls. The following snippet errors with the existing implementation, but compiles with &lt;code&gt;-Znext-solver&lt;/code&gt; enabled: &lt;a href=&quot;https://rust.godbolt.org/z/3faWKn4aE&quot; rel=&quot;external&quot;&gt;godbolt&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; foo&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-variable&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt; bool&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; -&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-keyword&quot;&gt; impl&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt; Sized&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;    if&lt;/span&gt;&lt;span class=&quot;z-variable&quot;&gt; b&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;        //&lt;/span&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-comment&quot;&gt; The old implementation errored here.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;        foo&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-constant z-language&quot;&gt;false&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; +&lt;/span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt; else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;        0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/08/21/enabling-next-solver-on-nightly/#associated-types-in-higher-ranked-types&quot;&gt;&lt;/a&gt;
Associated types in higher-ranked types&lt;/h4&gt;
&lt;p&gt;The most impactful change is way we handle associated types referencing bound variables, i.e., lifetimes from a &lt;code&gt;for&amp;lt;'a&amp;gt;&lt;/code&gt; binder, for example, the type &lt;code&gt;for&amp;lt;'a&amp;gt; fn(&amp;lt;T as Trait&amp;gt;::Assoc&amp;lt;'a&amp;gt;)&lt;/code&gt;. While most users don't encounter such types directly, there are widely used crates which do. This change impacts existing code by removing incorrect type inference, such as in &lt;a href=&quot;https://github.com/bevyengine/bevy/pull/18840&quot; rel=&quot;external&quot;&gt;bevy&lt;/a&gt; and &lt;a href=&quot;https://github.com/mitsuhiko/minijinja/pull/787&quot; rel=&quot;external&quot;&gt;minijinja&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It also fixes a bunch of unnecessary errors like in the following example: &lt;a href=&quot;https://rust.godbolt.org/z/MMsEjTxeE&quot; rel=&quot;external&quot;&gt;godbolt&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;trait&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt; OtherTrait&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;    type&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt; Assoc&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;'&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;impl&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt; OtherTrait&lt;/span&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt; for&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt; u32&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;    type&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt; Assoc&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;'&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-keyword z-operator&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span&gt;'&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt; u32&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;trait&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt; Trait&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;impl&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt; OtherTrait&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt; Trait&lt;/span&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt; for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt;T&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt; for&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;'&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; fn&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-keyword&quot;&gt; as&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt; OtherTrait&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt;Assoc&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;'&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; impls&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt; Trait&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; main&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;    //&lt;/span&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-comment&quot;&gt; The old implementation failed to prove&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;    //&lt;/span&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-comment&quot;&gt; the where-bound of `impls`.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;    impls&lt;/span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;::&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt;u32&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt; for&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;'&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-keyword&quot;&gt; fn&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;'&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt; u32&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/08/21/enabling-next-solver-on-nightly/#compile-time-performance&quot;&gt;&lt;/a&gt;
Compile-time performance&lt;/h4&gt;
&lt;p&gt;&lt;sub&gt;co-authored with &lt;a href=&quot;https://github.com/jdonszelmann&quot; rel=&quot;external&quot;&gt;jana&lt;/a&gt; :3&lt;/sub&gt;&lt;/p&gt;
&lt;p&gt;We've spent a lot of time on the compile-time performance of the next-generation trait solver. There have been many cases where it performed quadratically or even exponentially slower than the old solver.&lt;/p&gt;
&lt;p&gt;Especially the last few weeks were mainly spent on improving performance. This work was shared by many people, with major contributions by &lt;a href=&quot;https://github.com/nnethercote&quot; rel=&quot;external&quot;&gt;Nick Nethercote&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdonszelmann&quot; rel=&quot;external&quot;&gt;jana&lt;/a&gt;, &lt;a href=&quot;https://github.com/lqd&quot; rel=&quot;external&quot;&gt;Rémy Rakic&lt;/a&gt;, and &lt;a href=&quot;https://github.com/inkreasing&quot; rel=&quot;external&quot;&gt;mira&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As part of this effort, &lt;a href=&quot;https://github.com/lqd&quot; rel=&quot;external&quot;&gt;Rémy Rakic&lt;/a&gt; compared the performance of both implementations for the top 20,000 crates on &lt;a href=&quot;https://crates.io/crates?sort=downloads&quot; rel=&quot;external&quot;&gt;crates.io&lt;/a&gt;. Below you is a visualization of the performance changes over the last two months.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;The performance of 1000 crates (on the x-axis) plotted against their slowdown factor (logarithmic) on the y-axis. Many crates are around the 1.0 mark (no slowdown), with major outliers at both ends. Colors show progression over time.&quot; src=&quot;https://blog.rust-lang.org/2026/08/21/enabling-next-solver-on-nightly/visualization.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;On the left and the right, the major outliers can be found. Note that the sample of crates here is biased &lt;em&gt;towards&lt;/em&gt; such crates, because those are more interesting to us. Nearly all crates we tested in the top 20k had effectively the same performance with both implementations.&lt;/p&gt;
&lt;p&gt;This graph shows that we've mainly focused our efforts on the negative outliers and made significant progress there. While many of the crates that previously took more than twice as long to compile with the new solver are still slightly slower, our work has made a few of them actually compile &lt;em&gt;faster&lt;/em&gt; than with the old solver.&lt;/p&gt;
&lt;p&gt;We will continue to improve its performance over the coming months, and there are still a lot of optimization opportunities compared to the existing implementation. My expectation is that, in the long term, nearly all crates will benefit from the next-generation trait solver. I am especially excited about the huge performance benefits for some trait-heavy crates.&lt;/p&gt;
&lt;p&gt;As an example, &lt;a href=&quot;https://github.com/Dragon-Hatcher/type-system-chess&quot; rel=&quot;external&quot;&gt;a Chess implementation in Rust's type system&lt;/a&gt; hangs with the old implementation while taking a minute with the new one. There are also more practical crates with huge performance benefits, e.g., the &lt;a href=&quot;https://crates.io/crates/datafusion&quot; rel=&quot;external&quot;&gt;&lt;code&gt;datafusion&lt;/code&gt; crate&lt;/a&gt; compiles more than 8x faster now. For more details about the recent performance work, see &lt;a href=&quot;https://donsz.nl/blog/new-solver-performance&quot; rel=&quot;external&quot;&gt;this blog post by jana&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Again, thank you for testing with the latest nightly and &lt;a href=&quot;https://github.com/rust-lang/rust/issues&quot; rel=&quot;external&quot;&gt;opening a GitHub issue if you encounter any issues&lt;/a&gt;! We're excited to fully stabilize the next-generation trait solver soon.&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-21T00:00:00+00:00</dc:date>
	<dc:creator>lcnr</dc:creator>
</item>
<item rdf:about="http://ritter.vg/blog-webaudio_alibaba.html">
	<title>Tom Ritter: webaudio fingerprinting on alibaba</title>
	<link>http://ritter.vg/blog-webaudio_alibaba.html</link>
	<content:encoded>&lt;p&gt;There's a popular post going around about Alibaba doing WebAudio fingerprinting and in the process, mucking around with the author's Bluetooth headphones. Here's the &lt;strong&gt;tl;dr: browser fingerprinting is a far-too-pervasive method of tracking users across the web, but at least for WebAudio specifically, it's not very effective.  Firefox has largely eliminated this fingerprinting vector.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I work on Firefox. Chrome, Brave, Safari probably have defenses against this.  I'm pretty sure Chrome's WebAudio code was made approximately constant (like ours) many years ago.  It probably still leaks CPU architecture though.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I don't fully agree with &lt;a href=&quot;https://en.wikipedia.org/wiki/Linus%27s_law&quot;&gt;the adage&lt;/a&gt; &quot;given enough eyeballs, all bugs are shallow&quot; - I think a more true one might be &quot;given enough victims, your attack code is going to change something that makes someone notice&quot;.  And that's &lt;a href=&quot;https://en.wikipedia.org/wiki/XZ_Utils_backdoor&quot;&gt;exactly what happened with... sorry, wrong link.&lt;/a&gt;  That's &lt;a href=&quot;https://blog.laserphile.com/2026/08/aliexpress-webpage-keeping-multipoint.html&quot;&gt;exactly what happened with Alibaba's fingerprinting code&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you want to test Alibaba's WebAudio fingerprint, I had claude &lt;a href=&quot;https://ritter.vg/misc/ff/webaudio-alibaba.html&quot;&gt; extract it into a standalone page&lt;/a&gt;.  My value is &lt;code&gt;sha256:9a388c0dd04cfdc54314f9d961c7e2d247b972067e28d1cea76bd6060cf1392e&lt;/code&gt;, and the other value we saw in an internal survey was &lt;code&gt;sha256:16d3191880ce01f726015ec6a1f9a072a81ebd04bf489098d4685d1d1c0b2711&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;WebAudio Fingerprinting in Firefox&lt;/h3&gt;

&lt;p&gt;We made the WebAudio constant &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1358149&quot;&gt;in Firefox 118&lt;/a&gt; as part of our initial round of &lt;a href=&quot;https://support.mozilla.org/en-US/kb/firefox-protection-against-fingerprinting&quot;&gt;Fingerprinting Protection features&lt;/a&gt;.  This eliminated &lt;em&gt;most&lt;/em&gt; of the differences.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://ritter.vg/resources/audio_fingerprint.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;99.24% of users belong to one of three values, and .76% of users had that data collection point fail (a value of zero.)  So virtually all users have one of these three values but &lt;strong&gt;why are there three values???&lt;/strong&gt;  Why isn't there one?? Well this is why we collected this telemetry - to ensure we really had made things constant the way we thought we had, and if we hadn't, figure out why and fix it.  &lt;/p&gt;

&lt;p&gt;The improvements we put into 118 eliminated &lt;em&gt;a lot&lt;/em&gt; of differences and I wish I had a graph I could show you of what it looked like before (but I don't.)  But what about these remaining three buckets?  We were able to figure out that the differences between these are CPU-level differences, which is not surprising given the math operations of audio processing.  Specifically one value comes from (all) x86 CPUs and x64 CPUs that lack &lt;a href=&quot;https://en.wikipedia.org/wiki/FMA_instruction_set&quot;&gt;fused multiply-add instructions&lt;/a&gt;, one value from x64 with FMA, and one value from CPUs with the NEON instruction set (ARM).  &lt;/p&gt;

&lt;p&gt;We followed up on that effort to collapse these buckets into one another.  &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2036977&quot;&gt;Bug 2036977&lt;/a&gt; collapses the x64 (with FMA3) into the x86/x64 (without FMA3) bucket.  &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2040494&quot;&gt;Bug 2040494&lt;/a&gt; is on file to collapse the remaining bucket into the NEON bucket but I haven't worked on it in a while because it's just not as high a priority as larger improvements we can make like &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2050515&quot;&gt;Sanitizing the WebGL Renderer and Vendor&lt;/a&gt; (something I talked a bit about &lt;a href=&quot;https://ritter.vg/blog-webgl_renderer.html&quot;&gt;a few months ago&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Because if you've read this far you surely care about the &lt;em&gt;rest&lt;/em&gt; of the graph also.  There is also the long-tail of 23 other values belonging to 48 other users.  This is very unfortunate, as it makes these users completely unique, but it is also not terribly unusual - computers are &lt;em&gt;weird&lt;/em&gt; and these results could have been caused by bad RAM, a CPU bug, or possibly some crazy architecture (LoongArch??).&lt;/p&gt;

&lt;p&gt;But at the end of the day, WebAudio fingerprinting is nearly useless.  I don't expect browser fingerprinting to disappear from websites entirely (unless some regulatory action occurs, fingers crossed) - it's still going to be effective against a majority of users on the web, but at least for privacy focused browsers, it should be wildly less effective.&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-20T19:56:00+00:00</dc:date>
</item>
<item rdf:about="https://blog.mozilla.org/?p=86826">
	<title>The Mozilla Blog: A New Framework for Open Source AI</title>
	<link>https://blog.mozilla.org/en/mozilla/ai/open-source-ai-framework/</link>
	<content:encoded>&lt;p&gt;Open or closed AI isn’t a fringe question anymore; it’s a live policy debate, with real consequences for who gets to build, audit, and compete in the AI ecosystem. But as that debate plays out in Washington, Brussels, and beyond, the harder questions are still very much up for discussion. What does meaningful openness actually require? Where should the guardrails sit? And who gets a say in setting them?&lt;/p&gt;



&lt;p&gt;That’s exactly the gap a group of us set out to close two years ago.&lt;/p&gt;



&lt;p&gt;Back in 2024, Mozilla and the Columbia Institute of Global Politics&lt;a href=&quot;https://blog.mozilla.org/en/mozilla/ai/introducing-columbia-convening-openness-and-ai/&quot;&gt; brought together more than 40 researchers, builders, and policy experts&lt;/a&gt; for the Columbia Convening on Openness and AI. The goal was simple to state, but hard to do: figure out what “open” actually means once you’re talking about foundational models rather than traditional software, and build a shared vocabulary that researchers, developers, policymakers, and civil society could all work from.&lt;/p&gt;



&lt;p&gt;The convening was the start of a years-long effort to turn a room full of perspectives on openness into something durable and useful for developers, builders, and policymakers alike. Recently, that effort reached a new milestone: Communications of the ACM published &lt;a href=&quot;https://cacm.acm.org/research/unpacking-open-source-artificial-intelligence-toward-a-framework-for-openness-in-foundation-models/&quot;&gt;“Unpacking Open Source AI: Toward a Framework for Openness in Foundation Models,”&lt;/a&gt; which I co-authored alongside a host of other allies spanning academia, industry, and civil society.&lt;/p&gt;



&lt;p&gt;The paper outlines a framework that does something the open source AI debate badly needs. It stops treating “open” as a single switch you flip on or off. Instead, it breaks the AI stack down into its component parts – data, code, model weights, documentation, and more – and looks at how openness at each layer shapes who actually gets to inspect, use, and build on a system. That kind of specificity matters. A lot of the current policy debate treats open source AI as a monolith, when in reality the details of what gets shared (and how) are what determine whether openness delivers on its promise of safety, competition, and accountability.&lt;/p&gt;



&lt;p&gt;A few of the framework’s ideas are worth pulling out. First, it treats openness as a gradient rather than a binary. A system can be open on weights while remaining closed on training data, or open on code while offering little documentation on how it was evaluated. The framework offers language to describe that mix precisely, instead of lumping it under one vague label. Second, it argues that safety can’t be assessed at the model level alone: what matters just as much is the surrounding system – the deployment environment, the safeguards, the moderation layers, and governance structures. That’s because a model’s real-world risk profile is shaped by all of it together, not by the weights in isolation. Critically, the framework deliberately stops short of prescribing one “correct” level of openness for every system. Instead, it gives developers, researchers, and regulators a common vocabulary to make and evaluate those tradeoffs on a case-by-case basis.&lt;/p&gt;



&lt;p&gt;It’s worth pausing on who’s behind this work. Scroll through the author list, and you’ll find a genuine cross-section of the individuals and organizations contributing to moving the development of open systems forward. It’s a collection of people who’ve spent years arguing, in good faith and often across real disagreements, that open approaches can be a foundation for safer, more democratic, more accountable AI. That’s the same spirit that drove the original convening, and it’s what makes this paper a genuinely important milestone for our mission to make AI systems accessible to the many, rather than the few.&lt;/p&gt;



&lt;p&gt;You can read the full paper &lt;a href=&quot;https://cacm.acm.org/research/unpacking-open-source-artificial-intelligence-toward-a-framework-for-openness-in-foundation-models/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/mozilla/ai/open-source-ai-framework/&quot;&gt;A New Framework for Open Source AI&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/en/&quot;&gt;The Mozilla Blog&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-20T15:57:30+00:00</dc:date>
	<dc:creator>Mark Surman</dc:creator>
</item>
<item rdf:about="https://addons.mozilla.org/blog/extension-starter-pack/">
	<title>Firefox Add-on Reviews: Extension starter pack</title>
	<link>https://addons.mozilla.org/blog/extension-starter-pack/</link>
	<content:encoded>&lt;p class=&quot;wp-block-paragraph&quot;&gt;You’ve probably heard about “ad blockers,” “tab managers,” “anti-trackers” or any number of browser customization tools commonly known as &lt;em&gt;extensions.&lt;/em&gt; And maybe you’re intrigued to try one, but you’ve never installed an extension before and the whole notion just seems a bit vague. &lt;/p&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;Let’s demystify extensions. &lt;/p&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;An extension is simply an app that runs on a browser like Firefox. From serious productivity and privacy enhancing features to fun stuff like changing the way the web looks and feels, extensions give you the power to completely personalize your browsing experience. &lt;/p&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;&lt;a href=&quot;https://addons.mozilla.org/firefox/&quot; rel=&quot;noreferrer noopener&quot;&gt;&lt;em&gt;Addons.mozilla.org&lt;/em&gt;&lt;/a&gt; (AMO) is a discovery site that hosts thousands of independently developed Firefox extensions. It’s a vast and eclectic ecosystem of features, so we’ve hand-picked a small collection of great extensions to get you started…&lt;/p&gt;



&lt;h3&gt;&lt;em&gt;I’ve always wanted an ad blocker!&lt;/em&gt;&lt;/h3&gt;



&lt;h4&gt;uBlock Origin&lt;/h4&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;Works beautifully “right out of the box.” Just add it to Firefox and &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/ublock-origin/&quot; rel=&quot;noreferrer noopener&quot;&gt;uBlock Origin&lt;/a&gt; will automatically start blocking all types of advertising — display ads, banners, video pre-rolls, pop-ups — you name it. &lt;/p&gt;



&lt;div class=&quot;addon-card&quot;&gt;&lt;/div&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;Of course, if you prefer deeper content blocking customization, uBlock Origin allows for fine control as well, like the ability to import your own custom block filters or access a data display that shows how much of a web page was blocked by the extension. More than just an ad blocker, uBlock Origin also effectively thwarts some websites that may be infected with malware. &lt;/p&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;For more insights about this excellent ad blocker, please see &lt;a href=&quot;https://addons.mozilla.org/blog/ublock-origin-everything-you-need-to-know-about-the-ad-blocker/&quot; rel=&quot;noreferrer noopener&quot;&gt;uBlock Origin — everything you need to know about the ad blocker&lt;/a&gt;, or to explore even more ad blocker options, check out &lt;a href=&quot;https://addons.mozilla.org/blog/whats-the-best-ad-blocker-for-you/&quot; rel=&quot;noreferrer noopener&quot;&gt;What’s the best ad blocker for you?&lt;/a&gt;&lt;/p&gt;



&lt;h3&gt;&lt;em&gt;I’m concerned about my privacy and tracking around the web&lt;/em&gt;&lt;/h3&gt;



&lt;h4&gt;Privacy Badger&lt;/h4&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;The flagship anti-tracking extension from privacy proponents at the &lt;a href=&quot;https://www.eff.org/&quot;&gt;Electronic Frontier Foundation&lt;/a&gt;, &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/privacy-badger17/&quot; rel=&quot;noreferrer noopener&quot;&gt;Privacy Badger&lt;/a&gt; is programmed to look for tracking heuristics (i.e. specific actions that indicate someone is trying to track you). &lt;/p&gt;



&lt;div class=&quot;addon-card&quot;&gt;&lt;/div&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;Zero set up required. Just install Privacy Badger and it will automatically search for third-party cookies, HTML5 local storage “supercookies,” canvas fingerprinting, and other sneaky tracking methods. &lt;/p&gt;



&lt;h4&gt;Consent-O-Matic&lt;/h4&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;Not only will &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/consent-o-matic/&quot;&gt;Consent-O-Matic&lt;/a&gt; automatically handle pop-up data consent forms (per &lt;a href=&quot;https://gdpr-info.eu/&quot;&gt;GDPR&lt;/a&gt; regulations), but it’s brilliantly designed to interpret the often intentionally confusing language of consent pop-ups trying to trick you into agreeing to invasive tracking. &lt;/p&gt;



&lt;div class=&quot;addon-card&quot;&gt;&lt;/div&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;Developed by internet privacy researchers at Aarhus University in Denmark who grew sick of seeing so many deceptive consent pop-ups, Consent-O-Matic’s decision-making logic is built upon studying hundreds of pop-ups and identifying duplicitous patterns. So using this extension not only gives you a great ally in the fight against intrusive tracking, but you’re spared the annoyance of constantly clicking consent forms all over the internet. &lt;/p&gt;



&lt;h3&gt;&lt;em&gt;I need an easier way to translate languages&lt;/em&gt;&lt;/h3&gt;



&lt;h4&gt;Simple Translate&lt;/h4&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;Do you do a lot of language translations on the web? If so, it’s a hassle always copying text and navigating away from the page you’re on just to translate a word or phrase. &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/simple-translate/&quot; rel=&quot;noreferrer noopener&quot;&gt;Simple Translate&lt;/a&gt; solves this problem by giving you the power to perform translations right there on the page. &lt;/p&gt;



&lt;div class=&quot;addon-card&quot;&gt;&lt;/div&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;Just highlight the text you want translated and right-click to get instant translations in a handy pop-up display, so you never have to leave the page again. &lt;/p&gt;



&lt;h3&gt;&lt;em&gt;YouTube your way&lt;/em&gt;&lt;/h3&gt;



&lt;h4&gt;Enhancer for YouTube&lt;/h4&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;Despite offering dozens of creative customization features, &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/enhancer-for-youtube/&quot; rel=&quot;noreferrer noopener&quot;&gt;Enhancer for YouTube&lt;/a&gt; is easy to grasp and gives you a variety of ways to radically alter YouTube functionality. &lt;/p&gt;



&lt;div class=&quot;addon-card&quot;&gt;&lt;/div&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;Once the extension is installed you’ll find an additional set of controls just beneath YouTube’s video player (you can even select the extension features you want to appear in the control bar). &lt;/p&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;Key features include… &lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Customize video player size&lt;/li&gt;



&lt;li&gt;Change YouTube’s look with a dark theme&lt;/li&gt;



&lt;li&gt;Volume boost&lt;/li&gt;



&lt;li&gt;Ad blocking (with ability to allow ads from channels you choose to support)&lt;/li&gt;



&lt;li&gt;One-click screenshots&lt;/li&gt;



&lt;li&gt;Change playback speed&lt;/li&gt;



&lt;li&gt;High-def default video quality&lt;/li&gt;
&lt;/ul&gt;



&lt;h3&gt;&lt;em&gt;I’m drowning in browser tabs! Send help! &lt;/em&gt;&lt;/h3&gt;



&lt;h4&gt;OneTab&lt;/h4&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;You’ve got an overwhelming number of open tabs. You can’t close them. You need them. But you can’t organize them all right now either. You’re too busy. What to do?! &lt;/p&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;If you have &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/onetab/&quot; rel=&quot;noreferrer noopener&quot;&gt;OneTab&lt;/a&gt; on Firefox you just click the toolbar button and suddenly all those open tabs become a clean list of text links listed on a single page. Ahhh serenity.&lt;/p&gt;



&lt;div class=&quot;addon-card&quot;&gt;&lt;/div&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;Not only will you create browser breathing room for yourself, but with all those previously open tabs now closed and converted to text links, you’ve also freed up a bunch of CPU and memory, which should improve browser speed and performance. &lt;/p&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;If you’ve never installed a browser extension before, we hope you found something here that piques your interest to try. To continue exploring ways to personalize Firefox through the power of extensions, please see our collection of 100+ &lt;a href=&quot;https://addons.mozilla.org/firefox/search/?promoted=recommended&amp;amp;sort=random&amp;amp;type=extension&quot; rel=&quot;noreferrer noopener&quot;&gt;Recommended Extensions&lt;/a&gt;. &lt;/p&gt;</content:encoded>
	<dc:date>2026-08-20T01:16:13+00:00</dc:date>
	<dc:creator>Scott DeVaney</dc:creator>
</item>
<item rdf:about="https://addons.mozilla.org/blog/youtube-your-way-browser-extensions-put-you-in-charge-of-your-video-experience/">
	<title>Firefox Add-on Reviews: YouTube your way — browser extensions put you in charge of your video experience</title>
	<link>https://addons.mozilla.org/blog/youtube-your-way-browser-extensions-put-you-in-charge-of-your-video-experience/</link>
	<content:encoded>&lt;p class=&quot;wp-block-paragraph&quot;&gt;YouTube wants you to experience YouTube in prescribed ways. But with the right browser extension, you’re free to alter YouTube to taste. Change the way the site looks, behaves, and delivers your favorite videos. &lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Enhancer for YouTube&lt;/h3&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;With dozens of customization features, &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/enhancer-for-youtube/&quot; rel=&quot;noreferrer noopener&quot;&gt;Enhancer for YouTube&lt;/a&gt; has the power to dramatically reorient the way you watch videos. &lt;/p&gt;



&lt;div class=&quot;addon-card&quot;&gt;&lt;/div&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;While a bunch of customization options may seem overwhelming, &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/enhancer-for-youtube/&quot; rel=&quot;noreferrer noopener&quot;&gt;Enhancer for YouTube&lt;/a&gt; actually makes it very simple to navigate settings and select just your favorite features. You can even choose which of your preferred features will display in the extension’s easy access interface that appears just beneath the video player.&lt;/p&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;Key features… &lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Customize video player size &lt;/li&gt;



&lt;li&gt;Change YouTube’s look with a dark theme&lt;/li&gt;



&lt;li&gt;Volume booster&lt;/li&gt;



&lt;li&gt;Ad blocking (with ability to whitelist channels you OK for ads)&lt;/li&gt;



&lt;li&gt;Take quick screenshots of videos&lt;/li&gt;



&lt;li&gt;Change playback speed&lt;/li&gt;



&lt;li&gt;Set default video quality from low to high def&lt;/li&gt;



&lt;li&gt;Shortcut configuration&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-162&quot; height=&quot;926&quot; src=&quot;https://mozamo.wpengine.com/wp-content/uploads/2021/06/blog_social_enhancer-1024x926.jpg&quot; width=&quot;1024&quot; /&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;Enhancer for YouTube provides feature controls just beneath the video player. &lt;/figcaption&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Return YouTube Dislike&lt;/strong&gt;&lt;/h3&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;Do you like the Dislike? YouTube removed the display that reveals the number of thumbs-down Dislikes a video has, but with &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/return-youtube-dislikes/&quot; rel=&quot;noreferrer noopener&quot;&gt;Return YouTube Dislike&lt;/a&gt; you can bring back the brutal truth. &lt;/p&gt;



&lt;div class=&quot;addon-card&quot;&gt;&lt;/div&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p class=&quot;wp-block-paragraph&quot;&gt;&lt;em&gt;“Does exactly what the name suggests. Can’t see myself without this extension. Seriously, bad move on YouTube for removing such a vital tool.”&lt;/em&gt;&lt;/p&gt;
&lt;cite&gt;Firefox user &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/return-youtube-dislikes/reviews/1943348/&quot; rel=&quot;noreferrer noopener&quot;&gt;OFG&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p class=&quot;wp-block-paragraph&quot;&gt;&lt;em&gt;“i have never smashed 5 stars faster.”&lt;/em&gt;&lt;/p&gt;
&lt;cite&gt;Firefox user &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/return-youtube-dislikes/reviews/1943326/&quot; rel=&quot;noreferrer noopener&quot;&gt;12918016&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;YouTube High Definition&lt;/h3&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;Though its primary function is to automatically play all YouTube videos in their highest possible resolution, &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/youtube-high-definition/&quot; rel=&quot;noreferrer noopener&quot;&gt;YouTube High Definition&lt;/a&gt; has a few other fine features to offer. &lt;/p&gt;



&lt;div class=&quot;addon-card&quot;&gt;&lt;/div&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;In addition to automatic HD, YouTube High Definition can…&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Customize video player size&lt;/li&gt;



&lt;li&gt;HD support for clips embedded on external sites&lt;/li&gt;



&lt;li&gt;Specify your ideal resolution (4k – 144p)&lt;/li&gt;



&lt;li&gt;Set a preferred volume level &lt;/li&gt;



&lt;li&gt;Also automatically plays the highest quality audio&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;YouTube NonStop&lt;/h3&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;So simple. So awesome. &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/youtube-nonstop/&quot; rel=&quot;noreferrer noopener&quot;&gt;YouTube NonStop&lt;/a&gt; remedies the headache of interrupting your music with that awful “Video paused. Continue watching?” message. &lt;/p&gt;



&lt;div class=&quot;addon-card&quot;&gt;&lt;/div&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;Works on YouTube and YouTube Music. Now you’re free to navigate away from the YouTube tab for as long as you like and never worry about music interruption again. &lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;YouTube Screenshot Button&lt;/strong&gt;&lt;/h3&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;If you take a lot of screenshots on YouTube, then the aptly titled &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/youtube-screenshot-button/&quot; rel=&quot;noreferrer noopener&quot;&gt;YouTube Screenshot Button&lt;/a&gt; is worth your time.&lt;/p&gt;



&lt;div class=&quot;addon-card&quot;&gt;&lt;/div&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;You’ll find a “Screenshot” button conveniently located on the control panel of videos, or at the top of the screen on Shorts (or you can use custom keystrokes), so it’s always easy to snap a quick shot. Set preferences to automatically download screenshots as JPEG or PNG files. &lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Unhook: Remove YouTube Recommended Videos &amp;amp; Comments&lt;/strong&gt;&lt;/h3&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;Instant serenity for YouTube! &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/youtube-recommended-videos/&quot;&gt;Unhook&lt;/a&gt; strips away unwanted distractions like the promotional sidebar, end-screen suggestions, trending tab, and much more. &lt;/p&gt;



&lt;div class=&quot;addon-card&quot;&gt;&lt;/div&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;More than two dozen customization options make this an essential extension for anyone seeking escape from YouTube rabbit holes. You can even hide notifications and live chat boxes. &lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p class=&quot;wp-block-paragraph&quot;&gt;&lt;em&gt;“This is the best extension to control YouTube usage, and not let YouTube control you.”&lt;/em&gt;&lt;/p&gt;
&lt;cite&gt;&lt;em&gt;Firefox user &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/youtube-recommended-videos/reviews/1926071/&quot; rel=&quot;noreferrer noopener&quot;&gt;Shubham Mandiya&lt;/a&gt;&lt;/em&gt;&lt;/cite&gt;&lt;/blockquote&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;PocketTube&lt;/h3&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;If you subscribe to a lot of YouTube channels &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/youtube-subscription-groups/&quot; rel=&quot;noreferrer noopener&quot;&gt;PocketTube&lt;/a&gt; is a fantastic way to organize all your subscriptions by themed collections. &lt;/p&gt;



&lt;div class=&quot;addon-card&quot;&gt;&lt;/div&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;Group your channel collections by subject, like “Sports,” “Cooking,” “Cat videos,” etc. Other key features include…&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Add custom icons to easily identify channel collections&lt;/li&gt;



&lt;li&gt;Customize your feed so you just see videos you haven’t watched yet and prioritize videos from certain channels&lt;/li&gt;



&lt;li&gt;Integrates seamlessly with YouTube homepage &lt;/li&gt;



&lt;li&gt;Sync collections across Firefox/Android/iOS using Google Drive and Chrome Profiler&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-250&quot; height=&quot;614&quot; src=&quot;https://mozamo.wpengine.com/wp-content/uploads/2021/09/blog_yt_pockettube-1024x614.jpg&quot; width=&quot;1024&quot; /&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;PocketTube keeps your channel collections neatly tucked away to the side. &lt;/figcaption&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;AdBlocker for YouTube&lt;/h3&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;It’s not just you who’s noticed a lot more ads lately. Regain control with &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/adblock-for-youtube/&quot; rel=&quot;noreferrer noopener&quot;&gt;AdBlocker for YouTube&lt;/a&gt;. &lt;/p&gt;



&lt;div class=&quot;addon-card&quot;&gt;&lt;/div&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;The extension very simply and effectively removes both video and display ads from YouTube. Period. Enjoy a faster, more focused YouTube. &lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;SponsorBlock&lt;/h3&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;It’s a terrible experience when you’re enjoying a video or music on YouTube and you’re suddenly interrupted by a blaring ad. &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/sponsorblock/&quot; rel=&quot;noreferrer noopener&quot;&gt;SponsorBlock&lt;/a&gt; solves this problem in a highly effective and original way. &lt;/p&gt;



&lt;div class=&quot;addon-card&quot;&gt;&lt;/div&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;Leveraging the power of crowd sourced information to locate where — precisely — interruptive sponsored segments appear in videos, SponsorBlock learns where to automatically skip sponsored segments with its ever growing database of videos. You can also participate in the project by reporting sponsored segments whenever you encounter them (it’s easy to report right there on the video page with the extension). &lt;/p&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;SponsorBlock can also learn to skip non-music portions of music videos and intros/outros, as well. If you’d like a deeper dive of SponsorBlock we profiled its developer and open source project on &lt;a href=&quot;https://blog.mozilla.org/products/firefox/firefox-extension-sponsorblock/&quot; rel=&quot;noreferrer noopener&quot;&gt;Mozilla Distilled&lt;/a&gt;. &lt;/p&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;We hope one of these extensions enhances the way you enjoy YouTube. Feel free to explore more &lt;a href=&quot;https://addons.mozilla.org/firefox/collections/4757633/must-have-media/&quot; rel=&quot;noreferrer noopener&quot;&gt;great media extensions&lt;/a&gt; on &lt;em&gt;addons.mozilla.org&lt;/em&gt;. &lt;/p&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;&lt;/p&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;&lt;/p&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;&lt;/p&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt; &lt;/p&gt;</content:encoded>
	<dc:date>2026-08-20T01:10:19+00:00</dc:date>
	<dc:creator>Scott DeVaney</dc:creator>
</item>
<item rdf:about="https://blog.rust-lang.org/2026/08/20/supply-chain-attack-on-arrayref/">
	<title>The Rust Programming Language Blog: Supply chain attack on arrayref</title>
	<link>https://blog.rust-lang.org/2026/08/20/supply-chain-attack-on-arrayref/</link>
	<content:encoded>&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/08/20/supply-chain-attack-on-arrayref/#what-happened&quot;&gt;&lt;/a&gt;
What happened&lt;/h3&gt;
&lt;p&gt;On 2026-08-20 at 7:15 UTC we got a report that the &lt;code&gt;proc-macro1&lt;/code&gt; crate was malicious.&lt;/p&gt;
&lt;p&gt;The Rust Security Response Team verified this to be the case: the crate had a build script that was downloading a malicious payload.&lt;/p&gt;
&lt;p&gt;This crate &lt;code&gt;proc-macro1&lt;/code&gt; and others like it (&lt;code&gt;proc-macro-en&lt;/code&gt;, &lt;code&gt;aovine&lt;/code&gt;, &lt;code&gt;arone&lt;/code&gt;, &lt;code&gt;aronenao&lt;/code&gt;, &lt;code&gt;tinymember&lt;/code&gt;) have been deleted.&lt;/p&gt;
&lt;p&gt;Furthermore, we discovered that the popular &lt;a href=&quot;https://crates.io/crates/arrayref&quot; rel=&quot;external&quot;&gt;&lt;code&gt;arrayref&lt;/code&gt;&lt;/a&gt; crate had recently been republished and made to depend on this crate, with the most recent versions yanked. We have removed the malicious version and unyanked the maliciously-yanked versions. Other crates by that author (&lt;a href=&quot;https://crates.io/crates/internment&quot; rel=&quot;external&quot;&gt;&lt;code&gt;internment&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://crates.io/crates/append-only-vec&quot; rel=&quot;external&quot;&gt;&lt;code&gt;append-only-vec&lt;/code&gt;&lt;/a&gt;) were also affected so we have done the same for those, and locked the account as a precaution. We do not believe the author of &lt;code&gt;arrayref&lt;/code&gt; to be acting maliciously, but their computer or credentials are likely compromised, and we are attempting to contact them.&lt;/p&gt;
&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/08/20/supply-chain-attack-on-arrayref/#what-you-need-to-do&quot;&gt;&lt;/a&gt;
What you need to do&lt;/h3&gt;
&lt;p&gt;We recommend you check your local dependencies to ensure these crates were not pulled in.
Here are the malicious versions that we deleted from crates.io:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;append-only-vec@0.1.9&lt;/code&gt;: published at &lt;code&gt;2026-08-20T07:37:49Z&lt;/code&gt;, deleted at &lt;code&gt;2026-08-20T09:25:24Z&lt;/code&gt;. Online for 107 minutes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;arrayref@0.3.10&lt;/code&gt;: published at &lt;code&gt;2026-08-20T07:15:00Z&lt;/code&gt;, deleted at &lt;code&gt;2026-08-20T08:41:40Z&lt;/code&gt;. Online for 86 minutes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;internment@0.8.7&lt;/code&gt;: published at &lt;code&gt;2026-08-20T07:34:07Z&lt;/code&gt;, deleted at &lt;code&gt;2026-08-20T09:04:11Z&lt;/code&gt;. Online for 90 minutes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;proc-macro1&lt;/code&gt;, &lt;code&gt;proc-macro-en&lt;/code&gt;, &lt;code&gt;aovine&lt;/code&gt;, &lt;code&gt;arone&lt;/code&gt;, &lt;code&gt;aronenao&lt;/code&gt;, &lt;code&gt;tinymember&lt;/code&gt; (any versions).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can quickly check if these crates have been used locally by going through &lt;code&gt;~/.cargo/registry/cache&lt;/code&gt; with this command:&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;z-string&quot;&gt; ~/.cargo/registry/cache&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;z-string&quot;&gt; f&lt;/span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \(&lt;/span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;  -&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; '&lt;/span&gt;&lt;span class=&quot;z-string z-quoted z-string&quot;&gt;append-only-vec-0.1.9.crate&lt;/span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;  -&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; '&lt;/span&gt;&lt;span class=&quot;z-string z-quoted z-string&quot;&gt;arrayref-0.3.10.crate&lt;/span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;  -&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; '&lt;/span&gt;&lt;span class=&quot;z-string z-quoted z-string&quot;&gt;internment-0.8.7.crate&lt;/span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;  -&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; '&lt;/span&gt;&lt;span class=&quot;z-string z-quoted z-string&quot;&gt;proc-macro1-*.crate&lt;/span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;  -&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; '&lt;/span&gt;&lt;span class=&quot;z-string z-quoted z-string&quot;&gt;proc-macro-en-*.crate&lt;/span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;  -&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; '&lt;/span&gt;&lt;span class=&quot;z-string z-quoted z-string&quot;&gt;aovine-*.crate&lt;/span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;  -&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; '&lt;/span&gt;&lt;span class=&quot;z-string z-quoted z-string&quot;&gt;arone-*.crate&lt;/span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;  -&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; '&lt;/span&gt;&lt;span class=&quot;z-string z-quoted z-string&quot;&gt;aronenao-*.crate&lt;/span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;  -&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; '&lt;/span&gt;&lt;span class=&quot;z-string z-quoted z-string&quot;&gt;tinymember-*.crate&lt;/span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt;\)&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-constant z-other z-constant z-other z-option&quot;&gt;print&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/08/20/supply-chain-attack-on-arrayref/#thanks&quot;&gt;&lt;/a&gt;
Thanks&lt;/h3&gt;
&lt;p&gt;We'd like to thank the Research Team at Nextron Systems GmbH for initially discovering this and reporting it to us. We'd also like to thank Emily Albini, Manish Goregaokar, Marco Ieni, Tobias Bieniek, Ubiratan Soares, and Walter Pearce for participating in the response here.&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-20T00:00:00+00:00</dc:date>
	<dc:creator>Manish Goregaokar</dc:creator>
</item>
<item rdf:about="https://blog.rust-lang.org/2026/08/20/Rust-1.98.0/">
	<title>The Rust Programming Language Blog: Announcing Rust 1.98.0</title>
	<link>https://blog.rust-lang.org/2026/08/20/Rust-1.98.0/</link>
	<content:encoded>&lt;p&gt;The Rust team is happy to announce a new version of Rust, 1.98.0. Rust is a programming language empowering everyone to build reliable and efficient software.&lt;/p&gt;
&lt;p&gt;If you have a previous version of Rust installed via &lt;code&gt;rustup&lt;/code&gt;, you can get 1.98.0 with:&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt; rustup update stable&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you don't have it already, you can get &lt;a href=&quot;https://www.rust-lang.org/install.html&quot; rel=&quot;external&quot;&gt;&lt;code&gt;rustup&lt;/code&gt;&lt;/a&gt; from the appropriate page on our website, and check out the &lt;a href=&quot;https://doc.rust-lang.org/stable/releases.html#version-1980-2026-08-20&quot; rel=&quot;external&quot;&gt;detailed release notes for 1.98.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you'd like to help us out by testing future releases, you might consider updating locally to use the beta channel (&lt;code&gt;rustup default beta&lt;/code&gt;) or the nightly channel (&lt;code&gt;rustup default nightly&lt;/code&gt;). Please &lt;a href=&quot;https://github.com/rust-lang/rust/issues/new/choose&quot; rel=&quot;external&quot;&gt;report&lt;/a&gt; any bugs you might come across!&lt;/p&gt;
&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/08/20/Rust-1.98.0/#what-s-in-1-98-0-stable&quot;&gt;&lt;/a&gt;
What's in 1.98.0 stable&lt;/h3&gt;
&lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/08/20/Rust-1.98.0/#algebraic-floating-point-methods&quot;&gt;&lt;/a&gt;
Algebraic floating-point methods&lt;/h4&gt;
&lt;p&gt;The floating-point types &lt;code&gt;f32&lt;/code&gt; and &lt;code&gt;f64&lt;/code&gt; now have &quot;algebraic&quot; methods for addition, subtraction, multiplication, division, and remainder. These allow optimizations on these operations using the algebraic properties of real numbers, even though these properties do not hold with the limitations of floating-point representations. The exact set of optimizations is not specified, but may be similar to the kind of optimization you would see with the &lt;code&gt;-ffast-math&lt;/code&gt; option in other languages.&lt;/p&gt;
&lt;p&gt;For example, floating-point addition is &lt;a href=&quot;https://en.wikipedia.org/wiki/Associative_property#Nonassociativity_of_floating-point_calculation&quot; rel=&quot;external&quot;&gt;not associative&lt;/a&gt;, so a sum like &lt;code&gt;a + b + c + d&lt;/code&gt; must be evaluated in the left-associative order in which it is parsed, like &lt;code&gt;((a + b) + c) + d&lt;/code&gt;. If you write the same sum as a chain of &lt;code&gt;algebraic_add&lt;/code&gt; calls, then the compiler is free to reorder it, perhaps like &lt;code&gt;(a + b) + (c + d)&lt;/code&gt; to evaluate the partial sums simultaneously. Broader loop-vectorization is often enabled by using these algebraic methods as well.&lt;/p&gt;
&lt;p&gt;These methods are non-deterministic, since the compiler is free to choose different optimizations, but they never cause undefined behavior. See the &lt;a href=&quot;https://doc.rust-lang.org/stable/core/primitive.f32.html#algebraic-operators&quot; rel=&quot;external&quot;&gt;library documentation&lt;/a&gt; and the original &lt;a href=&quot;https://github.com/rust-lang/libs-team/issues/532&quot; rel=&quot;external&quot;&gt;API change proposal&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/08/20/Rust-1.98.0/#buffered-integer-formatting&quot;&gt;&lt;/a&gt;
Buffered integer formatting&lt;/h4&gt;
&lt;p&gt;All of the primitive integer types now have a &lt;a href=&quot;https://doc.rust-lang.org/stable/core/primitive.usize.html#method.format_into&quot; rel=&quot;external&quot;&gt;&lt;code&gt;format_into&lt;/code&gt;&lt;/a&gt; method that takes a &lt;code&gt;&amp;amp;mut NumBuffer&amp;lt;Self&amp;gt;&lt;/code&gt; parameter, which is a buffer that is large enough to hold the decimal format of any value of that type. The buffer itself is opaque, but the method returns the formatted &lt;code&gt;&amp;amp;str&lt;/code&gt; with a lifetime borrowed from that buffer.&lt;/p&gt;
&lt;p&gt;This method also bypasses much of the dynamic dispatch that you would get with buffered &lt;code&gt;write!&lt;/code&gt; formatting, which can be a boon to performance. The &lt;a href=&quot;https://github.com/dtolnay/itoa-benchmark&quot; rel=&quot;external&quot;&gt;&lt;code&gt;itoa-benchmark&lt;/code&gt;&lt;/a&gt; repo now shows that &lt;code&gt;format_into&lt;/code&gt; performs similarly to &lt;code&gt;itoa&lt;/code&gt; itself, so this could serve as a standard replacement for that dependency and others like it.&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/08/20/Rust-1.98.0/#fix-interaction-between-manuallydrop-and-box&quot;&gt;&lt;/a&gt;
Fix interaction between &lt;code&gt;ManuallyDrop&lt;/code&gt; and &lt;code&gt;Box&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Prior to Rust 1.96.0, there was a bug in the Rust compiler, which made the following code undefined behavior:&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;z-storage z-storage z-modifier&quot;&gt; mut&lt;/span&gt;&lt;span class=&quot;z-variable&quot;&gt; x&lt;/span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-keyword z-operator&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt; ManuallyDrop&lt;/span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;new&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-namespace&quot;&gt;Box&lt;/span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;new&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;unsafe&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt; ManuallyDrop&lt;/span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;drop&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;z-storage z-storage z-modifier&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;z-variable&quot;&gt; x&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;z-variable&quot;&gt; x&lt;/span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-keyword z-operator&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-variable&quot;&gt; x&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt; //&lt;/span&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-comment&quot;&gt; UB!&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is because the compiler considers it undefined behavior to move a &lt;code&gt;Box&lt;/code&gt; that has been dropped (deallocated), and &lt;code&gt;ManuallyDrop&lt;/code&gt; used to propagate that, such that moving &lt;code&gt;ManuallyDrop&amp;lt;Box&amp;lt;_&amp;gt;&amp;gt;&lt;/code&gt; where the box has been dropped would also be considered UB.&lt;/p&gt;
&lt;p&gt;In Rust 1.96.0 we fixed this, so this code was no longer UB. In this release we have updated the &lt;code&gt;ManuallyDrop&lt;/code&gt; documentation, providing a stable guarantee that this code will continue to not be UB in the future. See &lt;a href=&quot;https://doc.rust-lang.org/stable/std/mem/struct.ManuallyDrop.html#pre-196-interaction-with-box&quot; rel=&quot;external&quot;&gt;&lt;code&gt;ManuallyDrop&lt;/code&gt; docs&lt;/a&gt; and the related &lt;a href=&quot;https://rust-lang.github.io/rfcs/3336-maybe-dangling.html&quot; rel=&quot;external&quot;&gt;RFC 3336&lt;/a&gt; for more information.&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/08/20/Rust-1.98.0/#stabilized-apis&quot;&gt;&lt;/a&gt;
Stabilized APIs&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/primitive.str.html#method.substr_range&quot; rel=&quot;external&quot;&gt;&lt;code&gt;str::substr_range&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/primitive.slice.html#method.subslice_range&quot; rel=&quot;external&quot;&gt;&lt;code&gt;[T]::subslice_range&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/fmt/struct.NumBuffer.html&quot; rel=&quot;external&quot;&gt;&lt;code&gt;core::fmt::NumBuffer&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/primitive.usize.html#method.format_into&quot; rel=&quot;external&quot;&gt;&lt;code&gt;&amp;lt;{integer}&amp;gt;::format_into&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/process/struct.CommandArgs.html#impl-Send-for-CommandArgs%3C'a%3E&quot; rel=&quot;external&quot;&gt;&lt;code&gt;Send/Sync for std::process::CommandArgs&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_add&quot; rel=&quot;external&quot;&gt;&lt;code&gt;{fN}::algebraic_add&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_sub&quot; rel=&quot;external&quot;&gt;&lt;code&gt;{fN}::algebraic_sub&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_mul&quot; rel=&quot;external&quot;&gt;&lt;code&gt;{fN}::algebraic_mul&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_div&quot; rel=&quot;external&quot;&gt;&lt;code&gt;{fN}::algebraic_div&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_rem&quot; rel=&quot;external&quot;&gt;&lt;code&gt;{fN}::algebraic_rem&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/num/struct.NonZero.html#method.from_str_radix-4&quot; rel=&quot;external&quot;&gt;&lt;code&gt;NonZero&amp;lt;{integer}&amp;gt;::from_str_radix&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16le&quot; rel=&quot;external&quot;&gt;&lt;code&gt;String::from_utf16le&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16le_lossy&quot; rel=&quot;external&quot;&gt;&lt;code&gt;String::from_utf16le_lossy&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16be&quot; rel=&quot;external&quot;&gt;&lt;code&gt;String::from_utf16be&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16be_lossy&quot; rel=&quot;external&quot;&gt;&lt;code&gt;String::from_utf16be_lossy&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/primitive.slice.html#method.strip_circumfix&quot; rel=&quot;external&quot;&gt;&lt;code&gt;[T]::strip_circumfix&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/primitive.str.html#method.strip_circumfix&quot; rel=&quot;external&quot;&gt;&lt;code&gt;str::strip_circumfix&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/sync/atomic/struct.Atomic.html#method.from_mut&quot; rel=&quot;external&quot;&gt;&lt;code&gt;Atomic&amp;lt;T&amp;gt;::from_mut&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/sync/atomic/struct.Atomic.html#method.get_mut_slice&quot; rel=&quot;external&quot;&gt;&lt;code&gt;Atomic&amp;lt;T&amp;gt;::get_mut_slice&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/sync/atomic/struct.Atomic.html#method.from_mut_slice&quot; rel=&quot;external&quot;&gt;&lt;code&gt;Atomic&amp;lt;T&amp;gt;::from_mut_slice&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/range/legacy/index.html&quot; rel=&quot;external&quot;&gt;&lt;code&gt;std::range::legacy&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/08/20/Rust-1.98.0/#other-changes&quot;&gt;&lt;/a&gt;
Other changes&lt;/h4&gt;
&lt;p&gt;Check out everything that changed in &lt;a href=&quot;https://github.com/rust-lang/rust/releases/tag/1.98.0&quot; rel=&quot;external&quot;&gt;Rust&lt;/a&gt;, &lt;a href=&quot;https://doc.rust-lang.org/nightly/cargo/CHANGELOG.html#cargo-198-2026-08-20&quot; rel=&quot;external&quot;&gt;Cargo&lt;/a&gt;, and &lt;a href=&quot;https://github.com/rust-lang/rust-clippy/blob/master/CHANGELOG.md#rust-198&quot; rel=&quot;external&quot;&gt;Clippy&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2026/08/20/Rust-1.98.0/#contributors-to-1-98-0&quot;&gt;&lt;/a&gt;
Contributors to 1.98.0&lt;/h3&gt;
&lt;p&gt;Many people came together to create Rust 1.98.0. We couldn't have done it without all of you. &lt;a href=&quot;https://thanks.rust-lang.org/rust/1.98.0/&quot; rel=&quot;external&quot;&gt;Thanks!&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-20T00:00:00+00:00</dc:date>
	<dc:creator>The Rust Release Team</dc:creator>
</item>
<item rdf:about="https://blog.mozilla.org/sumo/?p=4198">
	<title>Support.Mozilla.Org: Firefox new release cadence and what to expect</title>
	<link>https://blog.mozilla.org/sumo/2026/08/19/firefox-new-release-cadence-and-what-to-expect/</link>
	<content:encoded>&lt;p&gt;Some of you may have heard about this change from the &lt;a href=&quot;https://groups.google.com/a/mozilla.org/g/dev-platform/c/qlaQ1YSlOP8&quot;&gt;announcement the team shared in early July&lt;/a&gt;,  but &lt;b&gt;Firefox is moving to a two-week release cycle&lt;/b&gt;. The first release on the new cadence is Firefox 155 on September 1, 2026, two weeks earlier than the originally planned September 15 release.&lt;/p&gt;
&lt;h3&gt;Why this is happening&lt;/h3&gt;
&lt;p&gt;If you’ve been following recent Firefox releases, you may have noticed that we’ve shipped multiple dot releases for several versions (up to six for Firefox 152). This new release cadence is designed to get bug fixes and completed features into users’ hands sooner, while making the release process more predictable.&lt;/p&gt;
&lt;p&gt;It’s important to note that this &lt;b&gt;doesn’t mean Firefox will ship twice as many features&lt;/b&gt;. Instead, we’ll be releasing updates more frequently, using a two-week rhythm instead of the current four-week cadence. For contributors, the biggest benefit is predictability: rather than waiting for an unpredictable series of dot releases, we’ll have a more consistent release schedule to plan around.&lt;/p&gt;
&lt;p&gt;That said, it doesn’t mean dot releases will disappear entirely. They may still happen when needed, albeit not as often.&lt;/p&gt;
&lt;p&gt;Here’s what to expect, how we’re preparing, and how you can help.&lt;/p&gt;
&lt;h3&gt;What it means for SUMO&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;Community Forum&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;On a typical Firefox release, we see an average of 30% increase in incoming support questions during the first 10 days. Under the new two-week release cadence, we expect these waves of questions will arrive more frequently.&lt;/p&gt;
&lt;p&gt;The good news is that we’ve observed a consistent pattern after each release. Most questions fall into a handful of common categories, including UI changes (“Where did this go?”), lost data after updating, and crashes. We expect to see the same types of questions, just on a more frequent schedule, which gives us an opportunity to prepare ahead of each release.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Knowledge Base &amp;amp; Localization&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;A faster release cadence also means a faster content cycle. We expect that content requests will arrive on a more distributed timeline instead of every 4 weeks. But of course, this will also have a downstream impact on localization, as new and updated KB articles become available for translation more frequently. We recognize the additional pressure this could put on localization communities, and we’ll be monitoring the transition closely to make sure we’re mindful of contributor capacity.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Release preparation&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;We’ll be preparing a release wiki page every two weeks instead of every four. For now, our monthly Community Call will remain on its existing monthly schedule, though we’ll revisit that if the new release cadence creates a need for more frequent community updates.&lt;/p&gt;
&lt;h3&gt;How we’re preparing and how you can help&lt;/h3&gt;
&lt;p&gt;Here’s what we’re doing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Community Forum:&lt;/b&gt; We’ll be adding and updating canned responses related to the most common post-release questions, including UI changes, lost data after updating, crashes, and other recurring issues. We’ll also continue to prepare the &lt;a href=&quot;https://wiki.mozilla.org/Support:Releases&quot;&gt;release wiki&lt;/a&gt; before each Firefox release so you’ll know what’s changing and what to expect.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Knowledge Base:&lt;/b&gt; The CX team is updating the Bugzilla content request template and collaborating with the product folks to make it easier for them to submit content requests and provide the information needed to create the content. We’ve also introduced a &lt;b&gt;sumo-contributors&lt;/b&gt; keyword in &lt;a href=&quot;https://bugzilla.mozilla.org/buglist.cgi?keywords=sumo-contributors&amp;amp;list_id=18072190&amp;amp;query_format=advanced&amp;amp;bug_status=__open__&amp;amp;order=changeddate%20DESC&quot;&gt;Bugzilla&lt;/a&gt; to categorize requests that are open for contributors, making them easier to find and track.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Localization&lt;/b&gt;: We know the SUMO localization dashboard doesn’t currently have a priority indicator, so please use the release wiki as a guide to identify which content may need attention first. We’ll also explore ways to provide better visibility into upcoming content changes, giving localization communities more time to plan their work around the new release cadence.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here’s how you can help:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Be extra active during the first 10 days after each release.&lt;/b&gt; That’s when we see the biggest wave of support questions, and your contributions have the greatest impact.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Use our common forum responses.&lt;/b&gt; They’ll help you reply more quickly and consistently. If you spot opportunities for improvement, please let us know in &lt;a href=&quot;https://support.mozilla.org/forums/contributors/717544&quot;&gt;this thread&lt;/a&gt;! Your feedback will help make them even better for future releases.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Get involved in the KB content request process&lt;/b&gt;. With content requests arriving more frequently, we’ll need more contributor participation to help create, update, and review support content. Keep an eye on Bugzilla requests tagged with &lt;b&gt;sumo-contributors&lt;/b&gt; for opportunities to get involved.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Keep an eye on the &lt;a href=&quot;https://whattrainisitnow.com/calendar/&quot;&gt;release calendar&lt;/a&gt; for localization work.&lt;/b&gt; Localization work will likely arrive on a more distributed schedule rather than being concentrated every four weeks. Following the release calendar can help you anticipate when new or updated content may be ready for localization. But of course, be sure to contribute at a pace that works for you.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Looking after each other&lt;/h3&gt;
&lt;p&gt;We also want to acknowledge that contributor burnout is a real risk when the quieter periods between releases become shorter. We’ll be monitoring the transition closely and adjusting as we learn. Most importantly, you should never feel like you have to be “on” all the time. Every contribution, no matter how big or small, makes a difference.&lt;/p&gt;
&lt;p&gt;The first major test of this new cadence will likely come with &lt;b&gt;Firefox 157&lt;/b&gt;, when Project Nova is expected to roll out more broadly. We’ll treat that release as an opportunity to learn what works, identify where we need to improve, and fine-tune our approach together.&lt;/p&gt;
&lt;p&gt;Thank you for everything you do to support Firefox users. This transition is only possible because of our contributor community. If you have any questions, concerns, or ideas, we’d love to hear them. Join our &lt;a href=&quot;https://support.mozilla.org/forums/contributors/717720?last=90944&quot;&gt;Community Call&lt;/a&gt; where we’ll also discuss more about this change.&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-19T16:07:01+00:00</dc:date>
	<dc:creator>Rizki Kelimutu</dc:creator>
</item>
<item rdf:about="tag:this-week-in-rust.org,2026-08-19:/blog/2026/08/19/this-week-in-rust-665/">
	<title>This Week In Rust: This Week in Rust 665</title>
	<link>https://this-week-in-rust.org/blog/2026/08/19/this-week-in-rust-665/</link>
	<content:encoded>&lt;p&gt;Hello and welcome to another issue of &lt;em&gt;This Week in Rust&lt;/em&gt;!
&lt;a href=&quot;https://www.rust-lang.org/&quot;&gt;Rust&lt;/a&gt; is a programming language empowering everyone to build reliable and efficient software.
This is a weekly summary of its progress and community.
Want something mentioned? Tag us at
&lt;a href=&quot;https://bsky.app/profile/thisweekinrust.bsky.social&quot;&gt;@thisweekinrust.bsky.social&lt;/a&gt; on Bluesky or
&lt;a href=&quot;https://mastodon.social/@thisweekinrust&quot;&gt;@ThisWeekinRust&lt;/a&gt; on mastodon.social, or
&lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;send us a pull request&lt;/a&gt;.
Want to get involved? &lt;a href=&quot;https://github.com/rust-lang/rust/blob/main/CONTRIBUTING.md&quot;&gt;We love contributions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This Week in Rust&lt;/em&gt; is openly developed &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;on GitHub&lt;/a&gt; and archives can be viewed at &lt;a href=&quot;https://this-week-in-rust.org/&quot;&gt;this-week-in-rust.org&lt;/a&gt;.
If you find any errors in this week's issue, &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust/pulls&quot;&gt;please submit a PR&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Want TWIR in your inbox? &lt;a href=&quot;https://this-week-in-rust.us11.list-manage.com/subscribe?u=fd84c1c757e02889a9b08d289&amp;amp;id=0ed8b72485&quot;&gt;Subscribe here&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#updates-from-rust-community&quot;&gt;Updates from Rust Community&lt;/a&gt;&lt;/h4&gt;


&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#official&quot;&gt;Official&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.rust-lang.org/inside-rust/2026/08/18/reducing-target-dir-size-on-nightly/&quot;&gt;Experiment in reducing target directory size on nightly&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#newsletters&quot;&gt;Newsletters&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-78&quot;&gt;The Embedded Rustacean Issue #78&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#projecttooling-updates&quot;&gt;Project/Tooling Updates&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dirkjan.ochtman.nl/writing/2026/08/13/announcing-oxish.html&quot;&gt;OxiSH: a modern, memory-safe SSH server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hackmd.io/@s_haMSbyTAOWfoXc1aYNUg/Hka74gCwZg&quot;&gt;A critical review of Xilem in 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/plabayo/rama/releases/tag/rama-0.4.0&quot;&gt;rama v0.4.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#observationsthoughts&quot;&gt;Observations/Thoughts&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://rolandsdev.blog/posts/from-go-to-rust/&quot;&gt;From Go to Rust&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://besok.github.io/posts/what-zig-felt-like-coming-from-rust/&quot;&gt;What Zig felt like, coming from Rust&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://domenkozar.com/2026/08/13/i-want-extern-fil-c/&quot;&gt;I want extern &quot;fil-c&quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.yoshuawuyts.com/four-levels-of-in-place-initialization/&quot;&gt;Four levels of in-place initialization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://predr.ag/blog/protecting-the-rust-stdlib-from-breakage/&quot;&gt;Protecting the Rust standard library from accidental breakage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://murlet.com/blog/rendering-wgpu-under-electron/&quot;&gt;Zero-copy wgpu rendering inside an Electron app&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ai2rules.dev/blog/the-lint-that-was-off-by-default/&quot;&gt;The Lint That Would Have Caught It Is Off by Default&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[video] [series] &lt;a href=&quot;https://youtu.be/q4GdfJNKI-M&quot;&gt;Implementing State Machines (Part 1)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rust-walkthroughs&quot;&gt;Rust Walkthroughs&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://niss36.github.io/blog/01-gentle-intro-to-embedded-rust/&quot;&gt;A gentle introduction to Embedded Rust&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://learning-rust.github.io/labs/building-a-containerized-restful-api/&quot;&gt;Building a Containerized RESTful API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#research&quot;&gt;Research&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://arxiv.org/pdf/2608.13759&quot;&gt;GPU Offload in Rust: Portable, Safe, and Fast&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#miscellaneous&quot;&gt;Miscellaneous&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://joshlf.com/posts/netstack-fm-ep-10/&quot;&gt;Zerocopy with Joshua Liebow-Feeser&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#crate-of-the-week&quot;&gt;Crate of the Week&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;This week's crate is &lt;a href=&quot;https://crates.io/crates/tokio_with_wasm&quot;&gt;tokio_with_wasm&lt;/a&gt;, a crate that lets a single tokio codebase run both natively and in web browsers.&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/t/crate-of-the-week/2704/1654&quot;&gt;Kim Dong-Hyun&lt;/a&gt; for the self-suggestion!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://users.rust-lang.org/t/crate-of-the-week/2704&quot;&gt;Please submit your suggestions and votes for next week&lt;/a&gt;!&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#calls-for-testing&quot;&gt;Calls for Testing&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;An important step for RFC implementation is for people to experiment with the
implementation and give feedback, especially before stabilization.&lt;/p&gt;
&lt;p&gt;If you are a feature implementer and would like your RFC to appear in this list, add a
&lt;code&gt;call-for-testing&lt;/code&gt; label to your RFC along with a comment providing testing instructions and/or
guidance on which aspect(s) of the feature need testing.&lt;/p&gt;
&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#cargo&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen&quot;&gt;Cargo&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/issues/15495&quot;&gt;Tracking Issue for &lt;code&gt;-Zembed-metadata&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;No calls for testing were issued this week by
&lt;a href=&quot;https://github.com/rust-lang/rust/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen&quot;&gt;Rust&lt;/a&gt;,
&lt;a href=&quot;https://github.com/rust-lang/rustup/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen&quot;&gt;Rustup&lt;/a&gt; or
&lt;a href=&quot;https://github.com/rust-lang/rfcs/issues?q=label%3Acall-for-testing%20state%3Aopen&quot;&gt;Rust language RFCs&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust/issues&quot;&gt;Let us know&lt;/a&gt; if you would like your feature to be tracked as a part of this list.&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#call-for-participation-projects-and-speakers&quot;&gt;Call for Participation; projects and speakers&lt;/a&gt;&lt;/h4&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#cfp-projects&quot;&gt;CFP - Projects&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Always wanted to contribute to open-source projects but did not know where to start?
Every week we highlight some tasks from the Rust community for you to pick and get started!&lt;/p&gt;
&lt;p&gt;Some of these tasks may also have mentors available, visit the task page for more information.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lacs-project/sysknife/issues/215&quot;&gt;sysknife - Export the audit chain rows, not just the verify verdict&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lacs-project/sysknife/issues/216&quot;&gt;sysknife - Expose the read-only actions as MCP tools without exposing AptUpdate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lacs-project/sysknife/issues/217&quot;&gt;sysknife - Record a current Fedora Atomic validation run&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/yantrikos/yantrikdb/issues/100&quot;&gt;YantrikDB - Migrate the 7 remaining manual SAVEPOINT sites to SavepointGuard (panic-unwind hole + 7 hand-rolled copies of the unwind rule)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Tuntii/RustAPI/issues/261&quot;&gt;RustAPI - chore: issue templates, drop missing triage label, MSRV 1.85 (easy)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Tuntii/KayaDB/issues/46&quot;&gt;KayaDB - test: one extra named malformed WAL / command-frame decoder case (easy)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/luohoa97/cordial/issues/11&quot;&gt;Cordial - GameActivity.getWaterfallInsets has the wrong JNI descriptor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/luohoa97/cordial/issues/12&quot;&gt;Cordial - ro.soc.manufacturer is answered with an empty string&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/luohoa97/cordial/issues/13&quot;&gt;Cordial - Map which FLog channels take a number and which take a severity name&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;If you are a Rust project owner and are looking for contributors, please submit tasks &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust?tab=readme-ov-file#call-for-participation-guidelines&quot;&gt;here&lt;/a&gt; or through a &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;PR to TWiR&lt;/a&gt; or by reaching out on &lt;a href=&quot;https://bsky.app/profile/thisweekinrust.bsky.social&quot;&gt;Bluesky&lt;/a&gt; or &lt;a href=&quot;https://mastodon.social/@thisweekinrust&quot;&gt;Mastodon&lt;/a&gt;!&lt;/p&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#cfp-events&quot;&gt;CFP - Events&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Are you a new or experienced speaker looking for a place to share something cool? This section highlights events that are being planned and are accepting submissions to join their event as a speaker.&lt;/p&gt;



&lt;p&gt;If you are an event organizer hoping to expand the reach of your event, please submit a link to the website through a &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;PR to TWiR&lt;/a&gt; or by reaching out on &lt;a href=&quot;https://bsky.app/profile/thisweekinrust.bsky.social&quot;&gt;Bluesky&lt;/a&gt; or &lt;a href=&quot;https://mastodon.social/@thisweekinrust&quot;&gt;Mastodon&lt;/a&gt;!&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#updates-from-the-rust-project&quot;&gt;Updates from the Rust Project&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;613 pull requests were &lt;a href=&quot;https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2026-08-11..2026-08-18&quot;&gt;merged in the last week&lt;/a&gt;&lt;/p&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#compiler&quot;&gt;Compiler&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160892&quot;&gt;inline some hot new-solver functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/155942&quot;&gt;stabilize &lt;code&gt;-Zprofile-sample-use&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/158504&quot;&gt;stabilize &lt;code&gt;extern &quot;custom&quot;&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161127&quot;&gt;make &lt;code&gt;ShardedHashMap::with_capacity&lt;/code&gt; split capacity between shards&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160605&quot;&gt;three new-solver speedups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/158436&quot;&gt;use &lt;code&gt;TyOrConstInferVar&lt;/code&gt; in the next solver, fix #158441&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#library&quot;&gt;Library&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/158885&quot;&gt;add &lt;code&gt;core::num::Complex&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160731&quot;&gt;&lt;code&gt;Arc&lt;/code&gt;: remove unnecessary &lt;code&gt;fmt::Display&lt;/code&gt; use for overflow assertion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161250&quot;&gt;core/num: implement feature &lt;code&gt;float_nan_to&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/159963&quot;&gt;core: implement &lt;code&gt;FusedIterator&lt;/code&gt; for &lt;code&gt;StepBy&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160687&quot;&gt;experiment: add &lt;code&gt;core::cmp::smallest&lt;/code&gt; and &lt;code&gt;core::cmp::largest&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160203&quot;&gt;&lt;code&gt;Iterator::{min,max}(_by_key)&lt;/code&gt; should use overridden &lt;code&gt;min&lt;/code&gt;/&lt;code&gt;max&lt;/code&gt;/&lt;code&gt;lt&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161055&quot;&gt;&lt;code&gt;offload!&lt;/code&gt; function-like macro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161040&quot;&gt;optimize CStr backing slice bounds checks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160408&quot;&gt;single-byte ASCII searcher for &lt;code&gt;StrSearcherImpl(pattern.rs)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#cargo_1&quot;&gt;Cargo&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17349&quot;&gt;&lt;code&gt;trim-paths&lt;/code&gt;: honor workspace prefix override from env&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17274&quot;&gt;&lt;code&gt;frontmatter&lt;/code&gt;: Don't panic on a short closing fence before a non-ASCII char&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17353&quot;&gt;&lt;code&gt;min-publish-age&lt;/code&gt;: remove &lt;code&gt;registry.min-publish-age&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17267&quot;&gt;enable &lt;code&gt;-Zembed-metadata=no&lt;/code&gt; by default on nightly Cargo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17354&quot;&gt;re-stabilize build-dir layout v2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17356&quot;&gt;remove unremap file when running cargo clean -p in new build-dir layout&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rustdoc&quot;&gt;Rustdoc&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160882&quot;&gt;add basic &lt;code&gt;splat&lt;/code&gt; support to &lt;code&gt;rustdoc&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/137858&quot;&gt;add new &lt;code&gt;unused_footnote_definition&lt;/code&gt; rustdoc lint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/161003&quot;&gt;also warn if an invalid &lt;code&gt;doc&lt;/code&gt; attribute is used on a macro invocation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#clippy&quot;&gt;Clippy&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17465&quot;&gt;add &lt;code&gt;option_zip_none&lt;/code&gt; lint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17308&quot;&gt;clean-up &lt;code&gt;used_underscore_*&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17557&quot;&gt;fix ICE on &lt;code&gt;unnecessary_rest_pattern&lt;/code&gt; for TyAlias&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17045&quot;&gt;fix &lt;code&gt;unfulfilled_lint_expectations&lt;/code&gt; incorrectly triggered by &lt;code&gt;#[expect(clippy::let_and_return)]&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17396&quot;&gt;fix duplicate diagnostics for &lt;code&gt;min_rust_version_invalid_attr&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17581&quot;&gt;perf: check fn kind before the expansion walk in &lt;code&gt;missing_const_for_thread_local&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17582&quot;&gt;perf: resolve the callee before the expansion walk in &lt;code&gt;VecArgs::hir&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/17276&quot;&gt;perf: run &lt;code&gt;in_external_macro&lt;/code&gt; after the cheap checks in five hot lint paths&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rust-analyzer&quot;&gt;Rust-Analyzer&lt;/a&gt;&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23159&quot;&gt;parser: frontmatter error path for UTF-8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23118&quot;&gt;avoid panic for mismatched associated type parameters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/22225&quot;&gt;check original type for &lt;code&gt;replace_arith_op&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23127&quot;&gt;consider loop containing &lt;code&gt;break expr&lt;/code&gt; to diverge if &lt;code&gt;expr&lt;/code&gt; is diverging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23122&quot;&gt;do not panic when defined in macro from input&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23134&quot;&gt;don't error on tail comma for some macro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23147&quot;&gt;emit E0600 when unary &lt;code&gt;!&lt;/code&gt;/&lt;code&gt;-&lt;/code&gt; is applied to unsupported type&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23111&quot;&gt;every workspace should have a proc-macro server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23140&quot;&gt;fix &lt;code&gt;rustc_private&lt;/code&gt; support for &lt;code&gt;rustc_proc_macro&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23115&quot;&gt;lower range expressions in hir lowering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23138&quot;&gt;return an error const to the solver when consteval fails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/23109&quot;&gt;offer &lt;code&gt;replace_arith&lt;/code&gt; on references to ints&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/22325&quot;&gt;support Reborrow and CoerceShared built-in derives&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rust-compiler-performance-triage&quot;&gt;Rust Compiler Performance Triage&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;There were almost no regressions this week, while the next trait solver saw several significant performance
improvements!&lt;/p&gt;
&lt;p&gt;Triage done by &lt;strong&gt;@kobzol&lt;/strong&gt;.
Revision range: &lt;a href=&quot;https://perf.rust-lang.org/?start=771916f9028e7fe56d2685f2c4f698de5d7d6a45&amp;amp;end=8fa1c96cfd489e4c27654c144ae871ce2c4db6c6&amp;amp;absolute=false&amp;amp;stat=instructions%3Au&quot;&gt;771916f9..8fa1c96c&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align: center;&quot;&gt;(instructions:u)&lt;/th&gt;
&lt;th style=&quot;text-align: center;&quot;&gt;mean&lt;/th&gt;
&lt;th style=&quot;text-align: center;&quot;&gt;range&lt;/th&gt;
&lt;th style=&quot;text-align: center;&quot;&gt;count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Regressions ❌ &lt;br /&gt; (primary)&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;0.4%&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;[0.2%, 0.5%]&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Regressions ❌ &lt;br /&gt; (secondary)&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;0.6%&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;[0.2%, 1.0%]&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;17&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Improvements ✅ &lt;br /&gt; (primary)&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;-0.5%&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;[-1.7%, -0.2%]&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;166&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Improvements ✅ &lt;br /&gt; (secondary)&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;-2.3%&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;[-16.0%, -0.1%]&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;219&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;All ❌✅ (primary)&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;-0.5%&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;[-1.7%, 0.5%]&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;172&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;0 Regressions, 6 Improvements, 7 Mixed; 4 of them in rollups
50 artifact comparisons made in total&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-lang/rustc-perf/blob/ca70287715cb2c2b10aed04506acb0ee5574c3fe/triage/2026/2026-08-18.md&quot;&gt;Full report here&lt;/a&gt;.&lt;/p&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#approved-rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/commits/master&quot;&gt;Approved RFCs&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Changes to Rust follow the Rust &lt;a href=&quot;https://github.com/rust-lang/rfcs#rust-rfcs&quot;&gt;RFC (request for comments) process&lt;/a&gt;. These
are the RFCs that were approved for implementation this week:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3984&quot;&gt;RFC: Refactor the libs team&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#final-comment-period&quot;&gt;Final Comment Period&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Every week, &lt;a href=&quot;https://www.rust-lang.org/team.html&quot;&gt;the team&lt;/a&gt; announces the 'final comment period' for RFCs and key PRs
which are reaching a decision. Express your opinions now.&lt;/p&gt;
&lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#tracking-issues-prs&quot;&gt;Tracking Issues &amp;amp; PRs&lt;/a&gt;&lt;/h6&gt;
&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#rust&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen&quot;&gt;Rust&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/158303&quot;&gt;Always escape grapheme extenders in &lt;code&gt;str::escape_debug&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/156160&quot;&gt;feat: add symmetric PartialEq impls for Vec, &amp;amp;[T], &amp;amp;mut [T] versus Cow&amp;lt;'_, [T]&amp;gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160534&quot;&gt;stabilize smart pointer map functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160108&quot;&gt;Stabilize &lt;code&gt;windows_process_extensions_main_thread_handle&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160136&quot;&gt;Add &lt;code&gt;Default&lt;/code&gt; implementation for &lt;code&gt;std::sync::Once&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160302&quot;&gt;target_features: sse (or at least avx2) is incompatible with soft-float ABI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160705&quot;&gt;Remove &lt;code&gt;From&amp;lt;!&amp;gt; for T&lt;/code&gt; &lt;em&gt;reservation&lt;/em&gt; impl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160436&quot;&gt;stabilize &lt;code&gt;Box::take&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/160229&quot;&gt;Extend &lt;code&gt;dropping_{references,copy_types}&lt;/code&gt; lints to &lt;code&gt;drop_in_place&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/159986&quot;&gt;lint on more incorrect usages of &lt;code&gt;core::ffi::c_void&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/158515&quot;&gt;Make let-else respect macro_rules expr metavariable grouping&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#cargo_2&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen&quot;&gt;Cargo&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17335&quot;&gt;feat(resolver): Stabilize min-publish-age&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/17298&quot;&gt;feat(diag): Stabilize cargo-lints &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#compiler-team-mcps-only&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/compiler-team/issues?q=label%3Amajor-change%20label%3Afinal-comment-period%20state%3Aopen&quot;&gt;Compiler Team&lt;/a&gt; &lt;a href=&quot;https://forge.rust-lang.org/compiler/mcp.html&quot;&gt;(MCPs only)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/compiler-team/issues/1028&quot;&gt;Expose &lt;code&gt;target_abi = &quot;v8plus&quot;&lt;/code&gt; on sparc-unknown-linux-gnu&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;No Items entered Final Comment Period this week for
&lt;a href=&quot;https://github.com/rust-lang/rfcs/issues?q=state%3Aopen%20label%3Afinal-comment-period%20state%3Aopen&quot;&gt;Rust RFCs&lt;/a&gt;,
&lt;a href=&quot;https://github.com/rust-lang/lang-team/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen&quot;&gt;Language Team&lt;/a&gt;,
&lt;a href=&quot;https://github.com/rust-lang/reference/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen&quot;&gt;Language Reference&lt;/a&gt;,
&lt;a href=&quot;https://github.com/rust-lang/leadership-council/issues?q=state%3Aopen%20label%3Afinal-comment-period%20state%3Aopen&quot;&gt;Leadership Council&lt;/a&gt; or
&lt;a href=&quot;https://github.com/rust-lang/unsafe-code-guidelines/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen&quot;&gt;Unsafe Code Guidelines&lt;/a&gt;.&lt;/em&gt;
Let us know if you would like your PRs, Tracking Issues or RFCs to be tracked as a part of this list.&lt;/p&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#new-and-updated-rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pulls&quot;&gt;New and Updated RFCs&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3999&quot;&gt;Change &lt;code&gt;i686-pc-windows-msvc&lt;/code&gt; from Tier 1 with host tools =&amp;gt; Tier 1 without host tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/4000&quot;&gt;Owning references (&lt;code&gt;&amp;amp;own T&lt;/code&gt;)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This RFC will appear in the &lt;strong&gt;Call for Testing&lt;/strong&gt; section of the next issue (#) of This Week in Rust (TWiR).
You may remove the &lt;code&gt;call-for-testing&lt;/code&gt; label.  Please feel free to leave the &lt;code&gt;call-for-testing&lt;/code&gt; label in place if you would like this RFC to appear again in another issue of TWiR.&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#upcoming-events&quot;&gt;Upcoming Events&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Rusty Events between 2026-08-19 - 2026-09-16 🦀&lt;/p&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#virtual&quot;&gt;Virtual&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;2026-08-19 | Hybrid (Vancouver, CA) | &lt;a href=&quot;https://www.meetup.com/vancouver-rust&quot;&gt;Vancouver Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/vancouver-rust/events/314105333/&quot;&gt;&lt;strong&gt;Dealing with Dependencies&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-20 | Hybrid (Seattle, WA, US) | &lt;a href=&quot;https://www.meetup.com/join-srug&quot;&gt;Seattle Rust User Group&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/seattle-rust-user-group/events/314520814/&quot;&gt;&lt;strong&gt;August, 2026 SRUG (Seattle Rust User Group) Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-20 | Virtual (Charlottesville, VA, US) | &lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup&quot;&gt;Charlottesville Rust Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/events/315733791/&quot;&gt;&lt;strong&gt;Tock OS Part #5 — Wireless Communication with the IEEE 802.15.4 protocol&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-21 | Virtual | &lt;a href=&quot;https://luma.com/rust-girona&quot;&gt;Rust Girona&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/1bm27cah&quot;&gt;&lt;strong&gt;Sessió setmanal de codificació / Weekly coding session&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-25 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust&quot;&gt;Dallas Rust User Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/310254775/&quot;&gt;&lt;strong&gt;Fourth Tuesday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-26 | Virtual (Cardiff, UK) | &lt;a href=&quot;https://www.meetup.com/rust-and-c-plus-plus-in-cardiff&quot;&gt;Rust and C++ Cardiff&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/316083375/&quot;&gt;&lt;strong&gt;Operating Systems Book Club: Lottery and Multi-CPU Scheduling&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-27 | Virtual (Berlin, DE) | &lt;a href=&quot;https://www.meetup.com/rust-berlin&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-berlin/events/313345334/&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-28 | Virtual | &lt;a href=&quot;https://luma.com/rust-girona&quot;&gt;Rust Girona&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/arkkrcj5&quot;&gt;&lt;strong&gt;Sessió setmanal de codificació / Weekly coding session&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-31 | Virtual | &lt;a href=&quot;https://luma.com/rust-maven&quot;&gt;Rust 🦀 Maven&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/nwfmsdtf&quot;&gt;&lt;strong&gt;Workshop: Add tests to an open source Rust project&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-01 | Virtual | &lt;a href=&quot;https://luma.com/rust-maven&quot;&gt;Rust 🦀 Maven&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/d9w26vav&quot;&gt;&lt;strong&gt;Tauri: Cross-Platform desktop applications with Rust and web technologies&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-02 | Virtual (Indianapolis, IN, US) | &lt;a href=&quot;https://www.meetup.com/indyrs/events/&quot;&gt;Indy Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/indyrs/events/wqzhftyjcmbdb/&quot;&gt;&lt;strong&gt;Indy.rs - with Social Distancing&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-02 | Virtual (Indianapolis, IN, US) | &lt;a href=&quot;https://www.meetup.com/indyrs&quot;&gt;Indy Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/indyrs/events/316107210/&quot;&gt;&lt;strong&gt;Indy.rs - with Social Distancing&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-04 | Virtual | &lt;a href=&quot;https://luma.com/rust-girona&quot;&gt;Rust Girona&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/sqf4ux01&quot;&gt;&lt;strong&gt;Sessió setmanal de codificació / Weekly coding session&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-06 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust&quot;&gt;Dallas Rust User Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/316133872/&quot;&gt;&lt;strong&gt;Rust Deep Learning: First Sunday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-08 - 2026-09-11 | Hybrid (Montreal, CA) | &lt;a href=&quot;https://rustconf.com/&quot;&gt;RustConf 2026&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://rustconf.com/&quot;&gt;&lt;strong&gt;RustConf 2026&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-08 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust&quot;&gt;Dallas Rust User Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/310254774/&quot;&gt;&lt;strong&gt;Second Tuesday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-08 | Virtual (London, UK) | &lt;a href=&quot;https://www.meetup.com/women-in-rust&quot;&gt;Women in Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/women-in-rust/events/315859305/&quot;&gt;&lt;strong&gt;👋 Community Catch Up&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-10 | Virtual | &lt;a href=&quot;https://luma.com/rust-maven&quot;&gt;Rust 🦀 Maven&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/rfbzk3ae&quot;&gt;&lt;strong&gt;Solving Real-World Planning Problems in Rust with SolverForge&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-10 | Virtual (Berlin, DE) | &lt;a href=&quot;https://www.meetup.com/rust-berlin&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-berlin/events/315691423/&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-10 | Virtual (Nürnberg, DE) | &lt;a href=&quot;https://www.meetup.com/rust-noris&quot;&gt;Rust Nuremberg&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-noris/events/315619611/&quot;&gt;&lt;strong&gt;Rust Nürnberg online&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-15 | Virtual (Washington, DC, US) | &lt;a href=&quot;https://www.meetup.com/rustdc&quot;&gt;Rust DC&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rustdc/events/fhvsztyjcmbtb/&quot;&gt;&lt;strong&gt;Mid-month Rustful&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-16 | Hybrid (Vancouver, CA) | &lt;a href=&quot;https://www.meetup.com/vancouver-rust&quot;&gt;Vancouver Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/vancouver-rust/events/314233757/&quot;&gt;&lt;strong&gt;Rust Study/Hack/Hang-out&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#africa&quot;&gt;Africa&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;2026-09-08 | Johannesburg, ZA | &lt;a href=&quot;https://www.meetup.com/johannesburg-rust-meetup&quot;&gt;Johannesburg Rust Meetup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/johannesburg-rust-meetup/events/315750593/&quot;&gt;&lt;strong&gt;Rust's extended standard library&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#asia&quot;&gt;Asia&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;2026-08-22 | Bangalore, IN | &lt;a href=&quot;https://hasgeek.com/rustbangalore&quot;&gt;Rust Bangalore&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://hasgeek.com/rustbangalore/august-2026-rustacean-meetup/&quot;&gt;&lt;strong&gt;August 2026 Rustacean Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-22 | Delhi, IN | &lt;a href=&quot;https://www.meetup.com/rustdelhi&quot;&gt;Rust Delhi&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rustdelhi/events/315185336/&quot;&gt;&lt;strong&gt;Rust Delhi X SciPy India Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-22 | Noida, IN | &lt;a href=&quot;https://scipy.in/&quot;&gt;SciPy India&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://scipy.in/sci-py-rs/&quot;&gt;&lt;strong&gt;Scientific Computing in Rust and Python&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-29 | Pune, IN | &lt;a href=&quot;https://hasgeek.com/rustpune/&quot;&gt;Rust Pune&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://hasgeek.com/rustpune/meetup-august-2026/&quot;&gt;&lt;strong&gt;Rust Pune Meetup: August 2026&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#europe&quot;&gt;Europe&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;2026-08-20 | Berlin, DE | &lt;a href=&quot;https://www.meetup.com/rust-berlin&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-berlin/events/316151073/&quot;&gt;&lt;strong&gt;Rust Summer Party!&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-20 | Frankfurt, DE | &lt;a href=&quot;https://www.meetup.com/rust-rhein-main&quot;&gt;Rust Rhein-Main&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-rhein-main/events/315855368/&quot;&gt;&lt;strong&gt;Building an acoustic camera with egui and embassy&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-21 | Edinburgh, UK | &lt;a href=&quot;https://www.meetup.com/rust-edi&quot;&gt;Rust and Friends&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-and-friends/events/316115136/&quot;&gt;&lt;strong&gt;Rust and Friends (daytime coffee)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-26 | Dresden, DE | &lt;a href=&quot;https://github.com/rust-dresden&quot;&gt;Rust Dresden&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://pretix.eu/rust-dresden/on-location-3&quot;&gt;&lt;strong&gt;Third Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-27 | Manchester, UK | &lt;a href=&quot;https://www.meetup.com/rust-manchester&quot;&gt;Rust Manchester&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-manchester/events/315891530/&quot;&gt;&lt;strong&gt;Rust Manchester August Talks&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-29 | Stockholm, SE | &lt;a href=&quot;https://www.meetup.com/stockholm-rust&quot;&gt;Stockholm Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/stockholm-rust/events/316130996/&quot;&gt;&lt;strong&gt;Ferris' Fika Forum #29&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-08 | Paris, FR | &lt;a href=&quot;https://www.meetup.com/rust-paris&quot;&gt;Rust Paris&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-paris/events/316169040/&quot;&gt;&lt;strong&gt;Rust meetup #87&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-14 - 2026-09-16 | Berlin, DE | &lt;a href=&quot;https://oxidizeconf.com/&quot;&gt;Oxidize 2026&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://oxidizeconf.com/&quot;&gt;&lt;strong&gt;Oxidize 2026&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-15 | Leipzig, DE | &lt;a href=&quot;https://www.meetup.com/rust-modern-systems-programming-in-leipzig&quot;&gt;Rust - Modern Systems Programming in Leipzig&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-modern-systems-programming-in-leipzig/events/313816477/&quot;&gt;&lt;strong&gt;Reproducing scientific papers - with Rust &amp;amp; &quot;AI&quot;&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#north-america&quot;&gt;North America&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;2026-08-19 | Hybrid (Vancouver, CA) | &lt;a href=&quot;https://www.meetup.com/vancouver-rust&quot;&gt;Vancouver Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/vancouver-rust/events/314105333/&quot;&gt;&lt;strong&gt;Dealing with Dependencies&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-19 | San Francisco, CA, US | &lt;a href=&quot;https://luma.com/bayarearust&quot;&gt;Bay Area Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/00f2s7q9&quot;&gt;&lt;strong&gt;Bay Area Rust August Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-20 | Hybrid (Seattle, WA, US) | &lt;a href=&quot;https://www.meetup.com/join-srug&quot;&gt;Seattle Rust User Group&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/seattle-rust-user-group/events/314520814/&quot;&gt;&lt;strong&gt;August, 2026 SRUG (Seattle Rust User Group) Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-20 | Mountain View, CA, US | &lt;a href=&quot;https://www.meetup.com/hackerdojo&quot;&gt;Hacker Dojo&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/hackerdojo/events/315929355/&quot;&gt;&lt;strong&gt;RUST MEETUP at HACKER DOJO&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-20 | New York, NY, US | &lt;a href=&quot;https://www.meetup.com/rust-nyc&quot;&gt;Rust NYC&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-nyc/events/316056830/&quot;&gt;&lt;strong&gt;Rust NYC: 'Data Shapes Your Memory' and 'Rust in Peace'&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-26 | Austin, TX, US | &lt;a href=&quot;https://www.meetup.com/rust-atx&quot;&gt;Rust ATX&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-atx/events/315171660/&quot;&gt;&lt;strong&gt;Rust Lunch - Fareground&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-26 | Los Angeles, CA, US | &lt;a href=&quot;https://www.meetup.com/rust-los-angeles&quot;&gt;Rust Los Angeles&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-los-angeles/events/315963062/&quot;&gt;&lt;strong&gt;Rust LA August! Rust in Quantum Computing&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-27 | Atlanta, GA, US | &lt;a href=&quot;https://www.meetup.com/rust-atl&quot;&gt;Rust Atlanta&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-atl/events/313539331/&quot;&gt;&lt;strong&gt;Rust-Atl&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-03 | Mountain View, CA, US | &lt;a href=&quot;https://www.meetup.com/hackerdojo&quot;&gt;Hacker Dojo&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/hackerdojo/events/316124372/&quot;&gt;&lt;strong&gt;RUST MEETUP at HACKER DOJO&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-03 | Saint Louis, MO, US | &lt;a href=&quot;https://www.meetup.com/stl-rust&quot;&gt;STL Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/stl-rust/events/315603673/&quot;&gt;&lt;strong&gt;Cryptography + Quantum Computers&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-08 - 2026-09-11 | Hybrid (Montreal, CA) | &lt;a href=&quot;https://rustconf.com/&quot;&gt;RustConf&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://rustconf.com/&quot;&gt;&lt;strong&gt;RustConf&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-08 | Montreal, QC, CA | &lt;a href=&quot;https://rustfoundation.org/&quot;&gt;Rust Foundation&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://rustfoundation.org/event/rust-teams-health-summit/&quot;&gt;&lt;strong&gt;Rust Teams Health Summit&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-08 - 2026-09-11 | Montreal, QC, CA | &lt;a href=&quot;https://rustconf.com/&quot;&gt;RustConf 2026&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://rustconf.com/schedule/&quot;&gt;&lt;strong&gt;RustConf 2026, Hosted by the Rust Foundation&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-09 | Montreal, CA | &lt;a href=&quot;https://www.meetup.com/women-in-rust&quot;&gt;Women in Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/women-in-rust/events/315773005/&quot;&gt;&lt;strong&gt;RustConf Coffee Break Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-10 | San Diego, CA, US | &lt;a href=&quot;https://www.meetup.com/san-diego-rust&quot;&gt;San Diego Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/san-diego-rust/events/315601104/&quot;&gt;&lt;strong&gt;San Diego Rust September Meetup - Back in person!&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-15 | San Francisco, CA, US | &lt;a href=&quot;https://www.meetup.com/san-francisco-rust-study-group&quot;&gt;San Francisco Rust Study Group&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/san-francisco-rust-study-group/events/314997217/&quot;&gt;&lt;strong&gt;Rust Hacking in Person&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-09-16 | Hybrid (Vancouver, CA) | &lt;a href=&quot;https://www.meetup.com/vancouver-rust&quot;&gt;Vancouver Rust&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/vancouver-rust/events/314233757/&quot;&gt;&lt;strong&gt;Rust Study/Hack/Hang-out&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#oceania&quot;&gt;Oceania&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;2026-08-27 | Melbourne, AU | &lt;a href=&quot;https://www.meetup.com/rust-melbourne&quot;&gt;Rust Melbourne&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-melbourne/events/315039490/&quot;&gt;&lt;strong&gt;Rust Melbourne August 2026&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2026-08-27 | Melbourne, AU | &lt;a href=&quot;https://luma.com/rustmelbourne&quot;&gt;Rust Melbourne&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://luma.com/d0rndgyv&quot;&gt;&lt;strong&gt;Rust Melbourne Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are running a Rust event please add it to the &lt;a href=&quot;https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com&quot;&gt;calendar&lt;/a&gt; to get
it mentioned here. Please remember to add a link to the event too.
Email the &lt;a href=&quot;mailto:community-team@rust-lang.org&quot;&gt;Rust Community Team&lt;/a&gt; for access.&lt;/p&gt;
&lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#jobs&quot;&gt;Jobs&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Please see the latest &lt;a href=&quot;https://www.reddit.com/r/rust/comments/1ttbtf5/official_rrust_whos_hiring_thread_for_jobseekers/&quot;&gt;Who's Hiring thread on r/rust&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a class=&quot;toclink&quot; href=&quot;https://this-week-in-rust.org/atom.xml#quote-of-the-week&quot;&gt;Quote of the Week&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;ass-bind is peak&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;– &lt;a href=&quot;https://rust-lang.zulipchat.com/#narrow/channel/326132-t-types.2Fmeetings/topic/2026-08-11/near/615874481&quot;&gt;Clar Fon on rust-zulip discussion &quot;assumptions on binders&quot; abbreviations&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/t/twir-quote-of-the-week/328/1790&quot;&gt;Theemathas&lt;/a&gt; for the suggestion!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://users.rust-lang.org/t/twir-quote-of-the-week/328&quot;&gt;Please submit quotes and vote for next week!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This Week in Rust is edited by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nellshamrell&quot;&gt;nellshamrell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/llogiq&quot;&gt;llogiq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ericseppanen&quot;&gt;ericseppanen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/extrawurst&quot;&gt;extrawurst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/U007D&quot;&gt;U007D&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mariannegoldin&quot;&gt;mariannegoldin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bdillo&quot;&gt;bdillo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/opeolluwa&quot;&gt;opeolluwa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bnchi&quot;&gt;bnchi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/KannanPalani57&quot;&gt;KannanPalani57&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tzilist&quot;&gt;tzilist&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Email list hosting is sponsored by &lt;a href=&quot;https://foundation.rust-lang.org/&quot;&gt;The Rust Foundation&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://www.reddit.com/r/rust/comments/1vt8nni/this_week_in_rust_665/&quot;&gt;Discuss on r/rust&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-19T04:00:00+00:00</dc:date>
	<dc:creator>TWiR Contributors</dc:creator>
</item>
<item rdf:about="discourse.mozilla.org-topic-149223">
	<title>Firefox Tooling Announcements: MozPhab 2.17.0 Released</title>
	<link>https://discourse.mozilla.org/t/mozphab-2-17-0-released/149223</link>
	<content:encoded>&lt;p&gt;Bugs resolved in Moz-Phab 2.17.0:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/2036748&quot;&gt;bug 2036748&lt;/a&gt; submit: parallelise per-commit upload + creatediff across the stack&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/2036749&quot;&gt;bug 2036749&lt;/a&gt; git: skip restoring git checkout in cleanup/finalize when HEAD already on branch&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/2060484&quot;&gt;bug 2060484&lt;/a&gt; &quot; Phabricator Error: Validation errors&quot; should display the revision&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Discuss these changes in &lt;span class=&quot;hashtag-raw&quot;&gt;#engineering-workflow&lt;/span&gt; on Slack or &lt;span class=&quot;hashtag-raw&quot;&gt;#Conduit&lt;/span&gt; Matrix.&lt;/p&gt;
            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;
            &lt;p&gt;&lt;a href=&quot;https://discourse.mozilla.org/t/mozphab-2-17-0-released/149223&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-18T21:16:16+00:00</dc:date>
	<dc:creator>sheehan</dc:creator>
</item>
<item rdf:about="https://blog.mozilla.org/netpolicy/?p=2604">
	<title>Mozilla Open Policy &amp; Advocacy Blog: Brasil dá um passo importante para a promoção de mercados digitais abertos e competitivos</title>
	<link>https://blog.mozilla.org/netpolicy/2026/08/18/brasil-da-um-passo-importante-para-a-promocao-de-mercados-digitais-abertos-e-competitivos/</link>
	<content:encoded>&lt;p class=&quot;disclaimer&quot;&gt;&lt;em&gt;Leia a versão em inglês &lt;a href=&quot;https://blog.mozilla.org/netpolicy/2026/08/18/brazil-is-taking-an-important-step-toward-more-open-competitive-digital-markets/&quot;&gt;aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;A concorrência é o ponto forte da internet. Com a possibilidade de as pessoas escolherem navegadores, mecanismos de pesquisa e aplicativos livremente, a concorrência entre das empresas se baseia no mérito. No entanto, os mercados digitais estão concentrados em “guardiões” que controlam a descoberta, dificultando o alcance de usuários por desenvolvedores independentes. A fiscalização tradicional acabou se tornando ineficaz, normalmente sendo muito tardia. Agora, governos do mundo todo estão adotando novas ferramentas para garantir um mercado aberto e contestável.&lt;/p&gt;
&lt;p&gt;O projeto de lei (PL) 4675/2025 é um passo importante nessa direção. Baseando-se na DMA (Digital Markets Act) da União Europeia e na DMCCA (Digital Markets, Competition and Consumers Act) do Reino Unido, esse projeto de lei aborda questões de concorrência sistêmica voltadas à realidade do mercado brasileiro. A Mozilla é a favor dessa legislação, que visa criar uma estrutura segmentada de concorrência para os mercados digitais brasileiros.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;A concorrência possibilita produtos melhores e liberdade de escolha&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Há vinte anos, a Mozilla desenvolve o Firefox como um navegador independente, priorizando a privacidade, a segurança e a escolha. Operamos no Gecko, um dos três mecanismos de navegador existentes no mundo. A independência é essencial para evitar dominância no mercado e garantir que os usuários tenham liberdade de escolha. A inovação não é suficiente. Os produtos precisam de oportunidades justas de concorrência sem barreiras de pré-instalação ou interoperabilidade.&lt;/p&gt;
&lt;p&gt;O PL 4675/2025 trata dessa questão por meio de uma estrutura &lt;i&gt;ex ante&lt;/i&gt;, permitindo que a autoridade relevante mitigue os riscos antes de se tornarem irreversíveis. O anteprojeto mais recente contém melhorias importantes dessa estrutura. Ele determina as obrigações de acordo com produtos ou serviços específicos, em vez de aplicá-las automaticamente a todo um grupo corporativo; define proteções processuais durante todo o processo de designação; e traça limites mais claros sobre a capacidade da autoridade de fazer algo  as obrigações além daquelas estabelecidas na legislação. De forma mais notável, ele determina uma arquitetura de escolha “isonômica e não discriminatória”, incluindo telas de opções para selecionar, instalar ou definir produtos de terceiros como padrão.&lt;/p&gt;
&lt;p&gt;A experiência da Mozilla com telas de escolha de navegador, em conformidade com a DMA da União Europeia, mostra que essas disposições funcionam. O Firefox foi o navegador de escolha mais de &lt;a href=&quot;https://blog.mozilla.org/netpolicy/2026/05/11/six-million-selections-later-how-the-dma-is-giving-people-browser-choice/&quot;&gt;seis milhões de vezes&lt;/a&gt;. A probabilidade de as pessoas que escolheram o Firefox nessas telas continuarem usando o navegador é cinco vezes maior. Ao tornar a estrutura segmentada e previsível, o PL 4675/2025 estabelece a base para um ecossistema de concorrência em que a inovação impulsiona o sucesso.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Qual é o benefício da concorrência para as pessoas&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;A política de concorrência defende as pessoas. Mercados abertos permitem a liberdade de escolha e o sucesso de empresas menores. Críticos argumentam que essas propostas prejudicam a inovação, mas nossa experiência sugere o contrário. O &lt;a href=&quot;https://blog.mozilla.org/netpolicy/2026/03/23/competition-innovation-and-the-future-of-the-web/&quot;&gt;Gecko, mecanismo de navegador do Firefox&lt;/a&gt;, continua sendo o maior mecanismo não controlado por uma operadora dominante de sistema operacional. Essa independência nos permite priorizar inovações voltadas aos usuários, como proteções avançadas de privacidade e segurança.&lt;/p&gt;
&lt;p&gt;Decisões de design, como padrões pré-instalados e barreiras de interoperabilidade, moldam significativamente a experiência de usuários. A pesquisa &lt;a href=&quot;https://research.mozilla.org/browser-competition/over-the-edge-2/&quot;&gt;Over the Edge 2.0&lt;/a&gt; da Mozilla destaca como essas práticas afetam a liberdade de escolha. Startups também se beneficiam, pois podem alcançar usuários e concorrer com base no mérito, em vez de depender de decisões de plataformas dominantes. O projeto de lei brasileiro promove essas condições ao proporcionar ao Cade (Conselho Administrativo de Defesa Econômica) as ferramentas para tratar de práticas anticoncorrenciais, garantindo que a concorrência de plataformas dominantes ocorra por meio de melhoria da qualidade do produto, não por controle da infraestrutura.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;De olho no futuro&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Os mercados digitais evoluem, mas os princípios de concorrência justa (abertura, liberdade de escolha, interoperabilidade e transparência) continuam iguais. O PL 4675/2025 transforma esses princípios em normas aplicáveis. Seu modelo &lt;i&gt;ex ante&lt;/i&gt; segmentado e suas proteções processuais posicionam o Brasil entre os países que visam restaurar o equilíbrio do mercado. Por fim, o sucesso da estrutura será medido por sua capacidade de proporcionar uma mudança significativa para os usuários.&lt;/p&gt;
&lt;p&gt;A Mozilla é a favor desse projeto de lei e se dispõe a colaborar com o poder legislativo, o Cade e todas as partes interessadas. Com alterações segmentadas, o PL 4675/2025 pode se tornar uma estrutura duradoura a favor da concorrência, da inovação e da liberdade de escolha.&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/netpolicy/2026/08/18/brasil-da-um-passo-importante-para-a-promocao-de-mercados-digitais-abertos-e-competitivos/&quot;&gt;Brasil dá um passo importante para a promoção de mercados digitais abertos e competitivos&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/netpolicy&quot;&gt;Open Policy &amp;amp; Advocacy&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-18T20:59:10+00:00</dc:date>
	<dc:creator>Elise Phillips</dc:creator>
</item>
<item rdf:about="https://blog.mozilla.org/netpolicy/?p=2603">
	<title>Mozilla Open Policy &amp; Advocacy Blog: Brazil is Taking an Important Step Toward More Open &amp; Competitive Digital Markets</title>
	<link>https://blog.mozilla.org/netpolicy/2026/08/18/brazil-is-taking-an-important-step-toward-more-open-competitive-digital-markets/</link>
	<content:encoded>&lt;p class=&quot;disclaimer&quot;&gt;&lt;em&gt;Read the Portuguese version &lt;a href=&quot;https://blog.mozilla.org/netpolicy/2026/08/18/brasil-da-um-passo-importante-para-a-promocao-de-mercados-digitais-abertos-e-competitivos/&quot;&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Competition is a strength of the internet. When people freely choose among browsers, search engines, and apps, companies compete on merit. However, digital markets have concentrated around ‘gatekeepers’ that control discovery, making it harder for independent developers to reach users. Traditional enforcement has proven ineffective, often arriving too late. Governments worldwide are now adopting new tools to ensure open, contestable markets.&lt;/p&gt;
&lt;p&gt;Brazil’s Bill 4,675/2025 is a critical step in this direction. Drawing lessons from the EU’s Digital Markets Act and the UK’s Digital Markets, Competition and Consumers regime, the bill addresses structural competition concerns with an approach calibrated to Brazil’s market realities. Mozilla strongly supports this legislation, which aims to establish a tailored competition framework for Brazil’s digital markets.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Competition unlocks better products and meaningful choice&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;For over twenty years, Mozilla has built Firefox as an independent browser prioritizing privacy, security, and choice. We operate on Gecko, one of only three browser engines worldwide. Maintaining independence is critical to preventing market dominance and ensuring users have genuine choices. Innovation alone isn’t enough; products need fair opportunities to compete without being hindered by preinstallation or interoperability barriers.&lt;/p&gt;
&lt;p&gt;Bill 4,675 addresses this via an ex ante framework, allowing Brazil’s competition authority to mitigate risks before they become irreversible. The latest draft improves this framework in several important ways. It tailors obligations to specific products and services rather than automatically applying them across an entire corporate group, strengthens procedural safeguards throughout the designation process, and places clearer limits on the authority’s ability to expand obligations beyond those established in legislation. Most notably, it requires “neutral and non-discriminatory” choice architecture, including choice screens, for selecting, installing, or setting third-party products as defaults.&lt;/p&gt;
&lt;p&gt;Mozilla’s experience with browser choice screens under the EU Digital Markets Act proves these provisions work. Firefox has been selected more than &lt;a href=&quot;https://blog.mozilla.org/netpolicy/2026/05/11/six-million-selections-later-how-the-dma-is-giving-people-browser-choice/&quot;&gt;six million times&lt;/a&gt;, and users who select Firefox through these screens are five times more likely to continue using it. By making the framework targeted and predictable, Bill 4,675 establishes a foundation for a competitive ecosystem where innovation drives success.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;How competition delivers for people&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Competition policy is about people. Open markets provide genuine choice and allow smaller players to thrive. Critics argue these proposals harm innovation, but our experience suggests the opposite. &lt;a href=&quot;https://blog.mozilla.org/netpolicy/2026/03/23/competition-innovation-and-the-future-of-the-web/&quot;&gt;Gecko, Firefox’s browser engine&lt;/a&gt;, remains the only major engine not controlled by a dominant OS operator. This independence enables us to prioritize user-focused innovations like advanced privacy and security protections.&lt;/p&gt;
&lt;p&gt;Design decisions, like preinstalled defaults and interoperability barriers, significantly shape the user experience. Mozilla’s &lt;a href=&quot;https://research.mozilla.org/browser-competition/over-the-edge-2/&quot;&gt;Over the Edge 2.0&lt;/a&gt; research highlights how these practices undermine choice. Startups similarly benefit when they can reach users and compete on merit rather than relying on dominant platform decisions. Brazil’s bill can foster these conditions by providing CADE with tools to address anti-competitive practices, ensuring dominant platforms compete by improving product quality rather than leveraging infrastructure control.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Looking ahead&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Digital markets evolve, but healthy competition principles (openness, choice, interoperability, and transparency) remain constant. Bill 4,675 translates these into enforceable rules. Its tailored ex ante model and procedural safeguards position Brazil among jurisdictions restoring market balance. Ultimately, the framework’s success will be measured by its ability to deliver meaningful change for users.&lt;/p&gt;
&lt;p&gt;Mozilla supports this bill and looks forward to collaborating with lawmakers, CADE, and stakeholders. With targeted refinements, Bill 4,675 can become a durable framework that promotes competition, supports innovation, and empowers people with greater choice.&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/netpolicy/2026/08/18/brazil-is-taking-an-important-step-toward-more-open-competitive-digital-markets/&quot;&gt;Brazil is Taking an Important Step Toward More Open &amp;amp; Competitive Digital Markets&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/netpolicy&quot;&gt;Open Policy &amp;amp; Advocacy&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-18T20:59:02+00:00</dc:date>
	<dc:creator>Elise Phillips</dc:creator>
</item>
<item rdf:about="https://blog.mozilla.org/?p=86554">
	<title>The Mozilla Blog: The wait is over. NVIDIA GeForce NOW adds Firefox to its supported browser lineup.</title>
	<link>https://blog.mozilla.org/en/firefox/firefox-nvidia-geforce-now-partnership/</link>
	<content:encoded>&lt;p&gt;Gamers have asked for GeForce NOW support for years. Today, NVIDIA made it official, opening up GeForce RTX-powered play to Firefox on Windows.&lt;/p&gt;



&lt;p&gt;Firefox users can &lt;a href=&quot;https://www.firefox.com/landing/geforce-now/?utm_source=distilled&amp;amp;utm_medium=referral&amp;amp;utm_campaign=firefox-geforce-now&quot;&gt;now stream&lt;/a&gt; more than 2,000 PC games from virtually anywhere, no downloads, installs, or hardware upgrades required, just a Windows PC and a browser.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Gaming: one of the web’s toughest tests&lt;/h3&gt;



&lt;p&gt;Cloud gaming pushes a browser in ways most websites never do. Every click and frame matters. Behind today’s announcement is months of collaboration and engineering between Mozilla and NVIDIA to deliver GeForce NOW on Firefox for Windows.&lt;/p&gt;



&lt;p&gt;Now, players can jump into high-performance PC gaming directly from Firefox, no waiting on lengthy game downloads, installs, or updates. The experience delivers GeForce RTX-powered performance at up to 1440p and up to 120 frames per second for GeForce NOW Ultimate members.&lt;/p&gt;



&lt;p&gt;“Firefox earned its place on our list of supported browsers by delivering the first-class experience GeForce NOW players expect. We set a high bar for browser support, and we’re excited to welcome Firefox — giving millions of Firefox fans a new way to stream the games they love,” said Andrew Fear, Director of NVIDIA GeForce NOW.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-86710&quot; height=&quot;1080&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2026/08/Kit_Gamer_Purple-BG.gif&quot; width=&quot;1920&quot; /&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Versatility and customization baked into your gaming rig&lt;/h3&gt;



&lt;p&gt;Gamers put real effort into making their rigs their own, and Firefox gets that. Users can choose themes, custom colors, and tab settings to customize their setup, instead of sitting there like just another window.&lt;/p&gt;



&lt;p&gt;We also know online gaming doesn’t happen in just one window. It’s social and sometimes spontaneous. With Firefox, you can have a Discord call running in Split View, a guide open in another tab, or Reddit pulled up between matches. Then go full screen when you’re ready to play, no need to switch browsers to stream games.&lt;/p&gt;



&lt;p&gt;“Teaming up with NVIDIA to bring GeForce NOW to Firefox is a milestone moment — one of the world’s leading cloud gaming services, now running on a browser built for privacy, control and flexibility. This is a big win for the Firefox community and for NVIDIA’s gaming community — and a sign of even bigger things ahead,” said Ajit Varma, Head of Firefox.&lt;br /&gt;&lt;br /&gt;If Firefox is already your browser of choice, online gaming and your PC game library can join the party. Whether your library lives on Steam, Epic Games Store, GOG, Xbox PC Game Pass, or Ubisoft Connect, you can sign in, open your library, and start streaming the games you already own. For all the gamers returning to Night City in &lt;em&gt;Cyberpunk 2077&lt;/em&gt;, jumping into &lt;em&gt;Halo: Campaign Evolved&lt;/em&gt;, or dropping in for a quick round of &lt;em&gt;Fortnite&lt;/em&gt;, Firefox users can now play where you want.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Try it today&lt;/h3&gt;



&lt;p&gt;Update to the latest version of Firefox, go to &lt;a href=&quot;https://play.geforcenow.com&quot;&gt;play.geforcenow.com&lt;/a&gt;, and sign in with your GeForce NOW account.&lt;/p&gt;



&lt;p&gt;Join us August 25 as NVIDIA heads to Gamescom, where we’ll have more to share about what this partnership means for gamers.&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/firefox/firefox-nvidia-geforce-now-partnership/&quot;&gt;The wait is over. NVIDIA GeForce NOW adds Firefox to its supported browser lineup.&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/en/&quot;&gt;The Mozilla Blog&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-18T14:58:48+00:00</dc:date>
	<dc:creator>Mozilla</dc:creator>
</item>
<item rdf:about="https://blog.mozilla.org/?p=86578">
	<title>The Mozilla Blog: A billion searches a year, now built in: Startpage comes to Firefox</title>
	<link>https://blog.mozilla.org/en/firefox/startpage-on-firefox/</link>
	<content:encoded>&lt;p&gt;Firefox users were choosing Startpage long before today — to the tune of more than a billion searches a year, every one of them required some assembly: an extension, a manual setting, a workaround. &lt;/p&gt;



&lt;p&gt;Today, starting with Firefox 154, that choice becomes as easy as head to the drop-down menu, hit ‘select,’ and start searching. &lt;a href=&quot;http://startpage.com/privacy-please/featured-article/firefox-integration&quot;&gt;Startpage&lt;/a&gt; is now a built-in search option for Firefox users on desktop in Germany, France, Austria, Switzerland, and the Netherlands. Android and iOS are coming soon. Whether you want to search with Startpage, or another preferred search engine, it’s as easy as opening your search settings, picking a default, and done.&lt;/p&gt;



&lt;p&gt;And if you’re happy with your current search engine, nothing about your setup changes. &lt;/p&gt;



&lt;figure class=&quot;wp-block-video&quot;&gt;&lt;video controls=&quot;controls&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2026/08/set-default_en-US_no-google.mp4&quot;&gt;&lt;/video&gt;&lt;/figure&gt;



&lt;p&gt;&lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;Why Europe first&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;This launch starts in Startpage’s home markets: a Netherlands-based search engine, now built into the browser for some of the most privacy-conscious users in the world. At a moment when so much of the web experience is decided by a handful of very large companies, a search option that’s private by design and European by origin isn’t a small thing. &lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;What Startpage delivers&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Startpage delivers full, high-quality search results without the privacy trade off. Queries aren’t stored or linked to you, and there are no AI answers pushed above your search results. In fact, there’s no AI at all. Based in the Netherlands, Startpage built its product around a simple idea: great search and personal privacy can go hand in hand.&lt;/p&gt;



&lt;p&gt;“So much of your web experience is prescribed before you ever open a browser. We’d rather you decide how you want to search. Adding Startpage puts a genuinely private search engine option — real results, zero profiling, AI-free — one click away for millions of people in Europe,” said Ajit Varma, Head of Firefox.&lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;Users asked with one billion searches&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Startpage ranks among the most-requested search engines in the &lt;a href=&quot;https://connect.mozilla.org/t5/discussions/try-startpage-search-in-firefox-150/m-p/123320&quot;&gt;Firefox community&lt;/a&gt;. When demand is this clear, our job is to remove the friction. &lt;/p&gt;



&lt;p&gt;“More and more of what people use online comes from a handful of very large companies, and search is where that concentration gets felt most directly. Firefox has always been the browser for people who want to make their own decisions about the web, which makes it a natural home for private search. Firefox users already run over a billion Startpage searches a year. Now Startpage is built in for everyone in these markets,” said Stewart Marlborough, President of Startpage.&lt;/p&gt;



&lt;p&gt;That’s the pattern we want: people who use Firefox every day tell us what they need, and we ship it.&lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;Search is a choice. Firefox treats it like one. &lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Most browsers have already decided how you’re going to search. Firefox hasn’t. Pick your search engine, control what happens to your queries, decide who sees data about you, even turn AI on or off. It should always be your call. Not everyone wants the same thing from search, and a browser shouldn’t pretend they do.&lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;Try it out&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;If you’re in Germany, France, Austria, Switzerland, or the Netherlands, update to &lt;a href=&quot;https://www.firefox.com/&quot;&gt;Firefox 154&lt;/a&gt; and you’ll find Startpage in your search settings.  &lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/firefox/startpage-on-firefox/&quot;&gt;A billion searches a year, now built in: Startpage comes to Firefox&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/en/&quot;&gt;The Mozilla Blog&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-18T14:57:52+00:00</dc:date>
	<dc:creator>Mozilla</dc:creator>
</item>
<item rdf:about="https://blog.mozilla.org/?p=86592">
	<title>The Mozilla Blog: Smart Window: Finish what you start online</title>
	<link>https://blog.mozilla.org/en/firefox/firefox-smart-window/</link>
	<content:encoded>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Update on September 16, 2026: &lt;/em&gt;&lt;/strong&gt;&lt;em&gt;Smart Window is now rolling out in France, marking its first expansion beyond North America. People in France will be able to download and try the Smart Window beta in French. Download Smart Window &lt;/em&gt;&lt;a href=&quot;https://www.firefox.com/smart-window/&quot;&gt;&lt;em&gt;here&lt;/em&gt;&lt;/a&gt;&lt;em&gt; and share your feedback with us on &lt;/em&gt;&lt;a href=&quot;https://connect.mozilla.org/t5/discussions/smart-window-expands-to-france-with-mistral-as-a-new-model/m-p/138422/thread-id/56209&quot;&gt;&lt;em&gt;Mozilla Connect&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. &lt;br /&gt;&lt;br /&gt;&lt;/em&gt;&lt;strong&gt;&lt;em&gt;Original post from August 2026:&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Browsers make it easy to start things, but picking them back up is another story.&lt;/p&gt;



&lt;p&gt;We start planning a trip or researching a purchase, and before long we’re comparing options and chasing ideas across dozens of tabs. That work rarely happens in one sitting. When we come back after an interruption, we have to figure out where we were, what we’d already found, and what we were trying to do in the first place.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.firefox.com/smart-window/?view=enable&quot;&gt;Smart Window&lt;/a&gt; is Firefox’s privacy-first, AI-powered browsing experience designed to help people finish what they start online. It works with the context you choose to share, such as your open tabs and relevant browsing history, so you can get back to what you were doing without retracing your steps. &lt;/p&gt;



&lt;p&gt;We’ve spent the last several months building and testing Smart Window in beta with our community. Today, we’re adding new capabilities that help you check answers without losing your place, make sense of open tabs and get back to things you’ve seen before. Together, they help keep a task moving across tabs, searches, and time.&lt;/p&gt;



&lt;p&gt;“The browser already has much of the context around what you’re trying to do — the research in your tabs, the pages you’ve visited, the things you’ve found along the way,” said Ajit Varma, Head of Firefox. “With Smart Window, we’re exploring how to make more of that context useful while keeping you in control.”&lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;What’s new in Smart Window&lt;/strong&gt;&lt;/h3&gt;



&lt;h4&gt;&lt;strong&gt;Check answers without losing your place&lt;/strong&gt;&lt;/h4&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-86755&quot; height=&quot;576&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2026/08/Firefox_SmartWindow_Distilled_Exa_Inline1-1024x576.jpg&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;



&lt;p&gt;When you have a question in the middle of a task, getting an answer shouldn’t take you out of your flow or require you to track down the sources separately. &lt;/p&gt;



&lt;p&gt;Through our new partnership with Exa, Smart Window can now retrieve current web information and show the sources behind its response without taking you to a separate search results page. Learn more about why we chose Exa and what the partnership means for Firefox in our &lt;a href=&quot;https://blog.mozilla.org/en/firefox/firefox-exa-partnership/&quot;&gt;companion post&lt;/a&gt;.&lt;/p&gt;



&lt;h4&gt;&lt;strong&gt;Group tabs that belong together&lt;/strong&gt; &lt;/h4&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-86772&quot; height=&quot;1080&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2026/08/Firefox_SmartWindow_Inline2.gif&quot; width=&quot;1920&quot; /&gt;&lt;/figure&gt;



&lt;p&gt;It doesn’t take long for a quick search to turn into a browser full of tabs. Once they pile up, keeping track of everything becomes even more work. &lt;/p&gt;



&lt;p&gt;Smart Window can now suggest groups for related tabs, making it easier to organize what you have open and return to it later. It can also spot duplicate tabs and close them with a click.&lt;/p&gt;



&lt;h4&gt;&lt;strong&gt;Find your spot again&lt;/strong&gt; &lt;/h4&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-86784&quot; height=&quot;1080&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2026/08/Firefox_SmartWindow_Inline.gif&quot; width=&quot;1920&quot; /&gt;&lt;/figure&gt;



&lt;p&gt;Sometimes you remember what was on a page better than you remember what it was called or how you got there. Smart Window can now show visual previews of pages in your browsing history, making it easier to spot the page you’re looking for among similar results without opening each one to figure out which is which.&lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;Behind the evolution&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Last November, we &lt;a href=&quot;https://blog.mozilla.org/en/firefox/ai-window/&quot;&gt;shared&lt;/a&gt; an early concept called “AI Window,” exploring what it could look like to give people a user-controlled space where they could chat with an AI assistant to get help while browsing. We shared it early because we wanted our community to help shape where it went next.&lt;/p&gt;



&lt;p&gt;Over the months that followed, we watched how people used the experience, listened to feedback, and tested new ideas. A consistent theme emerged: people were increasingly using it as part of their everyday browsing — searching, navigating, and working through the things they’d come online to do. The value of the AI assistant came through in how it helped them make progress on those tasks.&lt;/p&gt;



&lt;p&gt;We saw the same idea in feedback from beta users. One described using Smart Window to keep track of their “train of thought.” Another used it to find something they’d looked at before without remembering exactly where they’d seen it.&lt;/p&gt;



&lt;p&gt;Those learnings helped us shape Smart Window into a broader browsing experience that helps people make progress on what they came online to do.&lt;/p&gt;



&lt;p&gt;While the product is evolving, the principles we started with remain the same: choice, privacy, and transparency. Smart Window is optional. You choose when to use it, what browsing context it can use to help with a task, and which AI model you want to use. Firefox’s AI Controls gives you one place to manage Smart Window, including turning it off entirely, so you can easily choose the browsing experience you want.&lt;/p&gt;



&lt;h3&gt;What’s next&lt;/h3&gt;



&lt;p&gt;We’re continuing to explore ways Smart Window can help carry a task forward, especially when you leave it and come back later. &lt;/p&gt;



&lt;p&gt;Soon, Smart Window will be able to surface recent browsing journeys and pull together related tabs and history, giving you a starting point when you return to something you were working on. We’re also working on ways for Smart Window to use relevant information to help fill out online forms, so you don’t have to re-enter the same details again and again. You’ll stay in control of what Smart Window can access, including which tabs you choose to share with it.&lt;/p&gt;



&lt;p&gt;Smart Window remains in beta, and we’ll keep learning from our community as these experiences develop. It’s currently available in English to people in the U.S. and Canada. If it’s not available where you are yet, you can &lt;a href=&quot;https://www.firefox.com/smart-window&quot;&gt;sign up&lt;/a&gt; to be notified when it is.&lt;/p&gt;



&lt;p&gt;To try Smart Window, visit &lt;a href=&quot;https://www.firefox.com/smart-window&quot;&gt;https://www.firefox.com/smart-window&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/firefox/firefox-smart-window/&quot;&gt;Smart Window: Finish what you start online&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/en/&quot;&gt;The Mozilla Blog&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-18T13:06:06+00:00</dc:date>
	<dc:creator>Mozilla</dc:creator>
</item>
<item rdf:about="https://blog.mozilla.org/?p=86528">
	<title>The Mozilla Blog: Firefox and Exa: Building AI search around people, not platforms</title>
	<link>https://blog.mozilla.org/en/firefox/firefox-exa-partnership/</link>
	<content:encoded>&lt;p&gt;AI has changed how we browse. Full stop. The real question is whether AI leads to one browser experience for everyone, or gives people more ways to make the browser work for them. &lt;/p&gt;



&lt;p&gt;Firefox was always built to give users an alternative to the status quo, and our approach with AI is no different. Much of the industry is going in another direction: Company A builds the browser → and the search engine → and the AI model → and all the surrounding services. The seduction lies in how effortless every layer feels, but it also means one company has total influence over what tech you can use and what AI delivers.&lt;/p&gt;



&lt;p&gt;We aim to deliver users a different model: one where AI makes your browser empowering and helpful, with visible citations and with a zero-data-retention commitment, all powered by an independent browser engine. To get there, we’re partnering with people who align with the same open, choice-first thinking that’s shaped Firefox from day one.&lt;/p&gt;



&lt;p&gt;Today, that starts with &lt;a href=&quot;https://exa.ai/blog/exa-firefox&quot;&gt;Exa.ai&lt;/a&gt;, a search and retrieval company built for the AI era. &lt;/p&gt;



&lt;p&gt;Going forward, Exa will help power Smart Window on desktop and Quick Answers on iOS, giving people a way to get current, source-backed answers without leaving the page. More on our related Smart Window announcement &lt;a href=&quot;https://blog.mozilla.org/en/firefox/firefox-smart-window/&quot;&gt;here&lt;/a&gt;.&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;But our Exa news isn’t about one feature or product. It’s about model choice and how people find things online.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-86529&quot; height=&quot;576&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2026/08/Firefox_SmartWindow_Distilled_Exa_Inline-1024x576.jpg&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;



&lt;h3&gt;An independent AI model&lt;/h3&gt;



&lt;p&gt;Mozilla has always believed the web is strongest when it encourages technology competition and variety, and we think the same principle should apply to AI. We want to create an AI ecosystem that is open, diverse, and grounded in the same values we champion for the web. So, instead of building our own closed AI stack, Firefox is investing in partnerships with companies like Exa.ai to bring deep expertise in specific areas while sharing our commitment to user choice, privacy, and transparency. &lt;/p&gt;



&lt;p&gt;As Ajit Varma, Head of Firefox, puts it, “Firefox’s philosophy is straightforward: the open internet is a critical resource and people should be able to shape it to their needs and preferences — even as new entry points like AI emerge. AI should be responsible. It should stay transparent and under your control. AI shouldn’t be an-all-or nothing offering, but rather built so users can pick and choose the model or system that works for them.”&lt;/p&gt;



&lt;p&gt;The idea is simple: Mozilla builds the browser people trust, and partners like Exa.ai bring the specialized pieces that make it better. That lets us move faster without asking people to give up what made Firefox different in the first place.&lt;/p&gt;



&lt;p&gt;Adds Will Bryk, Co-founder and CEO of Exa.ai, “Search built for the AI era doesn’t work if it’s locked inside one company’s stack. Firefox is one of the last browsers that isn’t trying to own the model, the search, and the browser all at once. That’s why this partnership makes sense to us. We’re building the information layer for an agentic web, where trust and transparency are paramount. We share those values with Firefox, making this partnership a very easy call.” &lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;AI should make the web more useful, not replace it&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;AI is only as useful as your ability to check its work.&lt;/p&gt;



&lt;p&gt;That’s the point of building Exa’s retrieval into Firefox: when you get an answer, you can see the source it came from. Nothing is buried in a ‘citations’ menu, but sitting right there so a two-second glance tells you whether to trust it or read more. We’re not forcing you ‘just trust us’ that it’s right. &lt;/p&gt;



&lt;p&gt;It’s a small design choice, but it matters. It’s the difference between an AI that tells you things and one that shows you where to look. It also means the people who actually wrote that content don’t disappear from the picture, the way they often do when AI summarizes and moves on.&lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;Looking ahead&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;This won’t be the last partnership like it. We’re picking partners for the same reason each time: people who think AI in a browser should work for you, not the other way around.&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/firefox/firefox-exa-partnership/&quot;&gt;Firefox and Exa: Building AI search around people, not platforms&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/en/&quot;&gt;The Mozilla Blog&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-18T13:05:34+00:00</dc:date>
	<dc:creator>Mozilla</dc:creator>
</item>
<item rdf:about="https://fxdx.dev/?p=557">
	<title>Firefox Developer Experience: Firefox WebDriver Newsletter 154</title>
	<link>https://fxdx.dev/firefox-webdriver-newsletter-154/</link>
	<content:encoded>&lt;p id=&quot;block-625ec41a-ebba-4559-8294-ab8d43d24728&quot;&gt;&lt;em&gt;WebDriver is a remote control interface that enables introspection and control of user agents. As such, it can help developers to verify that their websites are working and performing well with all major browsers. The protocol is standardized by the&lt;a href=&quot;https://www.w3.org/&quot;&gt; W3C&lt;/a&gt; and consists of two separate specifications:&lt;a href=&quot;https://w3c.github.io/webdriver/&quot;&gt; WebDriver classic&lt;/a&gt; (HTTP) and the new&lt;a href=&quot;https://w3c.github.io/webdriver-bidi/&quot;&gt; WebDriver BiDi&lt;/a&gt; (Bi-Directional).&lt;/em&gt;&lt;/p&gt;



&lt;p id=&quot;block-dae47e7f-6eed-4378-93bf-87f83964774b&quot;&gt;&lt;em&gt;This newsletter gives an overview of the work we’ve done as part of the Firefox 154 release cycle&lt;/em&gt;.&lt;/p&gt;



&lt;h3&gt;Contributions&lt;/h3&gt;



&lt;p id=&quot;block-0cd229aa-56a4-4acd-88c9-6c0aed1f91ef&quot;&gt;Firefox is an open source project, and we are always happy to receive external code contributions to our WebDriver implementation. We want to give special thanks to everyone who filed issues, bugs, and submitted patches.&lt;/p&gt;



&lt;p id=&quot;block-90d46142-b130-4359-9a16-b2e82ef91416&quot;&gt; Firefox 154, one WebDriver bug was fixed by a contributor:&lt;/p&gt;



&lt;ul id=&quot;block-b10e4a7c-ea74-4805-9e31-4bb37551e682&quot;&gt;
&lt;li&gt;Devin Rousso updated &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=2052932&quot;&gt;the &lt;code&gt;emulation.setLocaleOverride&lt;/code&gt; command to allow overriding the &lt;code&gt;Accept-Language&lt;/code&gt; header for fetch and &lt;code&gt;WebSocket&lt;/code&gt; requests in workers&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;



&lt;p id=&quot;block-1dca3827-38c3-478d-a4b2-a1e39af880f5&quot;&gt;WebDriver code is written in JavaScript, Python, and Rust, so any web developer can contribute! Read&lt;a href=&quot;https://firefox-source-docs.mozilla.org/setup/index.html&quot;&gt; how to set up the work environment&lt;/a&gt; and check&lt;a href=&quot;https://codetribute.mozilla.org/projects/automation&quot;&gt; the list of mentored issues&lt;/a&gt; for Marionette or the&lt;a href=&quot;https://codetribute.mozilla.org/languages/javascript?project%3DWebDriver%2520BiDi&quot;&gt; list of mentored JavaScript bugs for WebDriver BiDi&lt;/a&gt;. Join&lt;a href=&quot;https://chat.mozilla.org/#/room/#webdriver:mozilla.org&quot;&gt; our chatroom&lt;/a&gt; if you need any help to get started!&lt;/p&gt;



&lt;h3&gt;All Changes&lt;/h3&gt;



&lt;p&gt;A complete list of developer-facing changes included in this Firefox release is available in the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/154#webdriver_conformance_webdriver_bidi_marionette&quot;&gt;MDN Firefox 154 Release Notes&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-18T10:00:32+00:00</dc:date>
	<dc:creator>Alexandra Borovova</dc:creator>
</item>
<item rdf:about="discourse.mozilla.org-topic-149211">
	<title>Firefox Tooling Announcements: MozPhab 2.16.0 and 2.16.1 Released</title>
	<link>https://discourse.mozilla.org/t/mozphab-2-16-0-and-2-16-1-released/149211</link>
	<content:encoded>&lt;p&gt;Bugs resolved in Moz-Phab 2.16.1:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/2063077&quot;&gt;bug 2063077&lt;/a&gt; Run tests in parallel with &lt;code&gt;pytest-xdist&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/2063810&quot;&gt;bug 2063810&lt;/a&gt; Obscure error installing MozPhab&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bugs resolved in Moz-Phab 2.16.0:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/2050987&quot;&gt;bug 2050987&lt;/a&gt; &lt;code&gt;moz-phab self-update&lt;/code&gt; fails when installed via &lt;code&gt;uv tool&lt;/code&gt;: “No module named pip”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Discuss these changes in &lt;span class=&quot;hashtag-raw&quot;&gt;#engineering-workflow&lt;/span&gt; on Slack or &lt;span class=&quot;hashtag-raw&quot;&gt;#Conduit&lt;/span&gt; Matrix&lt;/p&gt;
            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;
            &lt;p&gt;&lt;a href=&quot;https://discourse.mozilla.org/t/mozphab-2-16-0-and-2-16-1-released/149211&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-18T03:18:29+00:00</dc:date>
	<dc:creator>sheehan</dc:creator>
</item>
<item rdf:about="https://blog.farre.se/posts/2026/08/17/tracing-web-specs/">
	<title>Andreas Farre: Tracing algorithms through web specifications</title>
	<link>https://blog.farre.se/posts/2026/08/17/tracing-web-specs/</link>
	<content:encoded>&lt;p&gt;A bug comes in, or someone shows me a page doing something surprising, and the question is always the same one. Is that what the spec says? Not what we all assume it says, and not what Gecko happens to do, but what the algorithm actually does when you follow it step by step. So I open &lt;a href=&quot;https://html.spec.whatwg.org/&quot;&gt;html.spec.whatwg.org&lt;/a&gt;, find the entry point, and start reading. Twenty tabs later I have usually lost the thread.&lt;/p&gt;



&lt;p&gt;This isn’t an occasional chore. I do it when I’m implementing something new, when I’m working out whether a Gecko bug is a bug in Gecko or a bug in the spec, when I’m reviewing a spec change someone else has proposed, and when I’m trying to design something that has to fit alongside everything that already exists. Four fairly different jobs, and every one of them comes down to the same mechanical work. Start at an algorithm, follow the calls, keep track of where you’ve been.&lt;/p&gt;

&lt;p&gt;The specs are built for exactly this, in principle. Every step that invokes another algorithm is a hyperlink, and the whole thing is one large call graph spread across HTML, DOM, Fetch, URL and Infra. The trouble is that walking that graph by hand is slow, and it’s the kind of slow a machine should be doing on your behalf.&lt;/p&gt;

&lt;p&gt;Two tools have changed how I do this. One answers questions about the graph, and the other helps me walk it. If you’d rather install them first and read afterwards, &lt;a href=&quot;https://farre.github.io/blog/rss/mozilla.xml#getting-them&quot;&gt;they’re both at the end&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;webspec-index trace&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/jnjaeschke/webspec-index&quot;&gt;webspec-index&lt;/a&gt; is &lt;a href=&quot;https://github.com/jnjaeschke/&quot;&gt;Jan Jaeschke&lt;/a&gt;’s tool for querying web specifications from the command line. It indexes the specs, on demand as it needs them, and lets you ask about definitions, references and IDL. In August it gained a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trace&lt;/code&gt; subcommand, and that’s the one I keep reaching for.&lt;/p&gt;

&lt;p&gt;You give it two anchors and it finds the routes between them. It answers in JSON by default, which is the right choice for feeding it into something else but not for reading, so add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--format markdown&lt;/code&gt; when the audience is you. Say I want to know how a navigation can end up firing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;navigateerror&lt;/code&gt;:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;&lt;span class=&quot;gp&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;webspec-index trace HTML#navigate HTML#event-navigateerror &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;    --format markdown&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;# trace: `HTML#navigate` -&amp;gt; `HTML#event-navigateerror`

Max depth 6, kind `step`. Found 11 trace(s).

## Trace 1 (5 hop(s))

1) [`HTML#navigate` step 20](…#beginning-navigation:set-the-ongoing-navigation)
   calls `HTML#set-the-ongoing-navigation`
   &amp;gt; Set the ongoing navigation for navigable to navigationId.

2) [`HTML#set-the-ongoing-navigation` step 2](…#aborting-navigation:inform-the-…)
   calls `HTML#inform-the-navigation-api-about-aborting-navigation`
   &amp;gt; Inform the navigation API about aborting navigation given navigable.

3) [`HTML#inform-the-navigation-api-…` step 3.1](…#ongoing-navigation-tracking:…)
   calls `HTML#abort-the-ongoing-navigation`
   - under: While navigation's ongoing navigate event is not null:
   &amp;gt; Abort the ongoing navigation given navigation.

4) [`HTML#abort-the-ongoing-navigation` step 7](…#ongoing-navigation-tracking:…)
   calls `HTML#abort-a-navigateevent`
   &amp;gt; Abort event given error.

5) `HTML#abort-a-navigateevent` step 6 calls `HTML#event-navigateerror`
   &amp;gt; Fire an event named navigateerror at navigation using ErrorEvent, with
     additional attributes initialized according to errorInfo.&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;I’ve wrapped those lines and shortened the URLs to fit; in the real output each hop is one long line and every link is a full deep link to that exact call site.&lt;/p&gt;

&lt;p&gt;Every hop names the exact step number, quotes the step text, and tells you the condition it sits under. That last part matters more than it looks. Step 3.1 only runs while the ongoing navigate event is non-null, and knowing that is the difference between a path that exists on paper and a path your case actually took.&lt;/p&gt;

&lt;p&gt;Eleven routes, though&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a class=&quot;footnote&quot; href=&quot;https://farre.github.io/blog/rss/mozilla.xml#fn:1&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. Reading eleven of these back to back is not much better than the twenty tabs.&lt;/p&gt;

&lt;h3&gt;Three zoom levels&lt;/h3&gt;

&lt;p&gt;This is where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;webspec-index trace&lt;/code&gt; gets genuinely nice, and it’s the part I want to draw attention to, because it’s easy to miss in the help text. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--detail&lt;/code&gt; flag changes how much of each route you get, and the three levels turn out to be three different ways of working rather than just three verbosity settings.&lt;/p&gt;

&lt;p&gt;Ask the same question again with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--detail edges&lt;/code&gt; and the prose falls away, leaving the skeleton:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;&lt;span class=&quot;gp&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;webspec-index trace HTML#navigate HTML#event-navigateerror &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;    --detail edges --format markdown&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;# trace: `HTML#navigate` -&amp;gt; `HTML#event-navigateerror`

Max depth 6, kind `step`. Found 11 trace(s).

## Trace 1 (5 hop(s))

1) `HTML#navigate` step 20 calls `HTML#set-the-ongoing-navigation`

2) `HTML#set-the-ongoing-navigation` step 2 calls `HTML#inform-the-navigation-api-about-aborting-navigation`

3) `HTML#inform-the-navigation-api-about-aborting-navigation` step 3.1 calls `HTML#abort-the-ongoing-navigation`

4) `HTML#abort-the-ongoing-navigation` step 7 calls `HTML#abort-a-navigateevent`

5) `HTML#abort-a-navigateevent` step 6 calls `HTML#event-navigateerror`

## Trace 2 (5 hop(s))

1) `HTML#navigate` step 22.4 calls `HTML#fire-a-push/replace/reload-navigate-event`

2) `HTML#fire-a-push/replace/reload-navigate-event` step 2 calls `HTML#inform-the-navigation-api-about-aborting-navigation`

...&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Now you can read all eleven at once, and a shape appears that I could not see in the verbose output at all. There are five places inside &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;navigate&lt;/code&gt; where a route starts:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: left;&quot;&gt;step&lt;/th&gt;
      &lt;th style=&quot;text-align: left;&quot;&gt;calls&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left;&quot;&gt;15.1&lt;/td&gt;
      &lt;td style=&quot;text-align: left;&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#navigate-fragid&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left;&quot;&gt;20&lt;/td&gt;
      &lt;td style=&quot;text-align: left;&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#set-the-ongoing-navigation&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left;&quot;&gt;21.1&lt;/td&gt;
      &lt;td style=&quot;text-align: left;&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#navigate-to-a-javascript:-url&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left;&quot;&gt;22.4&lt;/td&gt;
      &lt;td style=&quot;text-align: left;&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#fire-a-push/replace/reload-navigate-event&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left;&quot;&gt;24.1&lt;/td&gt;
      &lt;td style=&quot;text-align: left;&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#checking-if-unloading-is-canceled&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;And all eleven finish on the same line:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;`HTML#abort-a-navigateevent` step 6 calls `HTML#event-navigateerror`&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;There are exactly two ways into that step, from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HTML#abort-the-ongoing-navigation&lt;/code&gt; step 7 and from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HTML#process-navigate-event-handler-failure&lt;/code&gt; step 5. Eleven routes exist because three of the five entry points re-enter the same navigate event firing machinery from different directions, not because there are eleven genuinely different things going on.&lt;/p&gt;

&lt;p&gt;That’s a useful thing to know before you start debugging. If a navigation is firing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;navigateerror&lt;/code&gt; and you want to find out why, you don’t instrument eleven places. You instrument the one step they all pass through and work backwards from there.&lt;/p&gt;

&lt;p&gt;So the way I use it now is to start at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--detail edges&lt;/code&gt; to find the shape, then drop back to the default once I know which route I care about and want to read the reasoning. The third level, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--detail compact&lt;/code&gt;, drops the prose but keeps every anchor as a deep link to the exact call site, which is the form you want when you’re pasting a route into a bug report for someone else to follow.&lt;/p&gt;

&lt;h3&gt;WebSpec Tracer&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;webspec-index trace&lt;/code&gt; answers a specific kind of question, and it’s worth being precise about which kind. You have to know both ends. That’s fine when you’re asking whether one thing can reach another, but a lot of the time I only know where I’m standing. I have a starting point, a bug in front of me, and no idea yet where the algorithm goes.&lt;/p&gt;

&lt;p&gt;There’s also something &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;webspec-index trace&lt;/code&gt; can’t do for you in principle. It finds routes through the spec text, statically. It doesn’t know which branch your case took, because that depends on what actually happened at runtime, and only you have that information.&lt;/p&gt;

&lt;p&gt;So I wrote &lt;a href=&quot;https://github.com/farre/webspec-tracer&quot;&gt;WebSpec Tracer&lt;/a&gt;, a Firefox extension that walks the specs with you rather than ahead of you. You give it a starting anchor and it shows you that algorithm with every linked term highlighted. Click one and it becomes the next hop in the trace, and the panel moves you into it. Click the wrong one and Back undoes it.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;The WebSpec Tracer sidebar showing the navigate algorithm, with the linked terms in each step highlighted, next to a GitHub issue form containing the trace so far as markdown&quot; src=&quot;https://farre.github.io/assets/images/2026-08-17-tracing-web-specs/branch-point.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The screenshot is a walk that started at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;location.assign&lt;/code&gt; and has arrived inside &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;navigate&lt;/code&gt;. Step 15 is the interesting one. It runs only if four things are all true, that there’s no document resource, no response, the URL matches the current entry’s URL ignoring fragments, and the fragment is non-null. If all four hold, it navigates to a fragment and returns. Otherwise the algorithm keeps going into the full navigation path below.&lt;/p&gt;

&lt;p&gt;No tool can decide that for me. Whether my bug went left or right at step 15 depends on the page and on what the user did. But the extension puts the decision in front of me with the alternatives visible, which is precisely what I was failing to do for myself with twenty tabs open.&lt;/p&gt;

&lt;p&gt;The trace builds up in the panel underneath as markdown, with every anchor pointing at the exact call site. That box is a display rather than a text field, so there are buttons for getting the trace out of it. Copy does what you’d expect. Insert is the one I actually use, and it’s the reason the extension lives in the sidebar: it writes the markdown straight into whichever field you have focused on the page, so you can have a spec issue open next to the panel and drop the trace into it without going near the clipboard. Reset clears everything and starts over.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;The same panel, with the GitHub issue switched to the Preview tab, showing the two hops rendered as linked spec anchors&quot; src=&quot;https://farre.github.io/assets/images/2026-08-17-tracing-web-specs/branch-preview.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Switch the issue over to Preview and there are the same two hops, rendered, each one a link into the spec. That’s most of the reason I built the thing. Explaining a route through an algorithm in prose is miserable, and the version you retype by hand is always slightly wrong. This way what I hand over is exactly what I walked.&lt;/p&gt;

&lt;p&gt;One more thing worth knowing, about the anchors themselves. The starting one has to say which spec it’s in, so &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HTML#dom-location-assign&lt;/code&gt; rather than just &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dom-location-assign&lt;/code&gt;, but after that the extension works it out as it goes. Anything that turns up in the trace without a prefix is in the spec you started from, and a prefix appears when the trace crosses a boundary:&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;The panel showing WebIDL's wait for all algorithm, with a six hop trace whose last line ends in WEBIDL#wait-for-all&quot; src=&quot;https://farre.github.io/assets/images/2026-08-17-tracing-web-specs/cross-spec.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;That’s the same walk carried a few hops further. Hop 3 is that step 15 decision, taken, and the last line is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WEBIDL#wait-for-all&lt;/code&gt;. Somewhere in the navigate event firing the trace left HTML entirely, and the prefix is the only thing that tells me so. The panel on the left has stopped showing me HTML too, and is now sitting in WebIDL. That’s easy to lose track of when you’re clicking through by hand, and it’s usually the moment a question stops being about HTML and starts being about something else.&lt;/p&gt;

&lt;h3&gt;When one call happens twelve times&lt;/h3&gt;

&lt;p&gt;Sometimes an algorithm invokes another one from many different places, and a trace has to say something sensible about that. This was in the design from the start, and the answer it arrived at is to do what the spec already does. Start at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HTML#update-the-image-data&lt;/code&gt; and follow it to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HTML#abort-the-image-request&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;The panel showing the abort the image request algorithm, with a single trace line listing twelve numbered call sites&quot; src=&quot;https://farre.github.io/assets/images/2026-08-17-tracing-web-specs/multi-branch.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HTML#abort-the-image-request&lt;/code&gt; is invoked from twelve separate places inside &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HTML#update-the-image-data&lt;/code&gt;. The extension doesn’t make me choose one, and it doesn’t flatten them into a single link either. It records the hop once and hangs all twelve call sites off it as numbered links, so the line reads &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#update-the-image-data calls #abort-the-image-request, [2], [3]&lt;/code&gt; and onwards to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[12]&lt;/code&gt;, each number pointing at its own anchor.&lt;/p&gt;

&lt;p&gt;The numbering isn’t invented. It’s the spec’s own scheme for repeated references: the anchors run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#abort-the-image-request&lt;/code&gt;, then &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-2&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-3&lt;/code&gt;, and so on up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-12&lt;/code&gt;. All the trace does is carry that through, so a hop in the output identifies call sites the same way the spec identifies them, and the numbers mean the same thing in both places.&lt;/p&gt;

&lt;p&gt;That also keeps the trace honest. The hop happened, and that’s true whichever of the twelve fired, but the fact that there are twelve is worth knowing on its own, and anyone reading can go and check any one of them. Writing this out by hand you would link the first and lose the other eleven without ever noticing. The same thing is visible in the previous screenshot, where hop 3 reads &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#navigate calls #navigate-fragid, [2], [3]&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;webspec-index trace&lt;/code&gt; deals with the same situation the other way round. Ask it the same question and you get twelve separate one hop traces, each naming its own step number, step 2, then 7.4.2, then 11.1, and so on down the algorithm. Neither is wrong. The command line is telling you which steps, and the extension is keeping your trace to one line while preserving every place it could have come from.&lt;/p&gt;

&lt;h3&gt;Which one, when&lt;/h3&gt;

&lt;p&gt;They divide up cleanly enough that I don’t think about it much any more. If I know both ends and want to know what’s between them, or how many different routes there are, that’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;webspec-index trace&lt;/code&gt;. If I know where I’m starting and want to find out where it goes, that’s the extension.&lt;/p&gt;

&lt;p&gt;The one I underused at first was &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--detail edges&lt;/code&gt;. Asking a broad question and then zooming out far enough to see the answer’s shape is a different move from following a single path carefully, and it’s the one that has surprised me most often, usually by showing me that several things I thought were separate all funnel through the same step.&lt;/p&gt;

&lt;h3&gt;Getting them&lt;/h3&gt;

&lt;p&gt;webspec-index is on crates.io:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cargo binstall webspec-index&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;It builds its index as it goes, so the first trace into a corner you haven’t visited before pauses briefly to fetch and index the specs the route touches. After that it’s fast.&lt;/p&gt;

&lt;p&gt;WebSpec Tracer is on &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/webspec-tracer/&quot;&gt;addons.mozilla.org&lt;/a&gt;, and the source is on &lt;a href=&quot;https://github.com/farre/webspec-tracer&quot;&gt;GitHub&lt;/a&gt;. It lives in the sidebar, toggled with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl+Shift+U&lt;/code&gt;, so you can keep it open next to whatever you’re reading.&lt;/p&gt;

&lt;p&gt;Both are worth a try if you spend any time at all reading specs, whether you’re implementing them, arguing with them, or just trying to find out whether the browser is wrong or you are.&lt;/p&gt;

&lt;h5&gt;Notes&lt;/h5&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Eleven is what you get at the default maximum depth of six hops. Raise it and there are more. &lt;a class=&quot;reversefootnote&quot; href=&quot;https://farre.github.io/blog/rss/mozilla.xml#fnref:1&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;</content:encoded>
	<dc:date>2026-08-17T00:00:00+00:00</dc:date>
</item>
<item rdf:about="urn:https-wrla-ch:-log-2026-08-writing-the-docs-2026-edition">
	<title>William Lachance: Writing the Docs: 2026 Edition</title>
	<link>https://wrla.ch/log/2026/08/writing-the-docs-2026-edition/?utm_source=mozilla&amp;utm_medium=RSS</link>
	<content:encoded>&lt;p&gt;It's been about 5 years since I was working heavily on documentation and metadata at Mozilla. I wrote a bunch about this at the time:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://archive.wrla.ch/blog/2020/05/%20a-principled-reorganization-of-docs-telemetry-mozilla-org/&quot;&gt;A principled reorganization of docs.telemetry.mozilla.org&lt;/a&gt; (May 2020)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://archive.wrla.ch/blog/2020/07/mozilla-telemetry-in-2020-from-just-firefox-to-a-galaxy-of-data/&quot;&gt;Mozilla Telemetry in 2020: From “Just Firefox” to a “Galaxy of Data”&lt;/a&gt; (July 2020)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://archive.wrla.ch/blog/2021/01/the-glean-dictionary/&quot;&gt;The Glean Dictionary&lt;/a&gt; (January 2021).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I don't think I ever wrote about it explicitly, but in the background I (along with a few others at Mozilla Data) were digging deep into &quot;proposal culture&quot; and how to collaboratively build software together using design documentation.&lt;/p&gt;
&lt;p&gt;Thinking hard about knowledge systems is a somewhat idiosyncratic obsession, and something I emphasize a little less day-to-day now. That said, I &lt;em&gt;still&lt;/em&gt; think that putting effort into organizing information and making it legible both leads to better workplaces and makes us generally more productive. Fundamentally, it’s an act of care both to yourself and your peers, past and present.&lt;/p&gt;
&lt;p&gt;Moreover, the core points I was trying to make at the time (either in what I wrote or what I did) mostly still hold:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Separate the &quot;what&quot; from the &quot;how&quot;&lt;/li&gt;
&lt;li&gt;Reference documentation should derive from ground truth&lt;/li&gt;
&lt;li&gt;Document your decisions and process&lt;/li&gt;
&lt;li&gt;Continuous improvement&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As a sort of retrospective, I'd like to revisit these principles 5 years on, with special attention to how they relate to large language models (LLMs).&lt;/p&gt;
&lt;p&gt;I’m going to talk about Mozilla a lot because it’s all on the public record and I can talk about it relatively freely. I haven’t really been involved in the community or watching closely what’s been happening there since &lt;a href=&quot;https://archive.wrla.ch/blog/2021/12/leaving-mozilla/&quot;&gt;I left in January 2022&lt;/a&gt;. Likely the internal perspective at Mozilla these days is different from my own (hopefully not that different 😂).&lt;/p&gt;
&lt;h3&gt;Separate the what from the how&lt;/h3&gt;
&lt;p&gt;This is what I talked about in &lt;a href=&quot;https://archive.wrla.ch/blog/2020/05/a-principled-reorganization-of-docs-telemetry-mozilla-org/&quot;&gt;A principled reorganization of docs.telemetry.mozilla.org&lt;/a&gt;. While I wasn’t aware of it at the time, I was basically repeating the principles of the &lt;a href=&quot;https://diataxis.fr/&quot;&gt;diataxis framework&lt;/a&gt;. Since then, diataxis has become my go-to for describing good documentation, because it's so well written and explained.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://wrla.ch/feeds/Mozilla.rss.xml#fn-writing-the-docs-2026-edition-1&quot; id=&quot;fnref-writing-the-docs-2026-edition-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;diataxis breaks documentation down into four categories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tutorials: How to do a basic task, step by step: intended for beginners&lt;/li&gt;
&lt;li&gt;Explanation: Longer documents describing the &quot;why&quot;: intended for all&lt;/li&gt;
&lt;li&gt;How-to: How to accomplish a specific task: intended for non-beginners&lt;/li&gt;
&lt;li&gt;Reference: Ground truth establishing the &quot;what&quot;: intended for all&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;Diataxis: tutorials, howtos, explanations, reference&quot; src=&quot;https://wrla.ch/log/2026/08/writing-the-docs-2026-edition/diataxis.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I think this framework holds up really well, and it’s still the first thing I reach for when thinking about (or explaining) how to write something. Although diataxis was never fully applied, docs.telemetry.mozilla.org became a more useful site for data practitioners after I emphasized tutorials and &quot;getting started&quot; docs, and put the reference and deeper dives later on. It was pretty frequent that I'd be able to answer a question on our internal slack channel and be able to quote a step-by-step link from the docs describing exactly what someone needed to do or know.&lt;/p&gt;
&lt;p&gt;My one quibble with diataxis is that sometimes for a complex task you need to &lt;em&gt;mix&lt;/em&gt; the different types of documentation. &lt;a href=&quot;https://docs.telemetry.mozilla.org/cookbooks/main_ping_exponential_histograms&quot;&gt;Visualizing Percentiles of a Main Ping Exponential Histogram&lt;/a&gt; was written as a very long and sprawling mix of explanation with theory (even the name is a mouthful), but I think that’s one of its strengths? I got repeated feedback that it was extremely helpful by the Firefox engineers. I can't be totally certain it still holds up today, but I'm fairly certain it does. At the very least, no one has felt motivated to take it down.&lt;/p&gt;
&lt;p&gt;Do LLMs change anything here? I would argue no. Although some of the things we want to do now are different (and still changing as of this writing), each has proven useful in its own way.&lt;/p&gt;
&lt;p&gt;Tutorials and explanations are the easiest case to make: they are meant for general sense making, and the need for that hasn't gone away at all. Indeed I think as we delegate more of the day-to-day work to machines and reduce the amount of hands-on work which generates understanding, our need for these aids has only increased. I occasionally use LLMs to create initial drafts of this type of work and it’s interesting to see what they miss or get wrong: often some vital fact or nuance is not there, and they have a tendency to emphasize incidental details.&lt;/p&gt;
&lt;p&gt;One thing that many people find surprising about tutorials is that they were actually never really meant to describe &lt;em&gt;how&lt;/em&gt; to do something. Instead, the purpose is primarily just to give some hands-on experience and feeling of success, so they can start feeling more confident in going deeper and doing the more advanced tasks where explanation, how-to, and reference become more important. This need to gain a preliminary understanding of the system has not gone away at all with LLMs-- I maintain that hands-on learning and action is still the best way for most people to learn anything, including how to work with computational systems. Once you've gone beyond the basics, any gaps in understanding or context can be filled in by absorbing the content of deeper articles describing the concepts of a system and why it is the way it is.&lt;/p&gt;
&lt;p&gt;Howto documentation (sometimes also called cookbooks or runbooks) are an interesting case, as I feel like this is where things have simultaneously changed the most and the least. Back in the day, I felt that most human written documentation should be exactly this type of thing: it was the most broadly useful and tended to age much better than explanation or reference material that would frequently go out of date. Being able to answer a slack question with a link to this type of material was always satisfying.&lt;/p&gt;
&lt;p&gt;Of course now, often it's a large language model or similar executing these types of tasks. Early in 2026, the hot topic was creating &lt;a href=&quot;https://agentskills.io&quot;&gt;Agent Skills&lt;/a&gt; which are, at heart, just little markdown docs named &lt;code&gt;SKILL.md&lt;/code&gt; which describe how to perform a particular task. I think they are entirely complementary to the approach. You write a detailed howto describing how to perform a task (using Mozilla data as an example, query a table in BigQuery). An LLM can process a well-written markdown file just as easily as a human: just create an appropriate skill file saying as such:&lt;/p&gt;
&lt;div class=&quot;brush: md&quot;&gt;&lt;div class=&quot;colorful&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;---  
name: query-main-ping-telemetry-table*  
&lt;span class=&quot;gu&quot;&gt;description: Query the main ping telemetry table in Bigquery*  &lt;/span&gt;
&lt;span class=&quot;gu&quot;&gt;---&lt;/span&gt;

Refer to &lt;span class=&quot;sb&quot;&gt;`docs/howtos/query-telemetry-table-in-bigquery.md`&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;I'm often surprised at how quickly modern large language models can figure out how to do something essentially from first principles, but if you've arrived at a good solution already, why bother doing that? Just give them a cookbook and save the time and the tokens. And if you need to debug what it's doing (or do part of it yourself), the exact set of steps is right there.&lt;/p&gt;
&lt;p&gt;Reference documentation deserves its own treatment. More on it in the next section.&lt;/p&gt;
&lt;h3&gt;Reference documentation should derive from ground truth&lt;/h3&gt;
&lt;p&gt;In &lt;a href=&quot;https://archive.wrla.ch/blog/2020/07/mozilla-telemetry-in-2020-from-just-firefox-to-a-galaxy-of-data/&quot;&gt;Mozilla Telemetry in 2020: From “Just Firefox” to a “Galaxy of Data”&lt;/a&gt; I talked about how Mozilla's data could no longer reasonably be explained with a few hand-written articles:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Up until now, our defacto answer has been some combination of “Use the probe dictionary / telemetry.mozilla.org” and/or “refer to docs.telemetry.mozilla.org”. I submit that we’re at the point where these approaches break down: as mentioned above, there are many more types of data we now need to care about than just “probes” (or “metrics”, in Glean-parlance). When we just cared about the main ping, we could write dataset documentation for its recommended access point (main_summary) and the raw number of derived datasets was manageable. But in this new world, where we have N applications times M ping types, the number of canonical ping tables are now so many that documenting them all on docs.telemetry.mozilla.org no longer makes sense.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I was already thinking about the &lt;a href=&quot;https://dictionary.telemetry.mozilla.org&quot;&gt;Glean Dictionary&lt;/a&gt; and trying to justify working on it to my peers and upper management. In retrospect, this claim is self-evident: if you're dealing with hundreds or thousands of entities (or more), a manual approach to writing the documentation just isn't going to work. Even if you can generate a perfect first draft, you've only postponed the problem: the implementation &lt;em&gt;will&lt;/em&gt; change, and independently maintained reference documentation will drift from it.&lt;/p&gt;
&lt;p&gt;The solution is to make your reference documentation &lt;em&gt;derive&lt;/em&gt; from the actual truth of the thing that you're trying to document. This means some kind of machine readable representation: the source code, metrics definitions, dataset definitions, or similar. Critically, the reference documentation should directly link back to that original source, so you can verify (and examine) where these ground truth assertions are coming from. This is why the Glean Dictionary included a link back to the original schema or artifact which generated the documentation:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Glean Dictionary showing a metric with a link back to source&quot; src=&quot;https://wrla.ch/log/2026/08/writing-the-docs-2026-edition/glean-dictionary-source-of-truth.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://dictionary.telemetry.mozilla.org/apps/firefox_desktop/metrics/a11y_always_underline_links&quot;&gt;https://dictionary.telemetry.mozilla.org/apps/firefox_desktop/metrics/a11y_always_underline_links&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is a pretty old idea, dating back to Sphinx’s &lt;a href=&quot;https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html&quot;&gt;autodoc&lt;/a&gt; and &lt;a href=&quot;https://www.doxygen.nl/&quot;&gt;doxygen&lt;/a&gt;, although it hasn’t been super consistently applied in modern data engineering from 2020 to 2022 or so. These days, we tend to emphasize getting to an answer (“How many users did XYZ?”) over how the answer was &lt;em&gt;derived&lt;/em&gt;. Mozilla was a bit of an exception in that it had (hopefully still has) a lot of curious engineers who really &lt;em&gt;did&lt;/em&gt; care about these details.&lt;/p&gt;
&lt;p&gt;When using an LLM, I feel like this type of ground truth is more critical than ever. Much has been written about the tendency of large language models to hallucinate. Conclusions drawn from inaccurate source data can compound, leading to yet more confusion and problems that only get caught at review time (if you're lucky). Having a clear statement of the system-as-it-currently-is (with citations) is the best defense against that. Not only does it reduce the chance of hallucination or confabulation, but it gives a human operator the chance to check the reference and see if it makes sense.&lt;/p&gt;
&lt;p&gt;What was maybe a little more controversial (and possibly still is), was my conviction that writing a custom website was the right answer. The world is awash in SaaS companies offering to make sense of a data schema, service architecture, what have you-- why not just use those? At the time I wrote that article, we were considering Google's data catalog and I had to justify why creating a new thing wasn’t &lt;a href=&quot;https://wiki.c2.com/?NotInventedHere&quot;&gt;Not Invented Here&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A few months ago, I thought that Google’s Data Catalog (billed as offering “a unified view of all your datasets”) might provide a solution, but on further examination it only solves part of the problem: it provides only a view on your BigQuery tables and it isn’t designed to provide detailed information on the domain objects we care about (products, pings, measures, and tools). You can map some of the properties from these objects onto the tables (e.g. adding a probe’s description field to the column representing it in the BigQuery table), but Data Catalog's interface to surfacing and filtering through this information is rather slow and clumsy and requires detailed knowledge of how these higher level concepts relate to BigQuery primitives.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I haven't looked at Google's Data Catalog (or whatever it’s called now) since then, but I suspect that although it’s probably a great schema viewer, it's still going to be just as confusing for someone who doesn’t work as a data engineer day to day.&lt;/p&gt;
&lt;p&gt;It's just inherent: unless your product is a database, the domain of a generic data catalog (schemas, tables) is going to be inherently different than that of your business. This is true whether what you care about is the experience of Firefox users or dispatching taxi cabs. Forcing a data user to think in terms of the former is to move them away from asking actual product questions.&lt;/p&gt;
&lt;p&gt;The same really goes for any other &quot;data catalog&quot; SaaS product: in order to work across industries, it needs to express a bunch of concepts which are going to be foreign to your domain. If you're going to go to the trouble of mapping your own concepts and systems to the model of a product like this (which is honestly 90% of the effort, in my experience), putting in a little bit of extra effort to produce a custom interface or website might actually be the missing piece to make that work maximally impactful. This is even easier today thanks to large language models and generally evolving technology and practices.&lt;/p&gt;
&lt;p&gt;One area where I &lt;em&gt;do&lt;/em&gt; think there is still room for development and growth is infrastructure to &lt;em&gt;create&lt;/em&gt; these custom tools and data representations. Partly based on my experiences with the Glean Dictionary (and associated tools like &lt;a href=&quot;https://github.com/mozilla/probe-scraper&quot;&gt;probe-scraper&lt;/a&gt; and &lt;a href=&quot;https://github.com/mozilla/mozilla-schema-generator&quot;&gt;mozilla-schema-generator&lt;/a&gt;), I've been working on a new framework called &lt;a href=&quot;https://github.com/wlach/repo-parser&quot;&gt;repo-parser&lt;/a&gt; which formalizes this concept of extracting this “ground truth”.&lt;/p&gt;
&lt;p&gt;Given a git repository and a set of rules (e.g. “convert this set of markdown frontmatter into a set of tags”), it can take a forest of markdown, yaml, and json and produce either a &lt;a href=&quot;https://duckdb.org&quot;&gt;duckdb&lt;/a&gt; database or an in-memory representation of the repository’s content. You can use this to populate a data catalog (like the Glean Dictionary), create a dedicated documentation site or any number of other things.&lt;/p&gt;
&lt;p&gt;repo-parser’s &lt;a href=&quot;https://repo-parser-demo.netlify.app/&quot;&gt;example site&lt;/a&gt; is a mundane example of this. The content in the screenshot is produced from a &lt;a href=&quot;http://README.md&quot;&gt;README.md&lt;/a&gt; inside the repository, collected and organized dynamically at build-time:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;repo-parser doc site&quot; src=&quot;https://wrla.ch/log/2026/08/writing-the-docs-2026-edition/repo-parser-doc-site.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I'm not certain if repo-parser is exactly the right abstraction for building something like this, or if it's more
like an architectural design pattern where every implementation is bespoke. Time will tell.&lt;/p&gt;
&lt;h3&gt;Proposals, architectural decision records&lt;/h3&gt;
&lt;p&gt;Ground truth can tell us &lt;em&gt;what&lt;/em&gt;, but doesn’t say much about &lt;em&gt;why&lt;/em&gt;. When I introduced the afore-mentioned dictionary product in &lt;a href=&quot;https://archive.wrla.ch/blog/2021/01/the-glean-dictionary/&quot;&gt;The Glean Dictionary&lt;/a&gt;, embedded within was a link to a &lt;a href=&quot;https://docs.google.com/document/d/1OkTWA3rsSJ0m5g9GDnxXVUMkJP-xJMQk_bDgDq-Z9xM/edit&quot;&gt;Google docs proposal&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This was part of a larger movement towards &quot;design docs&quot; that myself and a few of my coworkers were pushing at the time. The idea was, before embarking on a large piece of work, you would write and circulate a large Google Doc containing a problem statement, goals, non-goals, and a preliminary expression of what you were trying to solve and alternatives considered. Then, discussion could proceed asynchronously over docs comments.&lt;/p&gt;
&lt;p&gt;I didn't really write a lot about them because (I think) my coworkers wrote and presented on them extremely effectively and I was more interested in, well, the above. But I think they're just as valuable a kind of writing, they answer so many important product and engineering questions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Why this design?&lt;/li&gt;
&lt;li&gt;Why now? (or why then, if looking at the proposal retroactively)&lt;/li&gt;
&lt;li&gt;How does this impact security, reliability, ... ?&lt;/li&gt;
&lt;li&gt;What comes next?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I still think proposals are extremely valuable. The obvious benefit is they allow us to reject or modify sub-optimal designs before too much effort is spent building and/or supporting them. But just as importantly, they allow us to distribute understanding of what is being built and why across teams.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://wrla.ch/feeds/Mozilla.rss.xml#fn-writing-the-docs-2026-edition-2&quot; id=&quot;fnref-writing-the-docs-2026-edition-2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt; In software engineering, it’s one of the best ways I’ve found to align a diverse group of human beings around a single objective.&lt;/p&gt;
&lt;p&gt;This wisdom was pretty old even then: the influential article on &lt;a href=&quot;https://www.industrialempathy.com/posts/design-docs-at-google/&quot;&gt;Design Docs at Google&lt;/a&gt; dates all the way back to 2015, best I can tell. There are other precursors -- for example, &lt;a href=&quot;https://www.joelonsoftware.com/2000/10/02/painless-functional-specifications-part-1-why-bother/&quot;&gt;Painless Functional Specifications&lt;/a&gt; by Joel Spolsky way back from the year 2000. I'm sure you can find articles about this all the back to the 70s, or even earlier if you look hard enough. However, I've noticed that many organizations struggle to have a good proposal culture. If the ideas are so obvious, why?&lt;/p&gt;
&lt;p&gt;Some issues go well beyond the scope of this article: I do think that having an effective proposal requires a strong commitment to &lt;a href=&quot;https://archive.wrla.ch/blog/2021/10/learning-about-psychological-safety-at-the-recurse-center/&quot;&gt;psychological safety&lt;/a&gt;. If people don't feel like their design or feedback is going to be taken in good faith, the proposal process won't work very well. People will be hesitant to put things out there and to engage, and the opportunity for learning will be reduced. In a healthy workplace, people are constantly being guided towards presenting their best ideas, with the knowledge that their colleagues are there to support them.&lt;/p&gt;
&lt;p&gt;Looking at how large language models have affected things, I have two answers: &quot;almost not at all&quot; and “totally&quot;.&lt;/p&gt;
&lt;p&gt;For the traditional &quot;big google doc&quot; type proposals I talk about above, I lean towards thinking that these should continue to be used (more or less) the way they were before: as a means for human beings to align on the right solution to a problem. A large language model can help with the initial brainstorming producing the first draft, but to be maximally effective both the initial communication and response should be the product of human interaction. That ensures that the proposal is an expression of a fully fleshed out train of thought and represents real effort. Likewise, the responses to it represent a real attempt to engage with and learn from the content.&lt;/p&gt;
&lt;p&gt;On the other hand, I think for our day-to-day where the implementation is largely produced by a large language model, I have found the above formula useful in an unexpected way: as a way to converse and convey requirements to a machine.&lt;/p&gt;
&lt;p&gt;These days, I spend more of my time prompting an LLM than writing code myself. But since they have the memory of a goldfish, I’ve found getting them to produce the right thing a bit of a crapshoot. Yes, there is &lt;a href=&quot;http://AGENTS.md&quot;&gt;AGENTS.md&lt;/a&gt; but that can only tell it so much: there’s always more “implicit” context that is needed to solve a problem of any complexity. And even with extremely long context, important facts can be missed or given too little weight.&lt;/p&gt;
&lt;p&gt;Since I found that I was encoding these details in a prompt, I thought: &lt;em&gt;hey, why not just make the prompt a design doc&lt;/em&gt;? Have a human express the intent, goals, non-goals and a sketch of a solution in a markdown document and then &lt;em&gt;collaborate&lt;/em&gt; with an LLM on the detailed design. Then, once you’re happy with the result, proceed with implementation. The result can then be checked in along with the code as a sort of guide to understanding what was done. In a pull request type work flow, it can be critiqued or commented on like any other code artifact.&lt;/p&gt;
&lt;p&gt;If you’re familiar with plan mode, a lot of this might sound familiar. The key difference is a fairly deliberate structure (explicit dating and proposal template) and a higher level of human involvement in the earlier stages of design. To incorporate some notion of chronology (since IDRs are meant to be “moments in time”), I used a filename convention inspired by database migration tools like &lt;a href=&quot;https://alembic.sqlalchemy.org/en/latest/&quot;&gt;alembic&lt;/a&gt; and &lt;a href=&quot;https://github.com/pressly/goose&quot;&gt;goose&lt;/a&gt; (for example: &lt;code&gt;202601180308-upload-packages-to-pypi.md&lt;/code&gt;) and a design template that should be familiar if you’ve read &lt;a href=&quot;https://www.industrialempathy.com/posts/design-docs-at-google/&quot;&gt;Design Docs at Google&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&quot;brush: md&quot;&gt;&lt;div class=&quot;colorful&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;gh&quot;&gt;# 2026-01-18: Upload packages to PyPI&lt;/span&gt;

Owner: Will Lachance &amp;lt;wlach@protonmail.com&amp;gt;

&lt;span class=&quot;gu&quot;&gt;## Overview&lt;/span&gt;

&lt;span class=&quot;gu&quot;&gt;### Problem Statement&lt;/span&gt;

Save maintainer time and avoid security gotchas by using github actions to upload to pypi

&lt;span class=&quot;gu&quot;&gt;### Context (as needed)&lt;/span&gt;

This repo ships a Rust CLI as a Python package via \`maturin\` (\`bindings \= &quot;bin&quot;\`). CI already builds wheels on Linux/macOS/Windows and runs a smoke test from the built wheel.

&lt;span class=&quot;gu&quot;&gt;### Goals&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;Make it easier to publish new releases  
&lt;span class=&quot;k&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;Improve security

&lt;span class=&quot;gu&quot;&gt;### Non-Goals&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;Automate version bumping (will still entail a seperate commit to bump version)

&lt;span class=&quot;gu&quot;&gt;### Proposed Solution &lt;/span&gt;

…
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;I've found this a nice additional specialization of proposals, and have found it really helpful in my own work. If you're curious about this, check out the &lt;a href=&quot;https://github.com/wlach/idr-tools&quot;&gt;idr-tools&lt;/a&gt; repository, where I've been exploring this idea further. You can see a few samples of the idea both there and in repo-parser (in the &lt;a href=&quot;https://github.com/wlach/repo-parser/tree/main/idrs&quot;&gt;idrs&lt;/a&gt; subdirectory).&lt;/p&gt;
&lt;h3&gt;Always be improving&lt;/h3&gt;
&lt;p&gt;One through-line which is in the above work which I didn't blog about explicitly: always be improving. Typos, fixing bitrotted instructions, little improvements in clarity: over time this type of enhancement ensures that the documentation is maximally useful both to humans and machines.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;GitHub Commits&quot; src=&quot;https://wrla.ch/log/2026/08/writing-the-docs-2026-edition/github-commits.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/mozilla/data-docs/commits?author=wlach&quot;&gt;https://github.com/mozilla/data-docs/commits?author=wlach&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can use an LLM to do this automatically, but obviously you want a human being to review the output. Either way, the end result is the same: better end-user documentation and an (infectious) demonstration of actual care. It’s a way of supporting others, including your future self. After some time, repeated small actions become a habit, others follow along and it fades into the background as “the way we do things around here”.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Although I wouldn't write the above articles in the same way (or possibly even write them at all) today, I do think the conclusions hold up-- in some cases even more strongly-- in the new, strange world of large language models. So long as there are complex systems, I don't think describing them in forms &lt;em&gt;that are meant to explain&lt;/em&gt; will go out of style. If anything, it becomes more powerful and needed at all stages of the design and build process.&lt;/p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li class=&quot;footnote-item&quot; id=&quot;fn-writing-the-docs-2026-edition-1&quot;&gt;&lt;p&gt;Sometimes people talk about the divio documentation system, but as I understand it, it’s just a precursor to diataxis (created by the same author). &lt;a class=&quot;footnote-backref&quot; href=&quot;https://wrla.ch/feeds/Mozilla.rss.xml#fnref-writing-the-docs-2026-edition-1&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li class=&quot;footnote-item&quot; id=&quot;fn-writing-the-docs-2026-edition-2&quot;&gt;&lt;p&gt;I believe the same is true of code review, but that’s another story. &lt;a class=&quot;footnote-backref&quot; href=&quot;https://wrla.ch/feeds/Mozilla.rss.xml#fnref-writing-the-docs-2026-edition-2&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded>
	<dc:date>2026-08-16T22:15:29+00:00</dc:date>
	<dc:creator>Will Lachance</dc:creator>
</item>
<item rdf:about="https://jonalmeida.com/til/regenerate-build-config/">
	<title>Jonathan Almeida: Regenerate the BuildConfig file without assembling the whole module</title>
	<link>https://jonalmeida.com/til/regenerate-build-config/</link>
	<content:encoded>&lt;p&gt;We have tokens that are added to official builds when a CI server is building the production-ready application. These tokens are added to the &lt;code&gt;BuildConfig.java&lt;/code&gt; by using the &lt;a href=&quot;https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/BuildConfigField&quot; rel=&quot;external&quot;&gt;&lt;code&gt;buildConfigField&lt;/code&gt;&lt;/a&gt; function in a &lt;a href=&quot;https://searchfox.org/firefox-main/rev/25d7109bf565c299435dec3dd2b9e79a1ce7c15d/mobile/android/android-components/components/concept/accelerometer/build.gradle#12&quot; rel=&quot;external&quot;&gt;&lt;code&gt;build.gradle&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;While testing, you want to quickly regenerate &lt;em&gt;just&lt;/em&gt; this file to see changes occur with a new value. Instead of using the more expensive &lt;code&gt;assembleDebug&lt;/code&gt; task for your debug variant, you can use &lt;code&gt;generateDebugBuildConfig&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In the Firefox monorepo world for the Fenix module, the fully-qualified task name would look like this:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot;&gt;&lt;code&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;./mach gradle :fenix:generateDebugBuildConfig&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content:encoded>
	<dc:date>2026-08-14T15:49:23+00:00</dc:date>
	<dc:creator>Jonathan Almeida</dc:creator>
</item>
<item rdf:about="https://blog.mozilla.org/l10n/?p=1911">
	<title>Mozilla Localization (L10N): L10n Report: August Edition 2026</title>
	<link>https://blog.mozilla.org/l10n/2026/08/13/l10n-report-august-edition-2026/</link>
	<content:encoded>&lt;p&gt;&lt;i&gt;Please note some of the information provided in this report may be subject to change as we are sometimes sharing information about projects that are still in early stages and are not final yet. &lt;/i&gt;&lt;/p&gt;
&lt;h3&gt;Welcome!&lt;/h3&gt;
&lt;p&gt;Are you a locale leader and want us to include new members in our upcoming reports? &lt;a href=&quot;mailto:l10n-drivers@mozilla.org&quot;&gt;Contact us!&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Changes to the localization team&lt;/h3&gt;
&lt;p&gt;A lot has changed in the team this year. Delphine and Peiying left Mozilla a few months ago, and we’re now happy to welcome three new members:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Camila (parker) will focus on our mobile projects (Android and iOS), while also helping with Spanish localization.&lt;/li&gt;
&lt;li&gt;Eda (edie) will focus on our web projects (mozilla.org, firefox.com, AMO, etc.), while also helping with Turkish localization.&lt;/li&gt;
&lt;li&gt;Eric (ewerybody) will work alongside Eemeli and Matjaž to support and improve our localization infrastructure, including the moz-l10n library that powers several features in Pontoon.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For both Camila and Eda, contributing directly in Pontoon will also be an important part of getting to know our localization community. By working as localizers themselves, they’ll experience firsthand the challenges contributors encounter and gain a better understanding of how our communities organize and work together.&lt;/p&gt;
&lt;p&gt;In the coming months, we’ll publish a series of blog posts to introduce our new team members — and reintroduce some familiar faces, since it’s either been a while or we never got around to introducing them when they joined.&lt;/p&gt;
&lt;h3&gt;What’s new or coming up in Firefox desktop&lt;/h3&gt;
&lt;h4&gt;Firefox 155 Beta&lt;/h4&gt;
&lt;p&gt;Today marks the beginning of the &lt;a href=&quot;https://whattrainisitnow.com/release/?version=nightly&quot;&gt;Beta cycle for Firefox 155&lt;/a&gt; and the start of the shift to Firefox’s 2-week release cycle. You can find more information on this change and how it affects you in our update here: &lt;a href=&quot;https://blog.mozilla.org/l10n/2026/07/23/firefox-release-changes-and-localization/&quot;&gt;Firefox Release Changes and Localization&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Themes&lt;/h4&gt;
&lt;p&gt;A new part of the upcoming Firefox redesign is a number of built-in themes a user can select for their profile. The &lt;a href=&quot;https://pontoon.mozilla.org/projects/firefox/toolkit/toolkit/global/theme-picker.ftl&quot;&gt;theme-picker.ftl&lt;/a&gt; strings are landing in Firefox 155 and include a number of theme names which are short, evocative names in English. We have generated a &lt;a href=&quot;https://docs.google.com/document/d/e/2PACX-1vQDrtqsH5jl6eY_DU2x8w_80lnw4t1s4vedQWdgJlHCRhofNCbXe-zGOvR8RYOY2FgDePpYKZIZzfta/pub&quot;&gt;reference document&lt;/a&gt; to help with creating localized names in your languages, it includes both testing instructions and screenshots.&lt;/p&gt;
&lt;h3&gt;What’s new or coming up in SUMO&lt;/h3&gt;
&lt;p&gt;We would love more helping hands to bring the following locales across the finish line:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/es/sumo/&quot;&gt;Spanish&lt;/a&gt; – 48% remaining&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/ja/sumo/&quot;&gt;Japanese&lt;/a&gt; – 19% remaining&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/pt-BR/sumo/&quot;&gt;Portuguese (Brazil)&lt;/a&gt; – 11% remaining&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/pt-PT/sumo/&quot;&gt;Portuguese (Portugal)&lt;/a&gt; – 17% remaining&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you’re a contributor in one of these locales, now is a great time to jump in. Every translated string brings us one step closer to shipping a better experience for users around the world!&lt;/p&gt;
&lt;h3&gt;What’s new or coming up in Pontoon&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;Editor theme.&lt;/b&gt; The translation editor can now follow your theme choice. You can set the editor theme independently of the main interface — Light, Dark, or Main to match the rest of Pontoon. The change comes from Ayush (&lt;a href=&quot;https://github.com/mozilla/pontoon/commits?author=ayshushus&quot;&gt;ayshushus&lt;/a&gt;), who is interning with the L10n team and &lt;a href=&quot;https://blog.mozilla.org/l10n/2026/07/06/giving-pontoons-editor-its-own-theme/&quot;&gt;wrote about the work on this blog back in July&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Copy from another locale.&lt;/b&gt; A new batch action lets you copy translations from another locale into the strings you’ve selected. It’s especially handy for closely related languages, or for locales that share terminology and want to bootstrap from an existing translation as a starting point. The feature was contributed by Serah (&lt;a href=&quot;https://github.com/mozilla/pontoon/commits?author=MundiaNderi&quot;&gt;MundiaNderi&lt;/a&gt;), a volunteer contributor who wrote about her &lt;a href=&quot;https://blog.mozilla.org/l10n/2026/04/03/enhancing-comment-management-in-pontoon/&quot;&gt;work on Pontoon earlier this year&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;wp-caption alignnone&quot; id=&quot;attachment_1914&quot; style=&quot;width: 1864px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2026/08/batch.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;size-full wp-image-1914&quot; height=&quot;1357&quot; src=&quot;https://blog.mozilla.org/l10n/files/2026/08/batch.png&quot; width=&quot;1854&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1914&quot;&gt;Copy from another locale&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Community health.&lt;/b&gt; Teams can now follow their Community Health Score over time in a new chart on the team Insights tab, alongside the existing activity charts. The L10n team also gets a cross‑locale overview to spot communities that may need support. The dashboard was built by Jamie (&lt;a href=&quot;https://github.com/mozilla/pontoon/commits?author=functionzz&quot;&gt;functionzz&lt;/a&gt;), who is interning with the L10n team. See his previous &lt;a href=&quot;https://blog.mozilla.org/l10n/2026/02/12/pontoon-translation-search-unifying-localization-across-mozilla/&quot;&gt;blog post on translation search unification&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Composed Machinery suggestions.&lt;/b&gt; Fluent messages with attributes or selectors used to require copying each field separately, one match at a time. Machinery now offers a single suggestion that covers the entire message: every field is filled from a perfect translation memory match, falling back to machine translation, and one click copies all of them into the editor at once.&lt;/p&gt;
&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1915&quot; style=&quot;width: 610px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2026/08/Posnetek-zaslona-2026-08-13-ob-20.44.24.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1915 size-large&quot; height=&quot;366&quot; src=&quot;https://blog.mozilla.org/l10n/files/2026/08/Posnetek-zaslona-2026-08-13-ob-20.44.24-600x366.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1915&quot;&gt;Composed Machinery suggestions&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Automatic LLM suggestions.&lt;/b&gt; Until now, getting an LLM suggestion meant opening the AI menu on a machine translation result and picking an option. The suggestion is now generated automatically and shown as its own entry in the Machinery panel. We’re starting with a limited rollout — signed‑in users, strings without an approved translation, and a small set of locales — so we can evaluate quality and cost before expanding. The AI menu keeps working as before, in every locale.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Other improvements.&lt;/b&gt; A number of more focused changes also landed, thanks to our contributors:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Notifications about new strings now link only to the strings that were actually added, instead of the full resource — by &lt;a href=&quot;https://github.com/mozilla/pontoon/commits?author=flodolo&quot;&gt;flodolo&lt;/a&gt; (&lt;a href=&quot;https://github.com/mozilla/pontoon/pull/4185&quot;&gt;#4185&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;A year selector was added to the chart on profile pages — by &lt;a href=&quot;https://github.com/mozilla/pontoon/commits?author=flodolo&quot;&gt;flodolo&lt;/a&gt; (&lt;a href=&quot;https://github.com/mozilla/pontoon/pull/4205&quot;&gt;#4205&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;The list of translations on a Search page is now more compact and easier to scan — by &lt;a href=&quot;https://github.com/mozilla/pontoon/commits?author=functionzz&quot;&gt;functionzz&lt;/a&gt; (&lt;a href=&quot;https://github.com/mozilla/pontoon/pull/4157&quot;&gt;#4157&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Search boxes now look and behave consistently across the entire app — by &lt;a href=&quot;https://github.com/mozilla/pontoon/commits?author=MundiaNderi&quot;&gt;MundiaNderi&lt;/a&gt; (&lt;a href=&quot;https://github.com/mozilla/pontoon/pull/4301&quot;&gt;#4301&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;A clear “String not found” page is now shown when the active filters don’t match the string you’re opening — by &lt;a href=&quot;https://github.com/mozilla/pontoon/commits?author=ayshushus&quot;&gt;ayshushus&lt;/a&gt; (&lt;a href=&quot;https://github.com/mozilla/pontoon/pull/4281&quot;&gt;#4281&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Profile images from Mozilla accounts are now supported — by &lt;a href=&quot;https://github.com/mozilla/pontoon/commits?author=wassafshahzad&quot;&gt;wassafshahzad&lt;/a&gt; (&lt;a href=&quot;https://github.com/mozilla/pontoon/pull/4215&quot;&gt;#4215&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;String counts in the translate interface are now formatted using your locale’s own conventions instead of a hardcoded en‑GB — by ewerybody (&lt;a href=&quot;https://github.com/mozilla/pontoon/pull/4127&quot;&gt;#4127&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;New contributors.&lt;/b&gt; We’re happy to welcome another group of contributors who made their first patches to Pontoon in the past few months: &lt;a href=&quot;https://github.com/mozilla/pontoon/commits?author=Kasturijadhav14&quot;&gt;Kasturijadhav14&lt;/a&gt; (6 patches), &lt;a href=&quot;https://github.com/mozilla/pontoon/commits?author=eshu3104&quot;&gt;eshu3104&lt;/a&gt; (2), &lt;a href=&quot;https://github.com/mozilla/pontoon/commits?author=jbuck&quot;&gt;jbuck&lt;/a&gt;, &lt;a href=&quot;https://github.com/mozilla/pontoon/commits?author=troypsierrallc-dot&quot;&gt;troypsierrallc-dot&lt;/a&gt;, &lt;a href=&quot;https://github.com/mozilla/pontoon/commits?author=msranjana&quot;&gt;msranjana&lt;/a&gt;, and &lt;a href=&quot;https://github.com/mozilla/pontoon/commits?author=denyshon&quot;&gt;denyshon&lt;/a&gt;. Their work spans notifications, contributor profiles, documentation, UI polish, the API, and infrastructure — thank you all!&lt;/p&gt;
&lt;h3&gt;Friends of the Lion&lt;/h3&gt;
&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1131&quot; style=&quot;width: 262px;&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1131 size-medium&quot; height=&quot;232&quot; src=&quot;https://blog.mozilla.org/l10n/files/2017/07/2-Lions-01-252x232.png&quot; width=&quot;252&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1131&quot;&gt;Image by Elio Qoshi&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Know someone in your l10n community who’s been doing a great job and should appear here? &lt;a href=&quot;mailto:l10n-drivers@mozilla.org&quot;&gt;Contact us&lt;/a&gt; and we’ll make sure they get a shout-out!&lt;/p&gt;
&lt;h3&gt;Useful Links&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://chat.mozilla.org/#/room/#l10n-community:mozilla.org&quot;&gt;#l10n-community channel on Element (chat.mozilla.org)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://discourse.mozilla.org/c/l10n/547&quot;&gt;Localization category on Discourse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fosstodon.org/@mozilla_l10n&quot;&gt;Mastodon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/&quot;&gt;L10n blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Questions? Want to get involved?&lt;/h3&gt;
&lt;p&gt;If you want to get involved, or have any question about l10n, reach out to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/CMLZ_n1lNNSfQScLGE2yBmlS55w/&quot;&gt;Bryan&lt;/a&gt; – Project Manager (Firefox, Mozilla Accounts)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/camiparker/&quot;&gt;Camila&lt;/a&gt; – Project Manager (Firefox for Android, Firefox for iOS)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/edie/&quot;&gt;Eda&lt;/a&gt; – Project Manager (Web projects)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/mZuzEFP7EcmgBBTbvtgJP2LFFTY/&quot;&gt;Francesco (flod)&lt;/a&gt; – Project Manager, L10n Team Manager&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/m6r3HOfoijMdyeJNKKFHchjjRbw/&quot;&gt;Francis&lt;/a&gt; – Project Manager (Common Voice, Mozilla Foundation)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/lY_FTvtnYcVoDP7JYZjMsm6tRno/&quot;&gt;Théo&lt;/a&gt; – Project Manager (Mozilla Foundation)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/9rSAS6h8LlBD9DQQtHgdCwvVen0/&quot;&gt;Kiki&lt;/a&gt; – Project Manager (SUMO)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/pmz0uSCe_Mk9Td1cksHLI1y471k/&quot;&gt;Eemeli&lt;/a&gt; – Developer (Pontoon, Infrastructure)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/ewerybody/&quot;&gt;Eric&lt;/a&gt; – Developer (Pontoon, Infrastructure)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/dvgiVCmoeidF2xcqSnBHtpzLTFU/&quot;&gt;Matjaž (mathjazz)&lt;/a&gt; – Developer (Pontoon)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Did you enjoy reading this report? &lt;a href=&quot;mailto:l10n-drivers@mozilla.org&quot;&gt;Let us know&lt;/a&gt; how we can improve it.&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-13T20:38:20+00:00</dc:date>
	<dc:creator>Bryan Olsson</dc:creator>
</item>
<item rdf:about="https://blog.thunderbird.net/?p=4481">
	<title>Thunderbird Blog: Desktop Calendar: A Design Journey</title>
	<link>https://blog.thunderbird.net/2026/08/desktop-calendar-a-design-journey/</link>
	<content:encoded>&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;attachment-640x360 size-640x360 wp-post-image&quot; height=&quot;360&quot; src=&quot;https://blog.thunderbird.net/files/2026/08/blog-banner-generic-768x432.jpg&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Hello, Thunderbird community and followers of the blog! This is Jesse from the design team. Today’s post is about our recent journey in redesigning the calendar portion of Thunderbird, and what you can expect us to deliver in the near future.&lt;/p&gt;



&lt;p&gt;The calendar is a key part of any productivity toolset, from your PC Desktop to your office wall. There has been a calendar in Thunderbird since early in the project, and like all parts of the application, it’s evolved on its own terms, for better or for worse. It has many layers of functionality, but the experience has lost parity with current UI standards — at this point, it feels stylistically dated and functionally convoluted.&lt;/p&gt;



&lt;p&gt;So, with the help of the design team and the developers and the community, we have taken on the task of modernizing and streamlining the calendar. This is my account of the designers’ part of that journey.&lt;/p&gt;



&lt;h3&gt;The Big Picture&lt;/h3&gt;



&lt;p&gt;Here are some of our guiding principles for this redesign:&lt;/p&gt;



&lt;p&gt;First, we are here to serve the entire user base, not just the technical experts, or the productivity enthusiasts, or the brand new adoptees. For this reason, the dialog with the community is critical: we need to understand as many of the use cases and interaction patterns as possible, and we want to support them broadly, and efficiently, and effectively. Our ideal solution is open and flexible, respecting the broad range of users who rely on Thunderbird.&lt;/p&gt;



&lt;p&gt;Second, a key point: Thunderbird is aiming higher than being simply “the other email client.” We are all committed to creating an experience that meets and exceeds expectations, and competes directly with the oliphaunts in the room: the Google Calendars, the Apple and Microsoft application suites, and the many targeted productivity apps that jockey for this space.&lt;/p&gt;



&lt;p&gt;And as always, we will do this transparently, with an open source philosophy, in collaboration with our users and contributors.&lt;/p&gt;



&lt;h3&gt;The Journey&lt;/h3&gt;



&lt;p&gt;This design journey has been ramping up for several years now, in parallel with other company initiatives (Mobile! Web! Accessibility!). As our design practice has evolved, we have worked on the project from several directions, redesigning dialogs and rethinking patterns and collecting insights. For a while, this meant a lot of partial designs, but without a guiding vision.&lt;/p&gt;



&lt;p&gt;Among these early designs, one of our success stories was a visual and functional update of the Event Details dialog, to replace the existing, rather archaic event details window (”archaic” both visually and in terms of code). These were one of the first redesigns to reach a point where it could be implemented — prioritized partly because it’s a self-contained element, able to be tested without reworking the whole calendar code base.&lt;/p&gt;



&lt;p&gt;If you use Thunderbird Daily, you may recognize this:&lt;/p&gt;


&lt;div class=&quot;wp-block-image&quot;&gt;
&lt;figure class=&quot;aligncenter size-full&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2026/07/Screenshot-2026-07-27-at-3.34.54 PM.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-4482&quot; height=&quot;535&quot; src=&quot;https://blog.thunderbird.net/files/2026/07/Screenshot-2026-07-27-at-3.34.54 PM.png&quot; width=&quot;496&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;


&lt;p&gt;We’ve followed this pattern for several other bits and bobs, including the dialog for editing an event, and the notification for unanswered invitations. In all cases, these changes will create better contrast and visual hierarchy, and improve the visibility and organization of controls:&lt;/p&gt;



&lt;div class=&quot;wp-block-columns is-layout-flex wp-container-3 wp-block-columns-is-layout-flex&quot;&gt;
&lt;div class=&quot;wp-block-column is-layout-flow wp-block-column-is-layout-flow&quot;&gt;
&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2026/07/Screenshot-2026-07-27-at-3.42.39 PM.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-4488&quot; height=&quot;639&quot; src=&quot;https://blog.thunderbird.net/files/2026/07/Screenshot-2026-07-27-at-3.42.39 PM.png&quot; width=&quot;372&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;



&lt;div class=&quot;wp-block-column is-layout-flow wp-block-column-is-layout-flow&quot;&gt;
&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2026/07/blog-post-invitations.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-4494&quot; height=&quot;570&quot; src=&quot;https://blog.thunderbird.net/files/2026/07/blog-post-invitations.png&quot; width=&quot;368&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;This alone could provide enough work for several release cycles. But designing isolated elements creates inconsistency and debt, both for design and development. As the design process on Calendar increased in velocity, it became clear that we needed to articulate a unifying vision.&lt;/p&gt;



&lt;h3&gt;Bringing it together&lt;/h3&gt;



&lt;p&gt;With these designs setting a direction, we had to step back and decide how all the pieces would fit together. In order to do that, we still had to answer three more questions:&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;How does the actual calendar grid look, set to view a day, a week, a month, or a year?&lt;/li&gt;



&lt;li&gt;How does the user change their view and navigate forward and backward?&lt;/li&gt;



&lt;li&gt;How does the user connect to their calendars, and manage them all in one place?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;These considerations led us to a lean design, with screen space broken up into three main sections. First is the grid, which provides the main element at the center of the layout — the user’s primary workspace. Second is the navigation bar, directly above the grid. Third is a sidebar for managing calendars — the nerve center for your calendars and data sources. This design, focused on the most important functional areas, provided a great foundation for all the necessary functionality, with low friction and strong fundamentals.&lt;/p&gt;



&lt;p&gt;The blueprint for our design (called a “wireframe” in the UX design world) ended up looking like this:&lt;/p&gt;


&lt;div class=&quot;wp-block-image&quot;&gt;
&lt;figure class=&quot;aligncenter size-large&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2026/07/Screenshot-2026-07-27-at-4.01.19 PM.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-4500&quot; height=&quot;442&quot; src=&quot;https://blog.thunderbird.net/files/2026/07/Screenshot-2026-07-27-at-4.01.19 PM-600x442.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;


&lt;p&gt;The grid acts as the user’s main workspace, and the header and navigation provide their basic controls.&lt;/p&gt;



&lt;p&gt;Here is a final design mock-up, which will provide the basis for development (this one is showing a week view in the main grid):&lt;/p&gt;


&lt;div class=&quot;wp-block-image&quot;&gt;
&lt;figure class=&quot;aligncenter size-large is-resized&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2026/07/Screenshot-2026-07-27-at-3.59.44 PM.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-4506&quot; height=&quot;476&quot; src=&quot;https://blog.thunderbird.net/files/2026/07/Screenshot-2026-07-27-at-3.59.44 PM-600x476.png&quot; style=&quot;width: 600px; height: auto;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;


&lt;p&gt;&lt;/p&gt;&lt;p&gt;Given the wide range of our users’ scheduling needs, we decided the calendar sidebar should be collapsible, and useful at both large and small sizes, so that users could decide how much of a footprint they needed to manage their calendar list.Here is the screen with the sidebar in a collapsed state, showing a Month view in the main grid:&lt;/p&gt; &lt;p&gt;&lt;/p&gt;


&lt;div class=&quot;wp-block-image&quot;&gt;
&lt;figure class=&quot;aligncenter size-large&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2026/07/post-screenshot-06-month-view.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-4512&quot; height=&quot;476&quot; src=&quot;https://blog.thunderbird.net/files/2026/07/post-screenshot-06-month-view-600x476.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;


&lt;p&gt;And here is this screen after the user has pressed “New Event,” showing the Create Event window over the interface:&lt;/p&gt;


&lt;div class=&quot;wp-block-image&quot;&gt;
&lt;figure class=&quot;aligncenter size-large&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2026/07/post-screenshot-07-new-event.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-4518&quot; height=&quot;477&quot; src=&quot;https://blog.thunderbird.net/files/2026/07/post-screenshot-07-new-event-600x477.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;


&lt;h3&gt;Where we go from here&lt;/h3&gt;



&lt;p&gt;As these elements came together, we also turned outward and looked to our community for more feedback. Through the various stages of design, we published two TopicBox posts (&lt;a href=&quot;https://thunderbird.topicbox.com/groups/ux/Tc89bc2f359824d93/uxd-04-14-creating-and-editing-calendar-events&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://thunderbird.topicbox.com/groups/ux/T138723c621dd257d&quot;&gt;here&lt;/a&gt;), and we ran a short but informative survey, looking for initial reactions to the direction we were taking.&lt;/p&gt;



&lt;p&gt;This feedback has been very encouraging, and also enlightening: we have seen a positive response to our designs, and we’ve also gathered lots of insights on what you cite as most important (task integration, platform interoperability, and a re-assessment of agenda, mini-month, and multi-week views, to name a few).&lt;/p&gt;



&lt;p&gt;These discussions gave us some additional confidence, but more so, they reminded us that we are still at the beginning of a longer arc. After we develop version 1 of our new calendar design, we will follow signals from our users as we plot a path forward. The new calendar design will clean up and simplify many aspects of the experience, but it will only be a promising first step (sort of the Rivendell stage of the epic). We will have many more cycles of design and iteration to bring our users the toolset they deserve.&lt;/p&gt;



&lt;p&gt;For now, we venture forth, from design to implementation, and then from implementation to feedback and engagement. The new calendar will be released gradually, via proper channels, so users can try it and provide feedback — and feedback will be appreciated! We will be looking for usability testers and survey participants as we keep refining the roadmap.&lt;/p&gt;



&lt;p&gt;The future of calendar is wide open, and much brighter and less gray than the bygone era. We appreciate all the support we’ve gotten from the community so far, and we hope you’ll continue with us as we keep making Thunderbird awesome.&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://blog.thunderbird.net/2026/08/desktop-calendar-a-design-journey/&quot;&gt;Desktop Calendar: A Design Journey&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.thunderbird.net&quot;&gt;The Thunderbird Blog&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-10T18:59:27+00:00</dc:date>
	<dc:creator>Jesse M</dc:creator>
</item>
<item rdf:about="https://blog.mozilla.org/security/?p=2926">
	<title>Mozilla Security Blog: Updated GPG key for signing Firefox and Thunderbird Releases</title>
	<link>https://blog.mozilla.org/security/2026/08/10/updated-gpg-key-for-signing-firefox-and-thunderbird-releases/</link>
	<content:encoded>&lt;p&gt;Today, we moved to a new GPG signing subkey used to sign certain Firefox and Thunderbird artifacts (namely Linux tarballs, RPM packages, checksums files) after an unencrypted copy of the previous subkey was inadvertently committed to a private GitHub repository.&lt;/p&gt;
&lt;p&gt;Our review of available audit records found no evidence that the key was accessed by an unauthorized party while it was present in the repository. Access to the repository was limited to a small group within Mozilla, all of whom already had authorized access to the key through other means.&lt;/p&gt;
&lt;p&gt;We have revoked the previous signing key and added safeguards to prevent similar issues in the future.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For most users, no action is required.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There are two cases where you may need to take action:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you manually verify our GPG signatures, you will need to import the new signing key and the revocation for the old key.&lt;/li&gt;
&lt;li&gt;If you use Firefox RPM packages, some manual intervention may be required. See the instructions below for details.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thunderbird does not provide official RPM packages, so there is no RPM-specific action required.&lt;/p&gt;
&lt;h3&gt;RPM Users&lt;/h3&gt;
&lt;p&gt;Different RPM package management tools deal with GPG key rotations and revocations differently. See the sections below for what action (if any) you need to take to ensure you continue to receive the latest Firefox updates.&lt;/p&gt;
&lt;h4&gt;Fedora 43 and later&lt;/h4&gt;
&lt;p&gt;No special action needed. During the next update, dnf will download the updated key and you just need to confirm the import. Make sure the shown fingerprint matches &lt;code&gt;827E 6586 0867 9618 CD34 9F93 678E 455D 7676 7AA3&lt;/code&gt; before accepting.&lt;/p&gt;
&lt;h4&gt;Fedora 42 and older, RHEL/Rocky/Almalinux&lt;/h4&gt;
&lt;p&gt;Dnf on these releases cannot replace the key on its own. Updates will fail with “Import of the key didn’t help, wrong key?” or “The GPG keys listed for the mozilla repository are already installed but they are not correct for this package”. The old keys must be removed manually:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo rpm -e --allmatches gpg-pubkey-14f26682d0916cdd81e37b6d61b7b526d98f0353&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo rpm --import https://packages.mozilla.org/rpm/firefox/signing-key.gpg&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo dnf clean all&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Important: Remove the previous signing key before importing the new one. If you run &lt;code&gt;rpm --import&lt;/code&gt; while the previous key is still installed, the command may report success even though the key is not updated.&lt;/p&gt;
&lt;h4&gt;openSUSE/SUSE based distributions&lt;/h4&gt;
&lt;p&gt;Same as the previous section, zypper won’t replace the key on its own and it must be removed manually. Updates will fail with “Signature verification failed” or “NOKEY”. Use the following commands:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo rpm -e --allmatches gpg-pubkey-14f26682d0916cdd81e37b6d61b7b526d98f0353&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo rpm --import https://packages.mozilla.org/rpm/firefox/signing-key.gpg&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo zypper refresh&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;New GPG Key Details&lt;/h3&gt;
&lt;p&gt;The GPG fingerprint is &lt;code&gt;14F2 6682 D091 6CDD 81E3 7B6D 61B7 B526 D98F 0353&lt;/code&gt;. The new signing subkey’s fingerprint is &lt;code&gt;827E 6586 0867 9618 CD34 9F93 678E 455D 7676 7AA3&lt;/code&gt;, and it expires 2028-08-05.&lt;/p&gt;
&lt;p&gt;The new public key and revocation of the previous one can be fetched from:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;KEY files of the latest Firefox Nightly (https://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central/)&lt;/li&gt;
&lt;li&gt;keys.openpgp.org, or&lt;/li&gt;
&lt;li&gt;inline below&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This can be used to validate releases signed with the new key. Due to the nature of GPG signing, releases signed with the previous key will no longer be verifiable after importing the revocation.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;-----BEGIN PGP PUBLIC KEY BLOCK-----&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;mQINBFWpQAQBEAC+9wVlwGLy8ILCybLesuB3KkHHK+Yt1F1PJaI30X448ttGzxCz&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;PQpH6BoA73uzcTReVjfCFGvM4ij6qVV2SNaTxmNBrL1uVeEUsCuGduDUQMQYRGxR&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;tWq5rCH48LnltKPamPiEBzrgFL3i5bYEUHO7M0lATEknG7Iaz697K/ssHREZfuuc&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;B4GNxXMgswZ7GTZO3VBDVEw5GwU3sUvww93TwMC29lIPCux445AxZPKr5sOVEsEn&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;dUB2oDMsSAoS/dZcl8F4otqfR1pXg618cU06omvq5yguWLDRV327BLmezYK0prD3&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;P+7qwEp8MTVmxlbkrClS5j5pR47FrJGdyupNKqLzK+7hok5kBxhsdMsdTZLd4tVR&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;jXf04isVO3iFFf/GKuwscOi1+ZYeB3l3sAqgFUWnjbpbHxfslTmo7BgvmjZvAH5Z&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;asaewF3wA06biCDJdcSkC9GmFPmN5DS5/Dkjwfj8+dZAttuSKfmQQnypUPaJ2sBu&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;blnJ6INpvYgsEZjV6CFG1EiDJDPu2Zxap8ep0iRMbBBZnpfZTn7SKAcurDJptxin&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;CRclTcdOdi1iSZ35LZW0R2FKNnGL33u1IhxU9HRLw3XuljXCOZ84RLn6M+PBc1eZ&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;suv1TA+Mn111yD3uDv/u/edZ/xeJccF6bYcMvUgRRZh0sgZ0ZT4b0Q6YcQARAQAB&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;tC9Nb3ppbGxhIFNvZnR3YXJlIFJlbGVhc2VzIDxyZWxlYXNlQG1vemlsbGEuY29t&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;PokCOAQTAQIAIgUCValABAIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQ&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Ybe1JtmPA1NQqg//Rr6/V7uLqrIwx0UFknyNJasRJZhUkYxdGsLD18zO0Na8Ve3Q&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sYpOC3ojpqaFUzpqm6KNv8eXfd/Ku7j3WGr9kPkbjZNghvy6V5Lva4JkxO6LMxKk&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;JYqiqF2o1Gfda8NfcK08GFy4C0L8zNwlADvmdMo4382tmHNGbTTft7BeVaRrE9xW&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;9eGmGQ2jYOsjxb5MsadAdZUuK8IC95ZHlUDR3gH9KqhfbQWp5Bo924Kiv+f2JUzN&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;rrG98eOm1Qb8F9rePzZ2DOYRJyOe4p8Gpl+kojCXNntkJgcwJ1a1yRE6wy9RzpeB&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;lCeoQuLS92MNne+deQZUskTZFoYXUadf6vbdfqL0nuPCKdl9lhef1QNwE30IRymt&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;6fhJCFffFQjGdeMfSiCHgcI8ichQbrzhBCGGR3bAHan9c2EbQ+puqG3Aa0YjX6Db&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;GJjWOI6A61bqSPepLCMVaXqV2mZEIaZWdZkOHjnRrU6CJdXG/+D4m1YBZwYM60eJ&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;kNu4eMMwMFnRsHiWf7bhqKptwuk8HyIGp2o4j8iqrFRVJEbK/ctdhA3H1AlKug9f&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;NrfwCfqhNCSBju97V03U26j04JMn9nrZ2UEGbpty+8ONTb38WX5/oC61BgwV8Ki4&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;6Lwyb7fImUzz8jE83pjh7s3+NCKvvbH+VfT12f+V/fsphN3EwGwJPTC3fX2IRgQQ&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;EQIABgUCVaz/SwAKCRB2JUA9fw0VsVNkAKDjhUW5GyFNcyj9ot48v+lSh5GBIACf&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Ten/Rpo5tf77Uq7445cVs80EK5CIRgQQEQIABgUCVa064wAKCRDDTldH4j3WdwW5&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;AKCVDRxKjb/XYqGhjBCKYhbQ4xJuOACfVIpzE3wGLC/cm9eUnSVnv+elQnKIXgQQ&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;EQgABgUCVgZXYwAKCRACWrAQaxfqHqzWAP9dzEHoZNwH5JYxotudv3FOotVThaQr&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;jnk+5StnObpxnAD9FmYyAyYGh4o7axeDCgmW1J89+1cZtDnFPKnBpGFMB4uIXgQQ&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;EQoABgUCVa0s/gAKCRDwqefc055FLpQGAP99Z2ISKW+7FYoKJ3vDrxTtfcbZEff7&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;8ufoinmAlZb2bQD/a2fOcprjWDal9Orfq7g6htkX3VISemg+SDQ/ig+b3uyJARwE&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;EAECAAYFAlWs/X4ACgkQs8WpWFCKQ/JrjAf7B+fGzEs8xfc010a6KZXcO1W4/Va0&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Q+zcqF+DpQwK7b3S6oD5tCVKD9oFyDXkrlT6Tnwuu+slZwRDIyH6hI6tPb3G8Gsk&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;vjXMeL0IdgZsw1DSxN0pZ0Z9mxFq/UkC/6TmFA1IJmOWtFCH/1irQWqbDxPmWp+d&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Xs2EhH8QzX1KQOE9v/YlsCdmTstMiHy3R8r7prsonpCa36zGheC/UNDpycKdT8JL&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;zeCFcIWXmA7SCTeJ0XCSuS68FOwfe7nn9oagQZZe/6gh5ecuCoW9HLBWpyIPqUCz&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;1CXSImLc6BbZYMpAetacarVPa6hiltNicxFE/A3T1F8ZjAcugPKBngUR/4kBHAQQ&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;AQIABgUCVa0XXAAKCRBlc4Lb/yURCkCYB/95w/9/0rpi+5xtoO2NR0KlqYVG5+NF&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;1r42XB6t7gVJ9UGF3meV+ekgDSzNrfroqxpzWmV1t3MRJeSMmVS25nC1hAZVQHKd&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;gX9xVxW3SSufX/jPstvo2U/X3k8q8PhLS6Ihk8YJC3ScjMiNMRpkITMeVdXsdQsY&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;WStiT48wlWK4gSNMCG5iovdGDTEKErHTIWJl/Wx5el1kvUwg1rKo9uRS2CS/lnlV&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;6YztDY0cBBOqXP6pXXiWBuVW39LJxsSHq13vpeQ/GHeDxAJ6Y+fPuaV3qBmGZ91o&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;1/HkxTABFPkISylkPo/2PCoo4Hu31MZ0jQWdihJ7gzf+B7/w6whS79eAiQEcBBAB&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;AgAGBQJVrWVaAAoJEOQyfGw+ApnAc7AH/0TKg3VR4IEB3NP2C7dX/72PWO0EOh8J&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;w67XDccRK0lXDILg/CujsYq9EzEofv2LmQFvCuCkoBFEcGas+J2vP3jsY/G5bjZp&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;XALHkAx7MKlOgsgfeVqMtwaHIoR+y9Hg12TjM7Gt970UBwTIqC8SG6Z1bVWxUdc+&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;7Zsn43Dq8z99saOUKD6HMyl9upbjAYwL28NRQtIrNiDZ5lEmDOLh+4hWblxjxWMX&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;AKjg6sucrNzKD2uKGe9XdB6IkYpdfrNGPtgcnXWdfaRNk16eGVzWDVI/9mkY/G+L&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;E40eK6oRyMf736CvlQjcv7JBVGTsj3W28phNLLU0UidYK/QmS3AVmBeJARwEEAEC&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;AAYFAlXBWXAACgkQiRc/lXxV+V6gKQf/d/KfgiYg0Z4dqO3g1p40sgLuxVplhpDk&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;J4yP5K2isdb6I7GJykVw+po6tUCfB7KeLWiZy0I3KJDU1Ikk+Jv3uGSRMT1riSpM&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Ja2pVhh+jaamHIFj2o0mG9HmEAuGKktJH8s6Jax3SiPGODRhFO8suc7B8FpB7f5q&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;TUDK2J18MlnSK3NN1/zl6OdXScrISQ0cNyJ0RMgW5RSXC7wKzR89tfcDK1wInD8r&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;cOMHz6Va5g8ehq2XCPKvBAlgo8El17+4UaRLhS0suVz4THPsGASYzZVKIhQQBf+8&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;xDXd6zJ/UgkC4iBWHtLm5jvm6Xhsu04s28TmgiH4FKLsstAUFzbiQYkBHAQQAQIA&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;BgUCVdIa6gAKCRCtfLmfgki6D8xCB/9Q+rCTDQCbWQkRoSV77+kmIb+KVFTcgxfR&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Z1L0bKL5YqI6HuCJLgU1ioTxq8W4g+SDv4s69/LIajYYZvSRNv0kGRzm2D4vpcnw&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;ymyYCJkzcZkuBeyR50S69+1cStbFb7jZMpyZ6rwnKdYOccDSMdaynJGt4rqiY+ra&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;DPF0H4LExx9a1JFh21Fd0MDc15vsoRZtrOkM8QaKD85hZ/AGOwlw+Kb3DEfjNGcv&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;nuNp54HfJc0Z5kwVYoOKUatBgjLpRRvl43lUGRaaCCMaNpNZXM20ZhrbTjXRlko8&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;QVMUXqE20sDNwv+dDa6G8nBkIGNIHeixrVrVPP7hH5JRMtjZbsWFiQEcBBABCAAG&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;BQJVrQFGAAoJEFbucY3ODhVLNDgH/izNHcsr1BRnV3yQ6T9sTJJ187BwF1hRLR+Y&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;3op+fJr+nQ9301XAqLqNbzEB91hRUi2Gb8LTZxxq0gahWzSqmdAE0ObXGGlrEmfj&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;FSSTFyQ1xRvzooYNZzTjN91XX1dERjyj9SOHBETsZrN01BZB1t3EgoDM7PCNTsX0&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;qC65unWvBDftnLdiJ6s3UC9sorMk8q3Zl6DacFw8QKSmJL1R0OPvXiSOZtGQK9Jg&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;YyHiXQE3MOP5SFSk61e1IawocYn32CXM+EkgtXK5q/thc8OdwsgLAJmGpVB3qd2K&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;9OaEOKCUV/V91a2P8hCx8MMV2sQgHcMB221wDIWbD5PTHNtCegaJARwEEAEIAAYF&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;AlWtIrEACgkQo9ZSFzt2Po+mXgf/dUPf6q+aDFoDjLIsfJH5QS8Nn/7frUUdElg8&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;PdGxtZ6SQep6uR5fgc+PwOElhUxa665WYtRJ459RWAYmbh2kkP/paGBf9nW0A2wS&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;koXyJNydJcanyjwHyqKUbBLsXJAvGFtbYRsbeXkEPM5CaKgRUwc8Ilzo9/53CZF/&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;avZK4FJX00lZq0/Z8dIY8jUEF64IbJgbaUe1gkuxu7zURgjVKK4bb4lLy/s3tRe0&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;00hrKVbFcaNoIZs+Vk/3A/TFdYHFY6I2JpLIeSSJd/Ywh6/YZfGkSHfzn87Dfkyr&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;gXKQMQ5JvQQgKbO6GPBZSygxWU7R2tNNAJKHSh0/PJ8J7yrqj4kBHAQQAQgABgUC&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Va05AwAKCRD20Pdh3MzspCvWB/9DAEaNx5WF3ktmw6jP5cCv60HDwgsmJHusGyAo&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;53Gwjo4Fx6hv5QYQpTbO4af+4KpFGkex+bZniOJWpT+NJkhx55xbzA903MoZ9+dI&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;oCtG4K41kA2mMYSpR097yF3fwtuP70UgMZqiCmz/iKFzsrdhjE0KvBjptnYGEWk5&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;MMh5xlpzGom3LV/A+KAmEdPw+GCaj5H6qG3/PtWXz+RmjG0sRPycHaNJCWuLz4xM&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;xV28oAG53Gqc3cDes4Hpds4fPOa8+we7yKTK/2O3lfOUOvKncsoS3vHC/GNfGD86&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;RX/vz2TW4GMaLmn75xcAYT0MINIFBf/tXjN1BNrmvrGkkxnbiQEcBBABCgAGBQJV&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;rQlbAAoJEDNC4bZno4hjKL8H/An2CRzW8IsEjFKD+J+xa5hJYQbcb5W5wjGSs9PL&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;/pRbH0t8FNS1DevRqoq3xdL5EEUpUgae54gix0An0qKhzC4MRdD9sYFy42mDP7f6&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;8Vw2sCZltfBtOHaha7Qj2U28DE9j7Dx04lkHWjdHudJV5PVaPpelW8EDIOMx+4nG&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;WnXiYEKKMRWpR2BVV1FXnsfbfP2HWpxVaxxWt7WqOmswU0lJCb2bSLteEn8YoA1i&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;CMLMdMaVXyX92v8Quh2N0NWtzXgc94ug8GiucGKoo2SpdFlXVCysqlPfKBestJlL&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;93dqP6dOwqoHqOscTJB6rvNzi2tmtAu7WDy4C+BBXNhbYpGJAhwEEAECAAYFAlWs&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;+ygACgkQljt4MQo3sXysaw/+J6Ztawe/qT5aLW6it+zLq+3oD21UgM1TVP81CjwL&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;hlHj9wuuGDe+xE8dZA7kvpngKjAxxXPQX/B4rz27Y+kHCvelOSrLW5kodTsPWIkL&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;cSYMRo4Pws0RIGQBXI8tDIaJJcj7BYb9O7OjCziTEjP5KxDeZ6o4n0NFnZk5NNhS&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;6B1VnC3Y34DIj4koxm1N5O5br4z8kTc5PN9bMxOZn2u+KxGIeEwZJbHvtrgeAxUP&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;96B2dUo+jgSuro5jSkIyD+wpfo5o6+/kCtDiXEWo//AHJAwOal02QAodUtrMggwz&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;J19FfnU8RgiKFjivrbfZi6ITM6RHg+DSF+KnaW2wkc3mGTB0qJsgSLGwOgfv37Qx&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;O1tTdPxbSfWnZJAspylC74dgh+XOYYDji9tjPtrKZ8sEaHiUVFlO4QTOTlB9yYwO&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;E7uI/3MKe3Q+0M2a85gvX+S0CdznpXo71aMFj0Hd/7ZMuKNausJZhagHAILbve1M&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;IATkkfbCTxg5bdYgvdVGAIgUEAAO8mvLl1EvOJgkME5a/I/mK6MLxByuCMaT0RMr&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;U9S881f+AJuJ3Qxbbo8vN0Iy9KmiCIptcSMKBKLHeMonYaXM8O392/XUKbgSBXkL&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;oTOybMT+LZhO0upOhpRJqmtyDT1Wjxp7FBku/sUjJXCVy7YpjwkkLxZmvWIhleb7&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;S8uJAhwEEAECAAYFAlWs/LgACgkQEstOl+B+Z9HYNA//UKMSIfS0bdY6K+zhxuMS&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;lIyol8Z/ynkDZSZ8SOeXZViLyRCRoXhY2g6JsygWLsZpthI8fnleQhwy1GLCxWMF&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;n/PiRjj++VHoJYK/ANP23bC+tyl+jT9gwoPF0eGdWnnot1jGO6f6jFqam0KAL/XN&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;6ePUrNo0jbrYVrEUer20PYsM3tqGlGgOOFikMoYWwsAVOEh2I5Sgi6iAYfx12RYW&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;eKw37loDwSr2FNZ5zjxdIyUQnKN1YMd0/Rfi2d86OVD7dV2qa94TFUvYmicpdcOM&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;9pogKVGmbhz7lirjuAidRhdZkuU+rxvIAd07Oc3bQRdsUCJAs/kjO71v9ov/NqKu&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;j/BLixxIa0D0eKE41yL13RCfZIG46nI/F5PvLXhDp7sIeohIWsvYv239A9yXfq6B&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;TeXZ1j8YTlY86yN38JStf8pbGWKlGARM7e1o9DHYY3irLCOWCAnKmF14wbbTMOAe&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;w2VzxV8895Bweeo2fyCOGFI6SzvOSaOQPUlfmiKmtJrwreg71Vsv64X8X6FHajZY&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;V9dYJFS2gO8cYJ/zajzn/oeYVTtpsFpJmq7fWByjGd7pAnZHuuSEy/57GEptmYRu&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;zmI2gn7vYz1rZAbLThFsk/auCU3VYke8Dd3jHnxBuq2+Pa8TmLxibvnE1ZKd0gqZ&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;dMNY/rT4+LZI+xDczzF3Z7mJAhwEEAECAAYFAlWtLOIACgkQirEyljoGU3rjMhAA&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;ijskigHf8Q3D3B4Oz673cLNOGfAyEdHWNqlJW0Vcdo05iF8q8utwqmziRWw4PbpO&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;cdPpUqLb61rWfjSkq4PVTOr8leHHNj/a4aiAYt8DtnpcwJqTmktiijo0Ptn0v8ao&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;fdRJSVLtPcV0FydLzK6oLovszdWAQ4iVdFjppvdDJtjT4ooXFmZgZg6KzqjEGm8G&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;4wS4tMlFR4AJZIpWN5gAeLZhCg3jfuKWEgAIVwJZfVPp8qFTIMDCbHGcmszqeDKj&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;G5hY8q+KeQBs7/jjibY7QjSk+qFvWPlES2NGCnjrD5NL+T5W0AlQZS3kgbDWbnSm&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;r/xr6OzL8+bi03J3gRW/oWmCIlzvxUJuLgR5M3TRS4GqYfNVs4etgIW7QZXwTo/5&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;W8zd5P8UcKOuEFPtmfRjoRZYY30TqrmO9BQkHLKcDbqgnWcm55HaRdkK6+j4tKik&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;f12/VXez1tP4CkHcMJWE4g3poANtZmHia2MPO9/+1P/pCxUb5jwBF+CDiDhDel1Y&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;8b7u/ERIugpl8TqGJx+GkUlw0cotZ7BoweNwLXwDDDQlIoA4BT+LFLGQBtUQKMQY&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;TrDv4PUucMfB96yiEwlw40IdkmHgcBxXFNNxDHMsxEIW2TYoITfmkShiIm7XkcSE&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;oilPpHFmh6JXpnqOsBhfO0FxKSWkNjsCKCMUGLww5kKJAhwEEAEIAAYFAlWs//EA&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;CgkQP/MbrxBL+eLdOg//Z9Tcp9kElDdZl3e6aJqGpGviNqIA20KbvYrham5Kn3B9&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;1LhvMkypT6fZWAwbNCBHxvOSbOolcSSLpbaHK3A5jsg5MhLJ2G3Xpf7Z91+Mqg/H&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;iOiJkaAhPoJ0Ny6BCB7jg3yaKLDP4wBwDbOH7JWuP7uQmQ12mqu6WFxok7e53bH5&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;i4gmu3QIO21RXyWoLJy/1Y5X3ljPZ1tNawy/Sz8UjeLau2Sl1mQ6JxWWCeLp7Cvw&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;p+j6nKOFm/hVDlgnFrfIp9aYHjR2fVpwIFxvfff94gm20EywerlcGOAMeT+1QKZy&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;1V1ekBVX+2zdQ8RPJGZPqXyxnLg9SyUhdLJBPNDNe5ALfolfn2pvBGM3hnRunGOs&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;PrK53WjGqvXXYhyIkJEd+UoyQBp6zUY/KKFK/7yjgZxX7sCSwNjDlFT2fB1gfll1&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;vKoYocPQl2t/B3beKOZJzBkSMk1hBdE0A7URkOoYrFQTdzsSUVwY+/0IAhvxqGKc&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;HhinLDFON6ee082511VVMrSbCxcnsThjc61CMYA1TxL01Jzb3QIoTWT3W1t2HRZD&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;/aXcDsg6UMHm1xC1MdZKeKpdJWrnnseC9b/tGuqw2EHitYDquVBmPkx0UoAdsbB5&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;ec3q8n4J45VJFJcSrrps/vRSNn0bUqcZlpZSZERdqBTBkbizxgFnvJx734JLhlaJ&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;AhwEEAEIAAYFAlWtG6MACgkQlWNH9vvzpBVikRAAmfUzps72Opq31lRHZXXGD4/H&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;FP9SyYRnWzaOWGDMfgO9p3IcRl3qRwOuThCvn+qxTHmRT8KUD8uko9zIU+ttx/zx&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;An3hvO1nCzsiW33N4vU+Y78Uvs7Rumm2CNif+dKDL41FnVpA191b3T3NGWfigvqB&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;78fWv/WJIuPJuAhCoJYFbK0Vv2/QF2UAo9O2wdBo0ELZKmP5tWfJuLbc8XzuzgaP&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;4xzRdgJ+P+IFA4q1zQ49FHQeRWBSWkxFAp3iI9sdH5Na+Lup2vLSDYYmdDOyII5w&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;5QQ+Y8M78Bvt5GBOk52KfTH3oNjDwtd7ae46yWrSy7razs75klSxi125IfcPr/r8&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;e6jt08WVDZRak5mLPryNlf/Y+ymFe07aIp3eiKO1/SJp2K73fCTslXDt/OuzKZSp&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;656hybxUrRPiXBxHMOWkcPllZqBXf6GxnN+Fdyutk/e+0EBjpK02AxHY3igA3411&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;2ZGTGXNCL8ywTidVweOfjyqiWAnCSUvF6+efjRgg2mlD1g6ZDRiKpl9p/ZGETjCh&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;urlpGSKhtCZWZIGt0x0iSLy4surqDrwwuBqEPSZ08KRr+q9R8HIPuAwjq2CjqDyj&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;DFNuLx8dhbUUVIAl7a9nJotsph5VK7c/BF0uLW5YnPJYsXG7z1KixL2ydoH1kL41&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;zXdcIWBP8H7yPVgUxCKJAhwEEAEIAAYFAlWtG98ACgkQvBcwG0kbPyEIVxAA4imw&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;p7Df/j5ZZcZ+kkBwAhFO+WnJMfkNNl4g/7vsFKbWFBpiYuGmlvX+poM3nTsWCuEv&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;v3QohbZHGJS/hY2kdAuxurTI6w4FvvJ0Akz1DUANIF9gfJ9Omu2Znb9xG1fzyCSc&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;EzUgaf3aim7zyp0arjjqR/msmd2sCjqvy5VgRK21tYAfhWmzdJQntIlCEExfTh9x&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;guELDLSK3j7ngZla1T3BwE1dlcPVD6l9bl/7ZV5uXmotOqFU+1dBcFG4NKNXmnG5&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;TV7x3Ih6Xt982SCpBgVsEow1XFPf0jflPBn6DGJsgpmuIjdymgpJacwZCYkGbTSj&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;wAeSibYvCw1MRYtrCXd7KlmmQxhYTvvzyoQSqaiIQM8daaXddcy4IdHoOoEJVzfA&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;/BCyEkb0KhhjTWXQoRBXcxhJYOUjH5nhHd+zml+MHHiy1dL+xANHaBzFaNHpxYUs&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;FN2MLcMW4rpCnOx/8pRu/o757Y2Ps+ypLUbGPxZJJa26zYXXTAUDDEgEFFM9Rifu&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;jVCps146sRbrodzgIajc4ScgAWVkHDTKYfq6IBLJZHp8KB1fYFkVrUtwjMmyZCpG&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;7FqWITGTWOoRbYAsInWuzT7PN+vb/sk0xOk1PzSJV1CmCH9izKrTqRAU42jd4yqV&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;IuQ3hN8wXoeolSlK3wl27fDtK2EDzVhklvjGdreJAhwEEAEIAAYFAlbwOBsACgkQ&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;RPRuFG0COV30vQ//Vzyu44NJZrDWdrAyMngMOZ+qIUkeRdtKHEzAFXl6je1ZLyXT&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;aSKhyWtdxD+NPA4E8vQbEqbcpvzkBhOgfNgVOxWUxC+njB5xhg4PuZLcffm+98S3&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;ncyu+bYuhA/kLgOJA2HL1vIQEobdM0XJhVM8G7bhKKSdS5NUd6BS8AgKL5YXbguO&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;ZwDVq0yuVPg9VNqG5eTwL8fvZhH4L6I5Rh/wv1g++FvnEGRR+7ePprkc2pnJC8j3&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;7Z08YzRf5aWCJu89EDsL8wWI/jydPcGLnitNEROfovRX/A647VUl7M4kL0oyblJb&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;9JFbzPK97YeMwQTUYQOHIp8KsYYKjuBvq9q/Rr9DNpyijp1pshfjEiEZ4YDjTkGX&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;uWu5EMSlVpC4nEtiBlKT3kMk1mqmc2F7A/g5ug1w+e72E1EbVJMDtAgzjc0+V4kt&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;RxtTGa8PlfyWouBwL6ReVpEyVz3NS7++QcSY98DgMODMxFggna/zf3bef/lC6RGk&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;kHyIOC+IhI+q72m0MjdCmzsSA8fqT0PNYs349+sCKw6ocgjSHZlR/8gEZbZC+Fwx&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Jf6be2N7eo6hYctOe5XpLaMApVnD3qtw6C9CxWJ4zT6WLyI0SAF3YWmIgLtlYhfF&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;nRs0ObRXiO7tz0FBuTXD3vljjzq7t8DDK1IS4Cx5AnTZI4rz+/aiD0k5AhmJAhwE&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;EAEIAAYFAlbwOPIACgkQt4bvJaijiaC0TBAAppcnj7MhOQh+yQCzljw403/hEW5/&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;iVEyhfkEtF8lnJQPwSCvKphln4B9/E/Z6HBZ5MNew9xj/JrL/JZfk+E81vSs/fhg&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;lCXB83bFo/fZ6cnqhubcPlXyXLSAY7J195n+DdInbza5ABuaJW6UeVHbGGM+th7L&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;S6sYmzoOM1oU8mLzugo57M2a0SZNE2GTjeHFzdeFmKtjk6zGhJcdDMvKNalQZyuf&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;KSEc7+9j5r0KlJOWY4VMqfYMY6qgiQ89IVSutWbhj+oiivCgi030sXmrdOSwG8/G&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;gufKpYOQ1ZLXrxzowYJ02vAewYCe20PTyzGt5ReB9XkokffvHnKcxHxhyC6HiAyG&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;B+8+yf0tJk4Fd7uW6zjGDvphPQhH6bPObVVaMiayEfJhhHbRNmJnUKXRc2CGL0X6&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;vbZ12Y1bAALAttEpsNC544WMwLfUCcGfaRTF1E4OpQucU/uizaxGPiUd8Ateqt+m&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;3GwjY9HAb9QN8ejiOTkH6XsYSzw4KA4iPqqMySHY/DMyfFuilNWd8m93agApO+8r&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;9+6xjurnbkh50rYtunP3FCMul2QW1wXaGxPTt7a/IcL00NRVwZmJwa3Ys1OrYMRA&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;OXM0QvRzpHZOsuqHG45jjaRejMZKSQL0zJOyKgtv4YrG1fceLrZWvu7ZjWVNd+0B&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;nGitgBkGm5VQMuGJAhwEEAEIAAYFAlbwjIoACgkQpIWg7VG4t8QFOw//YFD2UifK&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;W2VfUy2ig+ewXOwe/BzVfweN/Im+HSN94ooTEwR5wgdYIjxPV+eEKFfAEsazv8b3&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;ktZJI+/IxEalHBA+mR4TC2/UlrOgsVCnTHYKL5yJRVHPrdOQ+Zm+kk4vszYocDtC&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;SPp+/aoRE8u91i6Qu0UdGjMe82HG6qdzVj6bXH9ZFRiWRsfkGxB31cnvfE+aZB+V&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;qfuy0pbqegJXUE/6In8XRsS12xAk58KM0b8jKQGqYaBB6xE9WDpip5sPycougy6U&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;29170n+U57c6+x5JQhHC/Rb2AqB8Yl1msC4bj4UsqxWHmLRdcqZs04GiVsrk2fLD&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;fSfsu023IZPyOhaV/t2KE4DwnAu4b9Sq7PNNzf9yrsgRL4c4OzWEYpMzt38V5QRt&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;ETJvuuthOypREVNuIs21oRomMJd+PjGsayDuKA7xe/SxDe8tPkoy+FdAfevPXfhy&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;NWX0vTtcZDpVustEMmoDs7EzlBddrNplsnRZoqW2JyMLErLujc5N8juDPqmAASVy&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;d7SBUD03e8apjzZSfJhbZsxw4W9z7+rETRSy7o2DPXCabjTGwB1naIc9W4wU/aWU&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;N81qZZecKLVLxpiXeoUwF3VIJme5Ye1KumsQpTJoi3tVmJ7XDaW9OD8shJtvhlOc&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;ddt1E4kl9iximuLfhzUjPJyS/ASYhpPNMVSJAhwEEAEKAAYFAlWtDgMACgkQw701&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;5G3UXaVUfg/+P9+3vFqijhzT7XkLuNrI9GTn3KslTAPU0Oe/BdLPTMKELqn1YVxk&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;lnrznLbjL9qkwYwXxY5HT6ykeS+CzQIDLLtXqR1NAz3EWVAm4dT+xqaJZmfCoJ40&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;+VqZdQHLjgmj9PFTK7f3vyZ3Ux6em7Z+h7C1ba8jYZS+6GnmGw6+v6LxzRh1SFUm&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;YBj/X+GPBYg6cnymr+9b2CwTMbczO5XN3hU9UtdF4UlupPvEuV5XWFpCw64kVwxP&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;OQvvUJ3aTqEGiCAqd8ntyVZ1MWtaob7GI/bj7dTOoSogUqF3aZawfoUHPp6izTd4&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;8aRnZhpsK47Y6jIaHDCILhKoAESTnpN1yjqaRIbviHJyYFOHnQESTS7AWrolQVmP&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;+pmThZWauh+PLVcs4ktp/6CKYvmgnP30HhrPczE7RVKIT32LU3MvT3nFzDmKUruK&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;eLUNO6LnJ8XwZEVIE3TOVcF+2ME3EcKfV4RwAlBBgYa8DB/CM/rCtoyxdxYSRpHn&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;9bxbNL6kn+CPAwRZGAChfOPGMhHBh3iDUJaIt79Cq9j6QcZUYfhj1sIvvkDyl0Bc&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;5U4slbTM6KP5aZgFlCcI9HWwGx/5qIbb1rQNVjxwtiUWediS04YaQ6yt7f/yXbdl&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;hxPdXDMe/9gdDyuDvP4+1FZbDiV6VT7Bl+UhQnkwf4kuCbSMFjdu+cyJAjMEEAEI&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;AB0WIQRZyp4tKjMd4lGqJCdfA8dnwkek1QUCWQ72QgAKCRBfA8dnwkek1aBpEACI&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;6mkO7aXYQyejkTbSyLdE7FoNI4Nq6aKvvQLt+vlGATLgSdz8v7QLGd3KkJYoO5SY&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;kKjrkGZG4Nb3GOCnWnewBmvCqt7C5/Idl1JTVPdF9CgMHQkwP2F8Tg5X1Ag9oZeL&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;yRKB/xWbX1LGizRy5s9G6yhq1rwoatNI+Wz36fdCmCqmphm92uPyxuAxy+JZhAbT&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;/vmANGKlEN5Wjryrp3tmMEhnuJykWq2ZxYiJ9jpx/cNLyjf8fSDBhLXOTG0FYBrZ&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;k+ZJtw1LlzA36K7IbnunO2qOJzDgvemo5FmGYcm6hyYCzqxBj1VJDmhHu7NZMeMn&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;vT4d8Py1xBPGPFRYmaK5AP/D07cdDPYawlZA6dMPGE8xSfQxbrayJrj0+vpjSJPt&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;DUHrg7L+PdpvyVxi8Py0Zfe05h6SjBPrw3eTQS6ODkoZQyh8D7M2HKUiUxvfufvn&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;LEfeWpd7Vp7hl/VdP3TtbOzL9H/89O5ywf7S/oRKaqgOWkYhs3cfyjqz2boQk8nw&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;N29sLzm5cH+APxNcju7sz07klp8dRNeImbmgj8mT1xId10mAixJ0NOY8udLhlwg1&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;UfsYhP+Yvy9yMcoSZOs5+RjluW/E2qubP3RUt81ohUupdM0NVUJiR/I3Ri6ARb3V&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;S2aAGtW4oS6PpyVT0dkWrlp8VqFpNTUKE95dNi5Og4kCTgQTAQoAOAIbAwIeAQIX&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;gBYhBBTyZoLQkWzdgeN7bWG3tSbZjwNTBQJpobDuBQsJCAcCBhUKCQgLAgQWAgMB&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;AAoJEGG3tSbZjwNTpYQQAK+60Ky1K+VzJMVvjTedchr/ACHsjRXDHfJHWp2hDBDg&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;GLjr0Muwo3XIaNyWhW1fwmxvyMULFVmWGb7qGTeI82O8yhY3bLMN6iA+XZwf1PsC&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;ZYHTls2KTYRUHYixobOA+9L0mWqWriNHeoBXe3c+SZ2jNYe/o4IR1X/zeVVpVkUq&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;pzKcKmhpDOfgWKZBxrBRFUm0wJnFrL+AcjVpeQi8CreR1AXzyRWT3pIGfpYilfTN&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;SZNy7e3oruplcu0Jk3aDdtTsJP95aej7nyI1eBdAk2hoMe4o2jCweaef5LO0y8u6&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;G6Kie9/LUAqQZVQuU7Zce0m0l9MNPujYv1pUy5RkMxtRyrUOJQLP60a1f1WZgU2Y&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Om9OgS6gO+NoZ7fr4/5wj3C8Y7Hyzn7I1KXkvj+v6CF6u45xDPdfC5qj9p5HAE81&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;bPmUpXFkeeIwn8La3NJoVjiagl7OxuoFi27F4oKSGxnArPtIoiQYuIVsZ2pPvkhP&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Lt2lLXbi5vGHfPKhK/kg/mvkUshiCK+jTpYZ078eg+meCFXOoRNH6Qkd7Q1MgrKz&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;OGAkuRVNWtnx1Ata8lxEqYuhaUlqW7okd1fNSdughtvZH5TgDUjlzkAS1eLsFIRC&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;qZIVBRUXgQvU02zt2OPdBuNgiXqRbZcSmsyKs1X22RG5i9WmTtP6Rv+ZL61pGsVA&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;uQINBGp0aqQBEADF5R+Xdp6U/SuormBFr8aSUAidp5f9kAEMNFtAWtDacRp/uWAK&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;U1pcC2bTOuMXDdKOq+2HG9mKAGBRP7ZJEBGrFHMj8bAK9RYJ4PdmkTbwQt6FrVs1&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;G2eL4PjIM6Y4DQAL8nQhuFyp4jQzXYYRqgi2a0y/JMiOQyGKhwCjRwAlJrBUplyi&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;mPJ4XfmtGKTj/2rcGQq4mIdDvCs6+YMyZRy8r8S8wZF+ysLpsEbqQPwgzG2uybF8&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;AMv4jcBT+c7Wb9WgQsnrAlQjsRoRgcS8swwIzm+ZXUMBwgv5zRzO5G2YCpuzuvx/&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;0/U0x1fJl1fpbW0785c+B+gIZMWmY3gdxl0JpqIpKpHj5GXXSBV72HmsOBUzui8u&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;0Ux2KlFlMvRL8IX5VPoPwOUzQazJM15B+5iToF3JmYlIRod73BQHrTj0NkwTFO9a&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;jRZCteoHOYOYY/o3lJGNFwSIkqH3Z4wa6P2Y2xpoejH0xsE25Z2NEp2H14/kyacJ&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;BF0Hq2Th/Bou7MtRr3ez43zt7h0v5GKL3JLAWfz5kit/Ux18h4Imqzsl/KSelDJM&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;4eUUGipO7dFfqO5MU/juqNt8RjvcIDO8Cnt7M+j53bANsRPJY428FiD3nqc+2WSS&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;EbmRaWq8SzNz5ywNeeJTLac3UvxUlUmskN2+UIM8QESHzpv5dn4u7x205wARAQAB&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;iQRyBBgBCgAmFiEEFPJmgtCRbN2B43ttYbe1JtmPA1MFAmp0aqQCGwIFCQPCZwAC&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;QAkQYbe1JtmPA1PBdCAEGQEKAB0WIQSCfmWGCGeWGM00n5NnjkVddnZ6owUCanRq&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;pAAKCRBnjkVddnZ6o8NvD/4tvmeD9UaKxJKiQmzL1yPBHT05M34pI3s2t9T0uSJf&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;hjz8DEzDruiuhTpwweTz4iOU9NBoBSGzmxYfrFE44IXvgNKMUKtoHWAFXt+3SEMP&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;eYOyXFBhWBBVQ6FO+5Ka8cHKfTbhU9TiLQhyCHwulWMZqLIHgGIaX3WuDEQxINbp&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;WXTIbkyLml3FlH7BeRCzJBGZm1TelosYSu3xRybveZr4khhSGNrvRuRKHYBT30qm&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;9VNkfHexvzg+WY9rif51iTCPnBk7XdPslHSe4E2/uuZafOCIHzsXlq3T0/Dqzcvw&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;7elaGWRiG+txo4bhnEnML6H46V7s7gqb+sdSUVVimHuq7WFWnojcw9Icg6yW2x/y&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;F6DvCXGFhUbP1GFggwLMIg0gbSV9wyQa849+07R9oIXUjrlliB3N0A8y5F08DCKD&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;6FfPjb3zZquyZr6f37RySoMXgsM6c4rlKPbR6Dks5Cjg6dHLfmCrLOX38bDJJxhY&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;ys1NXRSlH318ycm0wdiou2O9wV8sXTXcSOK/dc0M+g+QcA/23Pzn35lOiIlUHHNX&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;lD28CPhbjxjHoeUJeV+p6mux94FZTpaFSj1DgtMtP7hQoxhR6adF+nRK8rzSzyAx&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;TqzSQYpNrE5oJvf0QkxHScVR3uPfo8Vi9UIYVQRhoaUsIE8jlqTK3e7XLfiJ7v1j&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;GhwcD/40zySQmlQGfxSDx7ABR77qQTY/xjzXUKGpl6YecLUYV2FCpNYQuXGHTRcJ&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;jHpezJFkpzvZqpi67ZZXDX4Xz5xBXYI0UCAlnn1MrMh87Jygo5zgcxS7BuZA8YcD&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;6qbtkNtvuPq6vOsnyf7cFa6IbcZVTfeBN84ehy0oy6mWblYt0nGtZXc3+JoNfeCq&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;GRZ5iHZqopf7xL0cS+01+uNbikfMwnl10hVjP3zl9TI+D8Hm0pskJ8nZqoZBrupz&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;s7FR4+NTH96JzQxZFyV7v+LayOzf+M0FPrfspZkH933xABiJ/98BBCJciAB1KDAQ&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;SUfl+lm5ZEzOiXgMeOVtyhSUjW9Tgf9qEQtgs1+TcQ+LzrWcKCvAPXXEdxNvWCt7&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;a0c1MdArfBCjKQq7/65sibTdE6nqR+waDlZ14N3IbASf92sIrdP/S4KuL9R7gCGF&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;f23xNvIAA9DRmighFT1iymW+aYn0Wk2UFSlSisy1TUTV5p6fCIJ2ioQTA9252syA&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;pEp30Fyj2jC5Ep4PvTOD1cmN653DYLXVwsKMyoDcvWgQ7DFJGxhpkSKOoMViaZjQ&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;pFB9zEn1W389/OiXGIch+VtM9jhJvpEeuc4XaaZ34ED2RItO2QuEkRTpW2YPxegM&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;fUjVNQ/45uJ4qcFCD3/stBVB9Z1sr5bda+9dBAtRT2TgiwRFsLkCDQRgos3VARAA&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;tSRABroykqOO+3Zq3pehRGM2aft2djiigKhhVg+eJr+YffIU2Q73l9zniYSzVMkF&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;VuJPd7WkBnlEMIn8BUGh04op6MV+kzX0guu3v/9i/0agNS31xAdXzmf1i5sbQU1e&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;RylyZRSisM2iuF7BYrfSsOBHv71cf+iM94KxrzXiB1bDNL4DN0T5+vCoDjgHaXbt&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;en4Qdm6OdjBCUv9Ix8dhT4OzHwHOUK7gomTrQM6Hyb0vgQsDXKV2Ps/pWOSk/J2c&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;CrQUrafFqkVAAC3m6kaGU8te6YlAU7GFcf4MOPw15WTM2iaKWwPkwK9b/Ro/5RfZ&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;bqnde8EBAoFkg0X8mshGVDBtYCaW+1qUA3ZBcQzUvosYUsNQC9Nx8Y9/tkqCwIBU&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;zsxuIrSYHxeqPThxSMvCmg2qHXmmbAxsbOz3DTOwKpWSRGOCTGFpsLBqWigjG+L+&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;9iIx+7kr2gH8tYck1RPyQm04k9udD8wwXCvylTUzNVd876sN3o1xySaO5nz8JtM/&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;/xPPctFFMZmC01bBn+jRuapDqY+qTFL+eKherOUZgs3nHt7cEBz3m8neGg0/JhyB&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;wS6sQF7h0ETBapVDlKCRuvAgJHIrjejL5v+kVRrH9L6ey5CAdRG9SbffsNwZoo5o&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;8SrdGcX6hpFiqg1jZWvZv5x7/PPSW7fPuNNHsoxVRn8AEQEAAYkEcgQYAQoAJhYh&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;BBTyZoLQkWzdgeN7bWG3tSbZjwNTBQJgos3VAhsCBQkDwmcAAkAJEGG3tSbZjwNT&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;wXQgBBkBCgAdFiEEQ2D+IQnEl2MYb44h6+QekPbxL20FAmCizdUACgkQ6+QekPbx&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;L22N6w/+ObmFWpCr0dmV1tm+1tuCL05sJ031KFl3EkH389FmrMMoVk49e7H5Urn7&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;7ezQXO9Me8R0nZgVUavJdKcJzgf1IZtLq5Vq5q563I8gglr8rJaaefGYuv9jitx/&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Ca2s+uvJMUHgMeBPmFFOKoIF8QgOJdkSht2lIkd6bd89ayLLoIXlGi8d6K4tEWeM&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;igtds9FYcyX7o8xXmt9XqCIaMbkJtiUzjz63dN0O81UCj0TvK17KXAvclhzrriZu&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;o2rOeDTBcQmKKy2UKZaJjUqiezuOg1t513ZIzhy1oXzg5CJb5jgsmZmjtJjr161f&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;v5d8Yockj73z2/z47wry6ThESfYSkIxJIiIP5SwZyNMeeHSZUnaMTqzd5kDL5qnN&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;rhJHCBByxcIBcGppv3VjZ1QNU1k0Tx+MzpfZtbE//idw+Q7Iz9T/3zjN79JhYi1t&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;zzaaQR6JoEiNMpHHkdkOGRwfdipM7oKl7HKl+zJCzaLTE4mbInCxSgn+1RhI+rGz&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;TXVxqIKonYrWra4EVBAgguMrxNMjuEtbsF54Q27x2+H/Mew+et6K/suqyh63Szfd&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;14LWEj4NaR89tEz76nJyJFuFtDeGSmu68/Pi5S8Ls9MxKJJiIJmc3lQqDUTHEiLc&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;7RtZAsgAWlLc6UnFsaCqXKJxuaMs7qFD7pqSGfHxYboBxax7Sqrttw//eC7rghiF&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;zfcnEZQn6+GPW3FJc5P1diSLto99six3uaWKjvSnZScvPOe8ogJt1JQpQAABoHfd&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;7HzzlGzJtU/yDL931WD6nETp6b/dk7t3aUpk8WFMG19L+L9QbEpjxDi2wozO7CGg&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;6FhC7mu+KsSsorLqd3QYKoBLG0Pb2K3Zz3PN7y17kf1Aixa2//prFNfpEGwP9flz&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;2TUvSdtd9JvcnDz+/3yB63tmuCsUPZaR3lhTkNiXZG7WTALA1AqIUKFpxI+cOQxa&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;O2+H6XXiON3x8A2Pzd1mZyuUMPk2c6I/c1ZfzJXxF/WJVfuztZXNCGocYF4kB3X0&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;7uOuiKrIDMXDT3Op3wJ0RInpjyyPlwwov3zIVQcG3mfWPclXNcIRSAdadLq6yhTB&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;UVbhMd2j2qga1vtaVlH/m0zFhib88RLf1/FiVX76D1q+anG+gT+SsMPd7hSGQQ2+&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;6ngBAvx4T1IHtFgPqfNaA49m8b3aAorGo6Bbzmwh4Xr+7DM2fSskBskGdIPZgA4V&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;yu4/PC5aCTyd0NqlBgj/g7XRQMGvFRkdnEIcVZbvxdzn4j16dS+43dUzFMLKThRb&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;kUaunaYoZPIYuiqbwCoFX7vJdgBMaTxYfkClc5LJSVr+X+9RYNwlOn4kiQzKstVt&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;l/qfpDow6QsGmA9J7v8Vt9JEg052REcZZmC5Ag0EValA9AEQAK/z677fpoVUj4zQ&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;z0g60wVWf+1y2lGb8iFYICmvrJyaEra5SRkyihYA1WmEzhN4T//tHw3UIfe646+G&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;kY3eIQW2jY9DM2XaElmMN8k/v54nbn5oD7rNEyCTFTvCOq5d74HH1vw96Lzay1vy&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;45E7jPWvqfg9Se8KAnzElohTJjizyhU+0QbmPHnQlY8gOkT/SvRo9bFEUnqjWh0f&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Rq+K1tdLPhcFB1scc25iFqh9IAKUGDur8jQ+SDHCjgQlkFOg3rbqtaUOnVHPohfr&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;BM90ZNwuneFgQY7ZFSUidCimp/EN4CXnzgjDYXUUA42S8G86+G4KAJC22gRQo4mc&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;VmehwHTH0glfLmUK7TEu29A1KWNL3R/R7ZdyajjpCvUaK2A0Abj3ZE2BSDbJrVlb&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;BVfy5kfPdZjhd3wUWqFaDHiVcImcjZRWPncllhcy6fhqEy3ELZrkezpJjnARsVki&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;j3GXz6oX+HVULne2w0dkTXydR6muZI/GeNtrLHmA8B3/0/TllmLy8ChmYZVIKZ8z&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;t1ghq3f+hFTXgtZil7eBewZgA6L+EXXK6dZj14lbe6CMS2kungTX9stU1s42I+WR&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;biqiLpAxCX6qcLBOWrJwsOep2nvu5bhrPHptSfRhF4Vs1xteVFckCWhcLgdYi/Je&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;1XBEM+AAVa0k1FiywCg7MqlG6toLABEBAAGJBEQEGAECAA8FAlWpQPQCGwIFCQPC&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;ZwACKQkQYbe1JtmPA1PBXSAEGQECAAYFAlWpQPQACgkQHGnE5V6ZBdsvxQ/6A62Z&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;teN0b/TVfSJ51SdG66amwe2rpRX4UdSw7ifxo3qhgEICQmXR5c09qXwl17MFJWM3&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;FhGrbxnA5KGgeWGtqrPup4QZPKU+l2Ea2QLSJSiBq5QqqEgZvR14Lhr/hCGhBAq9&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;s/xbp8fbKNJj/uWiZ+uTPbt5T5rgKJ4+g3B6DNO1rH7F70OLrd32mxZs4pSxngHR&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;AyiMPB59yQVDsVMha0JTqC+P96itUzvnInc/9mwE0EMiBtpDTkoBwbJVPnuv+7Fj&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;kOLn5s5u3RLH9fe8z1xnV0fPC0/ndrlNiuBpAn3zVCsWasvW18Vz8K+CQY8Sw0Jw&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;75edBgFoz2QMFxHfDpMJefvMadB7mdte1lKk/Im9KFFH8Idh9b6zD0a/+Ooujukx&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;6QpFfAVhe2sT2CIm2nmMAuAZI2cCt7SC+REn9n9MSuIWxN8YTE3qgAUB6F3ea0O0&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;hGlLl+z5UOfX0bNAs+ebx/P6PczJtDzeqpmRb0QXqo55JWXLvmXT/fgjF7fNTTLs&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;yCtV+xH6ZFKGpvGJGJMHApEbz2a0hy12RZH58eI1ueN3Tzn8nI57+oYSsqFw/Qgc&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;dGXDonLGJsPVzIpQRg92/GXSukWF+MsCjVOilHRSY1wfPPmJ7+kMQ4rdXpjAhwNY&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Jc1ff5N+omCxCKoFgYsCXlFCHFKs4JwRbTdd3MkuqBAAlBlIjym8NyJIBltfWcku&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;hQTX4BiBltGPNga9CpQsml519EePuLtoe5H0fTUp4UYbL0ZzyJImQE2uw/hMNZ36&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;bA057YtHOoP4FcPUwv6wsl5JC87UR1XFhAXb5xSU0qdi3hWh0hm772X6CBlM8lM6&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;GtT/fDZkSGNXMQaIs1X/O9vf8wGg+HwLJcaCvybI4w7w1K0R7WjWZlJXutCZf8hR&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;c0d88W/qSZYooKD9q2S7foqaJhySIaF11sH5ETvVP3oCfGVIVhKWb0Tp2jXPXlXL&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;eRAQA8S+4B1o5XHiM+J3SNXhPQHRGQ3VGcDn45itg3F4xQX2Qvo4SV42NMYd6Tyk&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;M/dIfQyJDOVg3CT3+nqfjCknf94SNvyZprHEPmpcDeseoPMw8kjKNwDwPXFLxBRn&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;tPgnqVXDcNN41OH2kqx4jF7FLlRmwNpB2mFVH8xeVuRm7h2WZRsaEoqvivhzRtES&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;VA2um5Eg763CVTcNYlK6MD/iy8JzbMuZBrlOHr58HKDdcOy1W0z2quESGoqrwA99&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;5IgPav/1DSpyuJPNc/oUTWlhpYshqYKoflezAyKj30+UzC3R/mY03ri6zUvCgXHN&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;gZlKUsM3VEXk6h5oDuaXniHLLzuxjTBVrILnGYgHSFRP80L/knz+o4Uvq4wj7NHn&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;ruc5fP1foFxRNsMt40yRJfW5Ag0EWUvZtQEQAL4dTYeBoI6UxWcu7kERc+Tz13WU&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;wSPmOIU6RdoXqBc2QyOki8s+uDqIJbpt2YJUPWnPgoU0rDt+msOG9tpAjPVg5pHJ&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;e8H9tXxvaPICQ1YxYw1m8E1kRGio4EurP2G/H/YI3vwRskqI8cp04t88k1DfeKvX&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;YVY34kO/VM12XTfRcsiMdmDubTqNPYU1kmYNeqMT+OzI9QE2kulCK0DHDJzqdJLn&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Okrn1z0lrFAPoNpVtHZh4D7yB8FH3I1qk9npRdNXvSjhXu4ptvRuszktjEcfHK+i&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;kYP3jVqR4eWiOKrkVIWJOCsOKIUE27PXndGLbUuDzCvrKusR6W9vF+mYK1p3pT2P&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;YX8HEeJuzrd1UFBvCWPf2k5RQqHk4JIaKfjAlCPnSXmPHXqSGtD083RJhFkbz4U0&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;7/glHWer+M+Sw+hYT/v+XOhQm3CG/PUaeX2ud6GFefymX/tA1FYJqVxVOye2axoA&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;3lO7yM5sK/JHMdL7bFZtXVcGCwAqU2mkD2yEkFAzPLBHKigKg+4VimsTbG9jPOS+&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;qtv65x6uIOOsic3Ud2/BB/lfbvplIvQyJYw8HKb8O0XkUPcD3Q1i8p54JSHhiJm4&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;2H699uMmiJeLzTkQJG7KApEv6nOb+jLyr2DZXuX82/UvZAmzWZg/XOf2xz44/RDX&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;kL865dqRYenXNaOXABEBAAGJBHIEGAEIACYWIQQU8maC0JFs3YHje21ht7Um2Y8D&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;UwUCWUvZtQIbAgUJA8JnAAJACRBht7Um2Y8DU8F0IAQZAQgAHRYhBNzqxdlhNbkc&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;TqZyq7u+vbskxvNVBQJZS9m1AAoJELu+vbskxvNVBVMP/21uU+8NpPLpBn6SHJtI&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;AffFYMSnp0gplOjfiItA8HDbc1vqZlVpdk2xyFw6b7g+vTg1gQzF7uoAZK1czRLC&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;t7ocxntLVgPuSO1ZHt4hJG5Ze1UUJSDq8Pp+TTL43rg6irDLdYDBBHYESnXWAKRA&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;IuPb1e156pAdpSynwJ3+qPyqj5vDLkPrtMWGp7qWQpXcHaXMea8m4+/RLNIjvRof&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;/t6jrUermzs91Z+/C3N8ugD/aZrXTiNkF/H6BiuITZoB0j+rjy4fxEQvTYq9C3No&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;aBIRxJEPApxGnHKe9K9N1ZBELjCUCT1MkbBmf4CJtEgJvSScVh1yZNv+TVDfN6Rw&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;F9CwOM8bVrOH1VuX/L/XiIRRT02eGrvv3EvQ+BhceJpWN+GsHKQM658trZ7RhHo2&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;PR0ib+D7hWQprcktqutTfRFPMrgcFTPXKeR57cxvjk+B2LoLSOom3oTNEtUaMuBE&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;8E/jbONX34QsHWDKfLc3XpLEN+bO65AfTiR4/qtnZBmldBUG9xbrW0qcWz+M5P3S&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;6ssbor3VDxxrX+Fv6pJccwlgYNFQxQOz8GrZhF0cU48e+0XpU2NFeyueHQ8lb9yY&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;dvhc7mkGc87iIb+ILah57Wqi52Jd4f0DS2zkxN6ab5/UVEkffNwXfjN0IW28Ga4B&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;tZvoXVGVJo4vsGytMFdMRzRB/uAQAI21c3TTrO4TL42NcFQ0RY7yAlaKzXTXVNxC&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;8v/QQKIsDrNvs4w15rF/t2LXc8Cr3aUNuDtE7x+FaNwZLypCe+RFOy66AG2ENuNt&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;5tTGN3mgbJZl+01Cd1xPpOzmRfAJnH7YD+J4QuCEEgraAXPfp3MhjeHWtQaWDu29&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;fbTtPx0k/Bh0qxHFPWxhnYpktnjZEoMmwPMBeitCvcr66UzUmezgVZc0HxJ/LO9B&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;ss7P3egv60wPnXn579wDGnIriDUhHRcn2KuMI7eT4pL4HHjAAJB/8+vcUzYPuqtx&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;ULf5ciu8V+ajzHtqBcgwNR/gm/7i+4qKPo14fYBftH5PDj9iD88WIQX7paVbYHJZ&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;jrmnpM2iniL/DRVuxqAPToIc4hMXj8YPeTqS/1ckOzyYgFI9aRaLxZOR0uno1WTR&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;BifwOcy3NTwSHK/6YbtJbqoVwISJrGUuvOfBlkJZVlCzVsPG1+QZaPAL3HxVXavY&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;gCu2hze4OOWUe2Xuqihw8hb+F1rhP64/QtpjPxgLLb1NIBpm6OgdZjRjCbl9xnd3&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;RvH6hYxO+zgdn3icn2fFHhdZ7xtYcZZrg9QOXuv6LDvVe5I4VyszNs0jtdcx0P+T&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;5VIrKFAYyf0CCuL/UQTRrW0SrKOV/RZHuvdpVYK3YIAyd49kKjLk6O9awFQy7cXq&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;3PhjatBiuQINBFzwOeoBEACt8eaLW7jX3n5tQQ+ICeGOBIVbzAnXlH9bjdTqollM&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;+iiwkdlBNNEGku7+uQ9dTofem6cbSUXuh5kJNLy5tUIG4oGZLvpAjLdHP8zslgTg&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;lQymoWSbv2ss4pq8xoDbp6E51dkowkyFSuELZKMFHgPiJbfYXxQmbwEiFhGs4+21&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;lwtI4tVO9zs1XbzJD9XtomxkcYaePeBxpI9JnrWIUKt70JPZi/QcxPMG2si/Yitn&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;CVamcVw8Wri+W7MAJW3SyNjJUqx/cIOib8vdZVxvdWRIZmdkWkFO6vv4IotEBCfl&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;t6cD0EIy3Ijn3nDDf59v7wpdWXidjzVjKF0F8jUiX6S/ZuEz4lvdotpCgJGhDmdi&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;4pVCYbmShKbffgcSJ/BWn4wCOHKPA+XB75zzPj17dcWR8D9GM/sgusJy2fbHDcOd&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;ADPynKW3Ok1CENJDx7DTDwm2fPRMut4utSL1FMSl7zBDRabcPr1nw+zERjmSjm3R&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;91ayrQ9UKlP/4P8Xkhjc3FFWrRQ1Q7/SlkUmrTqSouQcOolGMa2ENNgqNeOY7oE5&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;xnPs64TLAzQ9z66u0dHTMODAS1A6C0l66LrPVYGoQLDkM7WQn7zznFdnKR2nsPOU&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;i0mMdyrG/62iARtNvuF4xdsUAoCKti3wOsXRuUhiXei4N4qdr8IaIEIFgYEKKtaq&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;zwARAQABiQRyBBgBCgAmFiEEFPJmgtCRbN2B43ttYbe1JtmPA1MFAlzwOeoCGwIF&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;CQPCZwACQAkQYbe1JtmPA1PBdCAEGQEKAB0WIQQJezEwd65ioC+E2k3xpmaPu31X&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;LgUCXPA56gAKCRDxpmaPu31XLopQEACKv8mYt4aMc0oA25UJXMRig2lXJDqOZBUS&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;vFFm8t6XgdG0zFdzFo4gqpje68kNyt9duhvOMsVwkzUr+5Di7FccvgwceU3X5ngW&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;pnV/GcXg79m5viipWUdBRoyZ90oi4D5K6fhlmszmWyiD7KDrjdtIdGnjAuprztkc&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;/JBlIwlmu/40JyDR5Dfxp256DlzsJ/HH8LbdjJG/F0XvtZUwcHefa7mDXtIWszsM&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;oJnEoLzOkZvJ13rhJcTHVQImClyS3o9+Pk6DTfy4Ad0w+9nF0rZp+8/GXZGilfn/&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;NXMj0elYu5WiyCBqargRkrHpebNKW9jxRca02aDS2Yrf8dlseO1d9FXZPOBWIxDR&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;G++TqRhBK8FUW00DikRDrrV5RsIiXtgtRqH+hwknE33i8m8/KKC5/pUl3Af5f+vM&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;KsT3s1mMX2zA+NmLUxJCXLz70WqLoShI8QEj+RLk9yuk97bo7KoNSv6xNwXotJKz&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;p08VAnVNX/QddmV6Z7SnocEs+S6Z0L69sEffMgUaCkH09mIt1yu0DaeOl7fM2iD3&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;VcO6jJ94Dg8olkhBgrZERe3sXR2fciFtsqHxYc9zP7YyL7vPbUQ8BogxEfIQZPGd&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;pnG5pTM0NSX/mgkOWI2VJFDe/rOFTdTk+8mKVnFdaUfHA48qIeS0V0zMLd4OZkrY&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;lW3iKvZps6IAEACauiivWdvKvJgKMyi3fvicXn4qL8nV1X6lmOBqDn4bb0N0mtpi&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;qXfvG950+29rcCJSj6qSMVj8ZHuwVktrEoWX6lpJbWwEdUh+35DnjfGOYN8gW8bx&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;0CfyqEx50W++DK5Wj+L+DL7jgJ/l7dMKxLdjijkg+v4yI516nzRbrx3x77U8n+H1&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;V9bHrDfScESnr3PtWS4ze4yDrr9Xp+YK8A7RkIctH2ToyEixin8utvfa56dGpUai&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;7gIRZ+0btWY0FX6g/VRHwwhLIzTsaFveQGuzFbXaGkOhRASitKtbQo2fD39qAMix&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;kKOctN9A/nA3dZU8BlJj7258+P36jQDOilr2Y7RlTSTZS5aXeAPbwILwKCNcDjV0&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;keerGSqiV2zkiH0vAJcxVokn+iMj6VOaM1RyxskgFara0Vt3IuAjnirES/OVuIkh&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;gpebmGXBPcHqLWpFDtEdLv6YtOwScE0eYb5/SA3XsmK3qgzEAzBfchwl4PqAhiQA&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;f/tbx5EgAUbFmwhEcgd9xMY5w6+8/5FjoXwHYmdfjKT9iD7QxF3LnymskoKQQGWB&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;HiwJjaA8LYPpopUg9we00zNdSGNXv1Lau9AM//ATiusH8iLJj33ofQh6FviQG6W3&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;TlLPqx/oIxxNj5bPAQy6dRKB1TxlWr4X0pUWxuqBeObPoHS9j0ysxKPru7kCDQRk&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;VUBzARAA1cD3n5ue0sCcZmqX2FbtIFRsk39rlGkvuxYABsWBTzr0RbRW7h46VzWb&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;OcU5ZmbJrp/bhgkSYRR3drmzT63yUZ62dnww6e5LJjGSt19zzcber9BHELjqKqfA&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;fLNsuZ7ZQ5p78c6uiJhe8WpbWogbspxJ20duraLGmK4Kl23fa3tF0Gng1RLhoFcS&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;VK/WtDZyC+elPKpch1Sru6sw/r8ktfuhNIRGxdbj/lFHNVOzCXb3MTAqpIynNGMo&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;cFFnqWLZLtItphHxPUqVr6LKvc3i3aMlC6IvLNg0Nu8O088Hg3Ah9tRmXKOshLjY&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;jPeXqM9edqoWWqpzxDTNl6JlFMwP+OacMKsyX7Wq+ZXC/o3ygC/oclYUKtiuoGg4&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;7fSCN2GS3V2GX2zFlT6SEvEQQb2g5yISLX9Q/g9AyJdqtfaLe4Fv6vM4P1xhOUDn&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;jmdoulm3FGkC701ZF7eFhMSRUM9QhkGH6Yz2TvS4ht6Whg7aVt4ErIoJfj9jzJOp&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;6k9vna5Lmgkj8l19NTiUQ7gk98H3wW4mRrINxZ2yQD47V/LJ+tUamJc5ac+I0VP7&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;c15xmKEJ2rfGCGhiSWQwZZw7Y2/qoADSBlI28RlBTuRP2i6AdwyJU+75CzxGzMpr&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;/wBLhZT+fNRV4HHd5dgR3YxajpkzZ6wXL2aaJhznFEmLBLokOwMAEQEAAYkEcgQY&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;AQoAJhYhBBTyZoLQkWzdgeN7bWG3tSbZjwNTBQJkVUBzAhsCBQkDwmcAAkAJEGG3&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;tSbZjwNTwXQgBBkBCgAdFiEErdcHlHlwDcrf3VM34207E/PZMnQFAmRVQHMACgkQ&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;4207E/PZMnRgdg/+LAha8Vh1SIVpXzUHVdx81kPyxBSaXtOtbBw6u9EiPW+xCUiF&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;/pyn7H1lu+hAodeNFADsXmmONKcBjURVfwO81s60gLKYBXxpcLLQXrfNOLrYMnok&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;r5FfuI3zZ0AoSnEoS9ufnf/7spjba8RldV1q2krdw1KtbiLq3D8v4E3qRfx5SqCA&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;+eJSavaAh3aBi6lvRlUSZmz8RWwq6gP9Z4BiTTyFp5jQv1ZKJb5OJ+44A0pS+RvG&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;DRq/bAAUQULLIJVOhiTM74sb/BPmeRYUS++ee10IFW4bsrKJonCoSQTXQexOpH6A&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;AFXeZDakJfyjTxnl3+AtA4VEp1UJIm0Ywe0h6lT0isSJPVp3RFZRPjq0g+/VniBs&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;vYhLE/70ph9ImU4HXdNumZVqXqawmIDRwv7NbYjpQ8QnzcP3vJ5XQ4/bNU/xWd1e&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;M2gdpbXI9B46ER7fQcIJRNrawbEbfzuHy5nINAzrznsg+fAC76w2Omrn547QiY2e&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;y7jy7k79tlCXGXWAt9ikkJ95BCLsOu5OTxPi4/UUS2en1yDbx5ej7Hh79oEZxzub&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;W1+v5O1+tXgMOWd6ZgXwquq50vs+X4mi7BKE2b1Mi6Zq2Y+Kw7dAEbYYzhsSA+SR&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Pu5vrJgLTNQmGxxbrSA+lCUvQ8dPywXz00vKiQwI9uRqtK0LX1BLuHKIhg4OgxAA&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;nmFSZgu7wIsE2kBYwabCSIFJZzHu0lgtRyYrY8Xh7Pg+V9slIiMGG4SIyq5eUfmU&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;8bXjc4vQkE6KHxsbbzN6gFVLX1KDjxRKh+/nG/RDtfw/ic7iiXZfgkEqzIVgIrtl&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Db/DK6ZDMeABnJcZZTJMAC4lWpJGgmnZxfAIGmtcUOA0CKGT43suyYET7L7HXd0T&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;M+cJRnbEb7m8OexT9Xqqwezfqoi1MGH2g8lRKQE4Z2eEFvCiuJnCw547wtpJWEQr&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Gw1eqL3AS8Y051YqblbXLbgf5Oa49yo630ehq9OxoLd7+GdWwYBlr/0EzPUWezhd&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;IKKvh1RO+FQGAlzYJ6Pq7BPwvu3dC3YYdN3Ax/8dj5036Y+mHgDsnmlUk8dlziJ0&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;O3h1fke/W81ABx4ASBktXAf1IweRbbxqW8OgMhG6xHTeiEjjav7SmlD0XVOxjhI+&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;qBoNPovWlChqONxablBkuh0Jd6kdNiaSEM9cd60kK3GT/dBMyv0yVhhLci6HQZ+M&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;f4cbn0KtayzuQLOcdRCN3FF/JNQH3v6LA1MdRfmJlgC4UdiepBb1uCgtVIPizRuX&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;WDjyjzePZRN/AqaUbEoNBHhIz0nKhQGDbst4ugIzJWIX+6UokwPC3jvJqQQttccj&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Ay6kXBmxfxyRMB5BEeLY0+qVPyvOxpXEGnlSHYmdIS65Ag0EZ9KQfQEQAOVIyh0s&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;ZPPFLWxoFT0WhPzHw8BhgnCBNdZAh9+SM0Apq2VcQKSjBjKiterOTtc6EVh0K2ik&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;bGKHQ1SvwNdsYL01cSkJSJORig/1Du1eh+2nlo8nut7xT//V+2FQyWFCLDeQvLlA&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;s3QHMrMYxTcwNk3qi/z1Z5Q4e6Re2aKRU00LtSomD6CKWy9nAaqTRNzzdndJwIyC&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;yshX4bbUzAzE7Wbgh/E0/FgBGw87LYITqyU6US4lvoUXB+89XxwMxO9I74L118gX&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Eyybz+JN0/w87hXAKnaKjasSvobKE4mau8SXqmOO66MxiMaF4Xsmr3oIwo8q9W5d&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;+hA+t225ipq2rZZErmPL44deMCeKmepjLTa9CoxX2oVpDWGOYFRyJRkLDyyH4O3g&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Co/5qv4rOTJqPFfKPtrjWFJKGf4P4UD0GSBX2Q+mOf2XHWsMJE4t8T7jxQCSAQUM&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;wt6M18h1auIqcfkuNvdJhcl2GvJyCMIbkA3AoiuKaSPgoVCmJdbc6Ao9ydmMUB5Q&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;1rYpMNKCMsuVP9OcX8FoHEVMXOvr0f6Wfj+iHytfO2VTqrw/cqoCyuPoSrgxjs1/&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;cRSz5g9fZ0zrOtQyNB5yJ3YPTG3va1/XLflrjPcT4ZUkej9nkFpCNWdEZVWD/z3v&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;XBGSV11N9Cdy60QbD4yZvDjV2GQ+dwAF1o1BABEBAAGJBHIEGAEKACYWIQQU8maC&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;0JFs3YHje21ht7Um2Y8DUwUCZ9KQfQIbAgUJA8JnAAJACRBht7Um2Y8DU8F0IAQZ&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;AQoAHRYhBAm+7WPzRiot/6s7h17LZJfBogJWBQJn0pB9AAoJEF7LZJfBogJW9I4Q&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;AJbv4Rhb4x6Jl75x2Lfp46/e3fZVDhzUdLjK8A/acRF7JRBuJVJRaijJ5tngdknm&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;lmbzfqlyzsMWUciAwVJRvijNFDeicet5zJpBRsXEUAug3iVCD1KlVvLzjCi9Eb9s&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;6xCQjSJ8DZE020s41wdqtb1nziDASAkg+YH2DzpTEaZVNM39uNDKbaJLYIjKA9MV&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;1YHArqUldFsoofBe4zIZRFyvMD7Gmr7Xm0IWYLrfmnenm1JJYIkvGUeVoP8dEonA&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;VhLVwvwwufobV0qdtMfhZsgFwf1XSHI9MtD4yAVtBqBTkfFeRLnBjJK/ywYxGqba&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;dt1b57I4ywTQ16oXNrlTF1Su0I8i/fo0i/9ohNl3opN3LbaEbhT37M4xpy4MgL2F&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;thddc2gWvF/8TFRaXw7LaLSR7HwO+Y0CpOtV/Ct4RzKEulY5DpV9b1JQJhpLcjMz&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;+pBDAM3KJuiV6Bcfoz5PZowFy74UmE02Vzk/oyuI/o4KMihy0UzWQVkOZTTu4eON&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;ktgGiZOnRFdiLKVgeLEDXTLdhbuwGS2+wX3I7lLP9AWpK8Ahc81eUwU6MwdbfwfJ&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;1ELtKaa/JmMjaWkr5aGrp88d8ePR9jYA47Z2q0esB67pRJVe0McVJlu9GQGq05S7&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;lZKs6mi9dHTzeHwua//IXHMK0s3WhMU7vGwJ3E2+pTstf8AQALSwkezD3QchPV+5&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;CAUYY7CmMXB6zzIU18wCS61Y8QdDvqmtWHdMVTp4xT14fS6cvB4uFzacGQJ7CVIW&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;eZgwEFzZiev3dKpnUOGg0WQSwmQQA0JCg6/qS0AeUPINjhWtNcR7voCqAYeRcjo4&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;7UJclD/KKNTCn27btHRaEmpTdTtC6sxiVElFObb3a9tHXqwLWp8gJ+NZ+6mlrvvH&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;2hm1CAyQTDRYC7nN69QJrKHR8HA3AeR5figQHLwvmfQlV2erZE17GT+L5t0HxX/H&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;KZCim91PApqa+7iY0eKPAG5iacABrBi9zzh/ex0ovvuxsBDKUFCSu7HIivnAVrdS&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;/kbO1qJ5I3MBMp0dlQ6PS6LeZIRhxts0aPPZedsXytoL7kFLISfJ55AuhJpskz+5&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;5uviJhp/H3zNBYtQ+dmFmp4RRk/Nvu0zv6OGtaZy6M5X24Pbzb/OApBML84cEmb3&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;iZie9J2ZYW68/D96sP09x6GItCJlCIdQZkRcwmkQwgtq9sJDw92/vSGeYdRn+oCA&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;xJ14eObCsVwcfJARLt45btEnx+zRCAHAHQHpV6qTGT6nqg57XuM9iNNdyTGKRU+I&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;klgb9LRxVAQfbn5uXYb5j2ox5pjxtbXTf9Lbo7RkygcWSKZPWmYgGsKS6jmXkDa/&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;TyOlPxkbaknpPbYMBztRT4Ju0VU4iQJSBCgBCgA8FiEEFPJmgtCRbN2B43ttYbe1&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;JtmPA1MFAmp0bIIeHQJXZSBubyBsb25nZXIgdHJ1c3QgdGhpcyBrZXkuAAoJEGG3&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;tSbZjwNTXUcQAIXCoftSFWYug+FmtfkQm8JFRA7NvcK9FcWLpknonbTj5XFhdj5X&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;EAdaYCPhit78h5iMW1nEEt9NAjuUCymqIYejHgH1G5TAy+bqmceQwuWJjy1JJ4V9&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;/UY+KRW7btOzAQINFfXFYJU/9nyCf8ToStpra/C3SYL/11ahsL++bmGx2aXF/l3C&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;BwuQihko6Amg+VbKCjT0ddzNcY6HaDWu/gZWbfyyGWlNt/Tm97okS/JJoXsX7rnd&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;zoqRBPv+rpJT3W67HfglPYy+1pUMfG8rvt9NkBf5A5onIs70j7A0NtSwgXveH2pB&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;CxmocGThQYqh75LkqSWCSGdl5TBIbiBI4SSPb2E5T56bBKJItfU9Ch66qjk/4b9/&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;tiS25JLO/ysdUdF0xM6EvVjeuCKy4PoeYqpa3T2YpOyMYjHo9Ohxw9Ikoe7x6GVD&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;EMbBKifZxc5JKwmgpCtPhT1y9jLa54KOx6sPn3hgmL8DkOPpozIXlO5iUV3eMsXE&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;JlamBQJfo58yREcyh+7mx7CM2P9O8SVSE90vssw1s/0vv9pgzLB0fkDU8S9Ukm4j&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;fKZ9HjhpGcTZoSyC+P4/OcM7woIf1d9tB0UV8h16NLoggnyF1qm6mpPml8iPdtlj&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;380ItMqZQIitrTtaiwh/Nhraf8jNUNREYunWrF8bN4GE8+0aptki15op&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;=LpNb&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;-----END PGP PUBLIC KEY BLOCK-----&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/security/2026/08/10/updated-gpg-key-for-signing-firefox-and-thunderbird-releases/&quot;&gt;Updated GPG key for signing Firefox and Thunderbird Releases&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/security&quot;&gt;Mozilla Security Blog&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-10T18:37:53+00:00</dc:date>
	<dc:creator>Ben Hearsum</dc:creator>
</item>
<item rdf:about="discourse.mozilla.org-topic-149143">
	<title>Firefox Tooling Announcements: Firefox Profiler Deployment (August 10, 2026)</title>
	<link>https://discourse.mozilla.org/t/firefox-profiler-deployment-august-10-2026/149143</link>
	<content:encoded>&lt;p&gt;The latest version of the &lt;a href=&quot;https://profiler.firefox.com/&quot; rel=&quot;noopener nofollow ugc&quot;&gt;Firefox Profiler&lt;/a&gt; is now live! Check out the full changelog below to see what’s changed:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Highlights:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[fatadel] Improve discoverability of downloading a local profile (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6216&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6216&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[Nazım Can Altınova] Add the ability to apply source maps from the CLI (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6229&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6229&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Other Changes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[fatadel] Create the Network track from the timeline-network schema display location (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6224&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6224&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[Markus Stange] Only call &lt;code&gt;getRawFrameTableBuilderWithExistingContents&lt;/code&gt; once per symbolication batch. (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6233&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6233&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[Nazım Can Altınova] Handle the cli daemon startup failures more gracefully with better errors (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6241&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6241&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[Nazım Can Altınova] Handle Text and Log marker payloads with their marker schema (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6247&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6247&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[Nazım Can Altınova] Bump the Gecko profile version to make sure that the Text and Log marker changes are picked up in the frontends (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6252&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6252&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[fatadel] Deactivate a menu button as soon as its panel is dismissed (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6251&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6251&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[Nazım Can Altınova] &lt;img alt=&quot;:clockwise_vertical_arrows:&quot; class=&quot;emoji&quot; height=&quot;20&quot; src=&quot;https://emoji.discourse-cdn.com/twitter/clockwise_vertical_arrows.png?v=15&quot; title=&quot;:clockwise_vertical_arrows:&quot; width=&quot;20&quot; /&gt; Sync: l10n → main (August 10, 2026) (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6253&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6253&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[Nazım Can Altınova] Bump profiler-cli version to 0.8.0 (&lt;a href=&quot;https://github.com/firefox-devtools/profiler/pull/6254&quot; rel=&quot;noopener nofollow ugc&quot;&gt;#6254&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Big thanks to our amazing localizers for making this release possible:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;de: Ger&lt;/li&gt;
&lt;li&gt;de: Michael Köhler&lt;/li&gt;
&lt;li&gt;el: George kitsoukakis&lt;/li&gt;
&lt;li&gt;en-CA: chutten&lt;/li&gt;
&lt;li&gt;en-CA: Saurabh&lt;/li&gt;
&lt;li&gt;en-GB: Ian Neal&lt;/li&gt;
&lt;li&gt;es-CL: ravmn&lt;/li&gt;
&lt;li&gt;fy-NL, nl: Fjoerfoks&lt;/li&gt;
&lt;li&gt;fr: Théo Chevalier&lt;/li&gt;
&lt;li&gt;fy-NL: Fjoerfoks&lt;/li&gt;
&lt;li&gt;ia: Melo46&lt;/li&gt;
&lt;li&gt;it: Francesco Lodolo [:flod]&lt;/li&gt;
&lt;li&gt;nl: Fjoerfoks&lt;/li&gt;
&lt;li&gt;ru: michellemelsspam&lt;/li&gt;
&lt;li&gt;ru: Valery Ledovskoy&lt;/li&gt;
&lt;li&gt;tr: giray&lt;/li&gt;
&lt;li&gt;tr: Selim Şumlu&lt;/li&gt;
&lt;li&gt;zh-TW: Pin-guang Chen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Find out more about the Firefox Profiler on &lt;a href=&quot;https://profiler.firefox.com&quot; rel=&quot;noopener nofollow ugc&quot;&gt;profiler.firefox.com&lt;/a&gt;! If you have any questions, join the discussion on our &lt;a href=&quot;https://chat.mozilla.org/#/room/#profiler:mozilla.org&quot; rel=&quot;noopener nofollow ugc&quot;&gt;Matrix channel&lt;/a&gt;!&lt;/p&gt;
            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;
            &lt;p&gt;&lt;a href=&quot;https://discourse.mozilla.org/t/firefox-profiler-deployment-august-10-2026/149143&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-10T17:06:03+00:00</dc:date>
	<dc:creator>canova</dc:creator>
</item>
<item rdf:about="https://smallcultfollowing.com/babysteps/blog/2026/08/10/cyclic-trait-solving/">
	<title>Niko Matsakis: Cylic trait implementations: motivation</title>
	<link>https://smallcultfollowing.com/babysteps/blog/2026/08/10/cyclic-trait-solving/?utm_source=atom_feed</link>
	<content:encoded>&lt;p&gt;Lately I’ve been thinking about cyclic trait implementations. This is a problem that I’ve been trying to understand for years and years and I &lt;em&gt;finally&lt;/em&gt; feel like I’m geting somewhere. I’m going to try to write out a series of blog posts documenting those explorations and, hopefully, culminating in a design that could be RFC’d. In this first post, I want to talk about one of the interesting questions, what I am going to call “internal” vs “external” proofs. I know that this material can seem abstract, so I’m going to try and connect it to “real Rust” as much as possible! This particular blog post is an introduction, explaining the general problem and giving some motivation for why we care.&lt;/p&gt;
&lt;h3&gt;What &lt;em&gt;are&lt;/em&gt; cyclic trait implementations?&lt;/h3&gt;
&lt;p&gt;Right now in Rust we require most traits to have &lt;em&gt;non-cyclic&lt;/em&gt;, or &lt;em&gt;inductive&lt;/em&gt;, implementations. To explain what I mean, let’s consider this trait:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;trait&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Dump&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;dump&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now imagine that we have an impl of this for &lt;code&gt;i32&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;// Impl I
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Dump&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;i32&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;dump&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;fm&quot;&gt;println!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;{self}&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A simple impl for &lt;code&gt;Rc&amp;lt;T&amp;gt;&lt;/code&gt; and `Option:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;// Impl RC
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Dump&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Rc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;where&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;: &lt;span class=&quot;nc&quot;&gt;Dump&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;dump&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;::&lt;span class=&quot;n&quot;&gt;dump&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;// Impl Opt
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Dump&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Option&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;where&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;: &lt;span class=&quot;nc&quot;&gt;Dump&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;dump&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Some&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;::&lt;span class=&quot;n&quot;&gt;dump&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and finally a recursive &lt;code&gt;List&lt;/code&gt; type that has an impl as well:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;: &lt;span class=&quot;nc&quot;&gt;Rc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;next&lt;/span&gt;: &lt;span class=&quot;nb&quot;&gt;Option&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Rc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;// Impl L
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Dump&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;where&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;: &lt;span class=&quot;nc&quot;&gt;Dump&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;dump&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Dump&lt;/span&gt;::&lt;span class=&quot;n&quot;&gt;dump&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Some&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;next&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Dump&lt;/span&gt;::&lt;span class=&quot;n&quot;&gt;dump&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If I try to show that &lt;code&gt;List&amp;lt;i32&amp;gt;: Dump&lt;/code&gt;, I do that by&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Applying “impl L” to show that &lt;code&gt;List&amp;lt;i32&amp;gt;: Dump&lt;/code&gt; if &lt;code&gt;i32: Dump&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Then applying “impl I” to show that &lt;code&gt;i32: Dump&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There’s no &lt;em&gt;cycle&lt;/em&gt; here – that is, I didn’t have to use impl L to show that impl L is valid.&lt;/p&gt;
&lt;h3&gt;Cyclic logic sounds bad, but it can be exactly what you want&lt;/h3&gt;
&lt;p&gt;Now, when I said that “the impl L didn’t have to use the impl L to show that it is valid” that might not have sounded suspicious to you. In fact, it’s a pretty natural idea. After all, generally when you try to establish a logical argument, you aren’t allowed to use cyclic reasoning. That is, you can’t say: I know that Niko likes Rust because Niko likes Rust. So, in the same sense, it seems natural that I should not be able to say “I know that &lt;code&gt;List&amp;lt;i32&amp;gt;&lt;/code&gt; implements &lt;code&gt;Dump&lt;/code&gt; because &lt;code&gt;List&amp;lt;i32&amp;gt;&lt;/code&gt; implements &lt;code&gt;Dump&lt;/code&gt;”.&lt;/p&gt;
&lt;p&gt;But actually, it would sometimes be really useful to say &lt;em&gt;exactly&lt;/em&gt; that. One example is so-called “perfect derive”. In our &lt;code&gt;Dump&lt;/code&gt; impl above, we had one where-clause, &lt;code&gt;T: Dump&lt;/code&gt;. And if you were to create a custom derive for &lt;code&gt;Dump&lt;/code&gt; and write &lt;code&gt;#[derive(Dump)]&lt;/code&gt;, the impl I showed is typically exactly what you would get. But it’s not necessarily what you &lt;em&gt;want&lt;/em&gt;. Consider what you get with &lt;code&gt;#[derive(Clone)]&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;// Impl LC1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Clone&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;where&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;: &lt;span class=&quot;nb&quot;&gt;Clone&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;// &amp;lt;-- generated but not really required!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;dump&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;: &lt;span class=&quot;nb&quot;&gt;Clone&lt;/span&gt;::&lt;span class=&quot;n&quot;&gt;clone&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;next&lt;/span&gt;: &lt;span class=&quot;nb&quot;&gt;Clone&lt;/span&gt;::&lt;span class=&quot;n&quot;&gt;clone&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;next&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here, the derive is going to create an impl that requires &lt;code&gt;T: Clone&lt;/code&gt;. But if you look closely, you’ll see that all the fields only use &lt;code&gt;Rc&amp;lt;T&amp;gt;&lt;/code&gt;, so in fact, we should be able to clone a &lt;code&gt;List&lt;/code&gt; even without &lt;code&gt;T: Clone&lt;/code&gt;! But how is the compiler to know this?&lt;/p&gt;
&lt;p&gt;You might think that the compiler could do some super smarty-pants analysis on the fields to figure it out. And, in a way, it can: that is what cyclic trait solving is all about. The thing is, while the &lt;em&gt;compiler&lt;/em&gt; can do that, the &lt;em&gt;derive&lt;/em&gt; cannot – the derive doesn’t have access to the definitions of other types and so forth, and clearly we would need to know things about &lt;code&gt;Option&lt;/code&gt; and &lt;code&gt;Rc&lt;/code&gt; to figure out whether &lt;code&gt;T: Clone&lt;/code&gt; is required here.&lt;/p&gt;
&lt;p&gt;But what we &lt;em&gt;could&lt;/em&gt; do is to generate a different impl. Instead of adding &lt;code&gt;T: Clone&lt;/code&gt; for each type parameter, we could add a where-clause for each field type. This makes sense: after all, we are just going to be calling &lt;code&gt;Clone&lt;/code&gt; on every field, so it’s quite logical to say that the impl is valid if every field is cloneable:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;// Impl LC2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Clone&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;where&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Rc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;: &lt;span class=&quot;nb&quot;&gt;Clone&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Option&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Rc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;: &lt;span class=&quot;nb&quot;&gt;Clone&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;// .. as above ..
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Under &lt;em&gt;this&lt;/em&gt; formulation, we can see that all we have to be able to do is to clone an &lt;code&gt;Rc&amp;lt;_&amp;gt;&lt;/code&gt; and clone an &lt;code&gt;Option&amp;lt;Rc&amp;lt;_&amp;gt;&amp;gt;&lt;/code&gt;, neither of which require that &lt;code&gt;T: Clone&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;This idea is called &lt;strong&gt;perfect derive&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;We call this idea [perfect derive][] and it’s been a goal for a while. The thing is, cyclic reasoning &lt;em&gt;is&lt;/em&gt; tricky to get right. The &lt;code&gt;Clone&lt;/code&gt; example is actually an easy one: that one doesn’t really require cyclic reasoning:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To show that &lt;code&gt;List&amp;lt;i32&amp;gt;: Clone&lt;/code&gt; we have to show that…
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Rc&amp;lt;i32&amp;gt;: Clone&lt;/code&gt;, which is easy because &lt;code&gt;impl&amp;lt;T&amp;gt; Clone for Rc&amp;lt;T&amp;gt;&lt;/code&gt; doesn’t have any where-clauses&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;https://smallcultfollowing.com/babysteps/atom.xml#fn:1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Option&amp;lt;Rc&amp;lt;List&amp;lt;i32&amp;gt;&amp;gt;&amp;gt;: Clone&lt;/code&gt; uses the &lt;code&gt;impl&amp;lt;T&amp;gt; Clone for Option&amp;lt;T&amp;gt; where T: Clone&lt;/code&gt; impl which requires…
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Rc&amp;lt;List&amp;lt;i32&amp;gt;&amp;gt;: Clone&lt;/code&gt;, which is again easy&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;But it’s not so easy for &lt;code&gt;Dump&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;But if we use that same “cyclic derive pattern” to generate our &lt;code&gt;Dump&lt;/code&gt; impl, things don’t work out so well. Instead of just a &lt;code&gt;T: Dump&lt;/code&gt; bound, our &lt;code&gt;Dump&lt;/code&gt; impl now has two bounds:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;// impl L1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Dump&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;where&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Rc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;: &lt;span class=&quot;nc&quot;&gt;Dump&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;// &amp;lt;-- Used to be `T: Dump`
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Option&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Rc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;// &amp;lt;-- This one is new!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;dump&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now imagine we try to show &lt;code&gt;List&amp;lt;i32&amp;gt;: Dump&lt;/code&gt;. We begin by applying impl L1, which requires us to show that its where clauses hold:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To show &lt;code&gt;List&amp;lt;i32&amp;gt;: Dump&lt;/code&gt; we use impl L1, which has two where-clauses:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Rc&amp;lt;i32&amp;gt;: Dump&lt;/code&gt;, this one is easy because the &lt;code&gt;Rc&lt;/code&gt; impl requires that &lt;code&gt;i32: Dump&lt;/code&gt; which is true.&lt;/li&gt;
&lt;li&gt;But &lt;code&gt;Option&amp;lt;Rc&amp;lt;List&amp;lt;i32&amp;gt;&amp;gt;&amp;gt;: Dump&lt;/code&gt; is tricky. The &lt;code&gt;Option&lt;/code&gt; impl requires that…
&lt;ul&gt;
&lt;li&gt;We need to prove &lt;code&gt;Rc&amp;lt;List&amp;lt;i32&amp;gt;&amp;gt;: Dump&lt;/code&gt;, and then the &lt;code&gt;Rc&lt;/code&gt; impl requires that…
&lt;ul&gt;
&lt;li&gt;We need to prove &lt;code&gt;List&amp;lt;i32&amp;gt;: Dump&lt;/code&gt;, but that is what we started with! That’s cyclic logic!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ugh. Something’s tricky here!&lt;/p&gt;
&lt;h3&gt;We can’t just accept any old cycle because of supertraits&lt;/h3&gt;
&lt;p&gt;Now, maybe you think we can just accept any cycles. And for these examples, it would be fine: but it’s not correct if you consider &lt;em&gt;supertraits&lt;/em&gt;. Consider this trait and impl pair:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;trait&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Magic&lt;/span&gt;: &lt;span class=&quot;nb&quot;&gt;Copy&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;// Impl M
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Magic&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;where&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;: &lt;span class=&quot;nc&quot;&gt;Magic&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you are naive, this weird trait-impl pair can be used to prove that &lt;em&gt;any&lt;/em&gt; type is &lt;code&gt;Copy&lt;/code&gt;, regardless of whether it has a &lt;code&gt;Copy&lt;/code&gt; impl. For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Say we want to prove that &lt;code&gt;String: Copy&lt;/code&gt;. We observe that if a type implements &lt;code&gt;Magic&lt;/code&gt;, it must implement &lt;code&gt;Copy&lt;/code&gt;, so…
&lt;ul&gt;
&lt;li&gt;We begin by proving &lt;code&gt;String: Magic&lt;/code&gt;. We use the impl M, which requires
&lt;ul&gt;
&lt;li&gt;that we show &lt;code&gt;String: Magic&lt;/code&gt;, which is a cycle, so we accept it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Uh oh, now we did something wrong. We proved that &lt;code&gt;String: Copy&lt;/code&gt; even though there is no &lt;code&gt;Copy&lt;/code&gt; impl. Something is fishy.&lt;/p&gt;
&lt;p&gt;Now clearly we can all see the problem here – the implementation of &lt;code&gt;Magic&lt;/code&gt; didn’t really add any information. It was just a tautology, saying that &lt;code&gt;T: Magic&lt;/code&gt; if &lt;code&gt;T: Magic&lt;/code&gt;. It’s not &lt;em&gt;wrong&lt;/em&gt;, but implementing &lt;code&gt;Magic&lt;/code&gt; was supposed to tell us more than just the fact that there is an impl of &lt;code&gt;Magic&lt;/code&gt;, it was supposed to tell us also that the supertrait &lt;code&gt;Copy&lt;/code&gt; is implemented. And that’s not true here.&lt;/p&gt;
&lt;p&gt;But if you think about it, it’s hard to decide why we should reject impl M but accept the impl L1 of &lt;code&gt;Dump&lt;/code&gt; for &lt;code&gt;List&amp;lt;T&amp;gt;&lt;/code&gt;. They both wind up with a cyclic proof. So what’s the difference? This is the question we’ll be exploring over the next few blog posts.&lt;/p&gt;
&lt;h3&gt;Soundness for traits&lt;/h3&gt;
&lt;p&gt;This gets at an interesting question: what does it mean for the trait system to be &lt;em&gt;sound&lt;/em&gt;. This seems obvious but actually it was a question I found kind of non-obvious for a long time.&lt;/p&gt;
&lt;p&gt;We’ve found two satisfactory answers to that question. One of them involves converting to dictionary-passing style. &lt;a href=&quot;https://nadrieril.github.io/blog/2026/03/22/what-if-traits-carried-values.html&quot;&gt;Nadri explained that in a blog post&lt;/a&gt;. I think that’s a great post to read. I’m going to give another definition here that doesn’t require converting to a dependently typed program&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;https://smallcultfollowing.com/babysteps/atom.xml#fn:2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;My rough definition is this&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;https://smallcultfollowing.com/babysteps/atom.xml#fn:3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;: the trait system is sound if, whenever it accepts some program P, that program cannot have a function that believes some &lt;code&gt;Trait&lt;/code&gt; holds for the &lt;code&gt;T&lt;/code&gt;, but there is no impl of &lt;code&gt;Trait&lt;/code&gt; that can be used. So in the case of &lt;code&gt;Magic&lt;/code&gt; and &lt;code&gt;Copy&lt;/code&gt;, it’s easy to write a program that shows simple cyclic trait solving is unsound:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;trait&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Magic&lt;/span&gt;: &lt;span class=&quot;nb&quot;&gt;Copy&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;: &lt;span class=&quot;nc&quot;&gt;Magic&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Magic&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;is_copy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;: &lt;span class=&quot;nb&quot;&gt;Copy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;// this function believes `T: Copy`
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;// this can be called because we believe that
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;// * `String: Magic` because
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;//     * `String: Magic`, and we accept cycles.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;// And then `String: Magic` implies `String: Copy`.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;is_copy&lt;/span&gt;::&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;By my definition, any sound type/trait system must reject this program because, if it were to execute, then execution would reach &lt;code&gt;is_copy::&amp;lt;String&amp;gt;&lt;/code&gt; and yet there is no&lt;code&gt; Copy&lt;/code&gt; impl that is judged to ber applicable to &lt;code&gt;String&lt;/code&gt;. Uh oh!&lt;/p&gt;
&lt;h3&gt;Coming next&lt;/h3&gt;
&lt;p&gt;As I promised, this post was mostly focused on “setting the scene”. My goal was to explain what the problem is that we are trying to solve – permitting “good cyclic impls” but forbidding bad ones. I didn’t spend a lot of time on the bad ones, but it turns out that there’s a wide variety of unsound things one can do, some of which the compiler currently gets wrong, others of which it would only get wrong if we started permitting cycles.&lt;/p&gt;
&lt;p&gt;My motivation for getting into this work is a bit complicated. I want perfect derive. But it’s also a loose end in our trait semantics that I really want to see nailed down before we move onto other tasks. Having auto traits (e.g., &lt;code&gt;Send&lt;/code&gt;) work differently from other traits is clearly a “smell”, and without a strong understanding of the logical underpinnings of our trait system it’s easy to get things wrong when we build extensions.&lt;/p&gt;
&lt;p&gt;In the next few posts I’ll go a bit deeper into the exploration I and others have been doing. I’ll talk about some of the “false starts” we took along the way and why they don’t work, and then about some of the solutions that are under consideration. Working through this stuff has really helped me to broaden my understanding of various areas of logic. By the time we’re done, we’ll cover&lt;sup id=&quot;fnref:4&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;https://smallcultfollowing.com/babysteps/atom.xml#fn:4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; coinduction and productivity, modal logic and the later modality, and we’ll see how our techniques might even help us with resolving specialization&lt;sup id=&quot;fnref:5&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;https://smallcultfollowing.com/babysteps/atom.xml#fn:5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;I cited it earlier, but if you want to read other tasks on the same subject, I definitely recommend &lt;a href=&quot;https://nadrieril.github.io/blog/2026/03/22/what-if-traits-carried-values.html&quot;&gt;Nadri’s post on dictionary-passing style&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr /&gt;
&lt;ol&gt;
&lt;li id=&quot;fn:1&quot;&gt;
&lt;p&gt;Apart from the default &lt;code&gt;Sized&lt;/code&gt; bound, I’m ignoring that here &lt;a class=&quot;footnote-backref&quot; href=&quot;https://smallcultfollowing.com/babysteps/atom.xml#fnref:1&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn:2&quot;&gt;
&lt;p&gt;I have found that both the dictionary-passing interpretation and the logic approach I’m using are valuable. In the end, they’re more or less equivalent, which I guess shouldn’t be surprising if you’ve heard of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Curry%E2%80%93Howard_correspondence&quot;&gt;Curry Howard Correspondence&lt;/a&gt;, but I’ll talk about that later perhaps. &lt;a class=&quot;footnote-backref&quot; href=&quot;https://smallcultfollowing.com/babysteps/atom.xml#fnref:2&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn:3&quot;&gt;
&lt;p&gt;I would like to, but haven’t, define a simplified version of Rust that includes trait solving and simple type checkoing and show that it cannot &lt;a href=&quot;https://en.wikipedia.org/wiki/Type_safety#Definitions&quot;&gt;“go wrong”&lt;/a&gt;. &lt;a class=&quot;footnote-backref&quot; href=&quot;https://smallcultfollowing.com/babysteps/atom.xml#fnref:3&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn:4&quot;&gt;
&lt;p&gt;In a shallow way, I’m no expert! &lt;a class=&quot;footnote-backref&quot; href=&quot;https://smallcultfollowing.com/babysteps/atom.xml#fnref:4&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn:5&quot;&gt;
&lt;p&gt;Plot twist, bet you didn’t see that coming! I sure didn’t. &lt;a class=&quot;footnote-backref&quot; href=&quot;https://smallcultfollowing.com/babysteps/atom.xml#fnref:5&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content:encoded>
	<dc:date>2026-08-10T13:35:40+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-19749110.post-236503802116150253">
	<title>Ludovic Hirlimann: 20+ years of running &quot;alpha quality&quot; browser as my main web browser</title>
	<link>https://ludovic.hirlimann.net/2026/08/20-years-of-running-alpha-quality.html</link>
	<content:encoded>&lt;p&gt; I have been accessing, using the internet since probably around 1991, using my dad's academic account and then schools and then home. I've used the internet before the web existed, sending emails, downloading freeware and sharewares from &quot;huge&quot; ftp repository. Sharing ftp site, using Usenet to find more and share more. This was a time you had to buy Ethernet &lt;a href=&quot;https://en.wikipedia.org/wiki/NuBus&quot;&gt;NuBus&lt;/a&gt; card and install both Ethernet drivers and TCP/IP ones.&lt;/p&gt;&lt;p&gt;Then one day something called NCSA Mosaic came into the picture - this changed the way I consumed 'the network'. After a while some friends showed me Netscape, and mosaic faded away. I've used Netscape on Mac, Windows 3.11, NT, on &lt;a href=&quot;https://en.wikipedia.org/wiki/Workstation&quot;&gt;workstations&lt;/a&gt; running Unix (hello Dec Alpha).&lt;/p&gt;&lt;p&gt;At the time my gig was either running OS/2, and Linux Slackware on my Pentium machine. I then got into the Beos world, and that was one OS that Netscape didn't ship binaries for. Microsoft had started pushing Internet explorer (IE). I was starting to work and *had* to use Windows. I came up with the idea of using Mozilla at work in order to find bugs that would later be fixed when I'd use it home on my favorite OS.&lt;/p&gt;&lt;p&gt;So I started using Mozilla builds for windows, and then following planet and mozilla.org to be aware of the process. I would now and then file bugzilla issues, often to discover they've been filled already :-) I clearly remember the day tabs were introduced. I walked around the room I was working in showing the great new feature to my colleagues that were using Mozilla. There were no formal releases, at the time CI-CD didn't exist completely yet, so you could keep the same version for a day or for a week depending on how broken the tree was&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL8rWGVc58B78xXXRi4p5iP1HxIdpnLO7ertu6xFNsQ0Oz4Cn_d_5YHgbSaC7nOrESvc0jn27QLSu4Fog5duJipEkNwIStmO_-kOT8eT_CWrZVia5O0PBGY_IQ2C2QkSILqPwyqkjiEk4l38AJ4ctgkexHu1Y_rm1B_zjJEb0nnix9SQlNxUNr/s1132/tbox-tidybox.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;180&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL8rWGVc58B78xXXRi4p5iP1HxIdpnLO7ertu6xFNsQ0Oz4Cn_d_5YHgbSaC7nOrESvc0jn27QLSu4Fog5duJipEkNwIStmO_-kOT8eT_CWrZVia5O0PBGY_IQ2C2QkSILqPwyqkjiEk4l38AJ4ctgkexHu1Y_rm1B_zjJEb0nnix9SQlNxUNr/s320/tbox-tidybox.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Then I continued using builds until updates became available, and I choose to use the nightly channel. At that time my motivation had changed, I had moved from dead BeOS to NeXTStep+1 aka Mac OS X. There was no way for me to help My then browser of choice &lt;a href=&quot;https://caminobrowser.org/&quot;&gt;Camino&lt;/a&gt; at work. Mac OS X was way less popular in the tech industry that it is now.&lt;p&gt;&lt;/p&gt;&lt;p&gt;The web landscape was dominated by &lt;a href=&quot;https://en.wikipedia.org/wiki/Internet_Explorer&quot;&gt;IE&lt;/a&gt; , the mac version was unfortunately different meaning that using it made a bunch of websites unusable. &lt;/p&gt;&lt;p&gt;When Firefox got out, Camino started dying and I switched boats.&lt;/p&gt;&lt;p&gt;I then got employed by Mozillamessaging and used both Thunderbird and Firefox nightlies. I was the QA lead and there were no way I could test all the software and hardware combination used by our users. So crowd testing was very valuable to me.  At this point I had stopped reporting issues and the only thing I was reporting were crashes. &lt;/p&gt;&lt;p&gt;Since 2010 a bunch of Chrome related browsers have started taking the web over, a bit like in 2006 when Microsoft was running the show, instead now google is.  I currently run 2 versions of Firefox, nightly for personal stuff and release for work related ones. I occasionally have to fire a chrome related browser because testing with Ff from the vendors is not being done (I'm looking at DocuSign and FoundryVtt ).&lt;/p&gt;&lt;p&gt;So running nightly software has not been a burden at all, because there are a few crashes here and there, but I always submit, so the stability team at Mozilla can investigate. The idea is that if it crashes on me, it won't crash on my Dad's computer because he runs releases. Once or twice in the course of those 20 years did I have to either reinstall or create a new profile. That's how stable nightly has been for me.&lt;/p&gt;&lt;p&gt;I'm annoyed at some of the decision Mozilla makes, but again they are the most independent browser maker out there with a big enough team to deal with the &lt;a href=&quot;https://ludovic.hirlimann.net/2026/01/are-mozillas-fork-any-good.html&quot;&gt;development surface of a browser&lt;/a&gt;. Hence, for some forseable future I'll be running nightlies in hopes of keeping the web open. I'm lurking at Servo and following it's development, reporting issues there because I see it has an alternative to Firefox, but it's far from being ready yet.&lt;/p&gt;&lt;p&gt;I'd encourage some of my readers to try/use &lt;a href=&quot;https://www.firefox.com/en-US/channel/desktop/?redirect_source=mozilla-org#nightly&quot;&gt;Nightly&lt;/a&gt;. If you choose to do so, send in crash reports and enable telemetry.&lt;/p&gt;</content:encoded>
	<dc:date>2026-08-10T11:48:41+00:00</dc:date>
	<dc:creator>Ludovic Hirlimann</dc:creator>
</item>

</rdf:RDF>
