Congratulations!

[Valid RSS] This is a valid RSS feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://planet.mozilla.org/rss20.xml

  1. <?xml version="1.0"?>
  2. <rss version="2.0"
  3. xmlns:dc="http://purl.org/dc/elements/1.1/"
  4. xmlns:atom="http://www.w3.org/2005/Atom"
  5. >
  6.  
  7. <channel>
  8. <title>Planet Mozilla</title>
  9. <link>https://planet.mozilla.org/</link>
  10. <language>en</language>
  11. <description>Planet Mozilla - https://planet.mozilla.org/</description>
  12. <atom:link rel="self" href="https://planet.mozilla.org/rss20.xml" type="application/rss+xml"/>
  13.  
  14. <item>
  15. <title>Adrian Gaudebert: The challenges of teaching a complex game</title>
  16. <guid isPermaLink="false">urn:md5:010cbc81f2b8194755897ca97bca68b0</guid>
  17. <link>http://adrian.gaudebert.fr/blog/post/The-challenges-of-teaching-a-complex-game</link>
  18. <description>&lt;p&gt;When I was 13, my mom bought me Civilization III from a retail shop, then went on to do some more shopping. I stayed in the car, with this elegant box in my hands, craving to play the game it contained. I opened the box, and there discovered something magical: the Civilization III Manual. Having nothing better to do, I started reading it…&lt;/p&gt;
  19.  
  20. &lt;figure&gt;&lt;a href=&quot;http://adrian.gaudebert.fr/blog/public/icones-billets/civilization-III-manual.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;The Civilization III manual&quot; class=&quot;media&quot; src=&quot;http://adrian.gaudebert.fr/blog/public/icones-billets/.civilization-III-manual_m.jpg&quot; style=&quot;width: 448px; height: 314px;&quot; /&gt;&lt;/a&gt;
  21.  
  22. &amp;lt;figcaption&amp;gt;&lt;em&gt;That game manual was THICK&lt;strong&gt;.&lt;/strong&gt;&lt;/em&gt;&amp;lt;/figcaption&amp;gt;
  23. &lt;/figure&gt;        &lt;p&gt;More than 20 years later, I still remember how great reading that book felt. I was propelled into the game, learning about its systems and strategies, discovering screens of foggy maps and world wonders. It made me love the game before I had even played it! Since then I've played all Civilization games that came out — including Humankind, the unofficial 7th episode — and loved all of them. Would I have had the same connection to these games had I not read the manual? Impossible to tell. Would I have read that book had I not been trapped in a car with the game box on my laps? Definitely not! Even the developers of the game knew that nobody was reading those texts:&lt;/p&gt;
  24.  
  25. &lt;figure&gt;&lt;a href=&quot;http://adrian.gaudebert.fr/blog/public/icones-billets/civilization-III-quote.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;A quote from the Civilization III manual&quot; class=&quot;media&quot; src=&quot;http://adrian.gaudebert.fr/blog/public/icones-billets/civilization-III-quote.jpg&quot; /&gt;&lt;/a&gt;
  26.  
  27. &amp;lt;figcaption&amp;gt;&lt;em&gt;“The authors and developers of computer games know too well that most players never read the manual.”&lt;/em&gt;&amp;lt;/figcaption&amp;gt;
  28. &lt;/figure&gt;
  29.  
  30. &lt;p&gt;Here's me now, 20-something years later, having made a game of my own and needing to teach it to potential players… Should I write a full-blown game manual, hoping that a little 13-years old will read it on a parking lot?&lt;/p&gt;
  31.  
  32. &lt;p&gt;Heck no! Ain't nobody got time for that!&lt;/p&gt;
  33.  
  34. &lt;h3&gt;Let's make a tutorial instead&lt;/h3&gt;
  35.  
  36. &lt;p&gt;Dawnmaker has been built almost like a board game, in the sense that it has complex rules that you have to learn before you can play. Physical board game players are used to that: someone has to go through the rules before they can explain them to the rest of their players group. But video games are a different beast, and we've long moved away from reading… well, almost anything at all, really, and certainly not rules. You can't put each player into a car on a parking lot with nothing else to do other than reading the rules of your game. If you were to present the video game player with a rules book, in today's world of abundance, they would just move on to the next game in their unending backlog.&lt;/p&gt;
  37.  
  38. &lt;p&gt;Teaching a game is thus incredibly difficult: it has to have as little text as possible, it has to be fun and rewarding, and it has to hook the player so that, by the end of the teaching phase, they still want to play the actual game.&lt;/p&gt;
  39.  
  40. &lt;p&gt;It's with all those things in mind that I started building Dawnmaker's tutorial. I set two main rules in place: first, use as little words as possible, and second, make the player learn while doing. The first iteration of the tutorial was very terse: you only had a small goal written at the top of the screen, and almost no explanations whatsoever about what you were to do, or why. It turns out, that didn't work too well. Players were lost, especially when it came to the most complex actions or features of the game. Past a certain point in the tutorial, almost all of the players stopped reading the objectives at the top of the screen. And finally, they were also lacking a sense of purpose.&lt;/p&gt;
  41.  
  42. &lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;media&quot; src=&quot;http://adrian.gaudebert.fr/blog/public/icones-billets/tutorial-tooltips.png&quot; style=&quot;float: right; margin: 0 0 1em 1em;&quot; /&gt;&lt;/p&gt;
  43.  
  44. &lt;p&gt;So for all my good intents, I had to revise my approach and write more words. The second iteration, which is now live in the game and demo, has a lot of small tooltips that pop up around the screen as the interface shows itself. I've tried to load information as slowly as possible, giving the player only what they need at a given moment. I think I approximately quadrupled the number of words in the tutorial, but such is the reality of teaching a complex game.&lt;/p&gt;
  45.  
  46. &lt;p&gt;The other big change I made was to give the player a better sense of progression in the tutorial. The objectives now stay visible in a box on the left-hand side of the screen. They have little animations and sounds that reward the player when they complete a task. Seeing that list grow shows how the player has progressed and is also rewarding by itself.&lt;/p&gt;
  47.  
  48. &lt;p&gt;Teaching the game doesn't only happen in the tutorial though, but also on the various signs and feedback we put around the game. Here's an example: during the tutorial, new players did not understand what was happening with the new building choice that was presented. The solution to this was not to explain with words what those buildings where, but to show a feedback. Now, whenever you gain a new building, you see that same building popping up in the center of the board, then moving towards the buildings roster. It's a double win: they understand that the building goes somewhere, they see where, and they are inclined to check that place and see what it is. I guess one feedback is worth a thousand words?&lt;/p&gt;
  49.  
  50. &lt;p&gt;This version of the tutorial is still far from perfect. But it is the first thing players interact with, and thus it is a piece of the game that really has to shine. We'll keep collecting feedback from new players, and use that to polish the tutorial until, like Eclairium, it shines bright.&lt;/p&gt;
  51.  
  52. &lt;p&gt;&lt;em&gt;BTW: unlike Eclairium, diamonds do not shine, they simply reflect light. &lt;a href=&quot;https://www.youtube.com/watch?v=lWA2pjMjpBs&quot;&gt;Rihanna has been lying to us all&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
  53.  
  54. &lt;h3&gt;Next event: Geektouch in Lyon&lt;/h3&gt;
  55.  
  56. &lt;p&gt;If you're in Lyon or close to it, come and meet us at the &lt;a href=&quot;https://www.geektouch-festival.com/&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Geektouch 4 &amp;amp; 5 mai 2024 à Lyon Eurexpo - GEEKTOUCH&quot;&gt;Geektouch / Japan Touch festival&lt;/a&gt; in Eurexpo on May 4th and 5th! We'll have a stand on the Indie Game Lab space (lot A87). You will of course get to play with the latest version of Dawnmaker. We hope to see you there!&lt;/p&gt;
  57.  
  58. &lt;hr /&gt;
  59. &lt;p&gt;This piece was initially sent out to the readers of our newsletter. Wanna join in on the fun? Head out to &lt;a href=&quot;https://arpentor.studio/games/dawnmaker/&quot; hreflang=&quot;en&quot;&gt;Dawnmaker's presentation page&lt;/a&gt; and fill the form. You'll receive regular stories about how we're making this game, the latest news of its development, as well as an exclusive access to Dawnmaker's alpha version!&lt;/p&gt;
  60.  
  61. &lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://arpentor.studio/games/dawnmaker/&quot; hreflang=&quot;en&quot; style=&quot;display: inline-block; border-radius: 1em; background-color: #C8D6AF; padding: 1em 2em; font-weight: bold; font-size: 1.1em;&quot;&gt;Join our community!&lt;/a&gt;&lt;/p&gt;</description>
  62. <pubDate>Fri, 03 May 2024 14:29:14 +0000</pubDate>
  63. <dc:creator>Adrian</dc:creator>
  64. </item>
  65. <item>
  66. <title>The Mozilla Blog: Abbie Richards on the wild world of conspiracy theories and battling misinformation on the internet</title>
  67. <guid isPermaLink="false">https://blog.mozilla.org/?p=74657</guid>
  68. <link>https://blog.mozilla.org/en/internet-culture/abbie-richards-misinformation-conspiracy-theories-mozilla-rise-25-election/</link>
  69. <description>&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;
  70.  
  71. &lt;/div&gt;&lt;/figure&gt;
  72.  
  73.  
  74.  
  75. &lt;p&gt;&lt;em&gt;At Mozilla, we know we can’t create a better future alone, that is why each year we will be highlighting the work of 25 digital leaders using technology to amplify voices, effect change, and build new technologies globally through our &lt;a href=&quot;https://rise25.mozilla.org/?_gl=1*585km0*_ga*MTY1MDQ4MTg2NC4xNjk5NDc0NTE5*_ga_X4N05QV93S*MTcwNzE4MDk3Ny40NC4wLjE3MDcxODA5NzcuMC4wLjA.&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Rise 25 Awards.&lt;/a&gt; These storytellers, innovators, activists, advocates, builders and artists are helping make the internet more diverse, ethical, responsible and inclusive.&lt;/em&gt;&lt;/p&gt;
  76.  
  77.  
  78.  
  79. &lt;p&gt;&lt;em&gt;This week, we chatted with Abbie Richards, a former stand-up comedian turned content creator dominating TikTok as a researcher, focusing on understanding how misinformation, conspiracy theories and extremism spread on the platform. She also is a co-founder of EcoTok, an environmental TikTok collective specializing in social media climate solutions. We talked with Abbie about finding emotional connections with audiences, the responsibility of social media platforms and more.&lt;/em&gt;&lt;/p&gt;
  80.  
  81.  
  82.  
  83. &lt;p&gt;&lt;strong&gt;First off, what’s the wildest conspiracy theory that you have seen online?&lt;/strong&gt;&lt;/p&gt;
  84.  
  85.  
  86.  
  87. &lt;p&gt;It’s hard to pick the wildest because I don’t know how to even begin to measure that. One that I think about a lot, though, is that I tend to really find the spirituality ones very interesting. There’s the new Earth one with people who think that the earth is going to be ascending into a higher dimension. And the way that that links to climate change — like when heat waves happen, and when the temperature is hotter than normal, and they’re like “it’s because the sun’s frequency is increasing because we’re going to ascend into a higher dimension.” And I am kind of obsessed with that line of thought. Also because they think that if you, your soul, vibrate at a high enough frequency — essentially, if your vibes are good enough — you will ascend, and if not, you will stay trapped here in dystopian earth post ascension which is wild because then you’re assigning some random, universal, numerical system for how good you are based on your vibrational frequency. Where is the cut off? At what point of vibrating am I officially good enough to ascend, or am I going to always vibrate too low? Are my vibes not good? And do I not bring good vibes to go to your paradise? I think about that one a lot.&lt;/p&gt;
  88.  
  89.  
  90.  
  91. &lt;p&gt;&lt;strong&gt;As someone who has driven through tons of misinformation and conspiracy theories all the time, what do you think are the most common things that people should be able to notice when they need to be able to identify if something’s fake? &lt;/strong&gt;&lt;/p&gt;
  92.  
  93.  
  94.  
  95. &lt;p&gt;So I have two answers to this. The first is that the biggest thing that people should know when they’re encountering this information and conspiracy theories online is that they need to check in with how a certain piece of information makes them feel. And if it’s a certain piece of information that they really, really want to believe, they should be especially skeptical, because that’s the number one thing. Not whether they can recognize something like that or if AI-generated human ears are janky. It’s the fact that they want to believe what the AI generated deepfake is saying and no matter how many tricks we can tell them about symmetry and about looking for clues that it is a deepfake, fundamentally, if they want to believe it, the thing will still stick in their brain. And they need to learn more about the emotional side of encountering this misinformation and conspiracy theories online. I would prioritize that over the tiny little tricks and tips for how to spot it, because really, it’s an emotional problem. When people lean into and dive into conspiracy theories, and they fall down a rabbit hole, it’s not because they’re not media literate enough. Fundamentally, it’s because it’s emotionally serving something for them. It’s meeting some sort of emotional psychological epistemic need to feel like they have control, to feel like they have certainty to feel like they understand things that other people don’t, and they’re in on knowledge to feel like they have a sense of community, right? Conspiracy theories create senses of community and make people feel like they’re part of a group. There are so many things that it’s providing that no amount of tips and tricks for spotting deepfakes will ever address. And we need to be addressing those. How can we help them feel in control? How can we help them feel empowered so that they don’t fall into this?&lt;/p&gt;
  96.  
  97.  
  98.  
  99. &lt;p&gt;The second to me is wanting to make sure that we’re putting the onus on the platforms rather than the people to decipher what is real and not real because people are going to consistently be bad at that, myself included. We all are quite bad at determining what’s real. I mean, we’re encountering more information in a day than our brains can even remotely keep up with. It’s really hard for us to decipher which things are true and not true. Our brains aren’t built for that. And while media literacy is great, there’s a much deeper emotional literacy that needs to come along with it, and also a shifting of that onus from the consumer onto the platforms.&lt;/p&gt;
  100.  
  101.  
  102. &lt;div class=&quot;wp-block-image&quot;&gt;
  103. &lt;figure class=&quot;aligncenter size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-74658&quot; height=&quot;1024&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2024/05/Mozilla_rise25_Abbie-Spector-Richards_1-683x1024.jpg&quot; width=&quot;683&quot; /&gt;&amp;lt;figcaption class=&quot;wp-element-caption&quot;&amp;gt;Abbie Richards at Mozilla’s Rise25 award ceremony in October 2023.&amp;lt;/figcaption&amp;gt;&lt;/figure&gt;&lt;/div&gt;
  104.  
  105.  
  106. &lt;p&gt;&lt;strong&gt;What are some of the ways these platforms could take more responsibility and combat misinformation on their platforms?&lt;/strong&gt;&lt;/p&gt;
  107.  
  108.  
  109.  
  110. &lt;p&gt;It’s hard. I’m not working within the platforms, so it’s hard to know what sort of infrastructure they have versus what they could have. It’s easy to look at what they’re doing and say that it’s not enough because I don’t know about their systems. It’s hard to make specific recommendations like “here’s what you should be doing to set up a more effective …”. What I can say is that, without a doubt, these mega corporations that are worth billions of dollars certainly have the resources to be investing in better moderation and figuring out ways to experiment with different ways. Try different things to see what works and encourage healthier content on your platform. Fundamentally, that’s the big shift. I can yell about content moderation all day, and I will, but the incentives on the platforms are not to create high quality, accurate information. The incentives on all of these platforms are entirely driven by profit, and how long they can keep you watching, and how many ads they can push to you, which means that the content that will thrive is the stuff that is the most engaging, which tends to be less accurate. It tends to be catering to your negative emotions, catering to things like outrage and that sort of content that is low quality, easy to produce, inaccurate, highly emotive content is what is set up to thrive on the platform. This is not a system that is functional with a couple of flaws, this misinformation crisis that we’re in is very much the results of the system functioning exactly as it’s intended.&lt;/p&gt;
  111.  
  112.  
  113.  
  114. &lt;p&gt;&lt;strong&gt;What do you think is the biggest challenge we face in the world this year on and offline? &lt;/strong&gt;&lt;/p&gt;
  115.  
  116.  
  117.  
  118. &lt;p&gt;It is going to be the biggest election year in history. We just have so many elections all around the world, and platforms that we know don’t serve healthy, functional democracy super well, and I am concerned about that combination of things this year.&lt;/p&gt;
  119.  
  120.  
  121.  
  122. &lt;p&gt;&lt;strong&gt;What do you think is one action that everybody can take to make the world, and our online lives, a little bit better?&lt;/strong&gt;&lt;/p&gt;
  123.  
  124.  
  125.  
  126. &lt;p&gt;I mean, log off (laughs). Sometimes log off. Go sit in silence just for a bit. Don’t say anything, don’t hear anything. Just go sit in silence. I swear to God it’ll change your life. I think we are in a state right now where we are chronically consuming so much information, like we are addicted to information, and just drinking it up, and I am begging people to at least just like an hour a week to not consume anything, and just see how that feels. If we could all just step back for a little bit and log off and rebel a little bit against having our minds commodified for these platforms to just sell ads, I really feel like that is one of the easiest things that people can do to take care of themselves.&lt;/p&gt;
  127.  
  128.  
  129.  
  130. &lt;p&gt;The other thing would be check in with your emotions. I can’t stress this enough. Like when you encounter information, how does that information make you feel? How much do you want to believe that information and those things. So very much, my advice is to slow down and feel your feelings.&lt;/p&gt;
  131.  
  132.  
  133.  
  134. &lt;p&gt;&lt;strong&gt;We started Rise25 to celebrate Mozilla’s 25th anniversary, what do you hope people are celebrating in the next 25 years?&lt;/strong&gt;&lt;/p&gt;
  135.  
  136.  
  137.  
  138. &lt;p&gt;I hope that we’ve created a nice socialist internet utopia where we have platforms that people can go interact and build community and create culture and share information and share stories in a way that isn’t driven entirely by what’s the most profitable. I’d like to be celebrating something where we’ve created the opposite of a clickbait economy where everybody takes breaks. I hope that that’s where we are at in 25 years.&lt;/p&gt;
  139.  
  140.  
  141.  
  142. &lt;p&gt;&lt;strong&gt;What gives you hope about the future of our world?&lt;/strong&gt;&lt;/p&gt;
  143.  
  144.  
  145.  
  146. &lt;p&gt;I interact with so many brilliant people who care so much and are doing such cool work because they care, and they want to make the world better, and that gives me a lot of hope. In general. I think that approaching all of these issues from an emotional lens and understanding that, people in general just want to feel safe and secure, and they just want to feel like they know what’s coming around the corner for them, and they can have their peaceful lives, is a much more hopeful way to think about pretty scary kind of political divides. I think that there is genuinely a lot more that we have in common than there are things that we have differences. It’s just that right now, those differences feel very loud. There are so many great people doing such good work with so many different perspectives, and combined, we are so smart together. On top of that, people just want to feel safe and secure. And if we can figure out a way to help people feel safe and secure and help them feel like their needs are being met, we could create a much healthier society collectively.&lt;/p&gt;
  147.  
  148.  
  149.  
  150. &lt;a class=&quot;ft-c-inline-cta&quot; href=&quot;https://www.mozilla.org/en-US/firefox/new?utm_medium=mozilla-websites&amp;amp;utm_source=blog.mozilla.org&amp;amp;utm_content=inline-cta&quot;&gt;
  151.  &lt;div class=&quot;ft-c-inline-cta__media&quot;&gt;
  152.  &lt;img alt=&quot;&quot; class=&quot;attachment-1x1 size-1x1&quot; height=&quot;512&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2020/12/Fx-Browser-icon-fullColor-512-512x512.png&quot; width=&quot;512&quot; /&gt;  &lt;/div&gt;
  153.  &lt;div class=&quot;ft-c-inline-cta__content&quot;&gt;
  154.     &lt;h3&gt;Get Firefox&lt;/h3&gt;      &lt;span&gt;Get the browser that protects what’s important&lt;/span&gt;   &lt;/div&gt;
  155. &lt;/a&gt;
  156. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/internet-culture/abbie-richards-misinformation-conspiracy-theories-mozilla-rise-25-election/&quot;&gt;Abbie Richards on the wild world of conspiracy theories and battling misinformation on the internet&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;</description>
  157. <pubDate>Fri, 03 May 2024 13:00:00 +0000</pubDate>
  158. <dc:creator>Aron Yohannes</dc:creator>
  159. </item>
  160. <item>
  161. <title>Mozilla Addons Blog: 1000+ Firefox for Android extensions now available</title>
  162. <guid isPermaLink="false">https://blog.mozilla.org/addons/?p=9166</guid>
  163. <link>https://blog.mozilla.org/addons/2024/05/02/1000-firefox-for-android-extensions-now-available/</link>
  164. <description>&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;alignleft size-medium wp-image-9167&quot; height=&quot;326&quot; src=&quot;https://blog.mozilla.org/addons/files/2024/05/android_pic-580x326.png&quot; width=&quot;580&quot; /&gt;The new open ecosystem of extensions on Firefox for Android &lt;a href=&quot;https://blog.mozilla.org/addons/2023/12/14/a-new-world-of-open-extensions-on-firefox-for-android-has-arrived/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;launched in December with just over 400 extensions&lt;/a&gt;. Less than five months later we’ve &lt;a href=&quot;https://addons.mozilla.org/android/search/?sort=users&amp;amp;type=extension&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;surpassed 1,000 Firefox for Android extensions&lt;/a&gt;. That’s an impressive achievement by this developer community! It’s exciting to see so many developers embrace the opportunity to explore new creative possibilities for mobile browser customization.&lt;/p&gt;
  165. &lt;p&gt;If you’re a developer intrigued to learn more about building extensions on Firefox for Android, here’s a great place to &lt;a href=&quot;https://extensionworkshop.com/documentation/develop/developing-extensions-for-firefox-for-android/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;get started&lt;/a&gt;. Or maybe you already have some &lt;a href=&quot;https://discourse.mozilla.org/t/top-apis-mising-on-firefox-for-android/124506&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;feedback about missing API’s on Firefox for Android?&lt;/a&gt;&lt;/p&gt;
  166. &lt;p&gt;What are some of your favorite new Firefox for Android extensions? Drop some props in the comments below.&lt;/p&gt;
  167. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/addons/2024/05/02/1000-firefox-for-android-extensions-now-available/&quot;&gt;1000+ Firefox for Android extensions now available&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/addons&quot;&gt;Mozilla Add-ons Community Blog&lt;/a&gt;.&lt;/p&gt;</description>
  168. <pubDate>Thu, 02 May 2024 19:54:59 +0000</pubDate>
  169. <dc:creator>Scott DeVaney</dc:creator>
  170. </item>
  171. <item>
  172. <title>Mozilla Localization (L10N): L10n report: May 2024 Edition</title>
  173. <guid isPermaLink="false">https://blog.mozilla.org/l10n/?p=1675</guid>
  174. <link>https://blog.mozilla.org/l10n/2024/05/02/l10n-report-may-2024-edition/</link>
  175. <description>&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;
  176. &lt;h3&gt;New content and projects&lt;/h3&gt;
  177. &lt;h4&gt;What’s new or coming up in Firefox desktop&lt;/h4&gt;
  178. &lt;p&gt;To start, a “logistic” announcement: on April 29 we changed the configuration of the Firefox project in Pontoon to use a different repository for source (English) strings. This is part of a larger change that will &lt;a href=&quot;https://groups.google.com/a/mozilla.org/g/firefox-dev/c/QnfydsDj48o/m/8WadV0_dBQAJ&quot;&gt;move Firefox development from Mercurial to Git&lt;/a&gt;.&lt;/p&gt;
  179. &lt;p&gt;While the change was mostly transparent for localizers, there is an added benefit: as part of the Firefox project, you will now be able to localize about 40 strings that are used by &lt;a href=&quot;https://mozilla.github.io/geckoview/&quot;&gt;GeckoView&lt;/a&gt;, the core of our Android browsers (Firefox, Focus). For your convenience, these are grouped in a specific tag called GeckoView. Since these are mostly old strings dating back to Fennec (Firefox for Android up to version 68), you will also find that existing translations have been imported — in fact, we imported over 4 thousand translations.&lt;/p&gt;
  180. &lt;p&gt;Going back to Firefox desktop, version 127 is currently in Nightly, and will move to Beta on May 13. Over the past few weeks there have been a few new features and updates that’s it’s worth testing to ensure the best experience for users.&lt;/p&gt;
  181. &lt;p&gt;You are probably aware of the &lt;a href=&quot;https://support.mozilla.org/kb/website-translation&quot;&gt;Firefox Translations&lt;/a&gt; feature available for a growing number of languages. While this feature was originally available for full-page translation, now it’s also possible to select text in the page and translate it through the context menu.&lt;/p&gt;
  182. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1682&quot; style=&quot;width: 610px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2024/05/select_translate.png&quot;&gt;&lt;img alt=&quot;Screenshot of the translation selection feature in Firefox.&quot; class=&quot;wp-image-1682 size-large&quot; height=&quot;388&quot; src=&quot;https://blog.mozilla.org/l10n/files/2024/05/select_translate-600x388.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1682&quot;&gt;Screenshot of the Translation selection feature in Firefox.&lt;/p&gt;&lt;/div&gt;
  183. &lt;p&gt;&lt;a href=&quot;https://support.mozilla.org/kb/firefox-reader-view-clutter-free-web-pages&quot;&gt;Reader Mode&lt;/a&gt; is also in the process of getting a redesign, with more controls to customize the user experience.&lt;/p&gt;
  184. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1681&quot; style=&quot;width: 610px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2024/05/reader_mode.png&quot;&gt;&lt;img alt=&quot;Screenshot of the Reader Mode settings in Firefox Nightly.&quot; class=&quot;wp-image-1681 size-large&quot; height=&quot;374&quot; src=&quot;https://blog.mozilla.org/l10n/files/2024/05/reader_mode-600x374.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1681&quot;&gt;Screenshot of the Reader Mode settings in Firefox Nightly.&lt;/p&gt;&lt;/div&gt;
  185. &lt;p&gt;The New Tab page has a new wallpaper function: in order to test it, go to &lt;code&gt;about:config&lt;/code&gt; (see &lt;a href=&quot;https://support.mozilla.org/kb/about-config-editor-firefox&quot;&gt;this page&lt;/a&gt; if you’re unfamiliar), search for &lt;code&gt;browser.newtabpage.activity-stream.newtabWallpapers.enabled&lt;/code&gt; and flip its value to &lt;code&gt;true&lt;/code&gt; (double-click will work). At this point, open a new tab and click the gear icon in the top-right corner. Note that the available wallpapers change depending on the current theme (dark vs light).&lt;/p&gt;
  186. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1678&quot; style=&quot;width: 610px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2024/05/newtab_wallpaper.png&quot;&gt;&lt;img alt=&quot;Screenshot of New Tab wallpaper selection in Nightly.&quot; class=&quot;size-large wp-image-1678&quot; height=&quot;504&quot; src=&quot;https://blog.mozilla.org/l10n/files/2024/05/newtab_wallpaper-600x504.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1678&quot;&gt;Screenshot of New Tab wallpaper selection in Nightly.&lt;/p&gt;&lt;/div&gt;
  187. &lt;p&gt;Last but not least, make sure to test the new features available in the integrated PDF Reader, in particular the dialog to &lt;a href=&quot;https://support.mozilla.org/kb/view-pdf-files-firefox-or-choose-another-viewer#w_add-an-image-to-pdf-files&quot;&gt;add images&lt;/a&gt; and &lt;a href=&quot;https://support.mozilla.org/kb/view-pdf-files-firefox-or-choose-another-viewer#w_highlight-in-pdf-files&quot;&gt;highlight&lt;/a&gt; elements in the page.&lt;/p&gt;
  188. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1679&quot; style=&quot;width: 610px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2024/05/pdf_viewer.png&quot;&gt;&lt;img alt=&quot;Screenshot of the PDF Viewer in Firefox, with the &amp;quot;Add image&amp;quot; UI.&quot; class=&quot;size-large wp-image-1679&quot; height=&quot;501&quot; src=&quot;https://blog.mozilla.org/l10n/files/2024/05/pdf_viewer-600x501.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1679&quot;&gt;Screenshot of the PDF Viewer in Firefox, with the “Add image” UI.&lt;/p&gt;&lt;/div&gt;
  189. &lt;h4&gt;What’s new or coming up in mobile&lt;/h4&gt;
  190. &lt;p&gt;The mobile team is currently redesigning the app menus in Firefox Android and iOS. There will be many new menu strings landing in the upcoming versions (you may have already noticed some prelanding), including some dynamic menu text that may get truncated for some locales – especially on smaller screens.&lt;/p&gt;
  191. &lt;p&gt;Testing for this type of localization issues will be a focus: we’ll set expectations for it soon and send testing instructions (v130 or v131 releases are currently the target). Strings will be making their way incrementally in the new menus available through Firefox Nightly, allowing enough time for localizers to translate and test continuously.&lt;/p&gt;
  192. &lt;h4&gt;What’s new or coming up in web projects&lt;/h4&gt;
  193. &lt;h5&gt;Mozilla.org&lt;/h5&gt;
  194. &lt;p&gt;The mozilla.org team is creating a regular cleanup routine by labeling the soon-to-be replaced strings with an expiration date, usually two months after the string has become obsolete. This approach will minimize communities’ time localizing strings no longer used. In other words, if you see a string labeled with a date, please skip it. Below is an example, and in this case, you want to localize the v2 string:&lt;/p&gt;
  195. &lt;blockquote style=&quot;font-family: Monospace;&quot;&gt;&lt;p&gt;example-v2 = Security, reliability and speed — on every device, anywhere you go.&lt;/p&gt;
  196. &lt;p&gt;# Obsolete string (expires: 2024-03-18)&lt;br /&gt;
  197. example = Security, reliability and speed — from a name you can trust.&lt;/p&gt;&lt;/blockquote&gt;
  198. &lt;h5&gt;Relay Website&lt;/h5&gt;
  199. &lt;p&gt;This product is in maintenance mode and it will not be open for new locales until we remove obsolete strings and revert the content migration to mozilla.org (see also &lt;a href=&quot;https://blog.mozilla.org/l10n/2023/11/03/l10n-report-november-2023-edition/&quot;&gt;l10n report from November 2023&lt;/a&gt;).&lt;/p&gt;
  200. &lt;h4&gt;What’s new or coming up in SUMO&lt;/h4&gt;
  201. &lt;ul&gt;
  202. &lt;li&gt;&lt;a href=&quot;https://blog.mozilla.org/sumo/2024/03/25/introducing-konstantina/&quot;&gt;Konstantina&lt;/a&gt; is joining the SUMO force! She moved from the Marketing team to the Customer Experience team in late Q1. If you haven’t get to know her, please don’t hesitate to say hi!&lt;/li&gt;
  203. &lt;li&gt;AI spam has been a big issue in our forum lately, so we decided to spin up a new contributor policy around the use of AI-generated tools. Please check&lt;a href=&quot;https://support.mozilla.org/forums/contributors/716669?last=86840&quot;&gt; this thread&lt;/a&gt; if you haven’t!&lt;/li&gt;
  204. &lt;li&gt;We opened an&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885070&quot;&gt; AAQ for NL&lt;/a&gt; in our support forum. Thanks to Tim Maks and the rest of the NL community, who’ve been very supportive of this work.&lt;/li&gt;
  205. &lt;li&gt;Are you contributing to our Knowledge Base? You may want to read the recent blog posts from the content team to get to know more about&lt;a href=&quot;https://blog.mozilla.org/sumo/2024/04/09/keeping-you-in-the-loop-whats-new-in-our-knowledge-base/&quot;&gt; what they’re up to&lt;/a&gt;. In short, they’re doing a lot around&lt;a href=&quot;https://blog.mozilla.org/sumo/2024/04/18/freshening-up-the-knowledge-base-for-spring-2024/&quot;&gt; freshening up our knowledge base articles&lt;/a&gt;.&lt;/li&gt;
  206. &lt;li&gt;Wanna know more about what we’ve done in Q1 2024, read the recap &lt;a href=&quot;https://blog.mozilla.org/sumo/2024/04/30/whats-up-with-sumo-q1-2024/&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;
  207. &lt;/ul&gt;
  208. &lt;h4&gt;What’s new or coming up in Pontoon&lt;/h4&gt;
  209. &lt;h5&gt;Large Language Model (LLM) Integration&lt;/h5&gt;
  210. &lt;p&gt;We’re thrilled to announce the integration of LLM-assisted translations into Pontoon! For all locales utilizing Google Translate as a translation source, a new AI-powered option is now available within the ‘Machinery’ tab. This feature enhances Google Translate outputs by leveraging a Large Language Model (LLM). Users can now tailor translations to be more formal or informal and rephrase text for clarity and tone.&lt;/p&gt;
  211. &lt;p&gt;Since January, our team has conducted extensive research to explore how other localization services are utilizing AI. We specifically focused on comparing the capabilities of Large Language Models (LLMs) against traditional machine translation methods and identifying industry best practices.&lt;/p&gt;
  212. &lt;p&gt;Our findings revealed that while tools like Google Translate provide a solid foundation, they sometimes fall short, often translating text too literally. Recognizing the potential for improvement, we introduced functionality within Pontoon to adjust the tone and refine phrases directly.&lt;/p&gt;
  213. &lt;p&gt;For example, consider the phrase “Firefox has your back” translated in the Italian locale. The suggestion provided by Google’s machine translation is literal and incorrect (“Firefox covers your shoulders”). The images below demonstrate the use of the “Rephrase” option:&lt;/p&gt;
  214. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1677&quot; style=&quot;width: 472px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2024/05/llm2.png&quot;&gt;&lt;img alt=&quot;Screenshot of the LLM feature in Pontoon (before selecting a command).&quot; class=&quot;size-full wp-image-1677&quot; height=&quot;374&quot; src=&quot;https://blog.mozilla.org/l10n/files/2024/05/llm2.png&quot; width=&quot;462&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1677&quot;&gt;Dropdown to use the LLM feature&lt;/p&gt;&lt;/div&gt;
  215. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1676&quot; style=&quot;width: 459px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2024/05/llm1.png&quot;&gt;&lt;img alt=&quot;Screenshot of the LLM feature in Pontoon (after selecting the rephrase command).&quot; class=&quot;size-full wp-image-1676&quot; height=&quot;351&quot; src=&quot;https://blog.mozilla.org/l10n/files/2024/05/llm1.png&quot; width=&quot;449&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1676&quot;&gt;Enhanced translation output from the LLM rephrasing the initial Google Translate result.&lt;/p&gt;&lt;/div&gt;
  216. &lt;p&gt;Furthering our community engagement, on April 29th, we hosted a Localization Fireside Chat. During this session, we discussed the new feature in depth and provided a live demonstration. Catch the highlights of our discussion at the following recordings (the LLM feature is discussed at the 7:22 mark):&lt;/p&gt;
  217. &lt;ul&gt;
  218. &lt;li&gt;&lt;b&gt;AirMozilla:&lt;/b&gt;&lt;a href=&quot;https://mzl.la/localization-fireside-chat-2024-04-29&quot;&gt; View Recording&lt;/a&gt;&lt;/li&gt;
  219. &lt;li&gt;&lt;b&gt;YouTube: &lt;/b&gt;&lt;a href=&quot;https://youtube.com/live/eUcHRDaaFe0?feature=share&quot;&gt;View Recording&lt;/a&gt;&lt;/li&gt;
  220. &lt;/ul&gt;
  221. &lt;h5&gt;Performance improvements&lt;/h5&gt;
  222. &lt;p&gt;At the end of the last year we’ve &lt;a href=&quot;https://blog.mozilla.org/l10n/2023/12/20/2024-pontoon-survey-results/&quot;&gt;asked&lt;/a&gt; Mozilla localizers what areas of &lt;a href=&quot;https://pontoon.mozilla.org/&quot;&gt;Pontoon&lt;/a&gt; would they like to see improved. Performance optimizations were one of the top-voted requests and we’re happy to report we’ve landed several speedups since the beginning of the year.&lt;/p&gt;
  223. &lt;p&gt;Most notable improvements were made to the dashboards, with Contributors, Insights and Tags pages now loading in a fraction of the time they took to load earlier in the year. We’ve also improved the loading times of Permissions tab, Notifications page and some filters.&lt;/p&gt;
  224. &lt;p&gt;As shown in the chart below, almost all the pages and actions will now take less time to load.&lt;/p&gt;
  225. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1680&quot; style=&quot;width: 610px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2024/05/pontoon_perfs.png&quot;&gt;&lt;img alt=&quot;Chart showing the apdex score of several views in Pontoon.&quot; class=&quot;wp-image-1680 size-large&quot; height=&quot;283&quot; src=&quot;https://blog.mozilla.org/l10n/files/2024/05/pontoon_perfs-600x283.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1680&quot;&gt;Chart showing the improved apdex score of several views in Pontoon.&lt;/p&gt;&lt;/div&gt;
  226. &lt;h3&gt;Events&lt;/h3&gt;
  227. &lt;p&gt;Watch our latest localization virtual events &lt;a href=&quot;https://mozilla.hosted.panopto.com/Panopto/Pages/Sessions/List.aspx#folderID=%220e65cd7b-1564-4b1c-9537-aff1000a5aa5%22&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  228. &lt;p&gt;Want to showcase an event coming up that your community is participating in? &lt;a href=&quot;mailto:l10n-drivers@mozilla.org&quot;&gt;Contact us&lt;/a&gt; and we’ll include it.&lt;/p&gt;
  229. &lt;h3&gt;Useful Links&lt;/h3&gt;
  230. &lt;ul&gt;
  231. &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;
  232. &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;
  233. &lt;li&gt;&lt;a href=&quot;https://twitter.com/mozilla_l10n&quot;&gt;Twitter&lt;/a&gt;&lt;/li&gt;
  234. &lt;li&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/&quot;&gt;L10n blog&lt;/a&gt;&lt;/li&gt;
  235. &lt;/ul&gt;
  236. &lt;h3&gt;Questions? Want to get involved?&lt;/h3&gt;
  237. &lt;p&gt;If you want to get involved, or have any question about l10n, reach out to:&lt;/p&gt;
  238. &lt;ul&gt;
  239. &lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/mZuzEFP7EcmgBBTbvtgJP2LFFTY/&quot;&gt;Francesco Lodolo (flod)&lt;/a&gt; – Engineering Manager&lt;/li&gt;
  240. &lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/CMLZ_n1lNNSfQScLGE2yBmlS55w/&quot;&gt;Bryan&lt;/a&gt; – l10n Project Manager&lt;/li&gt;
  241. &lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/3LPn77ppB_IQ9F6ruL5lw2IVrvQ/&quot;&gt;Delphine&lt;/a&gt; – l10n Project Manager for mobile&lt;/li&gt;
  242. &lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/jIdunhnZ8Edgi9npILuSoFvf5ZY/&quot;&gt;Peiying (CocoMo)&lt;/a&gt; – l10n Project Manager for mozilla.org, marketing, and legal&lt;/li&gt;
  243. &lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/m6r3HOfoijMdyeJNKKFHchjjRbw/&quot;&gt;Francis&lt;/a&gt; – l10n Project Manager for Common Voice, Mozilla Foundation&lt;/li&gt;
  244. &lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/lY_FTvtnYcVoDP7JYZjMsm6tRno/&quot;&gt;Théo Chevalier&lt;/a&gt; – l10n Project Manager for Mozilla Foundation&lt;/li&gt;
  245. &lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/dvgiVCmoeidF2xcqSnBHtpzLTFU/&quot;&gt;Matjaž (mathjazz)&lt;/a&gt; – Pontoon dev&lt;/li&gt;
  246. &lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/pmz0uSCe_Mk9Td1cksHLI1y471k/&quot;&gt;Eemeli&lt;/a&gt; – Pontoon, Fluent dev&lt;/li&gt;
  247. &lt;/ul&gt;
  248. &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;</description>
  249. <pubDate>Thu, 02 May 2024 16:01:16 +0000</pubDate>
  250. <dc:creator>Francesco Lodolo [:flod]</dc:creator>
  251. </item>
  252. <item>
  253. <title>The Rust Programming Language Blog: Announcing Rust 1.78.0</title>
  254. <guid isPermaLink="true">https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html</guid>
  255. <link>https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html</link>
  256. <description>&lt;p&gt;The Rust team is happy to announce a new version of Rust, 1.78.0. Rust is a programming language empowering everyone to build reliable and efficient software.&lt;/p&gt;
  257. &lt;p&gt;If you have a previous version of Rust installed via &lt;code&gt;rustup&lt;/code&gt;, you can get 1.78.0 with:&lt;/p&gt;
  258. &lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ rustup update stable
  259. &lt;/code&gt;&lt;/pre&gt;
  260. &lt;p&gt;If you don't have it already, you can &lt;a href=&quot;https://www.rust-lang.org/install.html&quot;&gt;get &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/nightly/releases.html#version-1780-2024-05-02&quot;&gt;detailed release notes for 1.78.0&lt;/a&gt;.&lt;/p&gt;
  261. &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;&gt;report&lt;/a&gt; any bugs you might come across!&lt;/p&gt;
  262. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html#whats-in-1780-stable&quot; id=&quot;whats-in-1780-stable&quot;&gt;&lt;/a&gt;What's in 1.78.0 stable&lt;/h3&gt;
  263. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html#diagnostic-attributes&quot; id=&quot;diagnostic-attributes&quot;&gt;&lt;/a&gt;Diagnostic attributes&lt;/h4&gt;
  264. &lt;p&gt;Rust now supports a &lt;code&gt;#[diagnostic]&lt;/code&gt; attribute namespace to influence compiler error messages. These are treated as hints which the compiler is not &lt;em&gt;required&lt;/em&gt; to use, and it is also not an error to provide a diagnostic that the compiler doesn't recognize. This flexibility allows source code to provide diagnostics even when they're not supported by all compilers, whether those are different versions or entirely different implementations.&lt;/p&gt;
  265. &lt;p&gt;With this namespace comes the first supported attribute, &lt;code&gt;#[diagnostic::on_unimplemented]&lt;/code&gt;, which can be placed on a trait to customize the message when that trait is required but hasn't been implemented on a type. Consider the example given in the &lt;a href=&quot;https://github.com/rust-lang/rust/pull/119888/&quot;&gt;stabilization pull request&lt;/a&gt;:&lt;/p&gt;
  266. &lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;#[diagnostic::on_unimplemented(
  267.    message = &quot;My Message for `ImportantTrait&amp;lt;{A}&amp;gt;` is not implemented for `{Self}`&quot;,
  268.    label = &quot;My Label&quot;,
  269.    note = &quot;Note 1&quot;,
  270.    note = &quot;Note 2&quot;
  271. )]
  272. trait ImportantTrait&amp;lt;A&amp;gt; {}
  273.  
  274. fn use_my_trait(_: impl ImportantTrait&amp;lt;i32&amp;gt;) {}
  275.  
  276. fn main() {
  277.    use_my_trait(String::new());
  278. }
  279. &lt;/code&gt;&lt;/pre&gt;
  280. &lt;p&gt;Previously, the compiler would give a builtin error like this:&lt;/p&gt;
  281. &lt;pre&gt;&lt;code&gt;error[E0277]: the trait bound `String: ImportantTrait&amp;lt;i32&amp;gt;` is not satisfied
  282.  --&amp;gt; src/main.rs:12:18
  283.   |
  284. 12 |     use_my_trait(String::new());
  285.   |     ------------ ^^^^^^^^^^^^^ the trait `ImportantTrait&amp;lt;i32&amp;gt;` is not implemented for `String`
  286.   |     |
  287.   |     required by a bound introduced by this call
  288.   |
  289. &lt;/code&gt;&lt;/pre&gt;
  290. &lt;p&gt;With &lt;code&gt;#[diagnostic::on_unimplemented]&lt;/code&gt;, its custom message fills the primary error line, and its custom label is placed on the source output. The original label is still written as help output, and any custom notes are written as well. (These exact details are subject to change.)&lt;/p&gt;
  291. &lt;pre&gt;&lt;code&gt;error[E0277]: My Message for `ImportantTrait&amp;lt;i32&amp;gt;` is not implemented for `String`
  292.  --&amp;gt; src/main.rs:12:18
  293.   |
  294. 12 |     use_my_trait(String::new());
  295.   |     ------------ ^^^^^^^^^^^^^ My Label
  296.   |     |
  297.   |     required by a bound introduced by this call
  298.   |
  299.   = help: the trait `ImportantTrait&amp;lt;i32&amp;gt;` is not implemented for `String`
  300.   = note: Note 1
  301.   = note: Note 2
  302. &lt;/code&gt;&lt;/pre&gt;
  303. &lt;p&gt;For trait authors, this kind of diagnostic is more useful if you can provide a better hint than just talking about the missing implementation itself. For example, this is an abridged sample from the standard library:&lt;/p&gt;
  304. &lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;#[diagnostic::on_unimplemented(
  305.    message = &quot;the size for values of type `{Self}` cannot be known at compilation time&quot;,
  306.    label = &quot;doesn't have a size known at compile-time&quot;
  307. )]
  308. pub trait Sized {}
  309. &lt;/code&gt;&lt;/pre&gt;
  310. &lt;p&gt;For more information, see the reference section on &lt;a href=&quot;https://doc.rust-lang.org/stable/reference/attributes/diagnostics.html#the-diagnostic-tool-attribute-namespace&quot;&gt;the &lt;code&gt;diagnostic&lt;/code&gt; tool attribute namespace&lt;/a&gt;.&lt;/p&gt;
  311. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html#asserting-unsafe-preconditions&quot; id=&quot;asserting-unsafe-preconditions&quot;&gt;&lt;/a&gt;Asserting &lt;code&gt;unsafe&lt;/code&gt; preconditions&lt;/h4&gt;
  312. &lt;p&gt;The Rust standard library has a number of assertions for the preconditions of &lt;code&gt;unsafe&lt;/code&gt; functions, but historically they have only been enabled in &lt;code&gt;#[cfg(debug_assertions)]&lt;/code&gt; builds of the standard library to avoid affecting release performance. However, since the standard library is usually compiled and distributed in release mode, most Rust developers weren't ever executing these checks at all.&lt;/p&gt;
  313. &lt;p&gt;Now, the condition for these assertions is delayed until code generation, so they will be checked depending on the user's own setting for debug assertions -- enabled by default in debug and test builds. This change helps users catch undefined behavior in their code, though the details of how much is checked are generally not stable.&lt;/p&gt;
  314. &lt;p&gt;For example, &lt;a href=&quot;https://doc.rust-lang.org/std/slice/fn.from_raw_parts.html&quot;&gt;&lt;code&gt;slice::from_raw_parts&lt;/code&gt;&lt;/a&gt; requires an aligned non-null pointer. The following use of a purposely-misaligned pointer has undefined behavior, and while if you were unlucky it may have &lt;em&gt;appeared&lt;/em&gt; to &quot;work&quot; in the past, the debug assertion can now catch it:&lt;/p&gt;
  315. &lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;fn main() {
  316.    let slice: &amp;amp;[u8] = &amp;amp;[1, 2, 3, 4, 5];
  317.    let ptr = slice.as_ptr();
  318.  
  319.    // Create an offset from `ptr` that will always be one off from `u16`'s correct alignment
  320.    let i = usize::from(ptr as usize &amp;amp; 1 == 0);
  321.    
  322.    let slice16: &amp;amp;[u16] = unsafe { std::slice::from_raw_parts(ptr.add(i).cast::&amp;lt;u16&amp;gt;(), 2) };
  323.    dbg!(slice16);
  324. }
  325. &lt;/code&gt;&lt;/pre&gt;
  326. &lt;pre&gt;&lt;code&gt;thread 'main' panicked at library/core/src/panicking.rs:220:5:
  327. unsafe precondition(s) violated: slice::from_raw_parts requires the pointer to be aligned and non-null, and the total size of the slice not to exceed `isize::MAX`
  328. note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
  329. thread caused non-unwinding panic. aborting.
  330. &lt;/code&gt;&lt;/pre&gt;
  331. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html#deterministic-realignment&quot; id=&quot;deterministic-realignment&quot;&gt;&lt;/a&gt;Deterministic realignment&lt;/h4&gt;
  332. &lt;p&gt;The standard library has a few functions that change the alignment of pointers and slices, but they previously had caveats that made them difficult to rely on in practice, if you followed their documentation precisely. Those caveats primarily existed as a hedge against &lt;code&gt;const&lt;/code&gt; evaluation, but they're only stable for non-&lt;code&gt;const&lt;/code&gt; use anyway. They are now promised to have consistent runtime behavior according to their actual inputs.&lt;/p&gt;
  333. &lt;ul&gt;
  334. &lt;li&gt;
  335. &lt;p&gt;&lt;a href=&quot;https://doc.rust-lang.org/std/primitive.pointer.html#method.align_offset&quot;&gt;&lt;code&gt;pointer::align_offset&lt;/code&gt;&lt;/a&gt; computes the offset needed to change a pointer to the given alignment. It returns &lt;code&gt;usize::MAX&lt;/code&gt; if that is not possible, but it was previously permitted to &lt;em&gt;always&lt;/em&gt; return &lt;code&gt;usize::MAX&lt;/code&gt;, and now that behavior is removed.&lt;/p&gt;
  336. &lt;/li&gt;
  337. &lt;li&gt;
  338. &lt;p&gt;&lt;a href=&quot;https://doc.rust-lang.org/std/primitive.slice.html#method.align_to&quot;&gt;&lt;code&gt;slice::align_to&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://doc.rust-lang.org/std/primitive.slice.html#method.align_to_mut&quot;&gt;&lt;code&gt;slice::align_to_mut&lt;/code&gt;&lt;/a&gt; both transmute slices to an aligned middle slice and the remaining unaligned head and tail slices. These methods now promise to return the largest possible middle part, rather than allowing the implementation to return something less optimal like returning everything as the head slice.&lt;/p&gt;
  339. &lt;/li&gt;
  340. &lt;/ul&gt;
  341. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html#stabilized-apis&quot; id=&quot;stabilized-apis&quot;&gt;&lt;/a&gt;Stabilized APIs&lt;/h4&gt;
  342. &lt;ul&gt;
  343. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/io/struct.Stdin.html#impl-Read-for-%26Stdin&quot;&gt;&lt;code&gt;impl Read for &amp;amp;Stdin&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  344. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/113833/&quot;&gt;Accept non &lt;code&gt;'static&lt;/code&gt; lifetimes for several &lt;code&gt;std::error::Error&lt;/code&gt; related implementations&lt;/a&gt;&lt;/li&gt;
  345. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/114655/&quot;&gt;Make &lt;code&gt;impl&amp;lt;Fd: AsFd&amp;gt;&lt;/code&gt; impl take &lt;code&gt;?Sized&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  346. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/io/struct.Error.html#impl-From%3CTryReserveError%3E-for-Error&quot;&gt;&lt;code&gt;impl From&amp;lt;TryReserveError&amp;gt; for io::Error&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  347. &lt;/ul&gt;
  348. &lt;p&gt;These APIs are now stable in const contexts:&lt;/p&gt;
  349. &lt;ul&gt;
  350. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/sync/struct.Barrier.html#method.new&quot;&gt;&lt;code&gt;Barrier::new()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  351. &lt;/ul&gt;
  352. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html#compatibility-notes&quot; id=&quot;compatibility-notes&quot;&gt;&lt;/a&gt;Compatibility notes&lt;/h4&gt;
  353. &lt;ul&gt;
  354. &lt;li&gt;As &lt;a href=&quot;https://blog.rust-lang.org/2024/02/26/Windows-7.html&quot;&gt;previously announced&lt;/a&gt;, Rust 1.78 has increased its minimum requirement to Windows 10 for the following targets:
  355. &lt;ul&gt;
  356. &lt;li&gt;&lt;code&gt;x86_64-pc-windows-msvc&lt;/code&gt;&lt;/li&gt;
  357. &lt;li&gt;&lt;code&gt;i686-pc-windows-msvc&lt;/code&gt;&lt;/li&gt;
  358. &lt;li&gt;&lt;code&gt;x86_64-pc-windows-gnu&lt;/code&gt;&lt;/li&gt;
  359. &lt;li&gt;&lt;code&gt;i686-pc-windows-gnu&lt;/code&gt;&lt;/li&gt;
  360. &lt;li&gt;&lt;code&gt;x86_64-pc-windows-gnullvm&lt;/code&gt;&lt;/li&gt;
  361. &lt;li&gt;&lt;code&gt;i686-pc-windows-gnullvm&lt;/code&gt;&lt;/li&gt;
  362. &lt;/ul&gt;
  363. &lt;/li&gt;
  364. &lt;li&gt;Rust 1.78 has upgraded its bundled LLVM to version 18, completing the announced &lt;a href=&quot;https://blog.rust-lang.org/2024/03/30/i128-layout-update.html&quot;&gt;&lt;code&gt;u128&lt;/code&gt;/&lt;code&gt;i128&lt;/code&gt; ABI change&lt;/a&gt; for x86-32 and x86-64 targets. Distributors that use their own LLVM older than 18 may still face the calling convention bugs mentioned in that post.&lt;/li&gt;
  365. &lt;/ul&gt;
  366. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html#other-changes&quot; id=&quot;other-changes&quot;&gt;&lt;/a&gt;Other changes&lt;/h4&gt;
  367. &lt;p&gt;Check out everything that changed in &lt;a href=&quot;https://github.com/rust-lang/rust/releases/tag/1.78.0&quot;&gt;Rust&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-lang/cargo/blob/master/CHANGELOG.md#cargo-178-2024-05-02&quot;&gt;Cargo&lt;/a&gt;, and &lt;a href=&quot;https://github.com/rust-lang/rust-clippy/blob/master/CHANGELOG.md#rust-178&quot;&gt;Clippy&lt;/a&gt;.&lt;/p&gt;
  368. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html#contributors-to-1780&quot; id=&quot;contributors-to-1780&quot;&gt;&lt;/a&gt;Contributors to 1.78.0&lt;/h3&gt;
  369. &lt;p&gt;Many people came together to create Rust 1.78.0. We couldn't have done it without all of you. &lt;a href=&quot;https://thanks.rust-lang.org/rust/1.78.0/&quot;&gt;Thanks!&lt;/a&gt;&lt;/p&gt;</description>
  370. <pubDate>Thu, 02 May 2024 00:00:00 +0000</pubDate>
  371. <dc:creator>The Rust Release Team</dc:creator>
  372. </item>
  373. <item>
  374. <title>Dave Townsend: Tests don't replace Code Review</title>
  375. <guid isPermaLink="true">https://www.oxymoronical.com/blog/2024/05/tests-dont-replace-code-review/</guid>
  376. <link>https://www.oxymoronical.com/blog/2024/05/tests-dont-replace-code-review/</link>
  377. <description>&lt;img alt=&quot;Featured image of post Tests don't replace Code Review&quot; src=&quot;https://www.oxymoronical.com/blog/2024/05/tests-dont-replace-code-review/240401-105514.jpg&quot; /&gt;&lt;p&gt;I frequently see a bold claim come up in tech circles. That as a team you’re wasting time by doing code reviews. You should instead rely on automated tests to catch bugs. This surprises me because I can’t imagine anyone thinking that such a blanket statement is true. But then most of the time this is brought up in places like Twitter where nuance is impossible and engagement farming is rife. Still it got me thinking about why I think code review is important even if you have amazing tests.&lt;/p&gt;
  378. &lt;p&gt;Before I elaborate I’ll point out what should be obvious. Different projects have different needs. You shouldn’t listen to me tell you that you must do code review any more than you should listen to anyone else tell you that you must not do code review. Be pragmatic in all things. Beware one-size-fits-all statements (in almost any context).&lt;/p&gt;
  379. &lt;p&gt;We’ve been religiously performing code review on every (well almost every) patch at Mozilla since well before I joined the project which was quite some time ago. And in that time I’ve seen Firefox go from having practically no automated tests to a set of automated test suites that if run end to end on a single machine (which is impossible but let’s ignore that) would take nearly &lt;strong&gt;two months&lt;/strong&gt; (😱) to complete. And in that time I don’t think I’ve ever heard anyone suggest we should stop doing code review for anything that actually ships to users (we do allow documentation changes with no review). Why?&lt;/p&gt;
  380. &lt;h4 id=&quot;a-good-set-of-automated-tests-doesnt-just-magically-appear&quot;&gt;
  381.    &lt;a class=&quot;header-anchor&quot; href=&quot;http://www.oxymoronical.com/blog/category/technical/mozilla/feed#a-good-set-of-automated-tests-doesnt-just-magically-appear&quot;&gt;#&lt;/a&gt;
  382.    A good set of automated tests doesn’t just magically appear
  383. &lt;/h4&gt;&lt;p&gt;Let’s start with the obvious.&lt;/p&gt;
  384. &lt;p&gt;Someone has to have written all of those tests. And others have to have verified all that. And even if your test suite is already perfect, how do you know that the developer building a new feature has also included the tests necessary to verify that feature going forwards?&lt;/p&gt;
  385. &lt;p&gt;There are some helpful tools that exist, like code coverage. But these are more informative than indicative. Useful to track but should rarely be used by themselves.&lt;/p&gt;
  386. &lt;h4 id=&quot;garbage-unmaintainable-code-passes-tests&quot;&gt;
  387.    &lt;a class=&quot;header-anchor&quot; href=&quot;http://www.oxymoronical.com/blog/category/technical/mozilla/feed#garbage-unmaintainable-code-passes-tests&quot;&gt;#&lt;/a&gt;
  388.    Garbage unmaintainable code passes tests
  389. &lt;/h4&gt;&lt;p&gt;There are usually many ways to fix a bug or implement a feature. Some of those will be clear readable code with appropriate comments that a random developer in three years time can look at and understand quickly. Others will be spaghetti code that is to all intents and purposes obfuscated. Got a bug in there? It may take ten times longer to fix it. Lint rules can help with this to some extent, but a human code reviewer is going to spot unreadable code a mile away.&lt;/p&gt;
  390. &lt;h4 id=&quot;you-cannot-test-everything&quot;&gt;
  391.    &lt;a class=&quot;header-anchor&quot; href=&quot;http://www.oxymoronical.com/blog/category/technical/mozilla/feed#you-cannot-test-everything&quot;&gt;#&lt;/a&gt;
  392.    You cannot test everything
  393. &lt;/h4&gt;&lt;p&gt;It’s often not feasible to test for every possible case. Anywhere your code interacts with anything outside of itself, like a filesystem or a network, is going to have cases that are really hard to simulate. What if memory runs out at a critical moment? What if the OS suddenly decides that the disk is not writable? These are cases we have to handle all the time in Firefox. You could say we should build abstractions around everything so that tests can simulate all those cases. But abstractions are not cheap and performance is pretty critical for us.&lt;/p&gt;
  394. &lt;h4 id=&quot;but-im-a-100x-developer-none-of-this-applies-to-me&quot;&gt;
  395.    &lt;a class=&quot;header-anchor&quot; href=&quot;http://www.oxymoronical.com/blog/category/technical/mozilla/feed#but-im-a-100x-developer-none-of-this-applies-to-me&quot;&gt;#&lt;/a&gt;
  396.    But I’m a 100x developer, none of this applies to me
  397. &lt;/h4&gt;&lt;p&gt;I don’t care how senior a developer you are, you’ll make mistakes. I sure do. Now it’s true that there is something to be said for adjusting your review approach based on the developer who wrote the code. If I’m reviewing a patch by a junior developer I’m going to go over the patch with a fine tooth-comb and then when they re-submit I’m going to take care to make sure they addressed all my changes. Less so with a senior developer who I know knows the code at hand.&lt;/p&gt;
  398. &lt;h4 id=&quot;so-do-tests-help-with-code-review-at-all&quot;&gt;
  399.    &lt;a class=&quot;header-anchor&quot; href=&quot;http://www.oxymoronical.com/blog/category/technical/mozilla/feed#so-do-tests-help-with-code-review-at-all&quot;&gt;#&lt;/a&gt;
  400.    So do tests help with code review at all?
  401. &lt;/h4&gt;&lt;p&gt;Absolutely!&lt;/p&gt;
  402. &lt;p&gt;Tests are there to automatically spot problems, ideally before a change even reaches the review stage. Code review is there to fill in the gaps. You can mostly skip over worrying about whether this breaks well tested functionality (just don’t assume all functionality is well tested!). Instead you can focus on what the change is doing that cannot be tested:&lt;/p&gt;
  403. &lt;ul&gt;
  404. &lt;li&gt;Is it actually fixing the problem at hand?&lt;/li&gt;
  405. &lt;li&gt;Does it include appropriate changes to the automated tests?&lt;/li&gt;
  406. &lt;li&gt;Is the code maintainable?&lt;/li&gt;
  407. &lt;li&gt;Is the approach going to cause problems for other changes down the road?&lt;/li&gt;
  408. &lt;li&gt;Could there be performance issues?&lt;/li&gt;
  409. &lt;/ul&gt;
  410. &lt;p&gt;Code review and automated tests are complimentary. I believe you’ll get the best result when you employ both sensibly. Assuming you have the resources to do so of course. I don’t think large projects can do without both.&lt;/p&gt;</description>
  411. <pubDate>Wed, 01 May 2024 22:02:00 +0000</pubDate>
  412. </item>
  413. <item>
  414. <title>Mozilla Thunderbird: Thunderbird Monthly Development Digest: April 2024</title>
  415. <guid isPermaLink="false">https://blog.thunderbird.net/?p=1717</guid>
  416. <link>https://blog.thunderbird.net/2024/05/thunderbird-monthly-development-digest-april-2024/</link>
  417. <description>&lt;p&gt;&lt;img alt=&quot;Graphic with text &amp;quot;Thunderbird Development Digest April 2024,&amp;quot; featuring abstract ASCII art on a dark Thunderbird logo background.&quot; class=&quot;attachment-640x360 size-640x360 wp-post-image&quot; height=&quot;360&quot; src=&quot;https://blog.thunderbird.net/files/2024/04/dev-digest-april-2024-768x432.jpg&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
  418. &lt;div class=&quot;wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex&quot;&gt;
  419. &lt;div class=&quot;wp-block-button has-custom-font-size has-small-font-size&quot;&gt;&lt;a class=&quot;wp-block-button__link has-black-color has-white-background-color has-text-color has-background wp-element-button&quot; href=&quot;https://translate.google.com/translate?js=n&amp;amp;sl=auto&amp;amp;tl=de&amp;amp;u=https://blog.thunderbird.net/2024/05/thunderbird-monthly-development-digest-april-2024/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Auf Deutsch übersetzen&lt;/a&gt;&lt;/div&gt;
  420.  
  421.  
  422.  
  423. &lt;div class=&quot;wp-block-button has-custom-font-size has-small-font-size&quot;&gt;&lt;a class=&quot;wp-block-button__link has-black-color has-white-background-color has-text-color has-background wp-element-button&quot; href=&quot;https://translate.google.com/translate?js=n&amp;amp;sl=auto&amp;amp;tl=fr&amp;amp;u=https://blog.thunderbird.net/2024/05/thunderbird-monthly-development-digest-april-2024/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Traduire en français&lt;/a&gt;&lt;/div&gt;
  424.  
  425.  
  426.  
  427. &lt;div class=&quot;wp-block-button has-custom-font-size has-small-font-size&quot;&gt;&lt;a class=&quot;wp-block-button__link has-black-color has-white-background-color has-text-color has-background wp-element-button&quot; href=&quot;https://translate.google.com/translate?js=n&amp;amp;sl=auto&amp;amp;tl=ja&amp;amp;u=https://blog.thunderbird.net/2024/05/thunderbird-monthly-development-digest-april-2024/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;日本語に翻訳&lt;/a&gt;&lt;/div&gt;
  428. &lt;/div&gt;
  429.  
  430.  
  431.  
  432. &lt;p&gt;Hello Thunderbird Community, and welcome back to the monthly Thunderbird development digest. April just ended and we’re running at full speed into May. We’re only a couple of months away from the next ESR, so things are landing faster and we’re seeing the finalization of a lot of parallel efforts.&lt;/p&gt;
  433.  
  434.  
  435.  
  436. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;20-Year-Old bugs&lt;/strong&gt;&lt;/h3&gt;
  437.  
  438.  
  439.  
  440. &lt;p&gt;Something that has been requested for almost 20 years finally landed on Daily. The ability to control the display of recipients in the message list and better distinguish unknown addresses from those saved in the Address Book was finally implemented in &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=243258&quot;&gt;Bug 243258 – Show email address in message list&lt;/a&gt;.&lt;/p&gt;
  441.  
  442.  
  443.  
  444. &lt;p&gt;This is one of the many examples of features that in the past were very complicated and tricky to implement, but that we were finally able to address thanks to the improvements of our architecture and being able to work with a more flexible and modular code.&lt;/p&gt;
  445.  
  446.  
  447.  
  448. &lt;p&gt;We’re aiming at going through those very very old requests and slowly addressing them when possible.&lt;/p&gt;
  449.  
  450.  
  451.  
  452. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Exchange alpha&lt;/strong&gt;&lt;/h3&gt;
  453.  
  454.  
  455.  
  456. &lt;p&gt;More &lt;a href=&quot;https://blog.thunderbird.net/2024/04/adventures-in-rust-bringing-exchange-support-to-thunderbird/&quot;&gt;Exchange support&lt;/a&gt; improvements and features are landing on Daily almost…daily (pun intended). If you want to test things with a local build, you can follow &lt;a href=&quot;https://thunderbird.topicbox.com/groups/planning/T05e94ced3641f616/exchange-testing-our-patience&quot;&gt;this overview from Ikey.&lt;/a&gt;&lt;/p&gt;
  457.  
  458.  
  459.  
  460. &lt;p&gt;We will soon look at the possibility of enabling Rust builds by default, making sure that all users will be able to consume our Rust code from next beta, and only needing to switch a pref in order to test Exchange.&lt;/p&gt;
  461.  
  462.  
  463.  
  464. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Folder compaction&lt;/strong&gt;&lt;/h3&gt;
  465.  
  466.  
  467.  
  468. &lt;p&gt;If you’ve been tracking our most recent struggles, you’re probably aware of one of the lingering annoying issues which sees the bubbling up of the size of the user profile caused by local folder corruption.&lt;/p&gt;
  469.  
  470.  
  471.  
  472. &lt;p&gt;Ben dive bombed into the code and found a spaghetti mess that was hard to untangle. You can read more about his exploration and discoveries in his &lt;a href=&quot;https://thunderbird.topicbox.com/groups/developers/T181eda13fce07dd9/folder-compaction-rewrite&quot;&gt;recent post on TB-Planning&lt;/a&gt;.&lt;/p&gt;
  473.  
  474.  
  475.  
  476. &lt;p&gt;We’re aiming to land this code hopefully before the end of the week and start calling for some testing and feedback from the community to ensure that all the various issues have been addressed correctly.&lt;/p&gt;
  477.  
  478.  
  479.  
  480. &lt;p&gt;You can follow the progress in &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1890448&quot;&gt;Bug 1890448 – Rewrite folder compaction&lt;/a&gt;.&lt;/p&gt;
  481.  
  482.  
  483.  
  484. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Cards View&lt;/strong&gt;&lt;/h3&gt;
  485.  
  486.  
  487.  
  488. &lt;p&gt;If you’re running Beta or Daily, you might have noticed some very fancy new UI for the Cards View. This has been a culmination of many weeks of UX analysis to ensure a flexible and consistent hover, selection, and focus state.&lt;/p&gt;
  489.  
  490.  
  491.  
  492. &lt;p&gt;Micah and Sol identified a total of 27 different interaction states on that list, and implementing visual consistency while guaranteeing optimal accessibility levels for all operating systems and potential custom themes was not easy.&lt;/p&gt;
  493.  
  494.  
  495.  
  496. &lt;p&gt;We’re very curious to hear your feedback.&lt;/p&gt;
  497.  
  498.  
  499.  
  500. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Context menu&lt;/strong&gt;&lt;/h3&gt;
  501.  
  502.  
  503.  
  504. &lt;p&gt;A more refined and updated context menu for the message list also landed on Daily.&lt;/p&gt;
  505.  
  506.  
  507.  
  508. &lt;p&gt;A very detailed UX exploration and overview of the implementation was &lt;a href=&quot;https://thunderbird.topicbox.com/groups/ux/T3d84faa372bf41a8/message-context-menu-updates&quot;&gt;shared on the UX Mailing list&lt;/a&gt; a while ago.&lt;/p&gt;
  509.  
  510.  
  511.  
  512. &lt;p&gt;This update is only the first step of many more to come, so we apologize in advance if some things are not super polished or things seem temporarily off.&lt;/p&gt;
  513.  
  514.  
  515.  
  516. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;ESR Preview&lt;/strong&gt;&lt;/h3&gt;
  517.  
  518.  
  519.  
  520. &lt;p&gt;If you’re curious about what the next ESR will look like or checking new features, please consider downloading and installing Beta (preferably in another directory to not override your current profile.) Help us test this new upcoming release and find bugs early.&lt;/p&gt;
  521.  
  522.  
  523.  
  524. &lt;p&gt;&lt;em&gt;As usual, if you want to see things as they land you can always check the &lt;a href=&quot;https://hg.mozilla.org/comm-central/pushloghtml&quot;&gt;pushlog &lt;/a&gt;and &lt;a href=&quot;https://ftp.mozilla.org/pub/thunderbird/nightly/2024/&quot;&gt;try running daily&lt;/a&gt;, which would be immensely helpful for catching bugs early.&lt;/em&gt;&lt;/p&gt;
  525.  
  526.  
  527.  
  528. &lt;p&gt;See ya next month.&lt;/p&gt;
  529.  
  530.  
  531.  
  532. &lt;p&gt;&lt;strong&gt;Alessandro Castellani&lt;/strong&gt; &lt;em&gt;(he, him)&lt;br /&gt;&lt;/em&gt;&lt;strong&gt;Director, Desktop and Mobile Apps&lt;/strong&gt;&lt;/p&gt;
  533.  
  534.  
  535.  
  536. &lt;figure class=&quot;wp-block-pullquote&quot; style=&quot;border-width: 2px; border-radius: 10px; font-style: normal; font-weight: 400;&quot;&gt;&lt;blockquote&gt;&lt;p&gt;If you’re interested in joining the technical discussion around Thunderbird development, consider joining one or several of our &lt;a href=&quot;https://thunderbird.topicbox.com&quot;&gt;mailing list groups here&lt;/a&gt;. &lt;/p&gt;&lt;/blockquote&gt;&lt;/figure&gt;
  537. &lt;p&gt;The post &lt;a href=&quot;https://blog.thunderbird.net/2024/05/thunderbird-monthly-development-digest-april-2024/&quot;&gt;Thunderbird Monthly Development Digest: April 2024&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;</description>
  538. <pubDate>Wed, 01 May 2024 16:30:14 +0000</pubDate>
  539. <dc:creator>Alessandro Castellani</dc:creator>
  540. </item>
  541. <item>
  542. <title>This Week In Rust: This Week in Rust 545</title>
  543. <guid isPermaLink="false">tag:this-week-in-rust.org,2024-05-01:/blog/2024/05/01/this-week-in-rust-545/</guid>
  544. <link>https://this-week-in-rust.org/blog/2024/05/01/this-week-in-rust-545/</link>
  545. <description>&lt;p&gt;Hello and welcome to another issue of &lt;em&gt;This Week in Rust&lt;/em&gt;!
  546. &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.
  547. This is a weekly summary of its progress and community.
  548. Want something mentioned? Tag us at &lt;a href=&quot;https://twitter.com/ThisWeekInRust&quot;&gt;@ThisWeekInRust&lt;/a&gt; on Twitter 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;.
  549. Want to get involved? &lt;a href=&quot;https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md&quot;&gt;We love contributions&lt;/a&gt;.&lt;/p&gt;
  550. &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;.
  551. 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;
  552. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#updates-from-rust-community&quot;&gt;Updates from Rust Community&lt;/a&gt;&lt;/h4&gt;
  553.  
  554.  
  555. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#newsletters&quot;&gt;Newsletters&lt;/a&gt;&lt;/h5&gt;
  556. &lt;ul&gt;
  557. &lt;li&gt;&lt;a href=&quot;https://thisweekinbevy.com/issue/2024-04-29-motion-blur-visualizations-and-beautiful-renders&quot;&gt;Motion Blur, Visualizations, and beautiful renders&lt;/a&gt;&lt;/li&gt;
  558. &lt;/ul&gt;
  559. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#projecttooling-updates&quot;&gt;Project/Tooling Updates&lt;/a&gt;&lt;/h5&gt;
  560. &lt;ul&gt;
  561. &lt;li&gt;&lt;a href=&quot;https://github.com/r3bl-org/r3bl-open-core/blob/main/CHANGELOG.md#v051-2024-04-28&quot;&gt;r3bl_trerminal_async v0.5.1 released&lt;/a&gt;&lt;/li&gt;
  562. &lt;li&gt;&lt;a href=&quot;https://github.com/gnp/minbpe-rs&quot;&gt;minbpe-rs v0.1.0: Port of Andrej Karpathy's &lt;code&gt;minbpe&lt;/code&gt; to Rust&lt;/a&gt;&lt;/li&gt;
  563. &lt;li&gt;&lt;a href=&quot;https://selium.com/news/introducing-selium-log&quot;&gt;Message retention and replay with Selium&lt;/a&gt;&lt;/li&gt;
  564. &lt;/ul&gt;
  565. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#observationsthoughts&quot;&gt;Observations/Thoughts&lt;/a&gt;&lt;/h5&gt;
  566. &lt;ul&gt;
  567. &lt;li&gt;&lt;a href=&quot;https://loglog.games/blog/leaving-rust-gamedev/&quot;&gt;Leaving Rust gamedev after 3 years&lt;/a&gt;&lt;/li&gt;
  568. &lt;li&gt;&lt;a href=&quot;https://blog.yoshuawuyts.com/tasks-are-the-wrong-abstraction/&quot;&gt;Tasks are the wrong abstraction&lt;/a&gt;&lt;/li&gt;
  569. &lt;li&gt;&lt;a href=&quot;https://cybernetist.com/2024/04/25/go-or-rust-just-listen-to-the-bots/&quot;&gt;Go or Rust? Just Listen to the Bots&lt;/a&gt;&lt;/li&gt;
  570. &lt;li&gt;&lt;a href=&quot;https://hugopeters.me/posts/21/&quot;&gt;Cracking the Cryptic (with Z3 and Rust)&lt;/a&gt;&lt;/li&gt;
  571. &lt;li&gt;&lt;a href=&quot;https://blog.dureuill.net/articles/nolife-0-4/&quot;&gt;So, you want to write an unsafe crate&lt;/a&gt;&lt;/li&gt;
  572. &lt;li&gt;&lt;a href=&quot;https://alonely0.github.io/blog/unions/&quot;&gt;Designing an efficient memory layout in Rust with unsafe &amp;amp; unions, or, an overlong guide in avoiding dynamic dispatch&lt;/a&gt;&lt;/li&gt;
  573. &lt;li&gt;&lt;a href=&quot;https://www.shuttle.rs/blog/2024/04/25/event-driven-services-using-kafka-rust&quot;&gt;Event driven Microservices using Kafka and Rust&lt;/a&gt;&lt;/li&gt;
  574. &lt;li&gt;&lt;a href=&quot;https://www.niklaslong.ch/deadline/&quot;&gt;Writing ergonomic async assertions in Rust&lt;/a&gt;&lt;/li&gt;
  575. &lt;li&gt;&lt;a href=&quot;https://medium.com/@sam.van.overmeire/making-an-html-parsing-script-a-hundred-times-faster-with-rayon-5ed952c9011c&quot;&gt;Making an HTML parsing script a hundred times faster with Rayon&lt;/a&gt;&lt;/li&gt;
  576. &lt;li&gt;&lt;a href=&quot;https://mirekdlugosz.com/blog/2024/rust-binaries-stability/&quot;&gt;Rust binaries stability&lt;/a&gt;&lt;/li&gt;
  577. &lt;li&gt;[audio] &lt;a href=&quot;https://rustacean-station.org/episode/orhun-parmaksiz/&quot;&gt;Ratatui with Orhun Parmaksiz :: Rustacean Station&lt;/a&gt;&lt;/li&gt;
  578. &lt;li&gt;&lt;a href=&quot;https://www.hezmatt.org/~mpalmer/blog/2024/05/01/the-mediocre-programmers-guide-to-rust.html&quot;&gt;The Mediocre Programmer's Guide to Rust&lt;/a&gt;&lt;/li&gt;
  579. &lt;/ul&gt;
  580. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust-walkthroughs&quot;&gt;Rust Walkthroughs&lt;/a&gt;&lt;/h5&gt;
  581. &lt;ul&gt;
  582. &lt;li&gt;&lt;a href=&quot;https://blog.jetbrains.com/rust/2024/04/26/boosting-dev-experience-with-serverless-rust-in-rustrover/&quot;&gt;Boosting Dev Experience with Serverless Rust in RustRover&lt;/a&gt;&lt;/li&gt;
  583. &lt;li&gt;&lt;a href=&quot;https://developerlife.com/2024/04/28/rust-polymorphism-dyn-impl-trait-objects-for-testing-and-extensibiity/&quot;&gt;developerlife.com - Rust Polymorphism, dyn, impl, using existing traits, trait objects for testing and extensibility&lt;/a&gt;&lt;/li&gt;
  584. &lt;li&gt;&lt;a href=&quot;https://hegdenu.net/posts/performance-optimization-flamegraph-divan/&quot;&gt;Performance optimization with flamegraph and Divan&lt;/a&gt;&lt;/li&gt;
  585. &lt;/ul&gt;
  586. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#research&quot;&gt;Research&lt;/a&gt;&lt;/h5&gt;
  587. &lt;ul&gt;
  588. &lt;li&gt;&lt;a href=&quot;https://rust-digger.code-maven.com/news/interesting-homepages&quot;&gt;Rust Digger: There are 4,907 interesting Crate homepages&lt;/a&gt;&lt;/li&gt;
  589. &lt;/ul&gt;
  590. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#miscellaneous&quot;&gt;Miscellaneous&lt;/a&gt;&lt;/h5&gt;
  591. &lt;ul&gt;
  592. &lt;li&gt;&lt;a href=&quot;https://skanehira.github.io/writing-a-wasm-runtime-in-rust/&quot;&gt;Writing A Wasm Runtime In Rust&lt;/a&gt;&lt;/li&gt;
  593. &lt;li&gt;&lt;a href=&quot;https://dev.to/szabgab/github-sponsor-rust-developer-andrew-gallant-burntsushi-31lh&quot;&gt;GitHub Sponsor Rust developer Andrew Gallant (BurntSushi)&lt;/a&gt;&lt;/li&gt;
  594. &lt;li&gt;&lt;a href=&quot;https://lwn.net/SubscriberLink/970565/ac5ffc2e9ad20f1e/&quot;&gt;Giving Rust a chance for in-kernel codecs&lt;/a&gt;&lt;/li&gt;
  595. &lt;li&gt;&lt;a href=&quot;https://zed.dev/blog/zed-decoded-rope-sumtree&quot;&gt;Zed Decoded: Rope &amp;amp; SumTree&lt;/a&gt;&lt;/li&gt;
  596. &lt;li&gt;&lt;a href=&quot;https://rust.code-maven.com/fibonacci-iterator&quot;&gt;An almost infinite Fibonacci Iterator&lt;/a&gt;&lt;/li&gt;
  597. &lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/watch?v=hmQr4fq6sH0&quot;&gt;From C to Rust: Bringing Rust Abstractions to Embedded Linux&lt;/a&gt;&lt;/li&gt;
  598. &lt;/ul&gt;
  599. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#crate-of-the-week&quot;&gt;Crate of the Week&lt;/a&gt;&lt;/h4&gt;
  600. &lt;p&gt;This week's crate is &lt;a href=&quot;https://codeberg.org/RatCornu/efs&quot;&gt;efs&lt;/a&gt;, a no-std ext2 filesystem implementation with plans to add other file systems in the future.&lt;/p&gt;
  601. &lt;p&gt;Another week completely devoid of suggestions, but llogiq stays hopeful he won't have to dig for next week's crate all by himself.&lt;/p&gt;
  602. &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;
  603. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#call-for-testing&quot;&gt;Call for Testing&lt;/a&gt;&lt;/h4&gt;
  604. &lt;p&gt;An important step for RFC implementation is for people to experiment with the
  605. implementation and give feedback, especially before stabilization.  The following
  606. RFCs would benefit from user testing before moving forward:&lt;/p&gt;
  607. &lt;ul&gt;
  608. &lt;li&gt;&lt;em&gt;No calls for testing were issued this week.&lt;/em&gt;&lt;/li&gt;
  609. &lt;/ul&gt;
  610. &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;
  611. label to your RFC along with a comment providing testing instructions and/or guidance on which aspect(s) of the feature
  612. need testing.&lt;/p&gt;
  613. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://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;
  614. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#cfp-projects&quot;&gt;CFP - Projects&lt;/a&gt;&lt;/h5&gt;
  615. &lt;p&gt;Always wanted to contribute to open-source projects but did not know where to start?
  616. Every week we highlight some tasks from the Rust community for you to pick and get started!&lt;/p&gt;
  617. &lt;p&gt;Some of these tasks may also have mentors available, visit the task page for more information.&lt;/p&gt;
  618. &lt;ul&gt;
  619. &lt;li&gt;&lt;em&gt;No Calls for papers or presentations were submitted this week.&lt;/em&gt;&lt;/li&gt;
  620. &lt;/ul&gt;
  621. &lt;p&gt;If you are a Rust project owner and are looking for contributors, please submit tasks &lt;a href=&quot;https://users.rust-lang.org/t/twir-call-for-participation/4821&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  622. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#cfp-speakers&quot;&gt;CFP - Speakers&lt;/a&gt;&lt;/h5&gt;
  623. &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;
  624. &lt;ul&gt;
  625. &lt;li&gt;&lt;a href=&quot;https://www.papercall.io/eurorust-2024&quot;&gt;EuroRust 2024&lt;/a&gt;| Closes 2024-06-03 | Vienna, Austria &amp;amp; online | Event date: 2024-10-10&lt;/li&gt;
  626. &lt;li&gt;&lt;a href=&quot;https://scientificcomputing.rs/&quot;&gt;Scientific Computing in Rust 2024&lt;/a&gt;| Closes 2024-06-14 | online | Event date: 2024-07-17 - 2024-07-19&lt;/li&gt;
  627. &lt;li&gt;&lt;a href=&quot;https://www.papercall.io/conf42-rustlang-2024&quot;&gt;Conf42 Rustlang 2024&lt;/a&gt; | Closes 2024-07-22 | online | Event date: 2024-08-22&lt;/li&gt;
  628. &lt;/ul&gt;
  629. &lt;p&gt;If you are an event organizer hoping to expand the reach of your event, please submit a link to the submission website through a &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;PR to TWiR&lt;/a&gt;.&lt;/p&gt;
  630. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://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;
  631. &lt;p&gt;409 pull requests were &lt;a href=&quot;https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2024-04-23..2024-04-30&quot;&gt;merged in the last week&lt;/a&gt;&lt;/p&gt;
  632. &lt;ul&gt;
  633. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124210&quot;&gt;abort a process when FD ownership is violated&lt;/a&gt;&lt;/li&gt;
  634. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124321&quot;&gt;add support for run-make-support unit tests to be run with bootstrap&lt;/a&gt;&lt;/li&gt;
  635. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124382&quot;&gt;ast: generalize item kind visiting&lt;/a&gt;&lt;/li&gt;
  636. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124508&quot;&gt;coverage: avoid hard-coded values when visiting logical ops&lt;/a&gt;&lt;/li&gt;
  637. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124507&quot;&gt;coverage: replace boolean options with a &lt;code&gt;CoverageLevel enum&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  638. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/120845&quot;&gt;debuginfo: stabilize &lt;code&gt;-Z debug-macros&lt;/code&gt;, &lt;code&gt;-Z collapse-macro-debuginfo&lt;/code&gt; and &lt;code&gt;#[collapse_debuginfo]&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  639. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122500&quot;&gt;delegation: support renaming, and async, const, extern &quot;ABI&quot; and C-variadic functions&lt;/a&gt;&lt;/li&gt;
  640. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123680&quot;&gt;deny gen keyword in &lt;code&gt;edition_2024_compat&lt;/code&gt; lints&lt;/a&gt;&lt;/li&gt;
  641. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122598&quot;&gt;deref patterns: lower deref patterns to MIR&lt;/a&gt;&lt;/li&gt;
  642. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124313&quot;&gt;detect borrow error involving sub-slices and suggest &lt;code&gt;split_at_mut&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  643. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124099&quot;&gt;disallow ambiguous attributes on expressions&lt;/a&gt;&lt;/li&gt;
  644. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124425&quot;&gt;do not ICE on invalid consts when walking mono-reachable blocks&lt;/a&gt;&lt;/li&gt;
  645. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124374&quot;&gt;don't ICE when &lt;code&gt;codegen_select_candidate&lt;/code&gt; returns ambiguity in new solver&lt;/a&gt;&lt;/li&gt;
  646. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124169&quot;&gt;don't fatal when calling &lt;code&gt;expect_one_of&lt;/code&gt; when recovering arg in &lt;code&gt;parse_seq&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  647. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123531&quot;&gt;enforce closure args + return type are WF&lt;/a&gt;&lt;/li&gt;
  648. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124394&quot;&gt;fix ICE on invalid const param types&lt;/a&gt;&lt;/li&gt;
  649. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124057&quot;&gt;fix ICE when ADT tail has type error&lt;/a&gt;&lt;/li&gt;
  650. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124281&quot;&gt;fix weak memory bug in TLS on Windows&lt;/a&gt;&lt;/li&gt;
  651. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124333&quot;&gt;improve diagnostic for unknown &lt;code&gt;--print&lt;/code&gt; request&lt;/a&gt;&lt;/li&gt;
  652. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124200&quot;&gt;improve handling of expr→field errors&lt;/a&gt;&lt;/li&gt;
  653. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124504&quot;&gt;mark unions non-const-propagatable in &lt;code&gt;KnownPanicsLint&lt;/code&gt; without calling layout&lt;/a&gt;&lt;/li&gt;
  654. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124269&quot;&gt;pretty-print parenthesis around binary in postfix match&lt;/a&gt;&lt;/li&gt;
  655. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124136&quot;&gt;provide more context and suggestions in borrowck errors involving closures&lt;/a&gt;&lt;/li&gt;
  656. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124444&quot;&gt;record certainty of &lt;code&gt;evaluate_added_goals_and_make_canonical_response&lt;/code&gt; call in candidate&lt;/a&gt;&lt;/li&gt;
  657. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124379&quot;&gt;remove special-casing for &lt;code&gt;SimplifiedType&lt;/code&gt; for next solver&lt;/a&gt;&lt;/li&gt;
  658. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124463&quot;&gt;rename &lt;code&gt;inhibit_union_abi_opt()&lt;/code&gt; to &lt;code&gt;inhibits_union_abi_opt()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  659. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124381&quot;&gt;renamed &lt;code&gt;DerivedObligation&lt;/code&gt; to &lt;code&gt;WellFormedDeriveObligation&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  660. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123792&quot;&gt;require explicitly marking closures as coroutines&lt;/a&gt;&lt;/li&gt;
  661. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/121557&quot;&gt;restrict promotion of &lt;code&gt;const fn&lt;/code&gt; calls&lt;/a&gt;&lt;/li&gt;
  662. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/121298&quot;&gt;set writable and &lt;code&gt;dead_on_unwind&lt;/code&gt; attributes for sret arguments&lt;/a&gt;&lt;/li&gt;
  663. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124334&quot;&gt;strengthen tracking issue policy with consequences&lt;/a&gt;&lt;/li&gt;
  664. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/119650&quot;&gt;suggest ref mut for pattern matching assignment&lt;/a&gt;&lt;/li&gt;
  665. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122591&quot;&gt;suggest using type args directly instead of equality constraint&lt;/a&gt;&lt;/li&gt;
  666. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122317&quot;&gt;use fulfillment in method probe, not evaluation&lt;/a&gt;&lt;/li&gt;
  667. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124415&quot;&gt;use probes more aggressively in new solver&lt;/a&gt;&lt;/li&gt;
  668. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124067&quot;&gt;weak lang items are not allowed to be &lt;code&gt;#[track_caller]&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  669. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124220&quot;&gt;miri: detect wrong vtables in wide pointers&lt;/a&gt;&lt;/li&gt;
  670. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3510&quot;&gt;miri: &lt;code&gt;unix_sigpipe&lt;/code&gt;: don't inline DEFAULT, just use it from rustc&lt;/a&gt;&lt;/li&gt;
  671. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3493&quot;&gt;miri: add &lt;code&gt;-Zmiri-env-set&lt;/code&gt; to set environment variables without modifying the host environment&lt;/a&gt;&lt;/li&gt;
  672. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3517&quot;&gt;miri env: split up Windows and Unix environment variable handling&lt;/a&gt;&lt;/li&gt;
  673. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3524&quot;&gt;miri: file descriptors: make write take &amp;amp;mut self&lt;/a&gt;&lt;/li&gt;
  674. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3492&quot;&gt;miri: implement LLVM x86 AVX2 intrinsics&lt;/a&gt;&lt;/li&gt;
  675. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3512&quot;&gt;miri: make miri-script a workspace root&lt;/a&gt;&lt;/li&gt;
  676. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3523&quot;&gt;miri: use the interpreted program's TZ variable in &lt;code&gt;localtime_r&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  677. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3502&quot;&gt;miri: windows: basic support for GetUserProfileDirectoryW&lt;/a&gt;&lt;/li&gt;
  678. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/104087&quot;&gt;stabilise &lt;code&gt;inline_const&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  679. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123909&quot;&gt;stabilize &lt;code&gt;Utf8Chunks&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  680. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124498&quot;&gt;stabilize &lt;code&gt;non_null_convenience&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  681. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124335&quot;&gt;stabilize &lt;code&gt;std::path::absolute&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  682. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124076&quot;&gt;stabilize &lt;code&gt;io_error_downcast&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  683. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124003&quot;&gt;deLLVMize some intrinsics (use &lt;code&gt;u32&lt;/code&gt; instead of &lt;code&gt;Self&lt;/code&gt; in some integer intrinsics)&lt;/a&gt;&lt;/li&gt;
  684. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122053&quot;&gt;stop using LLVM &lt;code&gt;struct&lt;/code&gt; types for alloca&lt;/a&gt;&lt;/li&gt;
  685. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124387&quot;&gt;&lt;code&gt;thread_local&lt;/code&gt;: be excruciatingly explicit in dtor code&lt;/a&gt;&lt;/li&gt;
  686. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124484&quot;&gt;fix &lt;code&gt;offset_of!&lt;/code&gt; returning a temporary&lt;/a&gt;&lt;/li&gt;
  687. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124432&quot;&gt;relax &lt;code&gt;A: Clone&lt;/code&gt; bound for &lt;code&gt;rc::Weak::into_raw_and_alloc&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  688. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124410&quot;&gt;&lt;code&gt;PathBuf&lt;/code&gt;: replace transmuting by accessor functions&lt;/a&gt;&lt;/li&gt;
  689. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustc_codegen_gcc/pull/504&quot;&gt;codegen_gcc: some fixes for aarch64&lt;/a&gt;&lt;/li&gt;
  690. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustc_codegen_gcc/pull/508&quot;&gt;codegen_gcc: some more fixes and workarounds for Aarch64&lt;/a&gt;&lt;/li&gt;
  691. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13819&quot;&gt;cargo: alias: Aliases without subcommands should not panic&lt;/a&gt;&lt;/li&gt;
  692. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13812&quot;&gt;cargo: lints: Don't always inherit workspace lints&lt;/a&gt;&lt;/li&gt;
  693. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13790&quot;&gt;cargo install: Don't respect MSRV for non-local installs&lt;/a&gt;&lt;/li&gt;
  694. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13798&quot;&gt;cargo toml: Be more forceful with underscore/dash redundancy&lt;/a&gt;&lt;/li&gt;
  695. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13800&quot;&gt;cargo toml: Don't double-warn when underscore is used in workspace dep&lt;/a&gt;&lt;/li&gt;
  696. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13804&quot;&gt;cargo toml: Remove underscore field support in 2024&lt;/a&gt;&lt;/li&gt;
  697. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13713&quot;&gt;cargo toml: Warn, rather than fail publish, if a target is excluded&lt;/a&gt;&lt;/li&gt;
  698. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13788&quot;&gt;cargo toml: remove support for inheriting badges&lt;/a&gt;&lt;/li&gt;
  699. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13801&quot;&gt;cargo: note where lint was set&lt;/a&gt;&lt;/li&gt;
  700. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13797&quot;&gt;cargo: cleanup linting system&lt;/a&gt;&lt;/li&gt;
  701. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13817&quot;&gt;cargo: fix target entry in .gitignore&lt;/a&gt;&lt;/li&gt;
  702. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13793&quot;&gt;cargo: fix warning suppression for config.toml vs config compat symlinks&lt;/a&gt;&lt;/li&gt;
  703. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-bindgen/pull/2812&quot;&gt;bindgen: add dynamic loading of variable&lt;/a&gt;&lt;/li&gt;
  704. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-bindgen/pull/2809&quot;&gt;bindgen: remove which dependency&lt;/a&gt;&lt;/li&gt;
  705. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-bindgen/pull/2808&quot;&gt;bindgen: simplify Rust to Clang target conversion&lt;/a&gt;&lt;/li&gt;
  706. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12726&quot;&gt;clippy: &lt;code&gt;single_match&lt;/code&gt;(&lt;code&gt;_else&lt;/code&gt;) may be machine applicable&lt;/a&gt;&lt;/li&gt;
  707. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12702&quot;&gt;clippy: &lt;code&gt;non_canonical_partial_ord_impl&lt;/code&gt;: Fix emitting warnings which conflict with &lt;code&gt;needless_return&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  708. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12736&quot;&gt;clippy: &lt;code&gt;type_complexity&lt;/code&gt;: Fix duplicate errors&lt;/a&gt;&lt;/li&gt;
  709. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12694&quot;&gt;clippy: check if closure as method arg has read access in &lt;code&gt;collection_is_never_read&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  710. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12725&quot;&gt;clippy: configurably allow &lt;code&gt;useless_vec&lt;/code&gt; in tests&lt;/a&gt;&lt;/li&gt;
  711. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12624&quot;&gt;clippy: fix &lt;code&gt;large_stack_arrays&lt;/code&gt; linting in &lt;code&gt;vec&lt;/code&gt; macro&lt;/a&gt;&lt;/li&gt;
  712. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12722&quot;&gt;clippy: fix false positive in &lt;code&gt;cast_possible_truncation&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  713. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12734&quot;&gt;clippy: suppress &lt;code&gt;readonly_write_lock&lt;/code&gt; for underscore-prefixed bindings&lt;/a&gt;&lt;/li&gt;
  714. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17131&quot;&gt;rust-analyzer: different error code of &quot;no such field&quot; error based on variant type&lt;/a&gt;&lt;/li&gt;
  715. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17157&quot;&gt;rust-analyzer: don't retry position relient requests and version resolve data&lt;/a&gt;&lt;/li&gt;
  716. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17151&quot;&gt;rust-analyzer: fix attributes on generic parameters colliding in item tree&lt;/a&gt;&lt;/li&gt;
  717. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17153&quot;&gt;rust-analyzer: fix doc comment desugaring for proc-macros&lt;/a&gt;&lt;/li&gt;
  718. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17135&quot;&gt;rust-analyzer: fix expression scopes not being calculated for inline consts&lt;/a&gt;&lt;/li&gt;
  719. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17145&quot;&gt;rust-analyzer: fix source roots not always being created when necessary&lt;/a&gt;&lt;/li&gt;
  720. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/16972&quot;&gt;rust-analyzer: make &lt;code&gt;cargo run&lt;/code&gt; always available for binaries&lt;/a&gt;&lt;/li&gt;
  721. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17144&quot;&gt;rust-analyzer: manual: remove suggestion of rust-project.json example&lt;/a&gt;&lt;/li&gt;
  722. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17021&quot;&gt;rust-analyzer: support hovering limits for adts&lt;/a&gt;&lt;/li&gt;
  723. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustfmt/pull/6148&quot;&gt;rustfmt: fix wrong indentation on inner attribute&lt;/a&gt;&lt;/li&gt;
  724. &lt;/ul&gt;
  725. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust-compiler-performance-triage&quot;&gt;Rust Compiler Performance Triage&lt;/a&gt;&lt;/h5&gt;
  726. &lt;p&gt;Several non-noise changes this week, with both improvements and regresions
  727. coming as a result. Overall compiler performance is roughly neutral across the
  728. week.&lt;/p&gt;
  729. &lt;p&gt;Triage done by &lt;strong&gt;@simulacrum&lt;/strong&gt;.
  730. Revision range: &lt;a href=&quot;https://perf.rust-lang.org/?start=a77f76e26302e9a084fb321817675b1dfc1dcd63&amp;amp;end=c65b2dc935c27c0c8c3997c6e8d8894718a2cb1a&amp;amp;absolute=false&amp;amp;stat=instructions%3Au&quot;&gt;a77f76e2..c65b2dc9&lt;/a&gt;&lt;/p&gt;
  731. &lt;p&gt;2 Regressions, 2 Improvements, 3 Mixed; 1 of them in rollups
  732. 51 artifact comparisons made in total&lt;/p&gt;
  733. &lt;p&gt;&lt;a href=&quot;https://github.com/rust-lang/rustc-perf/blob/master/triage/2024-04-29.md&quot;&gt;Full report here&lt;/a&gt;&lt;/p&gt;
  734. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://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;
  735. &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
  736. are the RFCs that were approved for implementation this week:&lt;/p&gt;
  737. &lt;ul&gt;
  738. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3614&quot;&gt;experimental project goal program for 2024 H2&lt;/a&gt;&lt;/li&gt;
  739. &lt;/ul&gt;
  740. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#final-comment-period&quot;&gt;Final Comment Period&lt;/a&gt;&lt;/h5&gt;
  741. &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
  742. which are reaching a decision. Express your opinions now.&lt;/p&gt;
  743. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/labels/final-comment-period&quot;&gt;RFCs&lt;/a&gt;&lt;/h6&gt;
  744. &lt;ul&gt;
  745. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3617&quot;&gt;Precise capturing&lt;/a&gt;&lt;/li&gt;
  746. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3484&quot;&gt;Unsafe Extern Blocks&lt;/a&gt;&lt;/li&gt;
  747. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3336&quot;&gt;MaybeDangling&lt;/a&gt;&lt;/li&gt;
  748. &lt;/ul&gt;
  749. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#tracking-issues-prs&quot;&gt;Tracking Issues &amp;amp; PRs&lt;/a&gt;&lt;/h6&gt;
  750. &lt;a class=&quot;toclink&quot; href=&quot;http://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+label%3Afinal-comment-period+sort%3Aupdated-desc&quot;&gt;Rust&lt;/a&gt;
  751. &lt;ul&gt;
  752. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/98934&quot;&gt;Add &lt;code&gt;Option::take_if&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  753. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/124532&quot;&gt;elaborate obligations in coherence&lt;/a&gt;&lt;/li&gt;
  754. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/124297&quot;&gt;Allow coercing functions whose signature differs in opaque types in their defining scope into a shared function pointer type&lt;/a&gt;&lt;/li&gt;
  755. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/120924&quot;&gt;Let's &lt;code&gt;#[expect]&lt;/code&gt; some lints: &lt;code&gt;Stabilize lint_reasons&lt;/code&gt; (RFC 2383)&lt;/a&gt;&lt;/li&gt;
  756. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/94035&quot;&gt;Tracking Issue for ASCII trim functions on byte slices&lt;/a&gt;&lt;/li&gt;
  757. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/124097&quot;&gt;Add &lt;code&gt;IntoIterator&lt;/code&gt; for &lt;code&gt;Box&amp;lt;[T]&amp;gt;&lt;/code&gt; + edition 2024-specific lints&lt;/a&gt;&lt;/li&gt;
  758. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/124108&quot;&gt;Add &lt;code&gt;Box&amp;lt;[T; N]&amp;gt;: IntoIterator&lt;/code&gt; without any method dispatch hacks&lt;/a&gt;&lt;/li&gt;
  759. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/124148&quot;&gt;rustdoc-search: search for references&lt;/a&gt;&lt;/li&gt;
  760. &lt;li&gt;[disposition: close] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/82219&quot;&gt;Extra trait bound makes function body fail to typecheck&lt;/a&gt;&lt;/li&gt;
  761. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/120248&quot;&gt;Make casts of pointers to trait objects stricter&lt;/a&gt;&lt;/li&gt;
  762. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/119128&quot;&gt;Tracking Issue for split_at_checked&lt;/a&gt;&lt;/li&gt;
  763. &lt;/ul&gt;
  764. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://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;/h6&gt;
  765. &lt;ul&gt;
  766. &lt;li&gt;[new] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3617&quot;&gt;Precise capturing&lt;/a&gt;&lt;/li&gt;
  767. &lt;/ul&gt;
  768. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#upcoming-events&quot;&gt;Upcoming Events&lt;/a&gt;&lt;/h4&gt;
  769. &lt;p&gt;Rusty Events between 2024-05-01 - 2024-05-29 🦀&lt;/p&gt;
  770. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#virtual&quot;&gt;Virtual&lt;/a&gt;&lt;/h5&gt;
  771. &lt;ul&gt;
  772. &lt;li&gt;2024-05-01 | 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;
  773. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/300325526/&quot;&gt;&lt;strong&gt;Rust for Rustaceans Book Club: Chapter 5 - Project Structure&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  774. &lt;/ul&gt;
  775. &lt;/li&gt;
  776. &lt;li&gt;2024-05-01 | Virtual (Indianapolis, IN, US) | &lt;a href=&quot;https://www.meetup.com/indyrs/&quot;&gt;Indy Rust&lt;/a&gt;&lt;ul&gt;
  777. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/indyrs/events/299047895/&quot;&gt;&lt;strong&gt;Indy.rs - with Social Distancing&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  778. &lt;/ul&gt;
  779. &lt;/li&gt;
  780. &lt;li&gt;2024-05-02 | Virtual (Aarhus, DK) | &lt;a href=&quot;https://www.meetup.com/rust-aarhus-organizers/&quot;&gt;Rust Aarhus Organizers&lt;/a&gt;&lt;ul&gt;
  781. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-aarhus-organizers/events/300416935/&quot;&gt;&lt;strong&gt;Rust Aarhus Organizers: Status&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  782. &lt;/ul&gt;
  783. &lt;/li&gt;
  784. &lt;li&gt;2024-05-02 | Virtual (Charlottesville, NC, US) | &lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/&quot;&gt;Charlottesville Rust Meetup&lt;/a&gt;&lt;ul&gt;
  785. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/events/298368804/&quot;&gt;&lt;strong&gt;Crafting Interpreters in Rust Collaboratively&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  786. &lt;/ul&gt;
  787. &lt;/li&gt;
  788. &lt;li&gt;2024-05-02 | 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;
  789. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/women-in-rust/events/300208946/&quot;&gt;&lt;strong&gt;Women in Rust: Lunch &amp;amp; Learn! (Virtual)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  790. &lt;/ul&gt;
  791. &lt;/li&gt;
  792. &lt;li&gt;2024-05-07 | Virtual (Buffalo, NY) | &lt;a href=&quot;https://www.meetup.com/buffalo-rust-meetup/&quot;&gt;Buffalo Rust Meetup&lt;/a&gt;&lt;ul&gt;
  793. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/buffalo-rust-meetup/events/300100279/&quot;&gt;&lt;strong&gt;Buffalo Rust User Group&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  794. &lt;/ul&gt;
  795. &lt;/li&gt;
  796. &lt;li&gt;2024-05-09 | Virtual (Berlin, DE) | &lt;a href=&quot;https://berline.rs/&quot;&gt;OpenTechSchool Berlin&lt;/a&gt; + &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  797. &lt;li&gt;&lt;a href=&quot;https://meet.jit.si/RustHackAndLearnBerlin&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt; | &lt;a href=&quot;https://www.meetup.com/rust-berlin/events/298477697/&quot;&gt;&lt;strong&gt;Mirror: Rust Hack n Learn Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  798. &lt;/ul&gt;
  799. &lt;/li&gt;
  800. &lt;li&gt;2024-05-09 | Virtual (Israel) | &lt;a href=&quot;https://rust.org.il/&quot;&gt;Rust in Israel&lt;/a&gt;&lt;ul&gt;
  801. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/code-mavens/events/300144781/&quot;&gt;&lt;strong&gt;Rust at Microsoft, Tel Aviv - Are we embedded yet?&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  802. &lt;/ul&gt;
  803. &lt;/li&gt;
  804. &lt;li&gt;2024-05-09 | Virtual (Nuremberg/Nürnberg, DE) | &lt;a href=&quot;https://www.meetup.com/rust-noris/&quot;&gt;Rust Nuremberg&lt;/a&gt;&lt;ul&gt;
  805. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-noris/events/297945257/&quot;&gt;&lt;strong&gt;Rust Nürnberg online&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  806. &lt;/ul&gt;
  807. &lt;/li&gt;
  808. &lt;li&gt;2024-05-14 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust/&quot;&gt;Dallas Rust&lt;/a&gt;&lt;ul&gt;
  809. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/298341699/&quot;&gt;&lt;strong&gt;Second Tuesday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  810. &lt;/ul&gt;
  811. &lt;/li&gt;
  812. &lt;li&gt;2024-05-14 | Virtual (Halifax, NS, CA) | &lt;a href=&quot;https://www.meetup.com/rust-tell-halifax/&quot;&gt;Rust Halifax&lt;/a&gt;&lt;ul&gt;
  813. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-tell-halifax/events/300437775/&quot;&gt;&lt;strong&gt;Rust&amp;amp;Tell - Halifax&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  814. &lt;/ul&gt;
  815. &lt;/li&gt;
  816. &lt;li&gt;2024-05-14 | Virtual + In-Person (München/Munich, DE) | &lt;a href=&quot;https://www.meetup.com/rust-munich/&quot;&gt;Rust Munich&lt;/a&gt;&lt;ul&gt;
  817. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-munich/events/298507657/&quot;&gt;&lt;strong&gt;Rust Munich 2024 / 1 - hybrid (Rescheduled)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  818. &lt;/ul&gt;
  819. &lt;/li&gt;
  820. &lt;li&gt;2024-05-15 | Virtual (Vancouver, BC, CA) | &lt;a href=&quot;https://www.meetup.com/vancouver-rust/&quot;&gt;Vancouver Rust&lt;/a&gt;&lt;ul&gt;
  821. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/vancouver-rust/events/298542323/&quot;&gt;&lt;strong&gt;Rust Study/Hack/Hang-out&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  822. &lt;/ul&gt;
  823. &lt;/li&gt;
  824. &lt;li&gt;2024-05-16 | 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;
  825. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/events/298312423/&quot;&gt;&lt;strong&gt;Crafting Interpreters in Rust Collaboratively&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  826. &lt;/ul&gt;
  827. &lt;/li&gt;
  828. &lt;li&gt;2024-05-21 | Virtual (Washington, DC, US) | &lt;a href=&quot;https://www.meetup.com/rustdc/&quot;&gt;Rust DC&lt;/a&gt;&lt;ul&gt;
  829. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rustdc/events/299346490/&quot;&gt;&lt;strong&gt;Mid-month Rustful—forensic parsing via Artemis&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  830. &lt;/ul&gt;
  831. &lt;/li&gt;
  832. &lt;li&gt;2024-05-23 | Virtual (Berlin, DE) | &lt;a href=&quot;https://berline.rs/&quot;&gt;OpenTechSchool Berlin&lt;/a&gt; + &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  833. &lt;li&gt;&lt;a href=&quot;https://meet.jit.si/RustHackAndLearnBerlin&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt; | &lt;a href=&quot;https://www.meetup.com/rust-berlin/events/298477699/&quot;&gt;&lt;strong&gt;Mirror: Rust Hack n Learn Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  834. &lt;/ul&gt;
  835. &lt;/li&gt;
  836. &lt;li&gt;2024-05-28 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust/&quot;&gt;Dallas Rust&lt;/a&gt;&lt;ul&gt;
  837. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/300533392/&quot;&gt;&lt;strong&gt;Second Tuesday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  838. &lt;/ul&gt;
  839. &lt;/li&gt;
  840. &lt;/ul&gt;
  841. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#africa&quot;&gt;Africa&lt;/a&gt;&lt;/h5&gt;
  842. &lt;ul&gt;
  843. &lt;li&gt;2024-05-04 | Kampala, UG | &lt;a href=&quot;https://www.eventbrite.com/o/rust-circle-kampala-65249289033&quot;&gt;Rust Circle Kampala&lt;/a&gt;&lt;ul&gt;
  844. &lt;li&gt;&lt;a href=&quot;https://www.eventbrite.com/e/rust-circle-meetup-tickets-628763176587?aff=ebdsoporgprofile&quot;&gt;&lt;strong&gt;Rust Circle Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  845. &lt;/ul&gt;
  846. &lt;/li&gt;
  847. &lt;/ul&gt;
  848. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#asia&quot;&gt;Asia&lt;/a&gt;&lt;/h5&gt;
  849. &lt;ul&gt;
  850. &lt;li&gt;2024-05-11 | Bangalore, IN | &lt;a href=&quot;https://hasgeek.com/rustbangalore&quot;&gt;Rust Bangalore&lt;/a&gt;&lt;ul&gt;
  851. &lt;li&gt;&lt;a href=&quot;https://hasgeek.com/rustbangalore/may-2024-rustacean-meetup/&quot;&gt;&lt;strong&gt;May 2024 Rustacean meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  852. &lt;/ul&gt;
  853. &lt;/li&gt;
  854. &lt;/ul&gt;
  855. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#europe&quot;&gt;Europe&lt;/a&gt;&lt;/h5&gt;
  856. &lt;ul&gt;
  857. &lt;li&gt;2024-05-01 | Köln/Cologne, DE | &lt;a href=&quot;https://www.meetup.com/rustcologne/&quot;&gt;Rust Cologne&lt;/a&gt;&lt;ul&gt;
  858. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rustcologne/events/300610856/&quot;&gt;&lt;strong&gt;This Month in Rust, May&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  859. &lt;/ul&gt;
  860. &lt;/li&gt;
  861. &lt;li&gt;2024-05-01 | Utrecht, NL | &lt;a href=&quot;https://nl-rse.org/events/2024-05-01-meetup&quot;&gt;NL-RSE Community&lt;/a&gt;&lt;ul&gt;
  862. &lt;li&gt;&lt;a href=&quot;https://www.eventbrite.nl/e/nl-rse-rust-meetup-tickets-871056271757&quot;&gt;&lt;strong&gt;NL-RSE RUST meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  863. &lt;/ul&gt;
  864. &lt;/li&gt;
  865. &lt;li&gt;2024-05-06 | Delft, NL | &lt;a href=&quot;https://www.gosim.org/&quot;&gt;GOSIM&lt;/a&gt;&lt;ul&gt;
  866. &lt;li&gt;&lt;a href=&quot;https://europe2024.gosim.org/&quot;&gt;&lt;strong&gt;GOSIM Europe 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  867. &lt;/ul&gt;
  868. &lt;/li&gt;
  869. &lt;li&gt;2024-05-07 &amp;amp; 2024-05-08 | Delft, NL | &lt;a href=&quot;https://rustnl.org/&quot;&gt;RustNL&lt;/a&gt;&lt;ul&gt;
  870. &lt;li&gt;&lt;a href=&quot;https://2024.rustnl.org/&quot;&gt;&lt;strong&gt;RustNL 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  871. &lt;/ul&gt;
  872. &lt;/li&gt;
  873. &lt;li&gt;2024-05-07 | Oxford, UK | &lt;a href=&quot;https://www.meetup.com/oxford-rust-meetup-group/&quot;&gt;Oxfrod Rust Meetup Group&lt;/a&gt;&lt;ul&gt;
  874. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/oxford-rust-meetup-group/events/300567559/&quot;&gt;&lt;strong&gt;More Rust - Generics, constraints, safety.&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  875. &lt;/ul&gt;
  876. &lt;/li&gt;
  877. &lt;li&gt;2024-05-08 | Cambridge, UK | &lt;a href=&quot;https://www.meetup.com/cambridge-rust-meetup/&quot;&gt;Cambridge Rust Meetup&lt;/a&gt;&lt;ul&gt;
  878. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/cambridge-rust-meetup/events/300573716/&quot;&gt;&lt;strong&gt;Monthly Rust Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  879. &lt;/ul&gt;
  880. &lt;/li&gt;
  881. &lt;li&gt;2024-05-09 | Gdańsk, PL | &lt;a href=&quot;https://www.meetup.com/rust-gdansk/&quot;&gt;Rust Gdansk&lt;/a&gt;&lt;ul&gt;
  882. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-gdansk/events/299766774/&quot;&gt;&lt;strong&gt;Rust Gdansk Meetup #2&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  883. &lt;/ul&gt;
  884. &lt;/li&gt;
  885. &lt;li&gt;2024-05-14 | 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;
  886. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-london-user-group/events/300715979/&quot;&gt;&lt;strong&gt;Rust Hack &amp;amp; Learn May 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  887. &lt;/ul&gt;
  888. &lt;/li&gt;
  889. &lt;li&gt;2024-05-14 | Virtual + In-Person (München/Munich, DE) | &lt;a href=&quot;https://www.meetup.com/rust-munich/&quot;&gt;Rust Munich&lt;/a&gt;&lt;ul&gt;
  890. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-munich/events/298507657/&quot;&gt;&lt;strong&gt;Rust Munich 2024 / 1 - hybrid (Rescheduled)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  891. &lt;/ul&gt;
  892. &lt;/li&gt;
  893. &lt;li&gt;2024-05-14 | Prague, CZ | &lt;a href=&quot;https://www.meetup.com/rust-prague/&quot;&gt;Rust Prague&lt;/a&gt;&lt;ul&gt;
  894. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-prague/events/300566374/&quot;&gt;&lt;strong&gt;Rust Meetup Prague (May 2024)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  895. &lt;/ul&gt;
  896. &lt;/li&gt;
  897. &lt;li&gt;2024-05-14 | Reading, UK | &lt;a href=&quot;https://www.meetup.com/reading-rust-workshop/&quot;&gt;Reading Rust Workshop&lt;/a&gt;&lt;ul&gt;
  898. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/reading-rust-workshop/events/299694474/&quot;&gt;&lt;strong&gt;Reading Rust Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  899. &lt;/ul&gt;
  900. &lt;/li&gt;
  901. &lt;li&gt;2024-05-16 | Augsburg, DE | &lt;a href=&quot;https://www.meetup.com/rust-meetup-augsburg/&quot;&gt;Rust Meetup Augsburg&lt;/a&gt;&lt;ul&gt;
  902. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-meetup-augsburg/events/300174327/&quot;&gt;&lt;strong&gt;Augsburg Rust Meetup #7&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  903. &lt;/ul&gt;
  904. &lt;/li&gt;
  905. &lt;li&gt;2024-05-16 | Paris, FR | &lt;a href=&quot;https://mobilizon.fr/@rust_paris&quot;&gt;Rust Paris&lt;/a&gt;&lt;ul&gt;
  906. &lt;li&gt;&lt;a href=&quot;https://mobilizon.fr/events/14b51ccc-211f-400f-9615-707d9d871e78&quot;&gt;&lt;strong&gt;Paris Rust Meetup #68&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  907. &lt;/ul&gt;
  908. &lt;/li&gt;
  909. &lt;li&gt;2024-05-21 | Aarhus, DK | &lt;a href=&quot;https://www.meetup.com/rust-aarhus/&quot;&gt;Rust Aarhus&lt;/a&gt;&lt;ul&gt;
  910. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-aarhus/events/300307155/&quot;&gt;&lt;strong&gt;Hack Night&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  911. &lt;/ul&gt;
  912. &lt;/li&gt;
  913. &lt;li&gt;2024-05-21 | Zurich, CH | &lt;a href=&quot;https://www.meetup.com/rust-zurich/&quot;&gt;Rust Zurich&lt;/a&gt;&lt;ul&gt;
  914. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-zurich/events/300513957/&quot;&gt;&lt;strong&gt;Save the date - Mai Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  915. &lt;/ul&gt;
  916. &lt;/li&gt;
  917. &lt;li&gt;2024-05-22 | Leiden, NL | &lt;a href=&quot;https://www.meetup.com/freshminds-future-proof-software-development/&quot;&gt;Future-proof Software Development by FreshMinds&lt;/a&gt;&lt;ul&gt;
  918. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/freshminds-future-proof-software-development/events/300566391/&quot;&gt;&lt;strong&gt;Coding Dojo Session&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  919. &lt;/ul&gt;
  920. &lt;/li&gt;
  921. &lt;li&gt;2024-05-23 | Bern, CH | &lt;a href=&quot;https://www.meetup.com/de-DE/rust-bern/&quot;&gt;Rust Bern&lt;/a&gt;&lt;ul&gt;
  922. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-bern/events/300286917/&quot;&gt;&lt;strong&gt;2024 Rust Talks Bern #2&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  923. &lt;/ul&gt;
  924. &lt;/li&gt;
  925. &lt;li&gt;2024-05-24 | Bordeaux, FR | &lt;a href=&quot;https://www.meetup.com/bordeaux-rust/&quot;&gt;Rust Bordeaux&lt;/a&gt;&lt;ul&gt;
  926. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bordeaux-rust/events/300723854/&quot;&gt;&lt;strong&gt;Rust Bordeaux #3: Discussions&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  927. &lt;/ul&gt;
  928. &lt;/li&gt;
  929. &lt;li&gt;2024-05-28 - 2024-05-30 | Berlin, DE | &lt;a href=&quot;https://oxidizeconf.com/&quot;&gt;Oxidize&lt;/a&gt;&lt;ul&gt;
  930. &lt;li&gt;&lt;a href=&quot;https://oxidizeconf.com/&quot;&gt;&lt;strong&gt;Oxidize Conf 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  931. &lt;/ul&gt;
  932. &lt;/li&gt;
  933. &lt;/ul&gt;
  934. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#north-america&quot;&gt;North America&lt;/a&gt;&lt;/h5&gt;
  935. &lt;ul&gt;
  936. &lt;li&gt;2024-05-04 | Cambridge, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
  937. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/300116701/&quot;&gt;&lt;strong&gt;Kendall Rust Lunch, May 4&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  938. &lt;/ul&gt;
  939. &lt;/li&gt;
  940. &lt;li&gt;2024-05-08 | Detroit, MI, US | &lt;a href=&quot;https://www.meetup.com/detroitrust/&quot;&gt;Detroit Rust&lt;/a&gt;&lt;ul&gt;
  941. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/detroitrust/events/300763859/&quot;&gt;&lt;strong&gt;Rust Social - Ann Arbor&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  942. &lt;/ul&gt;
  943. &lt;/li&gt;
  944. &lt;li&gt;2024-05-09 | Spokane, WA, US | &lt;a href=&quot;https://www.meetup.com/spokane-rust/&quot;&gt;Spokane Rust&lt;/a&gt;&lt;ul&gt;
  945. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/spokane-rust/events/300020003/&quot;&gt;&lt;strong&gt;Monthly Meetup: Topic TBD!&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  946. &lt;/ul&gt;
  947. &lt;/li&gt;
  948. &lt;li&gt;2024-05-12 | Brookline, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
  949. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/300116747/&quot;&gt;&lt;strong&gt;Coolidge Corner Brookline Rust Lunch, May 12&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  950. &lt;/ul&gt;
  951. &lt;/li&gt;
  952. &lt;li&gt;2024-05-14 | Minneapolis, MN, US | &lt;a href=&quot;https://www.meetup.com/minneapolis-rust-meetup/&quot;&gt;Minneapolis Rust Meetup&lt;/a&gt;&lt;ul&gt;
  953. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/minneapolis-rust-meetup/events/300744140/&quot;&gt;&lt;strong&gt;Minneapolis Rust Meetup Happy Hour&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  954. &lt;/ul&gt;
  955. &lt;/li&gt;
  956. &lt;li&gt;2024-05-16 | Seattle, WA, US | &lt;a href=&quot;https://www.meetup.com/seattle-rust-user-group/&quot;&gt;Seattle Rust User Group&lt;/a&gt;&lt;ul&gt;
  957. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/seattle-rust-user-group/events/299509369/&quot;&gt;&lt;strong&gt;Seattle Rust User Group Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  958. &lt;/ul&gt;
  959. &lt;/li&gt;
  960. &lt;li&gt;2024-05-20 | Somerville, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
  961. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/300116765/&quot;&gt;&lt;strong&gt;Ball Square Rust Lunch, May 20&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  962. &lt;/ul&gt;
  963. &lt;/li&gt;
  964. &lt;li&gt;2024-05-21 | 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;
  965. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/san-francisco-rust-study-group/events/299186931/&quot;&gt;&lt;strong&gt;Rust Hacking in Person&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  966. &lt;/ul&gt;
  967. &lt;/li&gt;
  968. &lt;li&gt;2024-05-22 | Austin, TX, US | &lt;a href=&quot;https://www.meetup.com/rust-atx/&quot;&gt;Rust ATX&lt;/a&gt;&lt;ul&gt;
  969. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-atx/events/xvkdgtygchbdc/&quot;&gt;&lt;strong&gt;Rust Lunch - Fareground&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  970. &lt;/ul&gt;
  971. &lt;/li&gt;
  972. &lt;li&gt;2024-05-25 | Chicago, IL, US | &lt;a href=&quot;https://www.meetup.com/deep-dish-rust/&quot;&gt;Deep Dish Rust&lt;/a&gt;&lt;ul&gt;
  973. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/deep-dish-rust/events/300665520/&quot;&gt;&lt;strong&gt;Rust Talk Double Feature&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  974. &lt;/ul&gt;
  975. &lt;/li&gt;
  976. &lt;/ul&gt;
  977. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#oceania&quot;&gt;Oceania&lt;/a&gt;&lt;/h5&gt;
  978. &lt;ul&gt;
  979. &lt;li&gt;2024-05-02 | Brisbane City, QL, AU | &lt;a href=&quot;https://www.meetup.com/rust-brisbane/&quot;&gt;Rust Brisbane&lt;/a&gt;&lt;ul&gt;
  980. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-brisbane/events/300647409/&quot;&gt;&lt;strong&gt;May Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  981. &lt;/ul&gt;
  982. &lt;/li&gt;
  983. &lt;/ul&gt;
  984. &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
  985. it mentioned here. Please remember to add a link to the event too.
  986. 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;
  987. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#jobs&quot;&gt;Jobs&lt;/a&gt;&lt;/h4&gt;
  988.  
  989.  
  990. &lt;p&gt;Please see the latest &lt;a href=&quot;https://www.reddit.com/r/rust/comments/1bpg8b8/official_rrust_whos_hiring_thread_for_jobseekers/&quot;&gt;Who's Hiring thread on r/rust&lt;/a&gt;&lt;/p&gt;
  991. &lt;h3&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#quote-of-the-week&quot;&gt;Quote of the Week&lt;/a&gt;&lt;/h3&gt;
  992. &lt;blockquote&gt;
  993. &lt;p&gt;&quot;I'll never!&quot;
  994. &quot;No, never is in the 2024 Edition.&quot;
  995. &quot;But never can't be this year, it's never!&quot;
  996. &quot;Well we're trying to make it happen now!&quot;
  997. &quot;But never isn't now?&quot; &quot;I mean technically, now never is the unit.&quot;
  998. &quot;But how do you have an entire unit if it never happens?&quot;&lt;/p&gt;
  999. &lt;/blockquote&gt;
  1000. &lt;p&gt;– &lt;a href=&quot;https://rust-lang.zulipchat.com/#narrow/stream/268952-edition/topic/should.20have.20been.202025.20edition/near/435845944&quot;&gt;Jubilee on Zulip&lt;/a&gt;&lt;/p&gt;
  1001. &lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/t/twir-quote-of-the-week/328/1565&quot;&gt;Jacob Pratt&lt;/a&gt; for the suggestion! &lt;/p&gt;
  1002. &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;
  1003. &lt;p&gt;&lt;em&gt;This Week in Rust is edited by: &lt;a href=&quot;https://github.com/nellshamrell&quot;&gt;nellshamrell&lt;/a&gt;, &lt;a href=&quot;https://github.com/llogiq&quot;&gt;llogiq&lt;/a&gt;, &lt;a href=&quot;https://github.com/cdmistman&quot;&gt;cdmistman&lt;/a&gt;, &lt;a href=&quot;https://github.com/ericseppanen&quot;&gt;ericseppanen&lt;/a&gt;, &lt;a href=&quot;https://github.com/extrawurst&quot;&gt;extrawurst&lt;/a&gt;, &lt;a href=&quot;https://github.com/andrewpollack&quot;&gt;andrewpollack&lt;/a&gt;, &lt;a href=&quot;https://github.com/U007D&quot;&gt;U007D&lt;/a&gt;, &lt;a href=&quot;https://github.com/kolharsam&quot;&gt;kolharsam&lt;/a&gt;, &lt;a href=&quot;https://github.com/joelmarcey&quot;&gt;joelmarcey&lt;/a&gt;, &lt;a href=&quot;https://github.com/mariannegoldin&quot;&gt;mariannegoldin&lt;/a&gt;, &lt;a href=&quot;https://github.com/bennyvasquez&quot;&gt;bennyvasquez&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
  1004. &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;
  1005. &lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://www.reddit.com/r/rust/comments/1ci5khm/this_week_in_rust_545/&quot;&gt;Discuss on r/rust&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;</description>
  1006. <pubDate>Wed, 01 May 2024 04:00:00 +0000</pubDate>
  1007. <dc:creator>TWiR Contributors</dc:creator>
  1008. </item>
  1009. <item>
  1010. <title>William Durand: Moziversary #6</title>
  1011. <guid isPermaLink="false">https://williamdurand.fr/2024/05/01/moziversary-6</guid>
  1012. <link>https://williamdurand.fr/2024/05/01/moziversary-6/</link>
  1013. <description>&lt;p&gt;&lt;em&gt;Today is my sixth Moziversary 🎂 I joined Mozilla as a full-time employee on
  1014. May 1st, 2018. I previously blogged in &lt;del&gt;2019&lt;/del&gt;, &lt;a href=&quot;https://williamdurand.fr/2020/05/01/moziversary-2/&quot;&gt;2020&lt;/a&gt;, &lt;a href=&quot;https://williamdurand.fr/2021/05/01/moziversary-3/&quot;&gt;2021&lt;/a&gt;, &lt;a href=&quot;https://williamdurand.fr/2022/05/01/moziversary-4/&quot;&gt;2022&lt;/a&gt;,
  1015. and &lt;a href=&quot;https://williamdurand.fr/2023/05/01/moziversary-5/&quot;&gt;2023&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
  1016.  
  1017. &lt;p&gt;Last year, I mainly contributed to Firefox for Android as the lead engineer on a
  1018. project called “Add-ons General Availability (GA)”. The goal was to allow for
  1019. more add-ons on this platform. Success! &lt;a href=&quot;https://addons.mozilla.org/android/&quot;&gt;More than a thousand extensions are now
  1020. available on Android&lt;/a&gt; 🎉&lt;/p&gt;
  1021.  
  1022. &lt;p&gt;In addition, I worked on a Firefox feature called &lt;a href=&quot;https://support.mozilla.org/kb/quarantined-domains&quot;&gt;Quarantined Domains&lt;/a&gt; and
  1023. implemented a new abuse report form on &lt;a href=&quot;https://addons.mozilla.org/&quot;&gt;addons.mozilla.org&lt;/a&gt; (AMO) to comply
  1024. with the Digital Services Act (DSA). I was also involved in two other cross-team
  1025. efforts related to the Firefox installation funnel. I investigated various
  1026. issues (&lt;em&gt;e.g.&lt;/em&gt; this &lt;a href=&quot;https://bugzilla.opensuse.org/show_bug.cgi?id=1221531#c22&quot;&gt;openSUSE bug&lt;/a&gt;), and I coordinated the deprecation of
  1027. &lt;a href=&quot;https://discourse.mozilla.org/t/upgraded-add-on-signatures/129599&quot;&gt;weak add-on signatures&lt;/a&gt; and some more changes around certificates
  1028. lately, which is why I wrote &lt;a href=&quot;https://williamdurand.fr/xpidump/&quot;&gt;xpidump&lt;/a&gt;.&lt;/p&gt;
  1029.  
  1030. &lt;p&gt;Phew! There is no shortage of work.&lt;/p&gt;
  1031.  
  1032. &lt;p&gt;When I moved to the WebExtensions team in 2022, &lt;a href=&quot;https://williamdurand.fr/2022/01/25/new-team-mozilla/&quot;&gt;I wrote about this incredible
  1033. challenge&lt;/a&gt;. I echoed this sentiment several months later in my &lt;a href=&quot;https://williamdurand.fr/2022/05/01/moziversary-4/&quot;&gt;2022
  1034. Moziversary update&lt;/a&gt;. I couldn’t imagine how much I would achieve in two
  1035. years…&lt;/p&gt;
  1036.  
  1037. &lt;p&gt;Back then, I didn’t know what the next step in my career would be. I have been
  1038. aiming to bridge the gap between the AMO and WebExtensions engineering teams
  1039. since at least &lt;a href=&quot;https://williamdurand.fr/2021/05/01/moziversary-3/&quot;&gt;2021&lt;/a&gt; and that &lt;em&gt;is&lt;/em&gt; my “next step”.&lt;/p&gt;
  1040.  
  1041. &lt;p&gt;I recently took a new role as Add-ons Tech Lead. This is the continuation of
  1042. what I’ve been doing for some time but that comes with new challenges and
  1043. opportunities as well. We’ll see how it goes but I am excited!&lt;/p&gt;
  1044.  
  1045. &lt;p&gt;I’ll be forever grateful to my manager and coworkers. Thank you ❤️&lt;/p&gt;</description>
  1046. <pubDate>Wed, 01 May 2024 00:00:00 +0000</pubDate>
  1047. </item>
  1048. <item>
  1049. <title>Don Marti: blog fix: remove stray files</title>
  1050. <guid isPermaLink="true">https://blog.zgp.org/blog-remove-stray-files/</guid>
  1051. <link>https://blog.zgp.org/blog-remove-stray-files/</link>
  1052. <description>&lt;p&gt;Another update from the blog. Quick recap: I’m re-doing this blog with mostly Pandoc and make, with a few helper scripts.&lt;/p&gt; &lt;p&gt;This is a personal web site and can be broken sometimes, and one of the breakage problems was: oops, I removed a draft post from the directory of source files (in &lt;a href=&quot;https://commonmark.org/&quot;&gt;CommonMark&lt;/a&gt;) but the HTML version got built and put in &lt;code&gt;public&lt;/code&gt; and copied to the server, possibly also affecting the &lt;code&gt;index.html&lt;/code&gt; and the RSS feed.&lt;/p&gt; &lt;p&gt;If you’re reading the RSS and got some half-baked drafts, that’s why.&lt;/p&gt; &lt;p&gt;So, to fix it, I need to ask &lt;code&gt;make&lt;/code&gt; if there’s anything in the &lt;code&gt;public&lt;/code&gt; directory that doesn’t have a corresponding source file or files and remove it. Quick helper script:&lt;/p&gt;   &lt;p&gt;That should mean a better RSS reading experience since you shouldn’t get it cluttered up with drafts if I make a mistake.&lt;/p&gt; &lt;p&gt;But I’m sure I have plenty of other mistakes I can make.&lt;/p&gt; &lt;h3&gt;Related&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/scale-2025/&quot;&gt;planning for SCALE 2025&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/automatically-run-make/&quot;&gt;Automatically run make when a file changes&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/favicon/&quot;&gt;Hey kids, favicon!&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/responsive-ascii/&quot;&gt;responsive ascii art&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Bonus links&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://www.citationneeded.news/we-can-have-a-different-web/&quot;&gt;We can have a different web&lt;/a&gt; &lt;q&gt;Nothing about the web has changed that prevents us from going back. If anything, it’s become a lot easier.&lt;/q&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.wired.com/story/meta-section-230-users-algorithm/&quot;&gt;A Lawsuit Argues Meta Is Required by Law to Let You Control Your Own Feed&lt;/a&gt; (Section 230 protection for a research extension? Makes sense to me.)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://platformpapers.substack.com/p/effects-of-banning-targeted-advertising&quot;&gt;Effects of Banning Targeted Advertising&lt;/a&gt; (The top 10 percent of Android apps for kids did better after an ad personalization policy change, while the bottom 90 percent lost revenue. If Sturgeon’s Law applies to Android apps, the average under-13 user might be better off?)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.wheresyoured.at/in-response-to-google/&quot;&gt;In Response To Google&lt;/a&gt; (Does anyone else notice more and more people working on ways to fix their personal information environment because of the search quality crisis? This blog series from Ed Zitron has some good background.)&lt;/p&gt;</description>
  1053. <pubDate>Wed, 01 May 2024 00:00:00 +0000</pubDate>
  1054. </item>
  1055. <item>
  1056. <title>The Rust Programming Language Blog: Announcing Google Summer of Code 2024 selected projects</title>
  1057. <guid isPermaLink="true">https://blog.rust-lang.org/2024/05/01/gsoc-2024-selected-projects.html</guid>
  1058. <link>https://blog.rust-lang.org/2024/05/01/gsoc-2024-selected-projects.html</link>
  1059. <description>&lt;p&gt;The Rust Project is &lt;a href=&quot;https://blog.rust-lang.org/2024/02/21/Rust-participates-in-GSoC-2024.html&quot;&gt;participating&lt;/a&gt; in &lt;a href=&quot;https://summerofcode.withgoogle.com&quot;&gt;Google Summer of Code (GSoC) 2024&lt;/a&gt;, a global program organized by Google which is designed to bring new contributors to the world of open-source.&lt;/p&gt;
  1060. &lt;p&gt;In February, we published a list of &lt;a href=&quot;https://github.com/rust-lang/google-summer-of-code&quot;&gt;GSoC project ideas&lt;/a&gt;, and started discussing these projects with potential GSoC applicants on our &lt;a href=&quot;https://rust-lang.zulipchat.com/#narrow/stream/421156-gsoc&quot;&gt;Zulip&lt;/a&gt;. We were pleasantly surprised by the amount of people that wanted to participate in these projects and that led to many fruitful discussions with members of various Rust teams. Some of them even immediately began contributing to various repositories of the Rust Project, even before GSoC officially started!&lt;/p&gt;
  1061. &lt;p&gt;After the initial discussions, GSoC applicants prepared and submitted their project proposals. We received 65 (!) proposals in total. We are happy to see that there was so much interest, given that this is the first time the Rust Project is participating in GSoC.&lt;/p&gt;
  1062. &lt;p&gt;A team of mentors primarily composed of Rust Project contributors then thoroughly examined the submitted proposals. GSoC required us to produce a ranked list of the best proposals, which was a challenging task in itself since Rust is a big project with many priorities! We went through many rounds of discussions and had to consider many factors, such as prior conversations with the given applicant, the quality and scope of their proposal, the importance of the proposed project for the Rust Project and its wider community, but also the availability of mentors, who are often volunteers and thus have limited time available for mentoring.&lt;/p&gt;
  1063. &lt;p&gt;In many cases, we had multiple proposals that aimed to accomplish the same goal. Therefore, we had to pick only one per project topic despite receiving several high-quality proposals from people we'd love to work with. We also often had to choose between great proposals targeting different work within the same Rust component to avoid overloading a single mentor with multiple projects.&lt;/p&gt;
  1064. &lt;p&gt;In the end, we narrowed the list down to twelve best proposals, which we felt was the maximum amount that we could realistically support with our available mentor pool. We submitted this list and eagerly awaited how many of these twelve proposals would be accepted into GSoC.&lt;/p&gt;
  1065. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/01/gsoc-2024-selected-projects.html#selected-projects&quot; id=&quot;selected-projects&quot;&gt;&lt;/a&gt;Selected projects&lt;/h3&gt;
  1066. &lt;p&gt;On the 1st of May, Google has announced the accepted projects. We are happy to announce that &lt;code&gt;9&lt;/code&gt; proposals out of the twelve that we have submitted were accepted by Google, and will thus participate in Google Summer of Code 2024! Below you can find the list of accepted proposals (in alphabetical order), along with the names of their authors and the assigned mentor(s):&lt;/p&gt;
  1067. &lt;ul&gt;
  1068. &lt;li&gt;&lt;strong&gt;Adding lint-level configuration to cargo-semver-checks&lt;/strong&gt; by Max Carr, mentored by Predrag Gruevski&lt;/li&gt;
  1069. &lt;li&gt;&lt;strong&gt;Implementation of a Faster Register Allocator For Cranelift&lt;/strong&gt; by d-sonuga, mentored by Chris Fallin and Amanieu d'Antras&lt;/li&gt;
  1070. &lt;li&gt;&lt;strong&gt;Improve Rust benchmark suite&lt;/strong&gt; by s7tya, mentored by Jakub Beránek&lt;/li&gt;
  1071. &lt;li&gt;&lt;strong&gt;Move cargo shell completions to Rust&lt;/strong&gt; by shanmu, mentored by Ed Page&lt;/li&gt;
  1072. &lt;li&gt;&lt;strong&gt;Rewriting Esoteric, Error-Prone Makefile Tests Using Robust Rust Features&lt;/strong&gt; by Julien Robert, mentored by Jieyou Xu&lt;/li&gt;
  1073. &lt;li&gt;&lt;strong&gt;Rewriting the Rewrite trait&lt;/strong&gt; by SeoYoung Lee, mentored by Yacin Tmimi&lt;/li&gt;
  1074. &lt;li&gt;&lt;strong&gt;Rust to .NET compiler - add support for compiling &amp;amp; running cargo tests&lt;/strong&gt; by Fractal Fir, mentored by Jack Huey&lt;/li&gt;
  1075. &lt;li&gt;&lt;strong&gt;Sandboxed and Deterministic Proc Macro using Wasm&lt;/strong&gt; by Apurva Mishra, mentored by David Lattimore&lt;/li&gt;
  1076. &lt;li&gt;&lt;strong&gt;Tokio async support in Miri&lt;/strong&gt; by Tiffany Pek Yuan, mentored by Oli Scherer&lt;/li&gt;
  1077. &lt;/ul&gt;
  1078. &lt;p&gt;&lt;strong&gt;Congratulations to all applicants whose project was selected!&lt;/strong&gt; The mentors are looking forward to working with you on these exciting projects to improve the Rust ecosystem. You can expect to hear from us soon, so that we can start coordinating the work on your GSoC projects.&lt;/p&gt;
  1079. &lt;p&gt;We would also like to thank all the applicants whose proposal was sadly not accepted, for their interactions with the Rust community and contributions to various Rust projects. There were some great proposals that did not make the cut, in large part because of limited review capacity. However, even if your proposal was not accepted, we would be happy if you would consider contributing to the projects that got you interested, even outside GSoC! Our &lt;a href=&quot;https://github.com/rust-lang/google-summer-of-code&quot;&gt;project idea list&lt;/a&gt; is still actual, and could serve as a general entry point for contributors that would like to work on projects that would help the Rust Project maintainers and the Rust ecosystem.&lt;/p&gt;
  1080. &lt;p&gt;Assuming our involvement in GSoC 2024 is successful, there's a good chance we'll participate next year as well (though we can't promise anything yet) and we hope to receive your proposals again in the future! We also are planning to participate in similar programs in the very near future. Those announcements will come in separate blog posts, so make sure to subscribe to this blog so that you don't miss anything.&lt;/p&gt;
  1081. &lt;p&gt;The accepted GSoC projects will run for several months. After GSoC 2024 finishes (in autumn of 2024), we plan to publish a blog post in which we will summarize the outcome of the accepted projects.&lt;/p&gt;</description>
  1082. <pubDate>Wed, 01 May 2024 00:00:00 +0000</pubDate>
  1083. <dc:creator>Jakub Beránek, Jack Huey and Paul Lenz</dc:creator>
  1084. </item>
  1085. <item>
  1086. <title>Support.Mozilla.Org: What’s up with SUMO — Q1 2024</title>
  1087. <guid isPermaLink="false">https://blog.mozilla.org/sumo/?p=4112</guid>
  1088. <link>https://blog.mozilla.org/sumo/2024/04/30/whats-up-with-sumo-q1-2024/</link>
  1089. <description>&lt;p&gt;Hi everybody,&lt;/p&gt;
  1090. &lt;p&gt;It’s always exciting to start a new year as it provides renewed spirit. Even more exciting because the CX team welcomed a few additional members this quarter, including Konstantina, who will be with us crafting better community experiences in SUMO. This is huge, since the SUMO community team has been under resourced for the past few years. I’m personally super excited about this. There are a few things that we’re working on internally, and I can’t wait to share them with you all. But first thing first, let’s read the recap of what happened and what we did in Q1 2024!&lt;/p&gt;
  1091. &lt;h3&gt;Welcome note and shout-outs&lt;/h3&gt;
  1092. &lt;ul&gt;
  1093. &lt;li&gt;Thanks for joining the Social and Mobile Store Support program!&lt;/li&gt;
  1094. &lt;li&gt;Welcome back to Erik L and Noah. It’s good to see you more often these days.&lt;/li&gt;
  1095. &lt;li&gt;Shout-outs to Noah and Sören for their observations during the 125 release so we can take prompt actions on &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1892521&quot;&gt;bug1892521&lt;/a&gt; and &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1892612&quot;&gt;bug1892612&lt;/a&gt;. Also, special thanks to Paul W for his direct involvement in the war room for the NordVPN incident.&lt;/li&gt;
  1096. &lt;li&gt;Thanks to Philipp for his consistency in creating desktop thread in the contributor forum for every release. Your help is greatly appreciated!&lt;/li&gt;
  1097. &lt;li&gt;Also huge thanks to everybody who is involved in the Night Mode removal issue on Firefox for iOS 124. In the end, we decided to end the experiment early, since many people raised concern about accessibility issues. This really shows the power of community and users’ feedback.&lt;/li&gt;
  1098. &lt;/ul&gt;
  1099. &lt;p&gt;If you know someone who you’d like to feature here, please contact &lt;a href=&quot;https://support.mozilla.org/user/kelimutu&quot;&gt;Kiki&lt;/a&gt;, and we’ll make sure to add them in our next edition.&lt;/p&gt;
  1100. &lt;h3&gt;Community news&lt;/h3&gt;
  1101. &lt;ul&gt;
  1102. &lt;li&gt;As I mentioned, we started the year by onboarding &lt;a href=&quot;https://blog.mozilla.org/sumo/2024/01/04/introducing-mandy-and-donna/&quot;&gt;Mandy, Donna&lt;/a&gt;, and Britney. If that’s not enough, we also welcomed &lt;a href=&quot;https://blog.mozilla.org/sumo/2024/03/25/introducing-konstantina/&quot;&gt;Konstantina&lt;/a&gt;, who moved from Marketing to the CX team in March. If you haven’t got to know them, please don’t hesitate to say hi when you can.&lt;/li&gt;
  1103. &lt;li&gt;AI spam has been a big issue in our forum lately, so we decided to spin up a new contributor policy around the use of AI-generated tools. Please check &lt;a href=&quot;https://support.mozilla.org/forums/contributors/716669?last=86840&quot;&gt;this thread&lt;/a&gt; if you haven’t!&lt;/li&gt;
  1104. &lt;li&gt;We added a new capability in our KB to set restricted visibility on specific articles. This is a staff-only feature, but we believe it’s important for everybody to be aware of this. If you haven’t, please check out &lt;a href=&quot;https://support.mozilla.org/forums/contributors/716808?last=87367&quot;&gt;this thread&lt;/a&gt; to get to know more!&lt;/li&gt;
  1105. &lt;li&gt;Please be aware of Hubs sunset plan from &lt;a href=&quot;https://support.mozilla.org/forums/contributors/716909?last=87356&quot;&gt;this thread&lt;/a&gt;.&lt;/li&gt;
  1106. &lt;li&gt;We opened an &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885070&quot;&gt;AAQ for NL&lt;/a&gt; in our support forum. Thanks to Tim Maks and the rest of the NL community, who’ve been very supportive of this work.&lt;/li&gt;
  1107. &lt;li&gt;We’ve done our usual &lt;a href=&quot;https://support.mozilla.org/forums/contributors/716855?last=87308&quot;&gt;annual contributor survey in March&lt;/a&gt;. Thank you to every one of you who filled out the survey and shared great feedback!&lt;/li&gt;
  1108. &lt;li&gt;We change something around how we communicate product release updates through bi-weekly scrum meetings. Please be aware of it by checking out &lt;a href=&quot;https://support.mozilla.org/forums/contributors/716856?last=87188&quot;&gt;this contributor thread&lt;/a&gt;.&lt;/li&gt;
  1109. &lt;li&gt;Are you contributing to our Knowledge Base? You may want to read the recent blog posts from the content team to get to know more about &lt;a href=&quot;https://blog.mozilla.org/sumo/2024/04/09/keeping-you-in-the-loop-whats-new-in-our-knowledge-base/&quot;&gt;what they’re up to&lt;/a&gt;. In short, they’re doing a lot around &lt;a href=&quot;https://blog.mozilla.org/sumo/2024/04/18/freshening-up-the-knowledge-base-for-spring-2024/&quot;&gt;freshening up our knowledge base articles&lt;/a&gt;.&lt;/li&gt;
  1110. &lt;/ul&gt;
  1111. &lt;h3&gt;Stay updated&lt;/h3&gt;
  1112. &lt;ul&gt;
  1113. &lt;li&gt;Join our discussions in the &lt;a href=&quot;https://support.mozilla.org/en-US/forums/contributors/&quot;&gt;contributor forum&lt;/a&gt; to see what’s happening in the latest release on Desktop and mobile.&lt;/li&gt;
  1114. &lt;li&gt;Watch the monthly community call if you haven’t. Learn more about what’s new in &lt;a href=&quot;https://wiki.mozilla.org/Support/Weekly_Meetings/Agenda_2024-01-17&quot;&gt;January&lt;/a&gt;, and &lt;a href=&quot;https://wiki.mozilla.org/Support/Weekly_Meetings/Agenda_2024-03-13&quot;&gt;March&lt;/a&gt; (we canceled February)! &lt;b&gt;&lt;i&gt;Reminder&lt;/i&gt;&lt;/b&gt;&lt;b&gt;:&lt;/b&gt; &lt;i&gt;Don’t hesitate to join the call in person if you can. We try our best to provide a safe space for everyone to contribute. You’re more than welcome to lurk in the call if you don’t feel comfortable turning on your video or speaking up. If you feel shy to ask questions during the meeting, feel free to add your questions on the contributor forum in advance, or put them in our Matrix channel, so we can answer them during the meeting.&lt;/i&gt;&lt;/li&gt;
  1115. &lt;li&gt;If you’re an NDA’ed contributor, you can watch the recording of our Firefox Pod Meeting from &lt;a href=&quot;https://mzl.la/SUMO-release-scrum&quot;&gt;AirMozilla&lt;/a&gt; to catch up with the latest train release. You can also subscribe to the AirMozilla folder by clickling on the Subscribe button at the top right corner of the page to get notifications each time we add a new recording.&lt;/li&gt;
  1116. &lt;li&gt;Consider subscribing to &lt;a href=&quot;https://mzl.la/3NZO8tI&quot;&gt;Firefox Daily Digest&lt;/a&gt; to get daily updates (Mon-Fri) about Firefox from across the internet.&lt;/li&gt;
  1117. &lt;li&gt;Check out &lt;a href=&quot;https://github.com/mozilla/sumo-project/projects/1&quot;&gt;SUMO Engineering Board&lt;/a&gt; to see what the platform team is cooking in the engine room. Also, check out &lt;a href=&quot;https://github.com/mozilla/kitsune/releases&quot;&gt;this page&lt;/a&gt; to see our latest release notes&lt;/li&gt;
  1118. &lt;/ul&gt;
  1119. &lt;h3&gt;Community stats&lt;/h3&gt;
  1120. &lt;h4&gt;KB&lt;/h4&gt;
  1121. &lt;p&gt;&lt;b&gt;KB pageviews&lt;/b&gt;&lt;/p&gt;
  1122. &lt;table style=&quot;height: 114px;&quot; width=&quot;638&quot;&gt;
  1123. &lt;tbody&gt;
  1124. &lt;tr&gt;
  1125. &lt;td&gt;&lt;b&gt;Month&lt;/b&gt;&lt;/td&gt;
  1126. &lt;td&gt;&lt;b&gt;Page views&lt;/b&gt;&lt;/td&gt;
  1127. &lt;td&gt;&lt;b&gt;Vs previous month&lt;/b&gt;&lt;/td&gt;
  1128. &lt;/tr&gt;
  1129. &lt;tr&gt;
  1130. &lt;td&gt;Jan 2024&lt;/td&gt;
  1131. &lt;td&gt;6,743,722&lt;/td&gt;
  1132. &lt;td&gt;3.20%&lt;/td&gt;
  1133. &lt;/tr&gt;
  1134. &lt;tr&gt;
  1135. &lt;td&gt;Feb 2024&lt;/td&gt;
  1136. &lt;td&gt;7,052,665&lt;/td&gt;
  1137. &lt;td&gt;4.58%&lt;/td&gt;
  1138. &lt;/tr&gt;
  1139. &lt;tr&gt;
  1140. &lt;td&gt;Mar 2024&lt;/td&gt;
  1141. &lt;td&gt;6,532,175&lt;/td&gt;
  1142. &lt;td&gt;-7.38%&lt;/td&gt;
  1143. &lt;/tr&gt;
  1144. &lt;/tbody&gt;
  1145. &lt;/table&gt;
  1146. &lt;pre&gt;KB pageviews number is a total of English (en-US) KB pageviews&lt;/pre&gt;
  1147. &lt;p&gt;&lt;b&gt;Top 5 KB contributors in the last 90 days: &lt;/b&gt;&lt;/p&gt;
  1148. &lt;ul&gt;
  1149. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/en-US/user/AliceWyman&quot;&gt;AliceWyman&lt;/a&gt;&lt;/li&gt;
  1150. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/en-US/user/Mozinet&quot;&gt;Pierre Mozinet&lt;/a&gt;&lt;/li&gt;
  1151. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/user/markh2/&quot;&gt;Mark Heijl&lt;/a&gt;&lt;/li&gt;
  1152. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/user/michro/&quot;&gt;Michele Rodaro&lt;/a&gt;&lt;/li&gt;
  1153. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/user/erling.rosag/&quot;&gt;Erling R&lt;/a&gt;&lt;/li&gt;
  1154. &lt;/ul&gt;
  1155. &lt;h4&gt;KB Localization&lt;/h4&gt;
  1156. &lt;p&gt;&lt;b&gt;Top 10 locales based on total page views&lt;/b&gt;&lt;/p&gt;
  1157. &lt;table style=&quot;height: 547px;&quot; width=&quot;1098&quot;&gt;
  1158. &lt;tbody&gt;
  1159. &lt;tr&gt;
  1160. &lt;td&gt;&lt;b&gt;Locale/pageviews&lt;/b&gt;&lt;/td&gt;
  1161. &lt;td&gt;
  1162. &lt;p style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Jan 2024&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
  1163. &lt;/td&gt;
  1164. &lt;td style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Feb 2024&lt;br /&gt;
  1165. &lt;/b&gt;&lt;/td&gt;
  1166. &lt;td&gt;
  1167. &lt;p style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Mar 2024 &lt;/b&gt;&lt;/p&gt;
  1168. &lt;/td&gt;
  1169. &lt;td&gt;&lt;b&gt;Localization progress (per Apr, 23)&lt;/b&gt;&lt;/td&gt;
  1170. &lt;/tr&gt;
  1171. &lt;tr&gt;
  1172. &lt;td&gt;&lt;a href=&quot;https://support.mozilla.org/de/localization&quot;&gt;de&lt;/a&gt;&lt;/td&gt;
  1173. &lt;td&gt;2,425,154&lt;/td&gt;
  1174. &lt;td&gt;2,601,865&lt;/td&gt;
  1175. &lt;td&gt;2,315,952&lt;/td&gt;
  1176. &lt;td&gt;92%&lt;/td&gt;
  1177. &lt;/tr&gt;
  1178. &lt;tr&gt;
  1179. &lt;td&gt;&lt;a href=&quot;https://support.mozilla.org/fr/localization&quot;&gt;fr&lt;/a&gt;&lt;/td&gt;
  1180. &lt;td&gt;1,559,222&lt;/td&gt;
  1181. &lt;td&gt;1,704,271&lt;/td&gt;
  1182. &lt;td&gt;1,529,981&lt;/td&gt;
  1183. &lt;td&gt;81%&lt;/td&gt;
  1184. &lt;/tr&gt;
  1185. &lt;tr&gt;
  1186. &lt;td&gt;&lt;a href=&quot;https://support.mozilla.org/zh-CN/localization&quot;&gt;zh-CN&lt;/a&gt;&lt;/td&gt;
  1187. &lt;td&gt;1,351,729&lt;/td&gt;
  1188. &lt;td&gt;1,224,284&lt;/td&gt;
  1189. &lt;td&gt;1,306,699&lt;/td&gt;
  1190. &lt;td&gt;100%&lt;/td&gt;
  1191. &lt;/tr&gt;
  1192. &lt;tr&gt;
  1193. &lt;td&gt;&lt;a href=&quot;https://support.mozilla.org/es/localization&quot;&gt;es&lt;/a&gt;&lt;/td&gt;
  1194. &lt;td&gt;1,171,981&lt;/td&gt;
  1195. &lt;td&gt;1,353,200&lt;/td&gt;
  1196. &lt;td&gt;1,212,666&lt;/td&gt;
  1197. &lt;td&gt;25%&lt;/td&gt;
  1198. &lt;/tr&gt;
  1199. &lt;tr&gt;
  1200. &lt;td&gt;&lt;a href=&quot;https://support.mozilla.org/ja/localization&quot;&gt;ja&lt;/a&gt;&lt;/td&gt;
  1201. &lt;td&gt;1,019,806&lt;/td&gt;
  1202. &lt;td&gt;1,068,034&lt;/td&gt;
  1203. &lt;td&gt;1,051,625&lt;/td&gt;
  1204. &lt;td&gt;34%&lt;/td&gt;
  1205. &lt;/tr&gt;
  1206. &lt;tr&gt;
  1207. &lt;td&gt;&lt;a href=&quot;https://support.mozilla.org/ru/localization&quot;&gt;ru&lt;/a&gt;&lt;/td&gt;
  1208. &lt;td&gt;801,370&lt;/td&gt;
  1209. &lt;td&gt;886,163&lt;/td&gt;
  1210. &lt;td&gt;812,882&lt;/td&gt;
  1211. &lt;td&gt;100%&lt;/td&gt;
  1212. &lt;/tr&gt;
  1213. &lt;tr&gt;
  1214. &lt;td&gt;&lt;a href=&quot;https://support.mozilla.org/pt-BR/localization&quot;&gt;pt-BR&lt;/a&gt;&lt;/td&gt;
  1215. &lt;td&gt;661,612&lt;/td&gt;
  1216. &lt;td&gt;748,185&lt;/td&gt;
  1217. &lt;td&gt;714,554&lt;/td&gt;
  1218. &lt;td&gt;42%&lt;/td&gt;
  1219. &lt;/tr&gt;
  1220. &lt;tr&gt;
  1221. &lt;td&gt;&lt;a href=&quot;https://support.mozilla.org/zh-TW/localization&quot;&gt;zh-TW&lt;/a&gt;&lt;/td&gt;
  1222. &lt;td&gt;598,085&lt;/td&gt;
  1223. &lt;td&gt;623,218&lt;/td&gt;
  1224. &lt;td&gt;366,320&lt;/td&gt;
  1225. &lt;td&gt;3%&lt;/td&gt;
  1226. &lt;/tr&gt;
  1227. &lt;tr&gt;
  1228. &lt;td&gt;&lt;a href=&quot;https://support.mozilla.org/it/localization&quot;&gt;It&lt;/a&gt;&lt;/td&gt;
  1229. &lt;td&gt;533,071&lt;/td&gt;
  1230. &lt;td&gt;575,245&lt;/td&gt;
  1231. &lt;td&gt;529,887&lt;/td&gt;
  1232. &lt;td&gt;96%&lt;/td&gt;
  1233. &lt;/tr&gt;
  1234. &lt;tr&gt;
  1235. &lt;td&gt;&lt;a href=&quot;https://support.mozilla.org/pl/localization&quot;&gt;pl&lt;/a&gt;&lt;/td&gt;
  1236. &lt;td&gt;489,532&lt;/td&gt;
  1237. &lt;td&gt;532,506&lt;/td&gt;
  1238. &lt;td&gt;454,347&lt;/td&gt;
  1239. &lt;td&gt;84%&lt;/td&gt;
  1240. &lt;/tr&gt;
  1241. &lt;/tbody&gt;
  1242. &lt;/table&gt;
  1243. &lt;pre&gt;Locale pageviews is an overall pageview from the given locale (KB and other pages)
  1244.  
  1245. Localization progress is the percentage of localized articles from all KB articles per locale&lt;/pre&gt;
  1246. &lt;p&gt;&lt;b&gt;Top 5 localization contributors in the last 90 days: &lt;/b&gt;&lt;/p&gt;
  1247. &lt;ul&gt;
  1248. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/user/michro/&quot;&gt;Michele Rodaro&lt;/a&gt;&lt;/li&gt;
  1249. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/user/wxie2016/&quot;&gt;Wxie&lt;/a&gt;&lt;/li&gt;
  1250. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/user/Goudron/&quot;&gt;Valery Ledovskoy&lt;/a&gt;&lt;/li&gt;
  1251. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/user/d.spentzos/&quot;&gt;Jim Spentzos&lt;/a&gt;&lt;/li&gt;
  1252. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/user/markh2/&quot;&gt;Mark Heijl&lt;/a&gt;&lt;/li&gt;
  1253. &lt;/ul&gt;
  1254. &lt;h4&gt;Forum Support&lt;/h4&gt;
  1255. &lt;p&gt;&lt;b&gt;Forum stats&lt;/b&gt;&lt;/p&gt;
  1256. &lt;table style=&quot;height: 133px;&quot; width=&quot;902&quot;&gt;
  1257. &lt;tbody&gt;
  1258. &lt;tr&gt;
  1259. &lt;td&gt;&lt;b&gt;Month&lt;/b&gt;&lt;/td&gt;
  1260. &lt;td&gt;&lt;b&gt;Total questions&lt;/b&gt;&lt;/td&gt;
  1261. &lt;td&gt;&lt;b&gt;Answer rate within 72 hrs&lt;/b&gt;&lt;/td&gt;
  1262. &lt;td&gt;&lt;b&gt;Solved rate within 72 hrs&lt;/b&gt;&lt;/td&gt;
  1263. &lt;td&gt;&lt;b&gt;Forum helpfulness&lt;/b&gt;&lt;/td&gt;
  1264. &lt;/tr&gt;
  1265. &lt;tr&gt;
  1266. &lt;td&gt;Jan 2024&lt;/td&gt;
  1267. &lt;td&gt;2999&lt;/td&gt;
  1268. &lt;td&gt;72.6%&lt;/td&gt;
  1269. &lt;td&gt;10.8%&lt;/td&gt;
  1270. &lt;td&gt;61.3%&lt;/td&gt;
  1271. &lt;/tr&gt;
  1272. &lt;tr&gt;
  1273. &lt;td&gt;Feb 2024&lt;/td&gt;
  1274. &lt;td&gt;2766&lt;/td&gt;
  1275. &lt;td&gt;72.4%&lt;/td&gt;
  1276. &lt;td&gt;9.5%&lt;/td&gt;
  1277. &lt;td&gt;65.6%&lt;/td&gt;
  1278. &lt;/tr&gt;
  1279. &lt;tr&gt;
  1280. &lt;td&gt;Mar 2024&lt;/td&gt;
  1281. &lt;td&gt;2516&lt;/td&gt;
  1282. &lt;td&gt;71.5%&lt;/td&gt;
  1283. &lt;td&gt;10.4%&lt;/td&gt;
  1284. &lt;td&gt;71.6%&lt;/td&gt;
  1285. &lt;/tr&gt;
  1286. &lt;/tbody&gt;
  1287. &lt;/table&gt;
  1288. &lt;p&gt;&lt;b&gt;Top 5 forum contributors in the last 90 days: &lt;/b&gt;&lt;/p&gt;
  1289. &lt;ul&gt;
  1290. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/en-US/user/287&quot;&gt;Cor-el&lt;/a&gt;&lt;/li&gt;
  1291. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/en-US/user/davidsk&quot;&gt;Davidsk&lt;/a&gt;&lt;/li&gt;
  1292. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/en-US/user/jonzn4SUSE/&quot;&gt;Jonzn4SUSE&lt;/a&gt;&lt;/li&gt;
  1293. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/user/MattAuSupport/&quot;&gt;Matt&lt;/a&gt;&lt;/li&gt;
  1294. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/user/jscher2000/&quot;&gt;Jscher2000&lt;/a&gt;&lt;/li&gt;
  1295. &lt;/ul&gt;
  1296. &lt;h4&gt;Social Support&lt;/h4&gt;
  1297. &lt;table style=&quot;height: 99px;&quot; width=&quot;867&quot;&gt;
  1298. &lt;tbody&gt;
  1299. &lt;tr&gt;
  1300. &lt;td&gt;&lt;b&gt;Month&lt;/b&gt;&lt;/td&gt;
  1301. &lt;td&gt;&lt;b&gt;Total replies&lt;/b&gt;&lt;/td&gt;
  1302. &lt;td&gt;&lt;b&gt;Total interactions&lt;/b&gt;&lt;/td&gt;
  1303. &lt;td&gt;&lt;b&gt;Respond conversion rate&lt;/b&gt;&lt;/td&gt;
  1304. &lt;/tr&gt;
  1305. &lt;tr&gt;
  1306. &lt;td&gt;Jan 2024&lt;/td&gt;
  1307. &lt;td&gt;33&lt;/td&gt;
  1308. &lt;td&gt;46&lt;/td&gt;
  1309. &lt;td&gt;71.74%&lt;/td&gt;
  1310. &lt;/tr&gt;
  1311. &lt;tr&gt;
  1312. &lt;td&gt;Feb 2024&lt;/td&gt;
  1313. &lt;td&gt;25&lt;/td&gt;
  1314. &lt;td&gt;65&lt;/td&gt;
  1315. &lt;td&gt;38.46%&lt;/td&gt;
  1316. &lt;/tr&gt;
  1317. &lt;tr&gt;
  1318. &lt;td&gt;Mar 2024&lt;/td&gt;
  1319. &lt;td&gt;14&lt;/td&gt;
  1320. &lt;td&gt;87&lt;/td&gt;
  1321. &lt;td&gt;16.09%&lt;/td&gt;
  1322. &lt;/tr&gt;
  1323. &lt;/tbody&gt;
  1324. &lt;/table&gt;
  1325. &lt;p&gt;&lt;b&gt;Top 5 Social Support contributors in the past 3 months: &lt;/b&gt;&lt;/p&gt;
  1326. &lt;ul&gt;
  1327. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/user/Mad_Maks/&quot;&gt;Tim Maks &lt;/a&gt;&lt;/li&gt;
  1328. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/user/Fjoerfoks&quot;&gt;Wim Benes&lt;/a&gt;&lt;/li&gt;
  1329. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/user/petergallwas/&quot;&gt;Peter Gallwas&lt;/a&gt;&lt;/li&gt;
  1330. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/user/eyad02122/&quot;&gt;Eyad Ahmed&lt;/a&gt;&lt;/li&gt;
  1331. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/user/sebastianbeck2209/&quot;&gt;Sebastian Becker&lt;/a&gt;&lt;/li&gt;
  1332. &lt;/ul&gt;
  1333. &lt;p&gt; &lt;/p&gt;
  1334. &lt;h4&gt;Play Store Support&lt;/h4&gt;
  1335. &lt;table style=&quot;height: 5px;&quot; width=&quot;886&quot;&gt;
  1336. &lt;tbody&gt;
  1337. &lt;tr&gt;
  1338. &lt;td&gt;&lt;b&gt;Month&lt;/b&gt;&lt;/td&gt;
  1339. &lt;td&gt;&lt;b&gt;Total replies&lt;/b&gt;&lt;/td&gt;
  1340. &lt;td&gt;&lt;b&gt;Total interactions&lt;/b&gt;&lt;/td&gt;
  1341. &lt;td&gt;&lt;b&gt;Respond conversion rate&lt;/b&gt;&lt;/td&gt;
  1342. &lt;/tr&gt;
  1343. &lt;tr&gt;
  1344. &lt;td&gt;Jan 2024&lt;/td&gt;
  1345. &lt;td&gt;76&lt;/td&gt;
  1346. &lt;td&gt;276&lt;/td&gt;
  1347. &lt;td&gt;27.54%&lt;/td&gt;
  1348. &lt;/tr&gt;
  1349. &lt;tr&gt;
  1350. &lt;td&gt;Feb 2024&lt;/td&gt;
  1351. &lt;td&gt;49&lt;/td&gt;
  1352. &lt;td&gt;86&lt;/td&gt;
  1353. &lt;td&gt;56.98%&lt;/td&gt;
  1354. &lt;/tr&gt;
  1355. &lt;tr&gt;
  1356. &lt;td&gt;Mar 2024&lt;/td&gt;
  1357. &lt;td&gt;47&lt;/td&gt;
  1358. &lt;td&gt;80&lt;/td&gt;
  1359. &lt;td&gt;58.75%&lt;/td&gt;
  1360. &lt;/tr&gt;
  1361. &lt;/tbody&gt;
  1362. &lt;/table&gt;
  1363. &lt;p&gt;&lt;b&gt;Top 5 Play Store contributors in the past 3 months:&lt;/b&gt;&lt;/p&gt;
  1364. &lt;ul&gt;
  1365. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/user/eyad02122/&quot;&gt;Eyad Ahmed&lt;/a&gt;&lt;/li&gt;
  1366. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/user/Fjoerfoks&quot;&gt;Wim Benes&lt;/a&gt;&lt;/li&gt;
  1367. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/user/gelopl/&quot;&gt;Damian Szabat&lt;/a&gt;&lt;/li&gt;
  1368. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/user/hellosct1/&quot;&gt;Christophe Villeneuve&lt;/a&gt;&lt;/li&gt;
  1369. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/user/Mad_Maks/&quot;&gt;Tim Maks &lt;/a&gt;&lt;/li&gt;
  1370. &lt;/ul&gt;
  1371. &lt;h3&gt;Stay connected&lt;/h3&gt;
  1372. &lt;ul&gt;
  1373. &lt;li&gt;&lt;a href=&quot;https://chat.mozilla.org/#/room/#SUMO:mozilla.org&quot;&gt;#SUMO Matrix group&lt;/a&gt;&lt;/li&gt;
  1374. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/en-US/forums&quot;&gt;Contributor forums&lt;/a&gt;&lt;/li&gt;
  1375. &lt;li&gt;Twitter &lt;a href=&quot;https://twitter.com/SUMO_Mozilla&quot;&gt;@SUMO_mozilla&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/FirefoxSupport&quot;&gt;@FirefoxSupport&lt;/a&gt;&lt;/li&gt;
  1376. &lt;li&gt;&lt;a href=&quot;https://blog.mozilla.org/sumo/&quot;&gt;SUMO Blog&lt;/a&gt;&lt;/li&gt;
  1377. &lt;/ul&gt;</description>
  1378. <pubDate>Tue, 30 Apr 2024 16:15:01 +0000</pubDate>
  1379. <dc:creator>Rizki Kelimutu</dc:creator>
  1380. </item>
  1381. <item>
  1382. <title>Mozilla Open Policy &amp; Advocacy Blog: The UK’s Digital Markets, Competition, and Consumers Bill will spark the UK’s digital economy, not stifle it</title>
  1383. <guid isPermaLink="false">https://blog.mozilla.org/netpolicy/?p=2374</guid>
  1384. <link>https://blog.mozilla.org/netpolicy/2024/04/26/dmcc-uk-support/</link>
  1385. <description>&lt;p&gt;In today’s digital age, an open and competitive ecosystem with a diverse range of players is essential for building a resilient economy. New products and ideas must have the opportunity to grow to give people meaningful choices. Yet, this reality often falls short due to the dominance of a handful of large companies that create walled gardens by self-preferencing their services over independent competitors  –  limiting choice and hampering innovation.&lt;/p&gt;
  1386. &lt;p&gt;The UK’s Digital Markets, Competition, and Consumers Bill (DMCCB) offers a unique opportunity to break down these barriers, paving the way for a more competitive and consumer-centric digital market. On the competition side, the DMCCB offers &lt;a href=&quot;https://www.timetoplayfair.com/dmcc/&quot;&gt;flexibility&lt;/a&gt; in allowing for targeted &lt;a href=&quot;https://www.timetoplayfair.com/dmcc/&quot;&gt;codes of conduct &lt;/a&gt;to regulate the behaviour of dominant players. This agile and future-proof approach makes it unique in the ex-ante interventions being considered around the world to rein in abuse in digital markets. An &lt;a href=&quot;https://blog.mozilla.org/netpolicy/files/2021/07/Mozillas-Response-to-the-CMA-Consultation-on-Googles-Chrome-Privacy-Sandbox-Commitments-Case-50972.pdf&quot;&gt;example&lt;/a&gt; of what such a code of conduct might look like in practice is the voluntary commitments given by Google to the CMA in the Privacy Sandbox case.&lt;/p&gt;
  1387. &lt;p&gt;Mozilla, in line with our &lt;a href=&quot;https://blog.mozilla.org/en/mozilla/calling-for-antitrust-reform/&quot;&gt;long&lt;/a&gt; &lt;a href=&quot;https://blog.mozilla.org/netpolicy/2022/07/05/mozilla-statement-as-eu-parliament-adopts-new-pro-competition-rulebook-for-big-tech/&quot;&gt;history&lt;/a&gt; of supporting pro-competition regulatory interventions, supports the DMCCB and its underlying goal of fostering competition by empowering consumers. However, to truly deliver on this promise, the law must be robust, effective, and free from loopholes that could undermine its intent.&lt;/p&gt;
  1388. &lt;p&gt;Last month, the House of Lords made some much needed &lt;a href=&quot;https://www.parliament.uk/business/news/2024/march/digital-markets-competition-and-consumers-bill-set-for-further-lords-scrutiny/&quot;&gt;improvements&lt;/a&gt; to the DMCCB – which are now slated to be debated in the House of Commons in late April/early May 2024. A high-level overview of the key positive changes and why they should remain a part of the law are:&lt;/p&gt;
  1389. &lt;ul&gt;
  1390. &lt;li&gt;&lt;b&gt;Time Limits: &lt;/b&gt;To ensure the CMA can act swiftly and decisively, its work should be free from undue political influence. This reduces opportunities for undue lobbying and provides clarity for both consumers and companies. While it would be ideal for the CMA to be able to enforce its code of conduct, Mozilla supports the House of Lords’ amendment to introduce a 40-day time limit for the Secretary of State’s approval of CMA guidance. This is a crucial step in avoiding delays and ensuring effective enforcement. The government’s acceptance of this approach and the alternative proposal of 30 working days for debate in the House of Commons is a positive sign, which we hope is reflected in the final law.&lt;/li&gt;
  1391. &lt;li&gt;&lt;b&gt;Proportionality: &lt;/b&gt;The Bill’s approach to proportionality is vital. Introducing prohibitive proportionality requirements on remedies could weaken the CMA’s ability to make meaningful interventions, undermining the Bill’s effectiveness. Mozilla endorses the current draft of the Bill from the House of Lords, which strikes a balance by allowing for effective remedies without excessive constraints.&lt;/li&gt;
  1392. &lt;li&gt;&lt;b&gt;Countervailing Benefits: &lt;/b&gt;Similarly, the countervailing benefits exemption to CMA’s remedies, while powerful, should not be used as a loophole to justify anti-competitive practices. Mozilla urges that this exemption be reserved for cases of genuine consumer benefit by restoring the government’s original requirement that such exemptions are “indispensable”, ensuring that it does not become a ‘get out of jail free’ card for dominant players.&lt;/li&gt;
  1393. &lt;/ul&gt;
  1394. &lt;p&gt;&lt;b&gt;&lt;/b&gt;Mozilla remains committed to supporting the DMCCB’s swift passage through Parliament and ensuring that it delivers on its promise to empower consumers and promote innovation. We launched a &lt;a href=&quot;https://foundation.mozilla.org/en/campaigns/dmccb-bill/&quot;&gt;petition&lt;/a&gt; earlier today to help push the law over the finish line. By addressing the key concerns we’ve highlighted above and maintaining a robust framework, the UK can set a global standard for digital markets and create an environment where consumers are truly in charge.&lt;/p&gt;
  1395. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/netpolicy/2024/04/26/dmcc-uk-support/&quot;&gt;The UK’s Digital Markets, Competition, and Consumers Bill will spark the UK’s digital economy, not stifle it&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;</description>
  1396. <pubDate>Sat, 27 Apr 2024 05:17:47 +0000</pubDate>
  1397. <dc:creator>Udbhav Tiwari</dc:creator>
  1398. </item>
  1399. <item>
  1400. <title>Don Marti: realistically get rid of third-party cookies</title>
  1401. <guid isPermaLink="true">https://blog.zgp.org/realistically-get-rid-of-third-party-cookies/</guid>
  1402. <link>https://blog.zgp.org/realistically-get-rid-of-third-party-cookies/</link>
  1403. <description>&lt;p&gt;How would a browser realistically get rid of third-party cookies, if the plan was to just replace third-party cookies, and the project requirements did not include a bunch of anticompetitive tricks too?&lt;/p&gt; &lt;ol type=&quot;1&quot;&gt; &lt;li&gt;&lt;p&gt;Start offering a very scary dialog to a fraction of new users. Something like &lt;q&gt;Do you want to test a new experimental feature? It might—maybe—have some privacy benefits but many sites will break.&lt;/q&gt; Don’t expect a lot of people to agree at first.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Turn off third-party cookies for the users who did say yes in step 1, and watch the telemetry. There will be positive and negative effects, but they won’t be overwhelmingly bad because most sites have to work with other browsers.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;When the breakage detected in step 2 gets to be insignificant as a cause of new browser users quitting or reinstalling, start making the dialog less scary and show it to more people.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Keep repeating until most new installs are third-party cookie-free, then start offering the dialog on browser upgrades.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Continue, for more and more users, until you get to 95-99%. Leave the third-party cookies on for 1-5% of users for a couple of releases just to spot any lingering problems, then make third-party cookies default off, with no dialog (users would have to find the preference to re-enable them, or their sysadmin would have to push out a centralized change if some legacy corporate site still needs them).&lt;/p&gt;&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;But what about the personalized ads? &lt;a href=&quot;https://blog.zgp.org/30-40-30/&quot;&gt;Some people actually want those!&lt;/a&gt; Not a problem. The good news is that &lt;strong&gt;ad personalization can be done in an extension.&lt;/strong&gt; Ask extension developers who have extensions that support ad personalization to sign up for a registry of ad personalization extensions, then keep track of how many users are installing each one. Adtech firms don’t (usually?) have personalization extensions today, but every company can develop one on its own schedule, with less uncertainty and fewer dependencies and delays than the current &lt;q&gt;end of cookies&lt;/q&gt; mess. The extension development tools are really good now.&lt;/p&gt; &lt;p&gt;As soon as an ad personalization extension can pass an independent security audit (done by a company agreed on by the extension developer and the browser vendor) and get, say, 10,000 users, then the browser can put it on a choice screen that gets shown for new installs and, if added since last upgrade, upgrades. (The browser could give the dogmatic anti-personalization users a preference to opt out of these choice screens if they really wanted to dig in and find it.) This makes the work of competition regulators much easier—they just have to check that the browser vendor’s own ad personalization extension gets fair treatment with competing ones.&lt;/p&gt; &lt;p&gt;And we’re done. The privacy people and the personalized ad people get what they want with much less drama and delay, the whole web ad business isn’t stuck queued up waiting for one development team, and all that’s missing is the anticompetitive stuff that has been making &lt;q&gt;end of cookies&lt;/q&gt; work such a pain since 2019.&lt;/p&gt; &lt;h3&gt;Related&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/30-40-30/&quot;&gt;the 30-40-30 rule&lt;/a&gt; An updated list of citations to user research on how many people want personalized ads&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/please-delete/&quot;&gt;Can database marketing sell itself to the people in the database?&lt;/a&gt; Some issues that an ad personalization extension might have to address in order to get installs&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/user-tracking-as-chesterton-s-fence/&quot;&gt;User tracking as Chesterton’s Fence&lt;/a&gt; What tracking-based advertising still offers (that alternatives don’t)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/tp-strategy/&quot;&gt;Catching up to Safari?&lt;/a&gt; Some features that Apple has done right, with opportunities for other browsers to think different(ly)&lt;/p&gt; &lt;h3&gt;Bonus links&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://bokonads.com/p/an-open-letter-to-the-advertising&quot;&gt;An open letter to the advertising punditry&lt;/a&gt; &lt;q&gt; I personally got involved in the Inventory Quality reviews to make sure that the data scientists weren’t pressured by the business and could find the patterns–like ww3 [dot] forbes [dot] com–and go after them.&lt;/q&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.schneier.com/blog/archives/2024/04/the-rise-of-large.html&quot;&gt;The Rise of Large-Language-Model Optimization&lt;/a&gt; &lt;q&gt;The advent of AI threatens to destroy the complex online ecosystem that allows writers, artists, and other creators to reach human audiences.&lt;/q&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.wheresyoured.at/the-men-who-killed-google/&quot;&gt;The Man Who Killed Google Search&lt;/a&gt; &lt;q&gt;[M]any found that the update mostly rolled back changes, and traffic was increasing to sites that had previously been suppressed by Google Search’s “Penguin” update from 2012 that specifically targeted spammy search results, as well as those hit by an update from an August 1, 2018…&lt;/q&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.theguardian.com/technology/2024/apr/22/lawsuit-in-london-to-allege-grindr-shared-users-hiv-status-with-ad-firms&quot;&gt;Lawsuit in London to allege Grindr shared users’ HIV status with ad firms&lt;/a&gt; (This is why you can safely mute anybody who uses the expression &lt;q&gt;k-anonymity,&lt;/q&gt; the info about yourself that you most want to keep private is true for more than &lt;em&gt;k&lt;/em&gt; other people.)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.theguardian.com/society/2024/apr/21/uk-children-bombarded-by-gambling-ads-and-images-online-charity-warns&quot;&gt;UK children bombarded by gambling ads and images online, charity warns&lt;/a&gt; (attention parents: copy the device rules that Big Tech big shots maintain for their own children, not what they want for yours)&lt;/p&gt;</description>
  1404. <pubDate>Sat, 27 Apr 2024 00:00:00 +0000</pubDate>
  1405. </item>
  1406. <item>
  1407. <title>Mozilla Open Policy &amp; Advocacy Blog: Work Gets Underway on a New Federal Privacy Proposal</title>
  1408. <guid isPermaLink="false">https://blog.mozilla.org/netpolicy/?p=2371</guid>
  1409. <link>https://blog.mozilla.org/netpolicy/2024/04/26/work-gets-underway-on-a-new-federal-privacy-proposal/</link>
  1410. <description>&lt;p&gt;At Mozilla, safeguarding privacy has been core to our mission for decades — we believe that individuals’ security and privacy on the Internet are fundamental and must not be treated as optional. We have &lt;a href=&quot;https://blog.mozilla.org/netpolicy/2022/08/29/save-the-date-the-long-road-to-federal-privacy-protections-are-we-there-yet/&quot;&gt;long&lt;/a&gt; &lt;a href=&quot;https://blog.mozilla.org/netpolicy/2022/08/24/its-time-to-pass-u-s-federal-privacy-legislation/&quot;&gt;advocated&lt;/a&gt; for a federal privacy law to ensure consumers have control over their data and that companies are accountable for their privacy practices.&lt;/p&gt;
  1411. &lt;p&gt;Earlier this month, House Committee on Energy and Commerce Chair Cathy McMorris Rodgers (R-WA) and Senate Committee on Commerce, Science and Transportation Chair Maria Cantwell (D-WA) unveiled a discussion draft of the &lt;a href=&quot;https://www.commerce.senate.gov/services/files/3F5EEA76-5B18-4B40-ABD9-F2F681AA965F&quot;&gt;American Privacy Rights Act of 2024 (APRA)&lt;/a&gt;. The Act is a welcome bipartisan effort to create a unified privacy standard across the United States, with the promise of finally protecting the privacy of all Americans.&lt;/p&gt;
  1412. &lt;p&gt;At Mozilla, we are committed to the principle of data minimization – a concept that’s fundamental in effective privacy legislation – and we are pleased to see it at the core of APRA. Data minimization means we conscientiously collect only the necessary data, ensure its protection, and provide clear and concise explanations about what data we collect and why. We are also happy to see additional strong language from the American Data Privacy and Protect Act (ADPPA) reflected in this new draft, including non-discrimination provisions and a universal opt-out mechanism (though we support clarification that ensures allowance of multiple mechanisms).&lt;/p&gt;
  1413. &lt;p&gt;However, the APRA discussion draft has open questions that must be refined. These include how APRA handles protections for children, options for strengthening data brokers provisions even further (such as a centralized mechanism for opt-out rights), and key definitions that require clarity around advertising. We look forward to engaging with policymakers as the process advances.&lt;/p&gt;
  1414. &lt;p&gt;Achieving meaningful &lt;a href=&quot;https://foundation.mozilla.org/en/privacy-for-all/&quot;&gt;reform in the U.S. is long overdue&lt;/a&gt;. In an era where digital privacy concerns are on the rise, it’s essential to establish clear and enforceable privacy rights for all Americans. Mozilla stands ready to contribute to the dialogue on APRA and collaborate toward achieving comprehensive privacy reform. Together, we can prioritize the interests of individuals and cultivate trust in the digital ecosystem.&lt;/p&gt;
  1415. &lt;p&gt; &lt;/p&gt;
  1416. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/netpolicy/2024/04/26/work-gets-underway-on-a-new-federal-privacy-proposal/&quot;&gt;Work Gets Underway on a New Federal Privacy Proposal&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;</description>
  1417. <pubDate>Fri, 26 Apr 2024 19:48:55 +0000</pubDate>
  1418. <dc:creator>Jenn Taylor Hodges</dc:creator>
  1419. </item>
  1420. <item>
  1421. <title>Mozilla Open Policy &amp; Advocacy Blog: Net Neutrality is Back!</title>
  1422. <guid isPermaLink="false">https://blog.mozilla.org/netpolicy/?p=2370</guid>
  1423. <link>https://blog.mozilla.org/netpolicy/2024/04/26/net-neutrality-is-back/</link>
  1424. <description>&lt;p&gt;Yesterday, the Federal Communications Commission (FCC) voted 3-2 to reinstate net neutrality rules and protect consumers online. We applaud this decision to keep the internet open and accessible to all, and reverse the 2018 roll-back of net neutrality protections. Alongside our many partners and allies, Mozilla has been a &lt;a href=&quot;https://blog.mozilla.org/en/mozilla/mozilla-files-suit-fcc-protect-net-neutrality/&quot;&gt;long time&lt;/a&gt; proponent of net neutrality &lt;a href=&quot;https://blog.mozilla.org/netpolicy/2015/10/24/net-neutrality-amendments-and-final-vote-in-the-eu/&quot;&gt;across&lt;/a&gt; &lt;a href=&quot;https://blog.mozilla.org/netpolicy/files/2015/12/Comentarios-generales-a-OSIPTEL.pdf&quot;&gt;the&lt;/a&gt; &lt;a href=&quot;https://blog.mozilla.org/netpolicy/2020/09/14/mozilla-applauds-trai-for-maintaining-the-status-quo-on-ott-regulation-upholding-a-key-aspect-of-net-neutrality-in-india/&quot;&gt;world&lt;/a&gt; and in U.S. &lt;a href=&quot;https://blog.mozilla.org/en/mozilla/in-california-an-important-victory-for-net-neutrality/&quot;&gt;states&lt;/a&gt;, and &lt;a href=&quot;https://blog.mozilla.org/en/mozilla/internet-policy/stand-net-neutrality-help-paperstorm-fcc/&quot;&gt;mobilized&lt;/a&gt; hundreds of thousands of people over the years.&lt;/p&gt;
  1425. &lt;p&gt;The new FCC order reclassifies broadband internet as a “telecommunications service” and prevents ISPs from blocking, throttling, or paid prioritization of traffic. This action restores meaningful and enforceable FCC oversight and protection on the internet, and unlocks innovation, &lt;a href=&quot;https://ilsr.org/report-most-americans-have-no-real-choice-in-internet-providers/&quot;&gt;competition&lt;/a&gt;, and free expression online.&lt;/p&gt;
  1426. &lt;p style=&quot;text-align: left;&quot;&gt;&lt;i&gt;You can read Mozilla’s submission to the FCC on the proposed Safeguarding and Securing the Open Internet rules &lt;/i&gt;&lt;a href=&quot;https://www.fcc.gov/ecfs/document/121497799035/1&quot;&gt;&lt;i&gt;in December 2023 here&lt;/i&gt;&lt;/a&gt;&lt;i&gt; and additional reply comments &lt;/i&gt;&lt;a href=&quot;https://www.fcc.gov/ecfs/document/1011790221057/1&quot;&gt;&lt;i&gt;in January 2024 here&lt;/i&gt;&lt;/a&gt;&lt;i&gt;.&lt;/i&gt;&lt;/p&gt;
  1427. &lt;p&gt;Net neutrality and openness are essential parts of how we experience the internet, and &lt;a href=&quot;https://www.wired.com/story/covid-19-pandemic-shows-virtues-net-neutrality/&quot;&gt;as illustrated&lt;/a&gt; during the COVID pandemic, can offer important protections – so it shouldn’t come as a surprise that such a &lt;a href=&quot;https://foundation.mozilla.org/en/blog/with-net-neutrality-back-on-national-agenda-mozilla-survey-finds-americans-do-not-trust-isps-to-look-out-for-their-best-interests/&quot;&gt;majority of Americans&lt;/a&gt; support it. Yesterday’s decision reaffirms the internet is and should remain a public resource, where companies cannot abuse their market power to the detriment of consumers, and where actors large and small operate on a level playing field.&lt;/p&gt;
  1428. &lt;p&gt;Earlier this month, Mozilla participated in a &lt;a href=&quot;https://docs.fcc.gov/public/attachments/DOC-401773A1.pdf&quot;&gt;roundtable discussion&lt;/a&gt; with experts and allies hosted by Chairwoman Rosenworcel at the Santa Clara County Fire Department. The event location highlighted the importance of net neutrality, as the site where &lt;a href=&quot;https://www.nytimes.com/2018/08/22/us/verizon-throttling-california-fire-net-neutrality.html&quot;&gt;Verizon throttled&lt;/a&gt; firefighters’ internet speeds in the midst of fighting a raging wildfire. You can watch the full press conference below, and read coverage of the event &lt;a href=&quot;https://www.nbcbayarea.com/news/local/fcc-chair-roundtable-net-neutrality-campbell/3504159/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  1429. &lt;p&gt;We thank the FCC for protecting these vital net neutrality safeguards, and we look forward to seeing the details of the final order when released.&lt;/p&gt;
  1430. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/netpolicy/2024/04/26/net-neutrality-is-back/&quot;&gt;Net Neutrality is Back!&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;</description>
  1431. <pubDate>Fri, 26 Apr 2024 19:28:00 +0000</pubDate>
  1432. <dc:creator>Jenn Taylor Hodges</dc:creator>
  1433. </item>
  1434. <item>
  1435. <title>The Servo Blog: This month in Servo: Acid2 redux, Servo book, Qt demo, and more!</title>
  1436. <guid isPermaLink="true">https://servo.org/blog/2024/04/26/acid2-servo-book-qt/</guid>
  1437. <link>https://servo.org/blog/2024/04/26/acid2-servo-book-qt/</link>
  1438. <description>&lt;figure class=&quot;_figr&quot;&gt;&lt;a href=&quot;https://servo.org/img/servo-acid2-202404.png&quot;&gt;&lt;img alt=&quot;Servo nightly, now rendering Acid2 perfectly&quot; src=&quot;https://servo.org/img/servo-acid2-202404.png&quot; style=&quot;width: auto;&quot; /&gt;&lt;/a&gt;
  1439. &amp;lt;figcaption&amp;gt;Servo now renders Acid2 perfectly, but like all browsers, only at 1x dpi.&amp;lt;/figcaption&amp;gt;&lt;/figure&gt;
  1440. &lt;p&gt;&lt;span class=&quot;_floatmin&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://servo.org/blog/2023/11/30/embedding-floats-color-mix/&quot;&gt;Back in November&lt;/a&gt;, Servo’s new layout engine passed &lt;a href=&quot;http://acid1.acidtests.org/&quot;&gt;Acid1&lt;/a&gt;, and this month, thanks to a bug-squashing sprint by &lt;a href=&quot;http://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt; and &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, we now pass &lt;a href=&quot;https://acid2.acidtests.org/&quot;&gt;Acid2&lt;/a&gt;!&lt;/p&gt;
  1441. &lt;aside class=&quot;_note&quot;&gt;
  1442. &lt;p&gt;Note that Acid2 is only designed to work at 1x dpi, so if you have a HiDPI monitor, be sure to run servoshell with &lt;code&gt;--device-pixel-ratio 1&lt;/code&gt; to avoid a red pattern over the eyes.&lt;/p&gt;
  1443. &lt;/aside&gt;
  1444. &lt;p&gt;We would also like to thank you all for your generous support!
  1445. Since we moved to &lt;a href=&quot;https://opencollective.com/servo&quot;&gt;Open Collective&lt;/a&gt; and &lt;a href=&quot;https://github.com/sponsors/servo&quot;&gt;GitHub Sponsors&lt;/a&gt; in March, we have received &lt;strong&gt;1578 USD&lt;/strong&gt; (after fees), including &lt;strong&gt;1348 USD/month&lt;/strong&gt; (before fees) in recurring donations.
  1446. This smashed our first two goals, and is a respectable part of the way towards our next goal of 10000 USD/month.
  1447. For more details, see our &lt;a href=&quot;https://servo.org/sponsorship/&quot;&gt;Sponsorship&lt;/a&gt; page and &lt;a href=&quot;https://servo.org/blog/2024/03/12/sponsoring-servo/&quot;&gt;announcement post&lt;/a&gt;.&lt;/p&gt;
  1448. &lt;figure class=&quot;_fig&quot; style=&quot;width: 100%; margin: 1em 0;&quot;&gt;&lt;div class=&quot;_flex&quot;&gt;
  1449.    &lt;div style=&quot;text-align: right;&quot;&gt;
  1450.        &lt;div&gt;&lt;strong&gt;1348&lt;/strong&gt; USD/month&lt;/div&gt;
  1451.        &lt;div&gt;&lt;/div&gt;
  1452.        &lt;div&gt;&lt;/div&gt;
  1453.        &lt;div style=&quot;padding-right: 1em;&quot;&gt;&lt;strong&gt;10000&lt;/strong&gt;&lt;/div&gt;
  1454.    &lt;/div&gt;
  1455.    &lt;progress max=&quot;10000&quot; value=&quot;1348&quot;&gt;&lt;/progress&gt;
  1456. &lt;/div&gt;&lt;/figure&gt;
  1457. &lt;p&gt;We are still receiving donations from &lt;strong&gt;19 people&lt;/strong&gt; on LFX, and we’re working on transferring the balance to our new fund, but we will stop accepting donations there soon — &lt;strong&gt;please move your recurring donations to &lt;a href=&quot;https://github.com/sponsors/servo&quot;&gt;GitHub&lt;/a&gt; or &lt;a href=&quot;https://opencollective.com/servo&quot;&gt;Open Collective&lt;/a&gt;&lt;/strong&gt;.
  1458. As always, use of these funds will be decided transparently in the Technical Steering Committee, starting with the TSC meeting &lt;a href=&quot;https://github.com/servo/project/issues/85&quot;&gt;on 29 April&lt;/a&gt;.&lt;/p&gt;
  1459. &lt;figure class=&quot;_figl&quot;&gt;&lt;a href=&quot;https://servo.org/img/blog/servo-book.png&quot;&gt;&lt;img alt=&quot;The Servo book, a book much like the Rust book&quot; src=&quot;https://servo.org/img/blog/servo-book.png&quot; /&gt;&lt;/a&gt;
  1460. &lt;/figure&gt;
  1461. &lt;p&gt;&lt;span class=&quot;_floatmin&quot;&gt;&lt;/span&gt;Servo’s docs are moving to &lt;a href=&quot;https://book.servo.org/&quot;&gt;&lt;strong&gt;the Servo book&lt;/strong&gt;&lt;/a&gt;, and a very early version of this is now online (&lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/book&quot;&gt;servo/book&lt;/a&gt;)!
  1462. The goal is to unify our many sources of documentation, including the &lt;a href=&quot;https://github.com/servo/servo/blob/81c4f2ae7a0b605befae652c0feeea03caba6292/docs/HACKING_QUICKSTART.md&quot;&gt;hacking quickstart guide&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/wiki/Building/e04d7a194b59fad65fbd3eefb7aab12ae3a60eba&quot;&gt;building Servo page&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/wiki/Design/0941531122361aac8c88d582aa640ec689cdcdd1&quot;&gt;Servo design page&lt;/a&gt;, and &lt;a href=&quot;https://book.servo.org/hacking/older-versions.html&quot;&gt;other in-tree docs and wiki pages&lt;/a&gt;, into a book that’s richer and easier to search and navigate.&lt;/p&gt;
  1463. &lt;p&gt;Servo now supports several new features in its nightly builds:&lt;/p&gt;
  1464. &lt;ul&gt;
  1465. &lt;li&gt;as of 2024-04-02, &lt;code&gt;files&lt;/code&gt; setter on HTMLInputElement (&lt;a href=&quot;https://github.com/shanehandley&quot;&gt;@shanehandley&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31934&quot;&gt;#31934&lt;/a&gt;)&lt;/li&gt;
  1466. &lt;li&gt;as of 2024-04-05, &lt;strong&gt;‘ex’ units&lt;/strong&gt; in CSS (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31966&quot;&gt;#31966&lt;/a&gt;)&lt;/li&gt;
  1467. &lt;li&gt;as of 2024-04-05, &lt;code&gt;onSubmittedWorkDone&lt;/code&gt; method on GPUQueue (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31772&quot;&gt;#31772&lt;/a&gt;)&lt;/li&gt;
  1468. &lt;li&gt;as of 2024-04-08, &lt;code&gt;deleteRow(-1)&lt;/code&gt; on empty HTMLTableElement (&lt;a href=&quot;https://github.com/shanehandley&quot;&gt;@shanehandley&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32009&quot;&gt;#32009&lt;/a&gt;)&lt;/li&gt;
  1469. &lt;li&gt;as of 2024-04-12, &lt;strong&gt;ElementInternals&lt;/strong&gt; and &lt;strong&gt;attachInternals&lt;/strong&gt; (&lt;a href=&quot;https://github.com/pshaughn&quot;&gt;@pshaughn&lt;/a&gt;, &lt;a href=&quot;https://github.com/cathiechen&quot;&gt;@cathiechen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/25705&quot;&gt;#25705&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31980&quot;&gt;#31980&lt;/a&gt;)&lt;/li&gt;
  1470. &lt;li&gt;as of 2024-04-16, &lt;strong&gt;‘background-attachment: fixed’&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/32068&quot;&gt;#32068&lt;/a&gt;)&lt;/li&gt;
  1471. &lt;li&gt;as of 2024-04-16, &lt;strong&gt;&amp;lt;object&amp;gt;&lt;/strong&gt; with &lt;strong&gt;image data URLs&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/32069&quot;&gt;#32069&lt;/a&gt;)&lt;/li&gt;
  1472. &lt;li&gt;as of 2024-04-18, &lt;strong&gt;‘clear’&lt;/strong&gt; property on &lt;strong&gt;&amp;lt;br&amp;gt;&lt;/strong&gt; elements (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32094&quot;&gt;#32094&lt;/a&gt;)&lt;/li&gt;
  1473. &lt;li&gt;as of 2024-04-23, basic support for &lt;strong&gt;‘list-style-position: outside’&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/32114&quot;&gt;#32114&lt;/a&gt;)&lt;/li&gt;
  1474. &lt;/ul&gt;
  1475. &lt;p&gt;As of 2024-04-05, we now support &lt;strong&gt;non-autoplay &amp;lt;video&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/eerii&quot;&gt;@eerii&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/media/pull/419&quot;&gt;media#419&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32001&quot;&gt;#32001&lt;/a&gt;), as long as the page provides its own controls, as well as the &lt;strong&gt;‘baseline-source’&lt;/strong&gt; property (&lt;a href=&quot;https://github.com/MunishMummadi&quot;&gt;@MunishMummadi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31904&quot;&gt;#31904&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31913&quot;&gt;#31913&lt;/a&gt;).
  1476. Both of these contributors started out as Outreachy participants, and we’re thrilled to see their continued work on improving Servo.&lt;/p&gt;
  1477. &lt;p&gt;We’ve also landed several other rendering improvements:&lt;/p&gt;
  1478. &lt;ul&gt;
  1479. &lt;li&gt;&lt;strong&gt;Stylo&lt;/strong&gt; is now fully caught up with upstream (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31932&quot;&gt;#31932&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31991&quot;&gt;#31991&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32032&quot;&gt;#32032&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32066&quot;&gt;#32066&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32089&quot;&gt;#32089&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32128&quot;&gt;#32128&lt;/a&gt;)&lt;/li&gt;
  1480. &lt;li&gt;elements or frames &lt;strong&gt;no longer scroll to top&lt;/strong&gt; when transforms change (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31892&quot;&gt;#31892&lt;/a&gt;)&lt;/li&gt;
  1481. &lt;li&gt;fixed &lt;strong&gt;intrinsic sizing&lt;/strong&gt; of inline content containing &lt;strong&gt;‘pre-wrap’&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/31930&quot;&gt;#31930&lt;/a&gt;)&lt;/li&gt;
  1482. &lt;li&gt;fixed &lt;strong&gt;margin collapsing&lt;/strong&gt; with indefinite percentages or non-zero height (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32059&quot;&gt;#32059&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32060&quot;&gt;#32060&lt;/a&gt;)&lt;/li&gt;
  1483. &lt;li&gt;fixed some (but not all) &lt;strong&gt;HTTP 400&lt;/strong&gt; errors when sending requests to nginx (&lt;a href=&quot;https://github.com/philip-lamb&quot;&gt;@philip-lamb&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32024&quot;&gt;#32024&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32093&quot;&gt;#32093&lt;/a&gt;)&lt;/li&gt;
  1484. &lt;li&gt;fixed &lt;strong&gt;‘min-height’&lt;/strong&gt; and &lt;strong&gt;‘max-height’&lt;/strong&gt; on elements with &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/servo/servo/pull/32057&quot;&gt;#32057&lt;/a&gt;)&lt;/li&gt;
  1485. &lt;/ul&gt;
  1486. &lt;p&gt;Our font rendering has improved, with support for selecting the correct weight and style in &lt;strong&gt;indexed fonts (.ttc)&lt;/strong&gt; on Linux (&lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&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/32127&quot;&gt;#32127&lt;/a&gt;), as well as support for &lt;strong&gt;emoji font fallback&lt;/strong&gt; on macOS (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32122&quot;&gt;#32122&lt;/a&gt;).
  1487. Note that color emoji are not yet supported.&lt;/p&gt;
  1488. &lt;p&gt;Other big changes are coming to Servo’s font loading and rendering, thanks to &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;’s &lt;strong&gt;font system redesign&lt;/strong&gt; RFC (&lt;a href=&quot;https://github.com/servo/servo/issues/32033&quot;&gt;#32033&lt;/a&gt;).
  1489. Work has already started on this (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&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/32034&quot;&gt;#32034&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32038&quot;&gt;#32038&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32100&quot;&gt;#32100&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32101&quot;&gt;#32101&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32115&quot;&gt;#32115&lt;/a&gt;), with the eventual goal of making font data &lt;strong&gt;zero-copy readable from multiple threads&lt;/strong&gt;.
  1490. This in turn will fix several major issues with font caching, including cached font data leaking over time and between pages, unnecessary loading from disk, and unnecessary copying to layout.&lt;/p&gt;
  1491. &lt;p&gt;We’ve also started simplifying the script–layout interface (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31937&quot;&gt;#31937&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32081&quot;&gt;#32081&lt;/a&gt;), since &lt;a href=&quot;https://servo.org/blog/2024/02/28/gamepads-font-fallback-space-jam/&quot;&gt;layout was merged into the script thread&lt;/a&gt;, and script can now call into layout without IPC.&lt;/p&gt;
  1492. &lt;h3&gt;Embedding and dev changes &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2024/04/26/acid2-servo-book-qt/#embedding-and-dev-changes&quot;&gt;
  1493.        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
  1494.      &lt;/a&gt;&lt;/h3&gt;
  1495. &lt;figure class=&quot;_figr&quot;&gt;&lt;a href=&quot;https://servo.org/img/blog/cxx-qt-servo-webview.png&quot;&gt;&lt;img alt=&quot;Servo running in a Qt app via CXX-Qt&quot; src=&quot;https://servo.org/img/blog/cxx-qt-servo-webview.png&quot; /&gt;&lt;/a&gt;
  1496. &amp;lt;figcaption&amp;gt;The prototype shows that Servo can be integrated with a Qt app via &lt;a href=&quot;https://github.com/KDAB/cxx-qt&quot;&gt;CXX-Qt&lt;/a&gt;.&amp;lt;/figcaption&amp;gt;&lt;/figure&gt;
  1497. &lt;p&gt;&lt;span class=&quot;_floatmin&quot;&gt;&lt;/span&gt;A prototype for &lt;strong&gt;integrating Servo with Qt&lt;/strong&gt; was built by &lt;a href=&quot;https://github.com/ahayzen-kdab&quot;&gt;@ahayzen-kdab&lt;/a&gt; and &lt;a href=&quot;https://github.com/vimpostor&quot;&gt;@vimpostor&lt;/a&gt; and &lt;a href=&quot;https://www.kdab.com/kdab-at-embedded-world-2024/&quot;&gt;shown at Embedded World 2024&lt;/a&gt;.
  1498. We’re looking forward to incorporating their feedback from this to improve Servo’s embedding API.
  1499. For more details, check out &lt;a href=&quot;https://github.com/KDABLabs/cxx-qt-servo-webview&quot;&gt;their GitHub repo&lt;/a&gt; and &lt;a href=&quot;https://www.kdab.com/embedding-servo-in-qt/&quot;&gt;&lt;em&gt;Embedding the Servo Web Engine in Qt&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;
  1500. &lt;p&gt;Servo now supports &lt;strong&gt;multiple concurrent webviews&lt;/strong&gt; (&lt;a href=&quot;https://github.com/wusyong&quot;&gt;@wusyong&lt;/a&gt;, &lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&lt;/a&gt;, &lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31417&quot;&gt;#31417&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32067&quot;&gt;#32067&lt;/a&gt;)!
  1501. This is a big step towards making Servo a viable embedded webview, and we will soon use it to implement tabbed browsing in servoshell (&lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31545&quot;&gt;#31545&lt;/a&gt;).&lt;/p&gt;
  1502. &lt;p&gt;Three of the slowest crates in the Servo build process are &lt;strong&gt;mozjs_sys&lt;/strong&gt;, &lt;strong&gt;mozangle&lt;/strong&gt;, and &lt;strong&gt;script&lt;/strong&gt;.
  1503. The first two compile some very large C++ libraries in their build scripts — SpiderMonkey and ANGLE respectively — and the third blocks on the first two.
  1504. They can account for over two minutes of build time, even on a very fast machine (AMD 7950X), and a breaking change in newer versions of GNU Make (&lt;a href=&quot;https://github.com/servo/mozjs/issues/375&quot;&gt;mozjs#375&lt;/a&gt;) can make mozjs_sys take &lt;strong&gt;over eight minutes&lt;/strong&gt; to build!&lt;/p&gt;
  1505. &lt;p&gt;mozjs_sys now uses a &lt;strong&gt;prebuilt version of SpiderMonkey&lt;/strong&gt; by default (&lt;a href=&quot;https://github.com/wusyong&quot;&gt;@wusyong&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/mozjs/pull/450&quot;&gt;mozjs#450&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31824&quot;&gt;#31824&lt;/a&gt;), &lt;strong&gt;cutting clean build times by over seven minutes&lt;/strong&gt; on a very fast machine (see above).
  1506. On Linux with Nix (the package manager), where we run an unaffected version of GNU Make, it can still save over 100 seconds on a quad-core CPU with SMT.
  1507. Further savings will be possible once we &lt;a href=&quot;https://github.com/servo/mozangle/pull/71#issuecomment-1878567207&quot;&gt;do the same for mozangle&lt;/a&gt;.&lt;/p&gt;
  1508. &lt;p&gt;If you use NixOS, or any Linux distro with Nix, you can now get a shell with all of the tools and dependencies needed to build and run Servo by typing &lt;code&gt;nix-shell&lt;/code&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/32035&quot;&gt;#32035&lt;/a&gt;), without also needing to type &lt;code&gt;etc/shell.nix&lt;/code&gt;.&lt;/p&gt;
  1509. &lt;p&gt;As for CI, our experimental Android build now supports aarch64 (&lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32137&quot;&gt;#32137&lt;/a&gt;), in addition to Android on armv7, x86_64, and i686, and we’ve improved flakiness in the WebGPU tests (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31952&quot;&gt;#31952&lt;/a&gt;) and macOS builds (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32005&quot;&gt;#32005&lt;/a&gt;).&lt;/p&gt;
  1510. &lt;h3&gt;Conferences and events &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2024/04/26/acid2-servo-book-qt/#conferences-and-events&quot;&gt;
  1511.        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
  1512.      &lt;/a&gt;&lt;/h3&gt;
  1513. &lt;p&gt;Earlier this month, Rakhi Sharma gave her talk &lt;a href=&quot;https://servo.org/slides/2024-04-16-open-source-summit-NA/&quot;&gt;&lt;strong&gt;A year of Servo reboot: where are we now?&lt;/strong&gt;&lt;/a&gt; at &lt;a href=&quot;https://events.linuxfoundation.org/open-source-summit-north-america/&quot;&gt;Open Source Summit North America&lt;/a&gt; (&lt;a href=&quot;https://servo.org/slides/2024-04-16-open-source-summit-NA/&quot;&gt;slides&lt;/a&gt;; recording available soon) and at the &lt;a href=&quot;https://www.meetup.com/Seattle-Rust-Meetup/&quot;&gt;Seattle Rust User Group&lt;/a&gt; (&lt;a href=&quot;https://servo.org/slides/2024-04-16-seattle-rust-user-group/&quot;&gt;slides&lt;/a&gt;).&lt;/p&gt;
  1514. &lt;p&gt;In the Netherlands, Gregory Terzian will be presenting &lt;strong&gt;Modular Servo: Three Paths Forward&lt;/strong&gt; at the &lt;a href=&quot;https://europe2024.gosim.org/schedule#mobile-and-web-app&quot;&gt;GOSIM Conference 2024&lt;/a&gt;, on &lt;strong&gt;6 May&lt;/strong&gt; at &lt;strong&gt;15:10 local time&lt;/strong&gt; (13:10 UTC).
  1515. That’s the &lt;strong&gt;same venue as &lt;a href=&quot;https://2024.rustnl.org/&quot;&gt;RustNL 2024&lt;/a&gt;&lt;/strong&gt;, just one day earlier, and you can also find Gregory, Rakhi, and Nico at RustNL afterwards.
  1516. See you there!&lt;/p&gt;</description>
  1517. <pubDate>Fri, 26 Apr 2024 00:00:00 +0000</pubDate>
  1518. </item>
  1519. <item>
  1520. <title>Will Kahn-Greene: crashstats-tools v2.0.0 released!</title>
  1521. <guid isPermaLink="true">https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html</guid>
  1522. <link>https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html</link>
  1523. <description>&lt;section id=&quot;what-is-it&quot;&gt;
  1524. &lt;h3&gt;What is it?&lt;/h3&gt;
  1525. &lt;p&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/willkg/crashstats-tools/&quot;&gt;crashstats-tools&lt;/a&gt; is a set of
  1526. command-line tools for working with Crash Stats
  1527. (&lt;a class=&quot;reference external&quot; href=&quot;https://crash-stats.mozilla.org/&quot;&gt;https://crash-stats.mozilla.org/&lt;/a&gt;).&lt;/p&gt;
  1528. &lt;p&gt;crashstats-tools comes with four commands:&lt;/p&gt;
  1529. &lt;ul class=&quot;simple&quot;&gt;
  1530. &lt;li&gt;&lt;p&gt;supersearch: for performing Crash Stats Super Search queries&lt;/p&gt;&lt;/li&gt;
  1531. &lt;li&gt;&lt;p&gt;supersearchfacet: for performing aggregations, histograms, and cardinality
  1532. Crash Stats Super Search queries&lt;/p&gt;&lt;/li&gt;
  1533. &lt;li&gt;&lt;p&gt;fetch-data: for fetching raw crash, dumps, and processed crash data for
  1534. specified crash ids&lt;/p&gt;&lt;/li&gt;
  1535. &lt;li&gt;&lt;p&gt;reprocess: for sending crash report reprocess requests&lt;/p&gt;&lt;/li&gt;
  1536. &lt;/ul&gt;
  1537. &lt;/section&gt;
  1538. &lt;section id=&quot;v2-0-0-released&quot;&gt;
  1539. &lt;h3&gt;v2.0.0 released!&lt;/h3&gt;
  1540. &lt;p&gt;There have been a lot of improvements since the last blog post for the v1.0.1
  1541. release. New commands, new features, improved cli ui, etc.&lt;/p&gt;
  1542. &lt;p&gt;v2.0.0 focused on two major things:&lt;/p&gt;
  1543. &lt;ol class=&quot;arabic simple&quot;&gt;
  1544. &lt;li&gt;&lt;p&gt;improving &lt;code class=&quot;docutils literal&quot;&gt;supersearchfacet&lt;/code&gt; to support nested aggregation, histogram, and
  1545. cardinality queries&lt;/p&gt;&lt;/li&gt;
  1546. &lt;li&gt;&lt;p&gt;moving some of the code into a &lt;code class=&quot;docutils literal&quot;&gt;crashstats_tools.libcrashstats&lt;/code&gt; module
  1547. improving its use as a library&lt;/p&gt;&lt;/li&gt;
  1548. &lt;/ol&gt;
  1549. &lt;/section&gt;
  1550. &lt;section id=&quot;improved-supersearchfacet&quot;&gt;
  1551. &lt;h3&gt;Improved supersearchfacet&lt;/h3&gt;
  1552. &lt;p&gt;The other day, &lt;a class=&quot;reference external&quot; href=&quot;https://hacks.mozilla.org/2024/04/porting-a-cross-platform-gui-application-to-rust/&quot;&gt;Alex and team finished up the crash reporter Rust rewrite&lt;/a&gt;.
  1553. The crash reporter rewrite landed and is available in Firefox, nightly channel,
  1554. where &lt;code class=&quot;docutils literal&quot;&gt;build_id &amp;gt;= 20240321093532&lt;/code&gt;.&lt;/p&gt;
  1555. &lt;p&gt;The crash reporter is one of the clients that submits crash reports to Socorro
  1556. which is now maintained by the Observability Team. Firefox has multiple crash
  1557. reporter clients and there are many ways that crash reports can get submitted
  1558. to Socorro.&lt;/p&gt;
  1559. &lt;p&gt;One of the changes we can see in the crash report data now is the change in
  1560. &lt;code class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;User-Agent&lt;/span&gt;&lt;/code&gt; header. The new rewritten crash reporter sends a header of
  1561. &lt;code class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;crash-reporter/1.0.0&lt;/span&gt;&lt;/code&gt;. That gets captured by the collector and put in the
  1562. raw crash &lt;code class=&quot;docutils literal&quot;&gt;metadata.user_agent&lt;/code&gt; field. It doesn't get indexed, so we can't
  1563. search on it directly.&lt;/p&gt;
  1564. &lt;p&gt;We can get a sampling of the last 100 crash reports, download the raw crash
  1565. data, and look at the user agents.&lt;/p&gt;
  1566. &lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;code bash&quot;&gt;&lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-1&quot; id=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-1&quot; name=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-1&quot;&gt;&lt;/a&gt;$ supersearch --num&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;100&lt;/span&gt; --product&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;Firefox --build_id&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'&amp;gt;=20240321093532'&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  1567. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-2&quot; id=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-2&quot; name=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-2&quot;&gt;&lt;/a&gt;    --release_channel&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;nightly &amp;gt; crashids.txt
  1568. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-3&quot; id=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-3&quot; name=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-3&quot;&gt;&lt;/a&gt;$ fetch-data --raw --no-dumps --no-processed crashdata &amp;lt; crashids.txt
  1569. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-4&quot; id=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-4&quot; name=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-4&quot;&gt;&lt;/a&gt;$ jq .metadata.user_agent crashdata/raw_crash/*/* &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; sort &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; uniq -c
  1570. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-5&quot; id=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-5&quot; name=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-5&quot;&gt;&lt;/a&gt;     &lt;span class=&quot;m&quot;&gt;16&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;crashreporter/1.0.0&quot;&lt;/span&gt;
  1571. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-6&quot; id=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-6&quot; name=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-6&quot;&gt;&lt;/a&gt;      &lt;span class=&quot;m&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:127.0) Gecko/20100101 Firefox/127.0&quot;&lt;/span&gt;
  1572. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-7&quot; id=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-7&quot; name=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-7&quot;&gt;&lt;/a&gt;      &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Mozilla/5.0 (Windows NT 10.0; rv:127.0) Gecko/20100101 Firefox/127.0&quot;&lt;/span&gt;
  1573. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-8&quot; id=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-8&quot; name=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-8&quot;&gt;&lt;/a&gt;      &lt;span class=&quot;m&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0&quot;&lt;/span&gt;
  1574. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-9&quot; id=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-9&quot; name=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-9&quot;&gt;&lt;/a&gt;     &lt;span class=&quot;m&quot;&gt;63&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:127.0) Gecko/20100101 Firefox/127.0&quot;&lt;/span&gt;
  1575. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-10&quot; id=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-10&quot; name=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-10&quot;&gt;&lt;/a&gt;      &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Mozilla/5.0 (X11; Linux x86_64; rv:126.0) Gecko/20100101 Firefox/126.0&quot;&lt;/span&gt;
  1576. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-11&quot; id=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-11&quot; name=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-11&quot;&gt;&lt;/a&gt;     &lt;span class=&quot;m&quot;&gt;12&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0&quot;&lt;/span&gt;
  1577. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-12&quot; id=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-12&quot; name=&quot;rest_code_ec3ca2839a4f4f5d8897dd9381a9661a-12&quot;&gt;&lt;/a&gt;      &lt;span class=&quot;m&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0&quot;&lt;/span&gt;
  1578. &lt;/pre&gt;&lt;/div&gt;
  1579. &lt;p&gt;16 out of 100 crash reports were submitted by the new crash reporter. We were
  1580. surprised there are so many Firefox user agents. We discussed this on Slack. I
  1581. loosely repeat it here because it's a great way to show off some of the changes
  1582. of &lt;code class=&quot;docutils literal&quot;&gt;supersearchfacet&lt;/code&gt; in v2.0.0.&lt;/p&gt;
  1583. &lt;p&gt;First, the rewritten crash reporter only affects the parent (aka main) process.
  1584. The other processes have different crash reporters that weren't rewritten.&lt;/p&gt;
  1585. &lt;p&gt;How many process types are there for Firefox crash reports in the last week? We
  1586. can see that in the &lt;code class=&quot;docutils literal&quot;&gt;ProcessType&lt;/code&gt; annotation
  1587. (&lt;a class=&quot;reference external&quot; href=&quot;https://crash-stats.mozilla.org/documentation/datadictionary/dataset/annotation/field/ProcessType&quot;&gt;docs&lt;/a&gt;)
  1588. which is processed and saved in the &lt;code class=&quot;docutils literal&quot;&gt;process_type&lt;/code&gt; field
  1589. (&lt;a class=&quot;reference external&quot; href=&quot;https://crash-stats.mozilla.org/documentation/datadictionary/dataset/processed/field/process_type&quot;&gt;docs&lt;/a&gt;).&lt;/p&gt;
  1590. &lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;code bash&quot;&gt;&lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_20d71c94db314fc89188d9d6521668d1-1&quot; id=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-1&quot; name=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-1&quot;&gt;&lt;/a&gt;$ supersearchfacet --product&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;Firefox --build_id&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'&amp;gt;=20240321093532'&lt;/span&gt; --release_channel&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;nightly
  1591. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_20d71c94db314fc89188d9d6521668d1-2&quot; id=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-2&quot; name=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-2&quot;&gt;&lt;/a&gt;    --_facets&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;process_type
  1592. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_20d71c94db314fc89188d9d6521668d1-3&quot; id=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-3&quot; name=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-3&quot;&gt;&lt;/a&gt;process_type
  1593. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_20d71c94db314fc89188d9d6521668d1-4&quot; id=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-4&quot; name=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-4&quot;&gt;&lt;/a&gt; process_type &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; count
  1594. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_20d71c94db314fc89188d9d6521668d1-5&quot; id=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-5&quot; name=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-5&quot;&gt;&lt;/a&gt;--------------&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;-------
  1595. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_20d71c94db314fc89188d9d6521668d1-6&quot; id=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-6&quot; name=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-6&quot;&gt;&lt;/a&gt; content      &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;3664&lt;/span&gt;
  1596. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_20d71c94db314fc89188d9d6521668d1-7&quot; id=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-7&quot; name=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-7&quot;&gt;&lt;/a&gt; parent       &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2323&lt;/span&gt;
  1597. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_20d71c94db314fc89188d9d6521668d1-8&quot; id=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-8&quot; name=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-8&quot;&gt;&lt;/a&gt; gpu          &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;855&lt;/span&gt;
  1598. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_20d71c94db314fc89188d9d6521668d1-9&quot; id=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-9&quot; name=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-9&quot;&gt;&lt;/a&gt; utility      &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;225&lt;/span&gt;
  1599. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_20d71c94db314fc89188d9d6521668d1-10&quot; id=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-10&quot; name=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-10&quot;&gt;&lt;/a&gt; rdd          &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;60&lt;/span&gt;
  1600. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_20d71c94db314fc89188d9d6521668d1-11&quot; id=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-11&quot; name=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-11&quot;&gt;&lt;/a&gt; plugin       &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;18&lt;/span&gt;
  1601. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_20d71c94db314fc89188d9d6521668d1-12&quot; id=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-12&quot; name=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-12&quot;&gt;&lt;/a&gt; socket       &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;
  1602. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_20d71c94db314fc89188d9d6521668d1-13&quot; id=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-13&quot; name=&quot;rest_code_20d71c94db314fc89188d9d6521668d1-13&quot;&gt;&lt;/a&gt; total        &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;7147&lt;/span&gt;
  1603. &lt;/pre&gt;&lt;/div&gt;
  1604. &lt;p&gt;Judging by that output, I would expect to see a higher percentage of
  1605. &lt;code class=&quot;docutils literal&quot;&gt;crashreporter/1.0.0&lt;/code&gt; in our sampling of 100 crash reports.&lt;/p&gt;
  1606. &lt;p&gt;Turns out that Firefox uses different code to submit crash reports not just by
  1607. process type, but also by user action. That's in the &lt;code class=&quot;docutils literal&quot;&gt;SubmittedFrom&lt;/code&gt; annotation
  1608. (&lt;a class=&quot;reference external&quot; href=&quot;https://crash-stats.mozilla.org/documentation/datadictionary/dataset/annotation/field/SubmittedFrom&quot;&gt;docs&lt;/a&gt;)
  1609. which is processed and saved in the &lt;code class=&quot;docutils literal&quot;&gt;submitted_from&lt;/code&gt; field
  1610. (&lt;a class=&quot;reference external&quot; href=&quot;https://crash-stats.mozilla.org/documentation/datadictionary/dataset/processed/field/submitted_from&quot;&gt;docs&lt;/a&gt;).&lt;/p&gt;
  1611. &lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;code bash&quot;&gt;&lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_fab4c0a65a1e4ebe967c24600aa38907-1&quot; id=&quot;rest_code_fab4c0a65a1e4ebe967c24600aa38907-1&quot; name=&quot;rest_code_fab4c0a65a1e4ebe967c24600aa38907-1&quot;&gt;&lt;/a&gt;$ supersearchfacet --product&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;Firefox --build_id&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'&amp;gt;=20240321093532'&lt;/span&gt; --release_channel&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;nightly &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  1612. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_fab4c0a65a1e4ebe967c24600aa38907-2&quot; id=&quot;rest_code_fab4c0a65a1e4ebe967c24600aa38907-2&quot; name=&quot;rest_code_fab4c0a65a1e4ebe967c24600aa38907-2&quot;&gt;&lt;/a&gt;    --_facets&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;submitted_from
  1613. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_fab4c0a65a1e4ebe967c24600aa38907-3&quot; id=&quot;rest_code_fab4c0a65a1e4ebe967c24600aa38907-3&quot; name=&quot;rest_code_fab4c0a65a1e4ebe967c24600aa38907-3&quot;&gt;&lt;/a&gt;submitted_from
  1614. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_fab4c0a65a1e4ebe967c24600aa38907-4&quot; id=&quot;rest_code_fab4c0a65a1e4ebe967c24600aa38907-4&quot; name=&quot;rest_code_fab4c0a65a1e4ebe967c24600aa38907-4&quot;&gt;&lt;/a&gt; submitted_from &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; count
  1615. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_fab4c0a65a1e4ebe967c24600aa38907-5&quot; id=&quot;rest_code_fab4c0a65a1e4ebe967c24600aa38907-5&quot; name=&quot;rest_code_fab4c0a65a1e4ebe967c24600aa38907-5&quot;&gt;&lt;/a&gt;----------------&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;-------
  1616. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_fab4c0a65a1e4ebe967c24600aa38907-6&quot; id=&quot;rest_code_fab4c0a65a1e4ebe967c24600aa38907-6&quot; name=&quot;rest_code_fab4c0a65a1e4ebe967c24600aa38907-6&quot;&gt;&lt;/a&gt; Auto           &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;3477&lt;/span&gt;
  1617. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_fab4c0a65a1e4ebe967c24600aa38907-7&quot; id=&quot;rest_code_fab4c0a65a1e4ebe967c24600aa38907-7&quot; name=&quot;rest_code_fab4c0a65a1e4ebe967c24600aa38907-7&quot;&gt;&lt;/a&gt; Client         &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1741&lt;/span&gt;
  1618. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_fab4c0a65a1e4ebe967c24600aa38907-8&quot; id=&quot;rest_code_fab4c0a65a1e4ebe967c24600aa38907-8&quot; name=&quot;rest_code_fab4c0a65a1e4ebe967c24600aa38907-8&quot;&gt;&lt;/a&gt; CrashedTab     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;928&lt;/span&gt;
  1619. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_fab4c0a65a1e4ebe967c24600aa38907-9&quot; id=&quot;rest_code_fab4c0a65a1e4ebe967c24600aa38907-9&quot; name=&quot;rest_code_fab4c0a65a1e4ebe967c24600aa38907-9&quot;&gt;&lt;/a&gt; Infobar        &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;792&lt;/span&gt;
  1620. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_fab4c0a65a1e4ebe967c24600aa38907-10&quot; id=&quot;rest_code_fab4c0a65a1e4ebe967c24600aa38907-10&quot; name=&quot;rest_code_fab4c0a65a1e4ebe967c24600aa38907-10&quot;&gt;&lt;/a&gt; AboutCrashes   &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;209&lt;/span&gt;
  1621. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_fab4c0a65a1e4ebe967c24600aa38907-11&quot; id=&quot;rest_code_fab4c0a65a1e4ebe967c24600aa38907-11&quot; name=&quot;rest_code_fab4c0a65a1e4ebe967c24600aa38907-11&quot;&gt;&lt;/a&gt; total          &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;7147&lt;/span&gt;
  1622. &lt;/pre&gt;&lt;/div&gt;
  1623. &lt;p&gt;What is &quot;Auto&quot;? The user can opt-in to auto-send crash reports. When Firefox
  1624. upgrades and this setting is set, then Firefox will auto-send any unsubmitted
  1625. crash reports. The nightly channel has two updates a day, so there's lots of
  1626. opportunity for this event to trigger.&lt;/p&gt;
  1627. &lt;p&gt;What're the counts for &lt;code class=&quot;docutils literal&quot;&gt;submitted_from&lt;/code&gt;/&lt;code class=&quot;docutils literal&quot;&gt;process_type&lt;/code&gt; pairs?&lt;/p&gt;
  1628. &lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;code bash&quot;&gt;&lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-1&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-1&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-1&quot;&gt;&lt;/a&gt;$ supersearchfacet --product&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;Firefox --build_id&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'&amp;gt;=20240321093532'&lt;/span&gt; --release_channel&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;nightly &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  1629. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-2&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-2&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-2&quot;&gt;&lt;/a&gt;    --_aggs.process_type&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;submitted_from
  1630. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-3&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-3&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-3&quot;&gt;&lt;/a&gt;process_type / submitted_from
  1631. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-4&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-4&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-4&quot;&gt;&lt;/a&gt; process_type / submitted_from &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; count
  1632. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-5&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-5&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-5&quot;&gt;&lt;/a&gt;-------------------------------&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;-------
  1633. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-6&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-6&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-6&quot;&gt;&lt;/a&gt; content / Auto                &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2214&lt;/span&gt;
  1634. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-7&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-7&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-7&quot;&gt;&lt;/a&gt; content / CrashedTab          &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;926&lt;/span&gt;
  1635. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-8&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-8&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-8&quot;&gt;&lt;/a&gt; content / Infobar             &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;399&lt;/span&gt;
  1636. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-9&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-9&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-9&quot;&gt;&lt;/a&gt; content / AboutCrashes        &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;125&lt;/span&gt;
  1637. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-10&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-10&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-10&quot;&gt;&lt;/a&gt; parent / Client               &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1741&lt;/span&gt;
  1638. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-11&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-11&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-11&quot;&gt;&lt;/a&gt; parent / Auto                 &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;450&lt;/span&gt;
  1639. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-12&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-12&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-12&quot;&gt;&lt;/a&gt; parent / Infobar              &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;107&lt;/span&gt;
  1640. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-13&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-13&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-13&quot;&gt;&lt;/a&gt; parent / AboutCrashes         &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;25&lt;/span&gt;
  1641. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-14&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-14&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-14&quot;&gt;&lt;/a&gt; gpu / Auto                    &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;565&lt;/span&gt;
  1642. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-15&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-15&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-15&quot;&gt;&lt;/a&gt; gpu / Infobar                 &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;236&lt;/span&gt;
  1643. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-16&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-16&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-16&quot;&gt;&lt;/a&gt; gpu / AboutCrashes            &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;54&lt;/span&gt;
  1644. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-17&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-17&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-17&quot;&gt;&lt;/a&gt; utility / Auto                &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;198&lt;/span&gt;
  1645. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-18&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-18&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-18&quot;&gt;&lt;/a&gt; utility / Infobar             &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;25&lt;/span&gt;
  1646. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-19&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-19&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-19&quot;&gt;&lt;/a&gt; utility / AboutCrashes        &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;
  1647. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-20&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-20&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-20&quot;&gt;&lt;/a&gt; rdd / Auto                    &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;34&lt;/span&gt;
  1648. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-21&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-21&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-21&quot;&gt;&lt;/a&gt; rdd / Infobar                 &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;23&lt;/span&gt;
  1649. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-22&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-22&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-22&quot;&gt;&lt;/a&gt; rdd / AboutCrashes            &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;3&lt;/span&gt;
  1650. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-23&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-23&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-23&quot;&gt;&lt;/a&gt; plugin / Auto                 &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;14&lt;/span&gt;
  1651. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-24&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-24&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-24&quot;&gt;&lt;/a&gt; plugin / CrashedTab           &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;
  1652. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-25&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-25&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-25&quot;&gt;&lt;/a&gt; plugin / Infobar              &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;
  1653. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-26&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-26&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-26&quot;&gt;&lt;/a&gt; socket / Auto                 &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;
  1654. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_db3692710cd6465ba1c7d3b13f8f5099-27&quot; id=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-27&quot; name=&quot;rest_code_db3692710cd6465ba1c7d3b13f8f5099-27&quot;&gt;&lt;/a&gt; total                         &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;7147&lt;/span&gt;
  1655. &lt;/pre&gt;&lt;/div&gt;
  1656. &lt;p&gt;We can spot check these different combinations to see what the user-agent looks
  1657. like.&lt;/p&gt;
  1658. &lt;p&gt;For brevity, we'll just look at &lt;code class=&quot;docutils literal&quot;&gt;parent / Client&lt;/code&gt; in this blog post.&lt;/p&gt;
  1659. &lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;code bash&quot;&gt;&lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_96abcc445423445e969536857cd50448-1&quot; id=&quot;rest_code_96abcc445423445e969536857cd50448-1&quot; name=&quot;rest_code_96abcc445423445e969536857cd50448-1&quot;&gt;&lt;/a&gt;$ supersearch --num&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;100&lt;/span&gt; --product&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;Firefox --build_id&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'&amp;gt;=20240321093532'&lt;/span&gt; --release_channel&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;nightly &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  1660. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_96abcc445423445e969536857cd50448-2&quot; id=&quot;rest_code_96abcc445423445e969536857cd50448-2&quot; name=&quot;rest_code_96abcc445423445e969536857cd50448-2&quot;&gt;&lt;/a&gt;    --process_type&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;parent --submitted_from&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'~Client'&lt;/span&gt; &amp;gt; crashids_clarified.txt
  1661. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_96abcc445423445e969536857cd50448-3&quot; id=&quot;rest_code_96abcc445423445e969536857cd50448-3&quot; name=&quot;rest_code_96abcc445423445e969536857cd50448-3&quot;&gt;&lt;/a&gt;$ fetch-data --raw --no-dumps --no-processed crashdata_clarified &amp;lt; crashids_clarified.txt
  1662. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_96abcc445423445e969536857cd50448-4&quot; id=&quot;rest_code_96abcc445423445e969536857cd50448-4&quot; name=&quot;rest_code_96abcc445423445e969536857cd50448-4&quot;&gt;&lt;/a&gt;$ jq .metadata.user_agent crashdata_clarified/raw_crash/*/* &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; sort &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; uniq -c
  1663. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_96abcc445423445e969536857cd50448-5&quot; id=&quot;rest_code_96abcc445423445e969536857cd50448-5&quot; name=&quot;rest_code_96abcc445423445e969536857cd50448-5&quot;&gt;&lt;/a&gt;    &lt;span class=&quot;m&quot;&gt;100&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;crashreporter/1.0.0&quot;&lt;/span&gt;
  1664. &lt;/pre&gt;&lt;/div&gt;
  1665. &lt;p&gt;Seems like the crash reporter rewrite only affects crash reports where
  1666. &lt;code class=&quot;docutils literal&quot;&gt;ProcessType=parent&lt;/code&gt; and &lt;code class=&quot;docutils literal&quot;&gt;SubmittedFrom=Client&lt;/code&gt;. All the other
  1667. &lt;code class=&quot;docutils literal&quot;&gt;process_type&lt;/code&gt;/&lt;code class=&quot;docutils literal&quot;&gt;submitted_from&lt;/code&gt; combinations get submitted a different way
  1668. where the user agent is the browser itself.&lt;/p&gt;
  1669. &lt;p&gt;How many crash reports has the new crash reporter submitted over time?&lt;/p&gt;
  1670. &lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;code bash&quot;&gt;&lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-1&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-1&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-1&quot;&gt;&lt;/a&gt;$ supersearchfacet --_histogram.date&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;product --_histogram.interval&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;1d --denote-weekends &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  1671. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-2&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-2&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-2&quot;&gt;&lt;/a&gt;    --date&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'&amp;gt;=2024-03-20'&lt;/span&gt; --date&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'&amp;lt;=2024-04-25'&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  1672. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-3&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-3&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-3&quot;&gt;&lt;/a&gt;    --release_channel&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;nightly --product&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;Firefox --build_id&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'&amp;gt;=20240321093532'&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  1673. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-4&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-4&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-4&quot;&gt;&lt;/a&gt;    --submitted_from&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'~Client'&lt;/span&gt; --process_type&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;parent
  1674. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-5&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-5&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-5&quot;&gt;&lt;/a&gt;histogram_date.product
  1675. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-6&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-6&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-6&quot;&gt;&lt;/a&gt; histogram_date &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; Firefox &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; total
  1676. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-7&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-7&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-7&quot;&gt;&lt;/a&gt;----------------&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;---------&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;-------
  1677. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-8&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-8&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-8&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-03-21     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;58&lt;/span&gt;      &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;58&lt;/span&gt;
  1678. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-9&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-9&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-9&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-03-22     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;124&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;124&lt;/span&gt;
  1679. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-10&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-10&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-10&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-03-23 **  &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;189&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;189&lt;/span&gt;
  1680. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-11&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-11&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-11&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-03-24 **  &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;289&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;289&lt;/span&gt;
  1681. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-12&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-12&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-12&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-03-25     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;202&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;202&lt;/span&gt;
  1682. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-13&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-13&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-13&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-03-26     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;164&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;164&lt;/span&gt;
  1683. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-14&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-14&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-14&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-03-27     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;199&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;199&lt;/span&gt;
  1684. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-15&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-15&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-15&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-03-28     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;187&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;187&lt;/span&gt;
  1685. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-16&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-16&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-16&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-03-29     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;188&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;188&lt;/span&gt;
  1686. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-17&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-17&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-17&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-03-30 **  &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;155&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;155&lt;/span&gt;
  1687. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-18&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-18&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-18&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-03-31 **  &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;146&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;146&lt;/span&gt;
  1688. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-19&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-19&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-19&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-01     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;201&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;201&lt;/span&gt;
  1689. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-20&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-20&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-20&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-02     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;226&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;226&lt;/span&gt;
  1690. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-21&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-21&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-21&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-03     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;236&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;236&lt;/span&gt;
  1691. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-22&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-22&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-22&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-04     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;266&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;266&lt;/span&gt;
  1692. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-23&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-23&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-23&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-05     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;259&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;259&lt;/span&gt;
  1693. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-24&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-24&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-24&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-06 **  &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;227&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;227&lt;/span&gt;
  1694. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-25&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-25&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-25&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-07 **  &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;214&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;214&lt;/span&gt;
  1695. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-26&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-26&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-26&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-08     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;259&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;259&lt;/span&gt;
  1696. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-27&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-27&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-27&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-09     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;257&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;257&lt;/span&gt;
  1697. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-28&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-28&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-28&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-10     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;223&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;223&lt;/span&gt;
  1698. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-29&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-29&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-29&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-11     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;250&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;250&lt;/span&gt;
  1699. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-30&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-30&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-30&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-12     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;235&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;235&lt;/span&gt;
  1700. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-31&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-31&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-31&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-13 **  &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;154&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;154&lt;/span&gt;
  1701. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-32&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-32&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-32&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-14 **  &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;162&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;162&lt;/span&gt;
  1702. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-33&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-33&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-33&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-15     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;207&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;207&lt;/span&gt;
  1703. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-34&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-34&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-34&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-16     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;201&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;201&lt;/span&gt;
  1704. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-35&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-35&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-35&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-17     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;346&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;346&lt;/span&gt;
  1705. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-36&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-36&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-36&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-18     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;270&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;270&lt;/span&gt;
  1706. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-37&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-37&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-37&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-19     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;221&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;221&lt;/span&gt;
  1707. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-38&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-38&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-38&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-20 **  &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;190&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;190&lt;/span&gt;
  1708. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-39&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-39&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-39&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-21 **  &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;183&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;183&lt;/span&gt;
  1709. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-40&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-40&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-40&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-22     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;266&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;266&lt;/span&gt;
  1710. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-41&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-41&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-41&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-23     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;303&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;303&lt;/span&gt;
  1711. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_a69437e062104bdebf3db51e94d1b704-42&quot; id=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-42&quot; name=&quot;rest_code_a69437e062104bdebf3db51e94d1b704-42&quot;&gt;&lt;/a&gt; &lt;span class=&quot;m&quot;&gt;2024&lt;/span&gt;-04-24     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;308&lt;/span&gt;     &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;308&lt;/span&gt;
  1712. &lt;/pre&gt;&lt;/div&gt;
  1713. &lt;p&gt;There are more examples in the &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/willkg/crashstats-tools&quot;&gt;crashstats-tools README&lt;/a&gt;.&lt;/p&gt;
  1714. &lt;/section&gt;
  1715. &lt;section id=&quot;crashstats-tools-libcrashstats-library&quot;&gt;
  1716. &lt;h3&gt;crashstats_tools.libcrashstats library&lt;/h3&gt;
  1717. &lt;p&gt;Starting with v2.0.0, you can use &lt;code class=&quot;docutils literal&quot;&gt;crashstats_tools.libcrashstats&lt;/code&gt; as a
  1718. library for Python scripts.&lt;/p&gt;
  1719. &lt;p&gt;For example:&lt;/p&gt;
  1720. &lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;code python&quot;&gt;&lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_4b9e67fff7ad4f25929e70065aa75ccf-1&quot; id=&quot;rest_code_4b9e67fff7ad4f25929e70065aa75ccf-1&quot; name=&quot;rest_code_4b9e67fff7ad4f25929e70065aa75ccf-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;crashstats_tools.libcrashstats&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;supersearch&lt;/span&gt;
  1721. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_4b9e67fff7ad4f25929e70065aa75ccf-2&quot; id=&quot;rest_code_4b9e67fff7ad4f25929e70065aa75ccf-2&quot; name=&quot;rest_code_4b9e67fff7ad4f25929e70065aa75ccf-2&quot;&gt;&lt;/a&gt;
  1722. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_4b9e67fff7ad4f25929e70065aa75ccf-3&quot; id=&quot;rest_code_4b9e67fff7ad4f25929e70065aa75ccf-3&quot; name=&quot;rest_code_4b9e67fff7ad4f25929e70065aa75ccf-3&quot;&gt;&lt;/a&gt;&lt;span class=&quot;n&quot;&gt;results&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;supersearch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;params&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;s2&quot;&gt;&quot;_columns&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;uuid&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;num_results&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  1723. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_4b9e67fff7ad4f25929e70065aa75ccf-4&quot; id=&quot;rest_code_4b9e67fff7ad4f25929e70065aa75ccf-4&quot; name=&quot;rest_code_4b9e67fff7ad4f25929e70065aa75ccf-4&quot;&gt;&lt;/a&gt;
  1724. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_4b9e67fff7ad4f25929e70065aa75ccf-5&quot; id=&quot;rest_code_4b9e67fff7ad4f25929e70065aa75ccf-5&quot; name=&quot;rest_code_4b9e67fff7ad4f25929e70065aa75ccf-5&quot;&gt;&lt;/a&gt;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;results&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
  1725. &lt;a href=&quot;https://bluesock.org/~willkg/blog/mozilla/crashstats_tools_v2_0_0.html#rest_code_4b9e67fff7ad4f25929e70065aa75ccf-6&quot; id=&quot;rest_code_4b9e67fff7ad4f25929e70065aa75ccf-6&quot; name=&quot;rest_code_4b9e67fff7ad4f25929e70065aa75ccf-6&quot;&gt;&lt;/a&gt;    &lt;span class=&quot;nb&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sa&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  1726. &lt;/pre&gt;&lt;/div&gt;
  1727. &lt;p&gt;&lt;code class=&quot;docutils literal&quot;&gt;libcrashstats&lt;/code&gt; makes using the Crash Stats API a little more ergonomic.&lt;/p&gt;
  1728. &lt;p&gt;See the &lt;code class=&quot;docutils literal&quot;&gt;crashstats_tools.libcrashstats&lt;/code&gt;
  1729. &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/willkg/crashstats-tools?tab=readme-ov-file#library&quot;&gt;library documentation&lt;/a&gt;.&lt;/p&gt;
  1730. &lt;/section&gt;
  1731. &lt;section id=&quot;be-thoughtful-about-using-data&quot;&gt;
  1732. &lt;h3&gt;Be thoughtful about using data&lt;/h3&gt;
  1733. &lt;p&gt;Make sure to use these tools in compliance with our data policy:&lt;/p&gt;
  1734. &lt;p&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://crash-stats.mozilla.org/documentation/protected_data_access/&quot;&gt;https://crash-stats.mozilla.org/documentation/protected_data_access/&lt;/a&gt;&lt;/p&gt;
  1735. &lt;/section&gt;
  1736. &lt;section id=&quot;where-to-go-for-more&quot;&gt;
  1737. &lt;h3&gt;Where to go for more&lt;/h3&gt;
  1738. &lt;p&gt;See the project on GitHub which includes a README which contains everything
  1739. about the project including examples of usage, the issue tracker, and the
  1740. source code:&lt;/p&gt;
  1741. &lt;p&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/willkg/crashstats-tools&quot;&gt;https://github.com/willkg/crashstats-tools&lt;/a&gt;&lt;/p&gt;
  1742. &lt;p&gt;Let me know whether this helps you!&lt;/p&gt;
  1743. &lt;/section&gt;</description>
  1744. <pubDate>Thu, 25 Apr 2024 16:00:00 +0000</pubDate>
  1745. <dc:creator>Will Kahn-Greene</dc:creator>
  1746. </item>
  1747. <item>
  1748. <title>Hacks.Mozilla.Org: Llamafile’s progress, four months in</title>
  1749. <guid isPermaLink="false">https://hacks.mozilla.org/?p=48149</guid>
  1750. <link>https://hacks.mozilla.org/2024/04/llamafiles-progress-four-months-in/</link>
  1751. <description>&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;When Mozilla’s Innovation group &lt;/span&gt;&lt;a href=&quot;https://hacks.mozilla.org/2023/11/introducing-llamafile/&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;first launched&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt; the &lt;/span&gt;&lt;a href=&quot;https://github.com/Mozilla-Ocho/llamafile&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;llamafile project&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt; late last year, we were thrilled by the immediate positive response from open source AI developers. It’s become one of Mozilla’s top three most-favorited repositories on GitHub, attracting a number of contributors, some excellent PRs, and a growing community on our &lt;/span&gt;&lt;a href=&quot;https://discord.gg/YTgM42NZEr&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Discord server&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
  1752. &lt;p&gt;Through it all, lead developer and project visionary &lt;a href=&quot;https://github.com/jart&quot;&gt;Justine Tunney&lt;/a&gt; has remained hard at work on a wide variety of fundamental improvements to the project. Just last night, Justine &lt;a href=&quot;https://github.com/Mozilla-Ocho/llamafile/releases/tag/0.8&quot;&gt;shipped the v0.8 release of llamafile&lt;/a&gt;, which includes not only support for the very latest open models, but also a number of big performance improvements for CPU inference.&lt;/p&gt;
  1753. &lt;p&gt;As a result of Justine’s work, today llamafile is both the easiest &lt;i&gt;and fastest&lt;/i&gt; way to run a wide range of open large language models on your own hardware. See for yourself: with llamafile, you can run Meta’s just-released &lt;a href=&quot;https://huggingface.co/jartine/Meta-Llama-3-8B-Instruct-llamafile&quot;&gt;LLaMA 3 model&lt;/a&gt;–which rivals the very best models available in its size class–on an everyday Macbook.&lt;/p&gt;
  1754. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;How did we do it? To explain that, let’s take a step back and tell you about everything that’s changed since v0.1.&lt;/span&gt;&lt;/p&gt;
  1755. &lt;p&gt;&lt;b&gt;tinyBLAS: democratizing GPU support for NVIDIA &lt;/b&gt;&lt;b&gt;&lt;i&gt;and&lt;/i&gt;&lt;/b&gt;&lt;b&gt; AMD&lt;/b&gt;&lt;/p&gt;
  1756. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;llamafile is built atop the now-legendary &lt;/span&gt;&lt;a href=&quot;https://github.com/ggerganov/llama.cpp&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;llama.cpp&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt; project. llama.cpp supports GPU-accelerated inference for NVIDIA processors via the cuBLAS linear algebra library, but that requires users to install NVIDIA’s CUDA SDK. We felt uncomfortable with that fact, because it conflicts with our project goal of building a fully open-source and transparent AI stack that anyone can run on commodity hardware. And besides, getting CUDA set up correctly can be a bear on some systems. There had to be a better way.&lt;/span&gt;&lt;/p&gt;
  1757. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;With the community’s help (here’s looking at you, &lt;/span&gt;&lt;a href=&quot;https://ahgamut.github.io/&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;@ahgamut&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt; and &lt;/span&gt;&lt;a href=&quot;https://github.com/mrdomino&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;@mrdomino&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;!), we created our own solution: it’s called tinyBLAS, and it’s llamafile’s brand-new and highly efficient linear algebra library. tinyBLAS makes NVIDIA acceleration simple and seamless for llamafile users. On Windows, you don’t even need to install CUDA at all; all you need is the display driver you’ve probably already installed.&lt;/span&gt;&lt;/p&gt;
  1758. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;But tinyBLAS is about more than just NVIDIA: it supports AMD GPUs, as well. This is no small feat. While AMD commands a respectable 20% of today’s GPU market, poor software and driver support have historically made them a secondary player in the machine learning space. That’s a shame, given that AMD’s GPUs offer high performance, are price competitive, and are widely available. &lt;/span&gt;&lt;/p&gt;
  1759. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;One of llamafile’s goals is to democratize access to open source AI technology, and that means getting AMD a seat at the table. That’s exactly what we’ve done: with llamafile’s tinyBLAS, you can now easily make full use of your AMD GPU to accelerate local inference. And, as with CUDA, if you’re a Windows user you don’t even have to install AMD’s ROCm SDK.&lt;/span&gt;&lt;/p&gt;
  1760. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;All of this means that, for many users, llamafile will automatically use your GPU right out of the box, with little to no effort on your part.&lt;/span&gt;&lt;/p&gt;
  1761. &lt;p&gt;&lt;b&gt;CPU performance gains for faster local AI&lt;/b&gt;&lt;/p&gt;
  1762. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Here at Mozilla, we are keenly interested in the promise of “local AI,” in which AI models and applications run directly on end-user hardware instead of in the cloud. Local AI is exciting because it opens up the possibility of more user control over these systems and greater privacy and security for users.&lt;/span&gt;&lt;/p&gt;
  1763. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;But many consumer devices lack the high-end GPUs that are often required for inference tasks. llama.cpp has been a game-changer in this regard because it makes local inference both possible and usably performant on CPUs instead of just GPUs. &lt;/span&gt;&lt;/p&gt;
  1764. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Justine’s recent work on llamafile has now pushed the state of the art even further. As documented in &lt;/span&gt;&lt;a href=&quot;http://justine.lol/matmul/&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;her detailed blog post&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt; on the subject, by writing 84 new matrix multiplication kernels she was able to increase llamafile’s prompt evaluation performance by an astonishing 10x compared to our previous release. This is a substantial and impactful step forward in the quest to make local AI viable on consumer hardware.&lt;/span&gt;&lt;/p&gt;
  1765. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;This work is also a great example of our commitment to the open source AI community. After completing this work we immediately &lt;/span&gt;&lt;a href=&quot;https://github.com/ggerganov/llama.cpp/pull/6414&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;submitted a PR&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt; to upstream these performance improvements to llama.cpp. This was just the latest of a number of enhancements we’ve contributed back to llama.cpp, a practice we plan to continue.&lt;/span&gt;&lt;/p&gt;
  1766. &lt;p&gt;&lt;b&gt;Raspberry Pi performance gains&lt;/b&gt;&lt;/p&gt;
  1767. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Speaking of consumer hardware, there are few examples that are both more interesting and more humble than the beloved Raspberry Pi. For a bargain basement price, you get a full-featured computer running Linux with plenty of computing power for typical desktop uses. It’s an impressive package, but historically it hasn’t been considered a viable platform for AI applications.&lt;/span&gt;&lt;/p&gt;
  1768. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Not any more. llamafile has now been optimized for the latest model (the Raspberry Pi 5), and the result is that a number of small LLMs–such as Rocket-3B (&lt;/span&gt;&lt;a href=&quot;https://huggingface.co/jartine/rocket-3B-llamafile/resolve/main/rocket-3b.Q5_K_M.llamafile?download=true&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;download&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;), TinyLLaMA-1.5B (&lt;/span&gt;&lt;a href=&quot;https://huggingface.co/jartine/TinyLlama-1.1B-Chat-v1.0-GGUF/resolve/main/TinyLlama-1.1B-Chat-v1.0.Q5_K_M.llamafile?download=true&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;download&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;), and Phi-2 (&lt;/span&gt;&lt;a href=&quot;https://huggingface.co/jartine/phi-2-llamafile/resolve/main/phi-2.Q5_K_M.llamafile?download=true&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;download&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;)–run at usable speeds on one of the least expensive computers available today. We’ve seen prompt evaluation speeds of &lt;/span&gt;&lt;a href=&quot;https://twitter.com/JustineTunney/status/1776440470152867930&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;up to 80 tokens/sec&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt; in some cases!&lt;/span&gt;&lt;/p&gt;
  1769. &lt;p&gt;&lt;b&gt;Keeping up with the latest models&lt;/b&gt;&lt;/p&gt;
  1770. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The pace of progress in the open model space has been &lt;/span&gt;&lt;a href=&quot;https://twitter.com/maximelabonne/status/1779123021480865807&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;stunningly fast&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;. Over the past few months, hundreds of models have been released or updated via fine-tuning. Along the way, there has been a clear trend of ever-increasing model performance and ever-smaller model sizes. &lt;/span&gt;&lt;/p&gt;
  1771. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The llama.cpp project has been doing an excellent job of keeping up with all of these new models, frequently rolling-out support for new architectures and model features within days of their release.&lt;/span&gt;&lt;/p&gt;
  1772. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;For our part we’ve been keeping llamafile closely synced with llama.cpp so that we can support all the same models. Given the complexity of both projects, this has been no small feat, so we’re lucky to have Justine on the case. &lt;/span&gt;&lt;/p&gt;
  1773. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Today, you can today use the very latest and most capable open models with llamafile thanks to her hard work. For example, we were able to roll-out llamafiles for Meta’s newest LLaMA 3 models–&lt;/span&gt;&lt;a href=&quot;https://huggingface.co/jartine/Meta-Llama-3-8B-Instruct-llamafile&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;8B-Instruct&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt; and &lt;/span&gt;&lt;a href=&quot;https://huggingface.co/jartine/Meta-Llama-3-70B-Instruct-llamafile&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;70B-Instruct&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;–within a day of their release. With yesterday’s 0.8 release, llamafile can also run Grok, Mixtral 8x22B, and Command-R.&lt;/span&gt;&lt;/p&gt;
  1774. &lt;p&gt;&lt;b&gt;Creating your own llamafiles&lt;/b&gt;&lt;/p&gt;
  1775. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Since the day that llamafile shipped people have wanted to create their own llamafiles. Previously, this required a number of steps, but today you can do it with a single command, e.g.:&lt;/span&gt;&lt;/p&gt;
  1776. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;&lt;code&gt;llamafile-convert [model.gguf]&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
  1777. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;In just moments, this will produce a “model.llamafile” file that is ready for immediate use. Our thanks to community member &lt;/span&gt;&lt;a href=&quot;https://github.com/chand1012&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;@chan1012&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt; for contributing this helpful improvement.&lt;/span&gt;&lt;/p&gt;
  1778. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;In a related development, Hugging Face recently added official support for llamafile within their model hub. This means you can now &lt;/span&gt;&lt;a href=&quot;https://huggingface.co/models?library=llamafile&amp;amp;sort=trending&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;search and filter&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt; Hugging Face specifically for llamafiles created and distributed by other people in the open source community.&lt;/span&gt;&lt;/p&gt;
  1779. &lt;p&gt;&lt;b&gt;OpenAI-compatible API server&lt;/b&gt;&lt;/p&gt;
  1780. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Since it’s built on top of llama.cpp, llamafile inherits that project’s server component, which provides OpenAI-compatible API endpoints. This enables developers who are building on top of OpenAI to switch to using open models instead. At Mozilla we very much want to support this kind of future: one where open-source AI is a viable alternative to centralized, closed, commercial offerings. &lt;/span&gt;&lt;/p&gt;
  1781. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;While open models do not yet fully rival the capabilities of closed models, they’re making rapid progress. We believe that making it easier to pivot existing code over to executing against open models will increase demand and further fuel this progress.&lt;/span&gt;&lt;/p&gt;
  1782. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Over the past few months, we’ve invested effort in extending these endpoints, both to increase functionality and improve compatibility. Today, llamafile can serve as a drop-in replacement for OpenAI in a wide variety of use cases. &lt;/span&gt;&lt;/p&gt;
  1783. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;We want to further extend our API server’s capabilities, and we’re eager to hear what developers want and need. What’s holding you back from using open models? What features, capabilities, or tools do you need? &lt;/span&gt;&lt;a href=&quot;https://discord.gg/YTgM42NZEr&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Let us know&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;!&lt;/span&gt;&lt;/p&gt;
  1784. &lt;p&gt;&lt;b&gt;Integrations with other open source AI projects&lt;/b&gt;&lt;/p&gt;
  1785. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Finally, it’s been a delight to see llamafile adopted by independent developers and integrated into leading open source AI projects (like &lt;/span&gt;&lt;a href=&quot;https://github.com/OpenInterpreter/open-interpreter&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Open Interpreter&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;). Kudos in particular to our own &lt;/span&gt;&lt;a href=&quot;https://github.com/k8si&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Kate Silverstein&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt; who landed PRs that add llamafile support to &lt;/span&gt;&lt;a href=&quot;https://github.com/langchain-ai/langchain&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;LangChain&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt; and &lt;/span&gt;&lt;a href=&quot;https://github.com/run-llama/llama_index&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;LlamaIndex&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt; (with &lt;/span&gt;&lt;a href=&quot;https://github.com/Significant-Gravitas/AutoGPT&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;AutoGPT&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt; coming soon).&lt;/span&gt;&lt;/p&gt;
  1786. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;If you’re a maintainer or contributor to an open source AI project that you feel would benefit from llamafile integration, &lt;/span&gt;&lt;a href=&quot;https://discord.gg/YTgM42NZEr&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;let us know how we can help&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
  1787. &lt;p&gt;&lt;b&gt;Join us!&lt;/b&gt;&lt;/p&gt;
  1788. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The llamafile project is just getting started, and it’s also only the first step in a major new initiative on Mozilla’s part to contribute to and participate in the open source AI community. We’ll have more to share about that soon, but for now: I invite you to join us on the llamafile project!&lt;/span&gt;&lt;/p&gt;
  1789. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The best place to connect with both the llamafile team at Mozilla and the overall llamafile community is over at our Discord server, which has &lt;/span&gt;&lt;a href=&quot;https://discord.gg/YTgM42NZEr&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;a dedicated channel just for llamafile&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;. And of course, your enhancement requests, issues, and PRs are always welcome over at our &lt;/span&gt;&lt;a href=&quot;https://github.com/Mozilla-Ocho/llamafile&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;GitHub repo&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
  1790. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;I hope you’ll join us. The next few months are going to be even more interesting and unexpected than the last, both for llamafile and for open source AI itself.&lt;/span&gt;&lt;/p&gt;
  1791. &lt;p&gt; &lt;/p&gt;
  1792. &lt;p&gt;The post &lt;a href=&quot;https://hacks.mozilla.org/2024/04/llamafiles-progress-four-months-in/&quot;&gt;Llamafile’s progress, four months in&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;</description>
  1793. <pubDate>Thu, 25 Apr 2024 15:34:08 +0000</pubDate>
  1794. <dc:creator>Stephen Hood</dc:creator>
  1795. </item>
  1796. <item>
  1797. <title>This Week In Rust: This Week in Rust 544</title>
  1798. <guid isPermaLink="false">tag:this-week-in-rust.org,2024-04-24:/blog/2024/04/24/this-week-in-rust-544/</guid>
  1799. <link>https://this-week-in-rust.org/blog/2024/04/24/this-week-in-rust-544/</link>
  1800. <description>&lt;p&gt;Hello and welcome to another issue of &lt;em&gt;This Week in Rust&lt;/em&gt;!
  1801. &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.
  1802. This is a weekly summary of its progress and community.
  1803. Want something mentioned? Tag us at &lt;a href=&quot;https://twitter.com/ThisWeekInRust&quot;&gt;@ThisWeekInRust&lt;/a&gt; on Twitter 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;.
  1804. Want to get involved? &lt;a href=&quot;https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md&quot;&gt;We love contributions&lt;/a&gt;.&lt;/p&gt;
  1805. &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;.
  1806. 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;
  1807. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#updates-from-rust-community&quot;&gt;Updates from Rust Community&lt;/a&gt;&lt;/h4&gt;
  1808.  
  1809.  
  1810. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#foundation&quot;&gt;Foundation&lt;/a&gt;&lt;/h5&gt;
  1811. &lt;ul&gt;
  1812. &lt;li&gt;&lt;a href=&quot;https://foundation.rust-lang.org/news/attending-cisas-open-source-software-security-summit/&quot;&gt;Guest Blog: Attending CISA’s Open Source Software Security Summit&lt;/a&gt;&lt;/li&gt;
  1813. &lt;/ul&gt;
  1814. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#newsletters&quot;&gt;Newsletters&lt;/a&gt;&lt;/h5&gt;
  1815. &lt;ul&gt;
  1816. &lt;li&gt;&lt;a href=&quot;https://rust-osdev.com/this-month/2024-03/&quot;&gt;This Month in Rust OSDev: March 2024&lt;/a&gt;&lt;/li&gt;
  1817. &lt;/ul&gt;
  1818. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#projecttooling-updates&quot;&gt;Project/Tooling Updates&lt;/a&gt;&lt;/h5&gt;
  1819. &lt;ul&gt;
  1820. &lt;li&gt;&lt;a href=&quot;https://cliffle.com/blog/lilos-1-0/&quot;&gt;lilos v1.0 released&lt;/a&gt;&lt;/li&gt;
  1821. &lt;li&gt;&lt;a href=&quot;https://medium.com/@harshiljani2002/a-parser-in-rust-to-convert-your-medium-blogs-to-markdown-84173a6c1300&quot;&gt;medium-to-markdown v0.1.1 : Convert your medium blogs easily into markdown files&lt;/a&gt;&lt;/li&gt;
  1822. &lt;li&gt;&lt;a href=&quot;https://www.fluvio.io/news/this-week-in-fluvio-0060/&quot;&gt;Fluvio v0.11.6 release and project updates&lt;/a&gt;&lt;/li&gt;
  1823. &lt;li&gt;&lt;a href=&quot;https://github.com/plabayo/venndb/releases/tag/0.4.0&quot;&gt;venndb 0.4.0 - custom validators&lt;/a&gt;&lt;/li&gt;
  1824. &lt;li&gt;&lt;a href=&quot;https://quickwit.io/blog/tantivy-0.22&quot;&gt;Tantivy 0.22: Performance improvements, new aggregations and stability fixes&lt;/a&gt;&lt;/li&gt;
  1825. &lt;li&gt;&lt;a href=&quot;https://developerlife.com/2024/04/21/build-async-interactive-cli-apps-in-rust/&quot;&gt;Announcing r3bl_terminal_async - build async interactive CLIs in Rust&lt;/a&gt;&lt;/li&gt;
  1826. &lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/watch?v=8PuWu_Pi2sk&quot;&gt;Demo + architecture overview of Ferrostar, a cross-platform turn-by-turn navigation SDK with a Rust core&lt;/a&gt;&lt;/li&gt;
  1827. &lt;/ul&gt;
  1828. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#observationsthoughts&quot;&gt;Observations/Thoughts&lt;/a&gt;&lt;/h5&gt;
  1829. &lt;ul&gt;
  1830. &lt;li&gt;&lt;a href=&quot;https://mcyoung.xyz/2024/04/17/calling-convention/&quot;&gt;The Rust Calling Convention We Deserve&lt;/a&gt;&lt;/li&gt;
  1831. &lt;li&gt;&lt;a href=&quot;https://smallcultfollowing.com/babysteps/blog/2024/04/23/dynsized-unsized/&quot;&gt;Sized, DynSized, and Unsized&lt;/a&gt;&lt;/li&gt;
  1832. &lt;li&gt;&lt;a href=&quot;https://without.boats/blog/coroutines-and-effects/&quot;&gt;Coroutines and effects&lt;/a&gt;&lt;/li&gt;
  1833. &lt;li&gt;&lt;a href=&quot;https://hacks.mozilla.org/2024/04/porting-a-cross-platform-gui-application-to-rust/&quot;&gt;Porting a cross-platform GUI application to Rust&lt;/a&gt;&lt;/li&gt;
  1834. &lt;li&gt;&lt;a href=&quot;https://blog.thunderbird.net/2024/04/adventures-in-rust-bringing-exchange-support-to-thunderbird/&quot;&gt;Adventures In Rust: Bringing Exchange Support To Thunderbird&lt;/a&gt;&lt;/li&gt;
  1835. &lt;/ul&gt;
  1836. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust-walkthroughs&quot;&gt;Rust Walkthroughs&lt;/a&gt;&lt;/h5&gt;
  1837. &lt;ul&gt;
  1838. &lt;li&gt;&lt;a href=&quot;https://bencher.dev/learn/engineering/sqlite-performance-tuning/&quot;&gt;Why SQLite Performance Tuning made Bencher 1200x Faster&lt;/a&gt;&lt;/li&gt;
  1839. &lt;li&gt;&lt;a href=&quot;https://rust.code-maven.com/drop-the-destructor-of-rust-structs&quot;&gt;drop, the destructor of Rust structs&lt;/a&gt;&lt;/li&gt;
  1840. &lt;li&gt;&lt;a href=&quot;https://www.shuttle.rs/blog/2024/04/17/using-aws-s3-rust&quot;&gt;Building with AWS S3 using Rust&lt;/a&gt;&lt;/li&gt;
  1841. &lt;li&gt;&lt;a href=&quot;https://cybernetist.com/2024/04/19/rust-tokio-task-cancellation-patterns/&quot;&gt;Rust tokio task cancellation patterns&lt;/a&gt;&lt;/li&gt;
  1842. &lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/watch?v=X5wDVaZENOo&quot;&gt;Build with Naz - Published crate r3bl_terminal_async for building async interactive CLIs in Rust&lt;/a&gt;&lt;/li&gt;
  1843. &lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/watch?v=ocacUsyJXpg&quot;&gt;Trent Billington - Bevy ECS - Power tool for data oriented applications&lt;/a&gt;&lt;/li&gt;
  1844. &lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/watch?v=BxxUPdiBjkc&quot;&gt;Building a procedural art generator&lt;/a&gt;&lt;/li&gt;
  1845. &lt;li&gt;[audio] &lt;a href=&quot;https://rustacean-station.org/episode/robert-balicki/&quot;&gt;Isograph with Robert Balicki&lt;/a&gt;&lt;/li&gt;
  1846. &lt;/ul&gt;
  1847. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#research&quot;&gt;Research&lt;/a&gt;&lt;/h5&gt;
  1848. &lt;ul&gt;
  1849. &lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2404.11671&quot;&gt;A Study of Undefined Behavior Across Foreign Function Boundaries in Rust Libraries&lt;/a&gt;&lt;/li&gt;
  1850. &lt;li&gt;&lt;a href=&quot;https://rust-digger.code-maven.com/news/biggest-crates-is-450-megabyte&quot;&gt;Rust Digger: Does size matter? The biggest crate is 450MB; More than 100 crates are over 50MB&lt;/a&gt;&lt;/li&gt;
  1851. &lt;/ul&gt;
  1852. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#miscellaneous&quot;&gt;Miscellaneous&lt;/a&gt;&lt;/h5&gt;
  1853. &lt;ul&gt;
  1854. &lt;li&gt;&lt;a href=&quot;https://dev.to/szabgab/github-sponsor-rust-developer-david-tolnay-53kc&quot;&gt;GitHub Sponsor Rust developer David Tolnay&lt;/a&gt;&lt;/li&gt;
  1855. &lt;li&gt;&lt;a href=&quot;https://app.codecrafters.io/concepts/rust-tcp-server&quot;&gt;Learn how to write TCP servers using Rust's std::net module&lt;/a&gt;&lt;/li&gt;
  1856. &lt;li&gt;&lt;a href=&quot;https://rustfest.ch/posts/2024-04-23/the-cfp-has-concluded/&quot;&gt;RustFest Zürich 🇨 Talks announced&lt;/a&gt;&lt;/li&gt;
  1857. &lt;/ul&gt;
  1858. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#crate-of-the-week&quot;&gt;Crate of the Week&lt;/a&gt;&lt;/h4&gt;
  1859. &lt;p&gt;This week's crate is &lt;a href=&quot;https://crates.io/crates/scandir&quot;&gt;scandir&lt;/a&gt;, a high-performance file tree scanner.&lt;/p&gt;
  1860. &lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/t/crate-of-the-week/2704/1305&quot;&gt;Marty B.&lt;/a&gt; for the self-suggestion!&lt;/p&gt;
  1861. &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;
  1862. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#call-for-testing&quot;&gt;Call for Testing&lt;/a&gt;&lt;/h4&gt;
  1863. &lt;p&gt;An important step for RFC implementation is for people to experiment with the
  1864. implementation and give feedback, especially before stabilization.  The following
  1865. RFCs would benefit from user testing before moving forward:&lt;/p&gt;
  1866. &lt;ul&gt;
  1867. &lt;li&gt;&lt;em&gt;No calls for testing were issued this week.&lt;/em&gt;&lt;/li&gt;
  1868. &lt;/ul&gt;
  1869. &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;
  1870. label to your RFC along with a comment providing testing instructions and/or guidance on which aspect(s) of the feature
  1871. need testing.&lt;/p&gt;
  1872. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://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;
  1873. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#cfp-projects&quot;&gt;CFP - Projects&lt;/a&gt;&lt;/h5&gt;
  1874. &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;
  1875. &lt;p&gt;Some of these tasks may also have mentors available, visit the task page for more information.&lt;/p&gt;
  1876. &lt;ul&gt;
  1877. &lt;li&gt;&lt;a href=&quot;https://github.com/TaKO8Ki/awesome-alternatives-in-rust/pull/124&quot;&gt;awesome-alternatives-in-rust - Add &lt;code&gt;dqy&lt;/code&gt; alternative to &lt;code&gt;dig&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1878. &lt;li&gt;&lt;a href=&quot;https://github.com/infinyon/fluvio/issues/3836&quot;&gt;fluvio - When a topic is deleted, connected clients should have their connection closed&lt;/a&gt;&lt;/li&gt;
  1879. &lt;li&gt;&lt;a href=&quot;https://github.com/infinyon/fluvio/issues/3825&quot;&gt;fluvio - MQTT Connector: Prefix auto generated Client ID to prevent connection drops&lt;/a&gt;&lt;/li&gt;
  1880. &lt;li&gt;&lt;a href=&quot;https://github.com/infinyon/fluvio/issues/3866&quot;&gt;fluvio - Remove localhost from fluvio in favor of 127.0.0.1&lt;/a&gt;&lt;/li&gt;
  1881. &lt;/ul&gt;
  1882. &lt;p&gt;If you are a Rust project owner and are looking for contributors, please submit tasks &lt;a href=&quot;https://users.rust-lang.org/t/twir-call-for-participation/4821&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  1883. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#cfp-speakers&quot;&gt;CFP - Speakers&lt;/a&gt;&lt;/h5&gt;
  1884. &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;
  1885. &lt;ul&gt;
  1886. &lt;li&gt;&lt;a href=&quot;https://foundation.rust-lang.org/news/the-rustconf-2024-call-for-talk-proposals-is-open/&quot;&gt;RustConf 2024&lt;/a&gt; | Closes 2024-04-25 | Montreal, Canada | Event date: 2024-09-10&lt;/li&gt;
  1887. &lt;li&gt;&lt;a href=&quot;https://sessionize.com/rustlab-2024&quot;&gt;RustLab 2024&lt;/a&gt; | Closes 2024-05-01 | Florence, Italy | Event date: 2024-11-09 - 2024-11-11&lt;/li&gt;
  1888. &lt;li&gt;&lt;a href=&quot;https://www.papercall.io/eurorust-2024&quot;&gt;EuroRust 2024&lt;/a&gt;| Closes 2024-06-03 | Vienna, Austria &amp;amp; online | Event date: 2024-10-10&lt;/li&gt;
  1889. &lt;li&gt;&lt;a href=&quot;https://scientificcomputing.rs/&quot;&gt;Scientific Computing in Rust 2024&lt;/a&gt;| Closes 2024-06-14 | online | Event date: 2024-07-17 - 2024-07-19&lt;/li&gt;
  1890. &lt;li&gt;&lt;a href=&quot;https://www.papercall.io/conf42-rustlang-2024&quot;&gt;Conf42 Rustlang 2024&lt;/a&gt; | Closes 2024-07-22 | online | Event date: 2024-08-22&lt;/li&gt;
  1891. &lt;/ul&gt;
  1892. &lt;p&gt;If you are an event organizer hoping to expand the reach of your event, please submit a link to the submission website through a &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;PR to TWiR&lt;/a&gt;.&lt;/p&gt;
  1893. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://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;
  1894. &lt;p&gt;432 pull requests were &lt;a href=&quot;https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2024-04-16..2024-04-23&quot;&gt;merged in the last week&lt;/a&gt;&lt;/p&gt;
  1895. &lt;ul&gt;
  1896. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/121801&quot;&gt;add simple async drop glue generation&lt;/a&gt;&lt;/li&gt;
  1897. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124178&quot;&gt;llvm backend: Prevent creating the same &lt;code&gt;Instance::mono&lt;/code&gt; multiple times&lt;/a&gt;&lt;/li&gt;
  1898. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123967&quot;&gt;&lt;code&gt;static_mut_refs&lt;/code&gt;: use raw pointers to remove the remaining FIXME&lt;/a&gt;&lt;/li&gt;
  1899. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122013&quot;&gt;add a lower bound check to &lt;code&gt;unicode-table-generator&lt;/code&gt; output&lt;/a&gt;&lt;/li&gt;
  1900. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123980&quot;&gt;add an opt-in to store incoming edges in &lt;code&gt;VecGraph&lt;/code&gt; + misc&lt;/a&gt;&lt;/li&gt;
  1901. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124071&quot;&gt;add llvm-bitcode-linker to build manifest&lt;/a&gt;&lt;/li&gt;
  1902. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124023&quot;&gt;allow workproducts without object files&lt;/a&gt;&lt;/li&gt;
  1903. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123949&quot;&gt;at debuginfo=0, don't inline debuginfo when inlining&lt;/a&gt;&lt;/li&gt;
  1904. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123571&quot;&gt;correctly change type when adding adjustments on top of &lt;code&gt;NeverToAny&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1905. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124053&quot;&gt;coverage: branch coverage tests for lazy boolean operators&lt;/a&gt;&lt;/li&gt;
  1906. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124217&quot;&gt;coverage: prepare for improved branch coverage&lt;/a&gt;&lt;/li&gt;
  1907. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122684&quot;&gt;delay interning errors to after validation&lt;/a&gt;&lt;/li&gt;
  1908. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123997&quot;&gt;delay span bug when &lt;code&gt;Self&lt;/code&gt; kw resolves to &lt;code&gt;DefKind::{Mod,Trait}&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1909. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123673&quot;&gt;don't ICE for kind mismatches during error rendering&lt;/a&gt;&lt;/li&gt;
  1910. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124037&quot;&gt;don't ascend into parent bodies when collecting stmts for possible return suggestion&lt;/a&gt;&lt;/li&gt;
  1911. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124066&quot;&gt;don't error on subtyping of equal types&lt;/a&gt;&lt;/li&gt;
  1912. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123935&quot;&gt;don't inline integer literals when they overflow - new attempt&lt;/a&gt;&lt;/li&gt;
  1913. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124106&quot;&gt;don't repeatedly duplicate TAIT lifetimes for each subsequently nested TAIT&lt;/a&gt;&lt;/li&gt;
  1914. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123491&quot;&gt;fix ICE in &lt;code&gt;eval_body_using_ecx&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1915. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124112&quot;&gt;fix ICE when there is a non-Unicode entry in the incremental crate directory&lt;/a&gt;&lt;/li&gt;
  1916. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124104&quot;&gt;fix capturing duplicated lifetimes via parent in &lt;code&gt;precise_captures&lt;/code&gt; (&lt;code&gt;impl use&amp;lt;'...&amp;gt;&lt;/code&gt;)&lt;/a&gt;&lt;/li&gt;
  1917. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124203&quot;&gt;fix normalizing in different &lt;code&gt;ParamEnv&lt;/code&gt;s with the same InferCtxt&lt;/a&gt;&lt;/li&gt;
  1918. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123594&quot;&gt;fix trait solver overflow with &lt;code&gt;non_local_definitions&lt;/code&gt; lint&lt;/a&gt;&lt;/li&gt;
  1919. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124198&quot;&gt;flip spans for precise capturing syntax not capturing a ty/const param, and for implicit captures of lifetime params&lt;/a&gt;&lt;/li&gt;
  1920. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124191&quot;&gt;give a name to each distinct manipulation of pretty-printer FixupContext&lt;/a&gt;&lt;/li&gt;
  1921. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/115120&quot;&gt;ignore &lt;code&gt;-C strip&lt;/code&gt; on MSVC&lt;/a&gt;&lt;/li&gt;
  1922. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123409&quot;&gt;implement Modified Condition/Decision Coverage&lt;/a&gt;&lt;/li&gt;
  1923. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/115253&quot;&gt;implement &lt;code&gt;PROBLEMATIC_CONSTS&lt;/code&gt; generalization&lt;/a&gt;&lt;/li&gt;
  1924. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123468&quot;&gt;implement syntax for &lt;code&gt;impl Trait&lt;/code&gt; to specify its captures explicitly (&lt;code&gt;feature(precise_capturing)&lt;/code&gt;)&lt;/a&gt;&lt;/li&gt;
  1925. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124252&quot;&gt;improve ICE message for forbidden dep-graph reads&lt;/a&gt;&lt;/li&gt;
  1926. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124030&quot;&gt;interpret: pass MemoryKind to &lt;code&gt;adjust_alloc_base_pointer&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1927. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124018&quot;&gt;interpret: pass MemoryKind to &lt;code&gt;before_memory_deallocation&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1928. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124113&quot;&gt;interpret: use ScalarInt for bin-ops; avoid PartialOrd for ScalarInt&lt;/a&gt;&lt;/li&gt;
  1929. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/117919&quot;&gt;introduce perma-unstable &lt;code&gt;wasm-c-abi&lt;/code&gt; flag&lt;/a&gt;&lt;/li&gt;
  1930. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124166&quot;&gt;let inherent associated types constrain opaque types during projection&lt;/a&gt;&lt;/li&gt;
  1931. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123990&quot;&gt;make &lt;code&gt;suggest_deref_closure_return&lt;/code&gt; more idiomatic/easier to understand&lt;/a&gt;&lt;/li&gt;
  1932. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123995&quot;&gt;make &lt;code&gt;thir_tree&lt;/code&gt; and &lt;code&gt;thir_flat&lt;/code&gt; into hooks&lt;/a&gt;&lt;/li&gt;
  1933. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124052&quot;&gt;make the comments for &lt;code&gt;ReturnDest&lt;/code&gt; variants doc comments&lt;/a&gt;&lt;/li&gt;
  1934. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123512&quot;&gt;match ergonomics 2024: Implement eat-one-layer&lt;/a&gt;&lt;/li&gt;
  1935. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123535&quot;&gt;match ergonomics 2024: &lt;code&gt;mut&lt;/code&gt; doesn't reset binding mode&lt;/a&gt;&lt;/li&gt;
  1936. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124137&quot;&gt;match hyphen in multi-revision comment matchers&lt;/a&gt;&lt;/li&gt;
  1937. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123998&quot;&gt;opaque types have no namespace&lt;/a&gt;&lt;/li&gt;
  1938. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124016&quot;&gt;outline default query and hook provider function implementations&lt;/a&gt;&lt;/li&gt;
  1939. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124027&quot;&gt;prefer identity equality over equating types during coercion&lt;/a&gt;&lt;/li&gt;
  1940. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123379&quot;&gt;print note with closure signature on type mismatch&lt;/a&gt;&lt;/li&gt;
  1941. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123752&quot;&gt;properly handle emojis as literal prefix in macros&lt;/a&gt;&lt;/li&gt;
  1942. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124036&quot;&gt;remove &lt;code&gt;default_hidden_visibility: false&lt;/code&gt; from wasm targets&lt;/a&gt;&lt;/li&gt;
  1943. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123859&quot;&gt;remove uneeded clones now that TrustedStep implies Copy&lt;/a&gt;&lt;/li&gt;
  1944. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123674&quot;&gt;silence some follow-up errors on trait impls in case the trait has conflicting or otherwise incoherent impls&lt;/a&gt;&lt;/li&gt;
  1945. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123537&quot;&gt;simplify shallow resolver to just fold ty/consts&lt;/a&gt;&lt;/li&gt;
  1946. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124183&quot;&gt;stop taking &lt;code&gt;ParamTy&lt;/code&gt;/&lt;code&gt;ParamConst&lt;/code&gt;/&lt;code&gt;EarlyParamRegion&lt;/code&gt;/&lt;code&gt;AliasTy&lt;/code&gt; by ref&lt;/a&gt;&lt;/li&gt;
  1947. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123979&quot;&gt;subtype predicates only exist on inference types, so we can allow them to register opaque types within them&lt;/a&gt;&lt;/li&gt;
  1948. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123930&quot;&gt;tell LLVM &lt;code&gt;Vec::len&lt;/code&gt; is invariant across growth&lt;/a&gt;&lt;/li&gt;
  1949. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124019&quot;&gt;use raw-dylib for Windows synchronization functions&lt;/a&gt;&lt;/li&gt;
  1950. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122883&quot;&gt;refactor clippy in bootstrap&lt;/a&gt;&lt;/li&gt;
  1951. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124116&quot;&gt;when suggesting &lt;code&gt;RUST_BACKTRACE=1,&lt;/code&gt; add a special note for Miri's env var isolation&lt;/a&gt;&lt;/li&gt;
  1952. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3495&quot;&gt;miri: &lt;code&gt;data_race&lt;/code&gt;: make the release/acquire API more clear&lt;/a&gt;&lt;/li&gt;
  1953. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3477&quot;&gt;miri: &lt;code&gt;no_std&lt;/code&gt; works on Windows now&lt;/a&gt;&lt;/li&gt;
  1954. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3461&quot;&gt;miri: add &lt;code&gt;localtime_r&lt;/code&gt; shim&lt;/a&gt;&lt;/li&gt;
  1955. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3475&quot;&gt;miri: address reuse improvements and fixes&lt;/a&gt;&lt;/li&gt;
  1956. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3472&quot;&gt;miri: deadlock: show backtrace for all threads&lt;/a&gt;&lt;/li&gt;
  1957. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3480&quot;&gt;miri: directly call &lt;code&gt;handle_alloc_error&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1958. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3478&quot;&gt;miri: implement support for &lt;code&gt;__rust_alloc_error_handler&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1959. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3484&quot;&gt;miri: make realloc with a size of zero fail&lt;/a&gt;&lt;/li&gt;
  1960. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3485&quot;&gt;miri: move &lt;code&gt;read_byte_slice&lt;/code&gt; to general helpers file, next to &lt;code&gt;read_c_str&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1961. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3471&quot;&gt;miri: threads: keep track of why we are blocked, and sanity-check that when waking up&lt;/a&gt;&lt;/li&gt;
  1962. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124013&quot;&gt;&lt;code&gt;Box::into_raw&lt;/code&gt;: make Miri understand that this is a box-to-raw cast&lt;/a&gt;&lt;/li&gt;
  1963. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124190&quot;&gt;&lt;code&gt;PatRangeBoundary::compare_with&lt;/code&gt;: also add a fast-path for signed integers&lt;/a&gt;&lt;/li&gt;
  1964. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123936&quot;&gt;codegen ZSTs without an allocation&lt;/a&gt;&lt;/li&gt;
  1965. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/117457&quot;&gt;stabilize Wasm target features that are in phase 4 and 5&lt;/a&gt;&lt;/li&gt;
  1966. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124049&quot;&gt;stabilize &lt;code&gt;const_io_structs&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1967. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123501&quot;&gt;stabilize checking of cfgs at compile-time: &lt;code&gt;--check-cfg&lt;/code&gt; option&lt;/a&gt;&lt;/li&gt;
  1968. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124230&quot;&gt;stabilize generic &lt;code&gt;NonZero&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1969. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124114&quot;&gt;make &lt;code&gt;checked&lt;/code&gt; ops emit &lt;em&gt;unchecked&lt;/em&gt; LLVM operations where feasible&lt;/a&gt;&lt;/li&gt;
  1970. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124103&quot;&gt;improve &lt;code&gt;std::fs::Metadata&lt;/code&gt; Debug representation&lt;/a&gt;&lt;/li&gt;
  1971. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124110&quot;&gt;fix negating &lt;code&gt;f16&lt;/code&gt; and &lt;code&gt;f128&lt;/code&gt; constants&lt;/a&gt;&lt;/li&gt;
  1972. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123406&quot;&gt;force exhaustion in &lt;code&gt;iter::ArrayChunks::into_remainder&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1973. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/115913&quot;&gt;&lt;code&gt;checked_ilog&lt;/code&gt;: improve performance&lt;/a&gt;&lt;/li&gt;
  1974. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123840&quot;&gt;add an intrinsic for &lt;code&gt;ptr::from_raw_parts(_mut)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1975. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124100&quot;&gt;fix: make &lt;code&gt;str::from_raw_parts_mut mut&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1976. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123811&quot;&gt;use queue-based &lt;code&gt;RwLock&lt;/code&gt; on more platforms&lt;/a&gt;&lt;/li&gt;
  1977. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123144&quot;&gt;add support for Arm64EC to the standard library&lt;/a&gt;&lt;/li&gt;
  1978. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustc_codegen_gcc/pull/498&quot;&gt;codegen_gcc: fix &lt;code&gt;PassMode::Indirect&lt;/code&gt; with params&lt;/a&gt;&lt;/li&gt;
  1979. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustc_codegen_gcc/pull/497&quot;&gt;codegen_gcc: fix check for main function already declared&lt;/a&gt;&lt;/li&gt;
  1980. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustc_codegen_gcc/pull/499&quot;&gt;codegen_gcc: fix panic when calling &lt;code&gt;get_fn&lt;/code&gt; for a variable&lt;/a&gt;&lt;/li&gt;
  1981. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustc_codegen_gcc/pull/493&quot;&gt;codegen_gcc: fix passing custom &lt;code&gt;CG_RUSTFLAGS&lt;/code&gt; when building sysroot&lt;/a&gt;&lt;/li&gt;
  1982. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustc_codegen_gcc/pull/500&quot;&gt;codegen_gcc: implement more type kinds&lt;/a&gt;&lt;/li&gt;
  1983. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13764&quot;&gt;cargo install: including Locking message&lt;/a&gt;&lt;/li&gt;
  1984. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13785&quot;&gt;cargo resolver: add default Edition2024 to resolver v3&lt;/a&gt;&lt;/li&gt;
  1985. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13776&quot;&gt;cargo resolver: add v3 resolver for MSRV-aware resolving&lt;/a&gt;&lt;/li&gt;
  1986. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13770&quot;&gt;cargo credential: trim newlines in tokens from stdin&lt;/a&gt;&lt;/li&gt;
  1987. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13771&quot;&gt;cargo msrv: error, rather than panic, on rust-version 'x'&lt;/a&gt;&lt;/li&gt;
  1988. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13769&quot;&gt;cargo msrv: put MSRV-aware resolver behind a config&lt;/a&gt;&lt;/li&gt;
  1989. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13780&quot;&gt;cargo toml: don't crash on parse errors that point to multi-byte character&lt;/a&gt;&lt;/li&gt;
  1990. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13775&quot;&gt;cargo toml: disallow source-less dependencies&lt;/a&gt;&lt;/li&gt;
  1991. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13747&quot;&gt;cargo toml: error on &lt;code&gt;[project]&lt;/code&gt; in Edition 2024&lt;/a&gt;&lt;/li&gt;
  1992. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13783&quot;&gt;cargo toml: report &lt;code&gt;_&lt;/code&gt;fied variants (e.g. &lt;code&gt;dev_dependencies&lt;/code&gt;) as deprecated&lt;/a&gt;&lt;/li&gt;
  1993. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13777&quot;&gt;cargo: fix 'cargo build' fails when &lt;code&gt;list_files()&lt;/code&gt; with gix is triggered&lt;/a&gt;&lt;/li&gt;
  1994. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/118441&quot;&gt;rustdoc: always display stability version even if it's the same as the containing item&lt;/a&gt;&lt;/li&gt;
  1995. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124041&quot;&gt;rustdoc: fix copy path button&lt;/a&gt;&lt;/li&gt;
  1996. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123355&quot;&gt;rustdoc: support type '/' to search&lt;/a&gt;&lt;/li&gt;
  1997. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124149&quot;&gt;rustdoc-search: fix description on aliases in results&lt;/a&gt;&lt;/li&gt;
  1998. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/119912&quot;&gt;rustdoc-search: single result for items with multiple paths&lt;/a&gt;&lt;/li&gt;
  1999. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12685&quot;&gt;clippy: &lt;code&gt;threadlocal_initializer_can_be_made_const&lt;/code&gt; will not trigger for unreachable initializers&lt;/a&gt;&lt;/li&gt;
  2000. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12692&quot;&gt;clippy: &lt;code&gt;arithmetic_side_effects&lt;/code&gt; fix false negative on &lt;code&gt;+=&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  2001. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12673&quot;&gt;clippy: &lt;code&gt;ptr_as_ptr&lt;/code&gt;: fix duplicate diagnostics&lt;/a&gt;&lt;/li&gt;
  2002. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12693&quot;&gt;clippy: emit the &lt;code&gt;needless_pass_by_ref_mut&lt;/code&gt; lint on &lt;code&gt;self&lt;/code&gt; arguments as well&lt;/a&gt;&lt;/li&gt;
  2003. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12696&quot;&gt;clippy: fix &lt;code&gt;is_test_module_or_function&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  2004. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/11852&quot;&gt;clippy: reduce &lt;code&gt;single_char_pattern&lt;/code&gt; to only lint on ascii chars&lt;/a&gt;&lt;/li&gt;
  2005. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12691&quot;&gt;clippy: rework interior mutability detection&lt;/a&gt;&lt;/li&gt;
  2006. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12682&quot;&gt;clippy: the &lt;code&gt;multiple_unsafe_ops_per_block&lt;/code&gt; test needs &lt;code&gt;asm!&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  2007. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17110&quot;&gt;rust-analyzer: cargo script mvp&lt;/a&gt;&lt;/li&gt;
  2008. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17094&quot;&gt;rust-analyzer: add convert From to TryFrom assist&lt;/a&gt;&lt;/li&gt;
  2009. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17118&quot;&gt;rust-analyzer: allow rust files to be used linkedProjects&lt;/a&gt;&lt;/li&gt;
  2010. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17093&quot;&gt;rust-analyzer: VFS should not walk circular symlinks&lt;/a&gt;&lt;/li&gt;
  2011. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17024&quot;&gt;rust-analyzer: handle escaped chars in doc comments&lt;/a&gt;&lt;/li&gt;
  2012. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17055&quot;&gt;rust-analyzer: replace Just the variable name in Unused Variable Diagnostic Fix&lt;/a&gt;&lt;/li&gt;
  2013. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/16938&quot;&gt;rust-analyzer: implement &lt;code&gt;BeginPanic&lt;/code&gt; handling in const eval&lt;/a&gt;&lt;/li&gt;
  2014. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17105&quot;&gt;rust-analyzer: make test harness arguments configurable and not &lt;code&gt;--nocapture&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  2015. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/16057&quot;&gt;rust-analyzer: render matched macro arm on hover of macro calls&lt;/a&gt;&lt;/li&gt;
  2016. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17115&quot;&gt;rust-analyzer: try to generate more meaningful names in json converter&lt;/a&gt;&lt;/li&gt;
  2017. &lt;/ul&gt;
  2018. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust-compiler-performance-triage&quot;&gt;Rust Compiler Performance Triage&lt;/a&gt;&lt;/h5&gt;
  2019. &lt;p&gt;A week dominated by small mixed changes to perf with improvements slightly outweighing regressions. There were no pure regressions, and many of the mixed perf results were deemed worth it for their potential improvements to runtime performance through further optimization from LLVM.&lt;/p&gt;
  2020. &lt;p&gt;Triage done by &lt;strong&gt;@rylev&lt;/strong&gt;.
  2021. Revision range: &lt;a href=&quot;https://perf.rust-lang.org/?start=ccfcd950b333fed046275dd8d54fe736ca498aa7&amp;amp;end=a77f76e26302e9a084fb321817675b1dfc1dcd63&amp;amp;absolute=false&amp;amp;stat=instructions%3Au&quot;&gt;ccfcd950..a77f76e2&lt;/a&gt;&lt;/p&gt;
  2022. &lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;:&lt;/p&gt;
  2023. &lt;table&gt;
  2024. &lt;thead&gt;
  2025. &lt;tr&gt;
  2026. &lt;th align=&quot;center&quot;&gt;(instructions:u)&lt;/th&gt;
  2027. &lt;th align=&quot;center&quot;&gt;mean&lt;/th&gt;
  2028. &lt;th align=&quot;center&quot;&gt;range&lt;/th&gt;
  2029. &lt;th align=&quot;center&quot;&gt;count&lt;/th&gt;
  2030. &lt;/tr&gt;
  2031. &lt;/thead&gt;
  2032. &lt;tbody&gt;
  2033. &lt;tr&gt;
  2034. &lt;td align=&quot;center&quot;&gt;Regressions ❌ &lt;br /&gt; (primary)&lt;/td&gt;
  2035. &lt;td align=&quot;center&quot;&gt;0.4%&lt;/td&gt;
  2036. &lt;td align=&quot;center&quot;&gt;[0.2%, 1.8%]&lt;/td&gt;
  2037. &lt;td align=&quot;center&quot;&gt;57&lt;/td&gt;
  2038. &lt;/tr&gt;
  2039. &lt;tr&gt;
  2040. &lt;td align=&quot;center&quot;&gt;Regressions ❌ &lt;br /&gt; (secondary)&lt;/td&gt;
  2041. &lt;td align=&quot;center&quot;&gt;0.4%&lt;/td&gt;
  2042. &lt;td align=&quot;center&quot;&gt;[0.2%, 1.9%]&lt;/td&gt;
  2043. &lt;td align=&quot;center&quot;&gt;26&lt;/td&gt;
  2044. &lt;/tr&gt;
  2045. &lt;tr&gt;
  2046. &lt;td align=&quot;center&quot;&gt;Improvements ✅ &lt;br /&gt; (primary)&lt;/td&gt;
  2047. &lt;td align=&quot;center&quot;&gt;-0.8%&lt;/td&gt;
  2048. &lt;td align=&quot;center&quot;&gt;[-3.4%, -0.2%]&lt;/td&gt;
  2049. &lt;td align=&quot;center&quot;&gt;50&lt;/td&gt;
  2050. &lt;/tr&gt;
  2051. &lt;tr&gt;
  2052. &lt;td align=&quot;center&quot;&gt;Improvements ✅ &lt;br /&gt; (secondary)&lt;/td&gt;
  2053. &lt;td align=&quot;center&quot;&gt;-0.6%&lt;/td&gt;
  2054. &lt;td align=&quot;center&quot;&gt;[-1.9%, -0.1%]&lt;/td&gt;
  2055. &lt;td align=&quot;center&quot;&gt;32&lt;/td&gt;
  2056. &lt;/tr&gt;
  2057. &lt;tr&gt;
  2058. &lt;td align=&quot;center&quot;&gt;All ❌✅ (primary)&lt;/td&gt;
  2059. &lt;td align=&quot;center&quot;&gt;-0.2%&lt;/td&gt;
  2060. &lt;td align=&quot;center&quot;&gt;[-3.4%, 1.8%]&lt;/td&gt;
  2061. &lt;td align=&quot;center&quot;&gt;107&lt;/td&gt;
  2062. &lt;/tr&gt;
  2063. &lt;/tbody&gt;
  2064. &lt;/table&gt;
  2065. &lt;p&gt;0 Regressions, 5 Improvements, 6 Mixed; 2 of them in rollups
  2066. 62 artifact comparisons made in total&lt;/p&gt;
  2067. &lt;p&gt;&lt;a href=&quot;https://github.com/rust-lang/rustc-perf/blob/e29814aa8d206406ae2711773bd882b39598a9d8/triage/2024-04-23.md&quot;&gt;Full report here&lt;/a&gt;&lt;/p&gt;
  2068. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#call-for-testing_1&quot;&gt;Call for Testing&lt;/a&gt;&lt;/h4&gt;
  2069. &lt;p&gt;An important step for RFC implementation is for people to experiment with the
  2070. implementation and give feedback, especially before stabilization.  The following
  2071. RFCs would benefit from user testing before moving forward:&lt;/p&gt;
  2072. &lt;ul&gt;
  2073. &lt;li&gt;&lt;em&gt;No calls for testing were issued this week.&lt;/em&gt;&lt;/li&gt;
  2074. &lt;/ul&gt;
  2075. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://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;
  2076. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://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;
  2077. &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;
  2078. label to your RFC along with a comment providing testing instructions and/or guidance on which aspect(s) of the feature
  2079. need testing.&lt;/p&gt;
  2080. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://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;
  2081. &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
  2082. are the RFCs that were approved for implementation this week:&lt;/p&gt;
  2083. &lt;ul&gt;
  2084. &lt;li&gt;&lt;em&gt;No RFCs were approved this week.&lt;/em&gt;&lt;/li&gt;
  2085. &lt;/ul&gt;
  2086. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#final-comment-period&quot;&gt;Final Comment Period&lt;/a&gt;&lt;/h5&gt;
  2087. &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
  2088. which are reaching a decision. Express your opinions now.&lt;/p&gt;
  2089. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rfcs_1&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/labels/final-comment-period&quot;&gt;RFCs&lt;/a&gt;&lt;/h6&gt;
  2090. &lt;ul&gt;
  2091. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3614&quot;&gt;experimental project goal program for 2024 H2&lt;/a&gt;&lt;/li&gt;
  2092. &lt;/ul&gt;
  2093. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#tracking-issues-prs&quot;&gt;Tracking Issues &amp;amp; PRs&lt;/a&gt;&lt;/h6&gt;
  2094. &lt;a class=&quot;toclink&quot; href=&quot;http://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+label%3Afinal-comment-period+sort%3Aupdated-desc&quot;&gt;Rust&lt;/a&gt;
  2095. &lt;ul&gt;
  2096. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/92750&quot;&gt;Tracking Issue for &lt;code&gt;std::path::absolute&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  2097. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/117691&quot;&gt;Tracking Issue for convenience methods on &lt;code&gt;NonNull&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  2098. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/123734&quot;&gt;Inline more svg images into CSS&lt;/a&gt;&lt;/li&gt;
  2099. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/123508&quot;&gt;Edition 2024: Make &lt;code&gt;!&lt;/code&gt; fall back to &lt;code&gt;!&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  2100. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/123060&quot;&gt;static_mut_refs: Should the lint cover hidden references?&lt;/a&gt;&lt;/li&gt;
  2101. &lt;/ul&gt;
  2102. &lt;a class=&quot;toclink&quot; href=&quot;http://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=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc&quot;&gt;Cargo&lt;/a&gt;
  2103. &lt;ul&gt;
  2104. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13713&quot;&gt;fix(toml): Warn, rather than fail publish, if a target is excluded&lt;/a&gt;&lt;/li&gt;
  2105. &lt;/ul&gt;
  2106. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://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;/h6&gt;
  2107. &lt;ul&gt;
  2108. &lt;li&gt;[new] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3614&quot;&gt;experimental project goal program for 2024 H2&lt;/a&gt;&lt;/li&gt;
  2109. &lt;/ul&gt;
  2110. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#upcoming-events&quot;&gt;Upcoming Events&lt;/a&gt;&lt;/h4&gt;
  2111. &lt;p&gt;Rusty Events between 2024-04-24 - 2024-05-22 🦀&lt;/p&gt;
  2112. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#virtual&quot;&gt;Virtual&lt;/a&gt;&lt;/h5&gt;
  2113. &lt;ul&gt;
  2114. &lt;li&gt;2024-04-24 | Virtual + In Person (Prague, CZ) | &lt;a href=&quot;https://www.meetup.com/rust-czech-republic/&quot;&gt;Rust Czech Republic&lt;/a&gt;&lt;ul&gt;
  2115. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-czech-republic/events/300388563&quot;&gt;&lt;strong&gt;#2: Making Safe Rust Safer (Pavel Šimerda)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2116. &lt;/ul&gt;
  2117. &lt;/li&gt;
  2118. &lt;li&gt;2024-04-25 | Virtual (Berlin, DE) | &lt;a href=&quot;https://berline.rs/&quot;&gt;OpenTechSchool Berlin&lt;/a&gt; + &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  2119. &lt;li&gt;&lt;a href=&quot;https://meet.jit.si/RustHackAndLearnBerlin&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt; | &lt;a href=&quot;https://www.meetup.com/rust-berlin/events/298477692/&quot;&gt;&lt;strong&gt;Mirror: Rust Hack n Learn Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2120. &lt;/ul&gt;
  2121. &lt;/li&gt;
  2122. &lt;li&gt;2024-04-30 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust/&quot;&gt;Dallas Rust&lt;/a&gt;&lt;ul&gt;
  2123. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/mvdtgtygcgbnc/&quot;&gt;&lt;strong&gt;Last Tuesday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2124. &lt;/ul&gt;
  2125. &lt;/li&gt;
  2126. &lt;li&gt;2024-05-01 | 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;
  2127. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/300325526/&quot;&gt;&lt;strong&gt;Rust for Rustaceans Book Club: Chapter 5 - Project Structure&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2128. &lt;/ul&gt;
  2129. &lt;/li&gt;
  2130. &lt;li&gt;2024-05-01 | Virtual (Indianapolis, IN, US) | &lt;a href=&quot;https://www.meetup.com/indyrs/&quot;&gt;Indy Rust&lt;/a&gt;&lt;ul&gt;
  2131. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/indyrs/events/299047895/&quot;&gt;&lt;strong&gt;Indy.rs - with Social Distancing&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2132. &lt;/ul&gt;
  2133. &lt;/li&gt;
  2134. &lt;li&gt;2024-05-02 | Virtual (Charlottesville, NC, US) | &lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/&quot;&gt;Charlottesville Rust Meetup&lt;/a&gt;&lt;ul&gt;
  2135. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/events/298368804/&quot;&gt;&lt;strong&gt;Crafting Interpreters in Rust Collaboratively&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2136. &lt;/ul&gt;
  2137. &lt;/li&gt;
  2138. &lt;li&gt;2024-05-07 | Virtual (Buffalo, NY) | &lt;a href=&quot;https://www.meetup.com/buffalo-rust-meetup/&quot;&gt;Buffalo Rust Meetup&lt;/a&gt;&lt;ul&gt;
  2139. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/buffalo-rust-meetup/events/300100279/&quot;&gt;&lt;strong&gt;Buffalo Rust User Group&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2140. &lt;/ul&gt;
  2141. &lt;/li&gt;
  2142. &lt;li&gt;2024-05-09 | Virtual (Berlin, DE) | &lt;a href=&quot;https://berline.rs/&quot;&gt;OpenTechSchool Berlin&lt;/a&gt; + &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  2143. &lt;li&gt;&lt;a href=&quot;https://meet.jit.si/RustHackAndLearnBerlin&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt; | &lt;a href=&quot;https://www.meetup.com/rust-berlin/events/298477697/&quot;&gt;&lt;strong&gt;Mirror: Rust Hack n Learn Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2144. &lt;/ul&gt;
  2145. &lt;/li&gt;
  2146. &lt;li&gt;2024-05-09 | Virtual (Israel) | &lt;a href=&quot;https://rust.org.il/&quot;&gt;Rust in Israel&lt;/a&gt;&lt;ul&gt;
  2147. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/code-mavens/events/300144781/&quot;&gt;&lt;strong&gt;Rust at Microsoft, Tel Aviv - Are we embedded yet?&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2148. &lt;/ul&gt;
  2149. &lt;/li&gt;
  2150. &lt;li&gt;2024-05-09 | Virtual (Nuremberg/Nürnberg, DE) | &lt;a href=&quot;https://www.meetup.com/rust-noris/&quot;&gt;Rust Nuremberg&lt;/a&gt;&lt;ul&gt;
  2151. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-noris/events/297945257/&quot;&gt;&lt;strong&gt;Rust Nürnberg online&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2152. &lt;/ul&gt;
  2153. &lt;/li&gt;
  2154. &lt;li&gt;2024-05-14 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust/&quot;&gt;Dallas Rust&lt;/a&gt;&lt;ul&gt;
  2155. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/298341699/&quot;&gt;&lt;strong&gt;Second Tuesday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2156. &lt;/ul&gt;
  2157. &lt;/li&gt;
  2158. &lt;li&gt;2024-05-14 | Virtual (Halifax, NS, CA) | &lt;a href=&quot;https://www.meetup.com/rust-tell-halifax/&quot;&gt;Rust Halifax&lt;/a&gt;&lt;ul&gt;
  2159. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-tell-halifax/events/300437775/&quot;&gt;&lt;strong&gt;Rust&amp;amp;Tell - Halifax&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2160. &lt;/ul&gt;
  2161. &lt;/li&gt;
  2162. &lt;li&gt;2024-05-14 | Virtual + In-Person (München/Munich, DE) | &lt;a href=&quot;https://www.meetup.com/rust-munich/&quot;&gt;Rust Munich&lt;/a&gt;&lt;ul&gt;
  2163. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-munich/events/298507657/&quot;&gt;&lt;strong&gt;Rust Munich 2024 / 1 - hybrid (Rescheduled)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2164. &lt;/ul&gt;
  2165. &lt;/li&gt;
  2166. &lt;li&gt;2024-05-15 | Virtual (Vancouver, BC, CA) | &lt;a href=&quot;https://www.meetup.com/vancouver-rust/&quot;&gt;Vancouver Rust&lt;/a&gt;&lt;ul&gt;
  2167. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/vancouver-rust/events/298542323/&quot;&gt;&lt;strong&gt;Rust Study/Hack/Hang-out&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2168. &lt;/ul&gt;
  2169. &lt;/li&gt;
  2170. &lt;li&gt;2024-05-16 | 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;
  2171. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/events/298312423/&quot;&gt;&lt;strong&gt;Crafting Interpreters in Rust Collaboratively&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2172. &lt;/ul&gt;
  2173. &lt;/li&gt;
  2174. &lt;li&gt;2024-05-21 | Virtual (Washington, DC, US) | &lt;a href=&quot;https://www.meetup.com/rustdc/&quot;&gt;Rust DC&lt;/a&gt;&lt;ul&gt;
  2175. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rustdc/events/299346490/&quot;&gt;&lt;strong&gt;Mid-month Rustful—forensic parsing via Artemis&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2176. &lt;/ul&gt;
  2177. &lt;/li&gt;
  2178. &lt;/ul&gt;
  2179. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#africa&quot;&gt;Africa&lt;/a&gt;&lt;/h5&gt;
  2180. &lt;ul&gt;
  2181. &lt;li&gt;2024-05-04 | Kampala, UG | &lt;a href=&quot;https://www.eventbrite.com/o/rust-circle-kampala-65249289033&quot;&gt;Rust Circle Kampala&lt;/a&gt;&lt;ul&gt;
  2182. &lt;li&gt;&lt;a href=&quot;https://www.eventbrite.com/e/rust-circle-meetup-tickets-628763176587?aff=ebdsoporgprofile&quot;&gt;&lt;strong&gt;Rust Circle Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2183. &lt;/ul&gt;
  2184. &lt;/li&gt;
  2185. &lt;/ul&gt;
  2186. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#asia&quot;&gt;Asia&lt;/a&gt;&lt;/h5&gt;
  2187. &lt;ul&gt;
  2188. &lt;li&gt;2024-05-11 | Bangalore, IN | &lt;a href=&quot;https://hasgeek.com/rustbangalore&quot;&gt;Rust Bangalore&lt;/a&gt;&lt;ul&gt;
  2189. &lt;li&gt;&lt;a href=&quot;https://hasgeek.com/rustbangalore/may-2024-rustacean-meetup/&quot;&gt;&lt;strong&gt;May 2024 Rustacean meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2190. &lt;/ul&gt;
  2191. &lt;/li&gt;
  2192. &lt;/ul&gt;
  2193. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#europe&quot;&gt;Europe&lt;/a&gt;&lt;/h5&gt;
  2194. &lt;ul&gt;
  2195. &lt;li&gt;2024-04-24 | Virtual + In Person (Prague, CZ) | &lt;a href=&quot;https://www.meetup.com/rust-czech-republic/&quot;&gt;Rust Czech Republic&lt;/a&gt;&lt;ul&gt;
  2196. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-czech-republic/events/300388563&quot;&gt;&lt;strong&gt;#2: Making Safe Rust Safer (Pavel Šimerda)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2197. &lt;/ul&gt;
  2198. &lt;/li&gt;
  2199. &lt;li&gt;2024-04-25 | Aarhus, DK | &lt;a href=&quot;https://www.meetup.com/rust-aarhus/&quot;&gt;Rust Aarhus&lt;/a&gt;&lt;ul&gt;
  2200. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-aarhus/events/299564517/&quot;&gt;&lt;strong&gt;Talk Night at MFT Energy&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2201. &lt;/ul&gt;
  2202. &lt;/li&gt;
  2203. &lt;li&gt;2024-04-25 | Berlin, DE | &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  2204. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-berlin/events/299288960/&quot;&gt;&lt;strong&gt;Rust and Tell - TBD&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2205. &lt;/ul&gt;
  2206. &lt;/li&gt;
  2207. &lt;li&gt;2024-04-25 | København/Copenhagen, DK | &lt;a href=&quot;https://www.meetup.com/copenhagen-rust-community/&quot;&gt;Copenhagen Rust Community&lt;/a&gt;&lt;ul&gt;
  2208. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/copenhagen-rust-community/events/300458178/&quot;&gt;&lt;strong&gt;Rust meetup #46 sponsored by Nine A/S&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2209. &lt;/ul&gt;
  2210. &lt;/li&gt;
  2211. &lt;li&gt;2024-04-25 | Vienna, AT | &lt;a href=&quot;https://www.meetup.com/rust-vienna/&quot;&gt;Rust Vienna&lt;/a&gt;&lt;ul&gt;
  2212. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-vienna/events/300389154/&quot;&gt;&lt;strong&gt;Rust Vienna x Python User Group - April&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2213. &lt;/ul&gt;
  2214. &lt;/li&gt;
  2215. &lt;li&gt;2024-04-27 | Basel, CH | &lt;a href=&quot;https://www.meetup.com/rust-basel/&quot;&gt;Rust Basel&lt;/a&gt;&lt;ul&gt;
  2216. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-basel/events/299933581/&quot;&gt;&lt;strong&gt;Fullstack Rust - Workshop #2 (Register by 23 April)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2217. &lt;/ul&gt;
  2218. &lt;/li&gt;
  2219. &lt;li&gt;2024-04-27 | Stockholm, SE | &lt;a href=&quot;https://www.meetup.com/stockholm-rust/&quot;&gt;Stockholm Rust&lt;/a&gt;&lt;ul&gt;
  2220. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/stockholm-rust/events/300369409&quot;&gt;&lt;strong&gt;Ferris' Fika Forum #2&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2221. &lt;/ul&gt;
  2222. &lt;/li&gt;
  2223. &lt;li&gt;2024-04-30 | Budapest, HU | &lt;a href=&quot;https://www.meetup.com/budapest-rust-meetup-group/&quot;&gt;Budapest Rust Meetup Group&lt;/a&gt;&lt;ul&gt;
  2224. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/budapest-rust-meetup-group/events/300269044/&quot;&gt;&lt;strong&gt;Rust Meetup Budapest 2&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2225. &lt;/ul&gt;
  2226. &lt;/li&gt;
  2227. &lt;li&gt;2024-04-30 | Salzburg, AT | Rust Salzburg&lt;ul&gt;
  2228. &lt;li&gt;[&lt;strong&gt;Rust Salzburg meetup&lt;/strong&gt;]: 6:30pm - CCC Salzburg, 1. OG, ArgeKultur, Ulrike-Gschwandtner-Straße 5, 5020 Salzburg&lt;/li&gt;
  2229. &lt;/ul&gt;
  2230. &lt;/li&gt;
  2231. &lt;li&gt;2024-05-01 | Köln/Cologne, DE | &lt;a href=&quot;https://www.meetup.com/rustcologne/&quot;&gt;Rust Cologne&lt;/a&gt;&lt;ul&gt;
  2232. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rustcologne/events/300610856/&quot;&gt;&lt;strong&gt;This Month in Rust, May&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2233. &lt;/ul&gt;
  2234. &lt;/li&gt;
  2235. &lt;li&gt;2024-05-01 | Utrecht, NL | &lt;a href=&quot;https://nl-rse.org/events/2024-05-01-meetup&quot;&gt;NL-RSE Community&lt;/a&gt;&lt;ul&gt;
  2236. &lt;li&gt;&lt;a href=&quot;https://www.eventbrite.nl/e/nl-rse-rust-meetup-tickets-871056271757&quot;&gt;&lt;strong&gt;NL-RSE RUST meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2237. &lt;/ul&gt;
  2238. &lt;/li&gt;
  2239. &lt;li&gt;2024-05-06 | Delft, NL | &lt;a href=&quot;https://www.gosim.org/&quot;&gt;GOSIM&lt;/a&gt;&lt;ul&gt;
  2240. &lt;li&gt;&lt;a href=&quot;https://europe2024.gosim.org/&quot;&gt;&lt;strong&gt;GOSIM Europe 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2241. &lt;/ul&gt;
  2242. &lt;/li&gt;
  2243. &lt;li&gt;2024-05-07 &amp;amp; 2024-05-08 | Delft, NL | &lt;a href=&quot;https://rustnl.org/&quot;&gt;RustNL&lt;/a&gt;&lt;ul&gt;
  2244. &lt;li&gt;&lt;a href=&quot;https://2024.rustnl.org/&quot;&gt;&lt;strong&gt;RustNL 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2245. &lt;/ul&gt;
  2246. &lt;/li&gt;
  2247. &lt;li&gt;2024-05-08 | Cambridge, UK | &lt;a href=&quot;https://www.meetup.com/cambridge-rust-meetup/&quot;&gt;Cambridge Rust Meetup&lt;/a&gt;&lt;ul&gt;
  2248. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/cambridge-rust-meetup/events/300573716/&quot;&gt;&lt;strong&gt;Monthly Rust Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2249. &lt;/ul&gt;
  2250. &lt;/li&gt;
  2251. &lt;li&gt;2024-05-09 | Gdańsk, PL | &lt;a href=&quot;https://www.meetup.com/rust-gdansk/&quot;&gt;Rust Gdansk&lt;/a&gt;&lt;ul&gt;
  2252. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-gdansk/events/299766774/&quot;&gt;&lt;strong&gt;Rust Gdansk Meetup #2&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2253. &lt;/ul&gt;
  2254. &lt;/li&gt;
  2255. &lt;li&gt;2024-05-14 | Virtual + In-Person (München/Munich, DE) | &lt;a href=&quot;https://www.meetup.com/rust-munich/&quot;&gt;Rust Munich&lt;/a&gt;&lt;ul&gt;
  2256. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-munich/events/298507657/&quot;&gt;&lt;strong&gt;Rust Munich 2024 / 1 - hybrid (Rescheduled)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2257. &lt;/ul&gt;
  2258. &lt;/li&gt;
  2259. &lt;li&gt;2024-05-14 | Prague, CZ | &lt;a href=&quot;https://www.meetup.com/rust-prague/&quot;&gt;Rust Prague&lt;/a&gt;&lt;ul&gt;
  2260. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-prague/events/300566374/&quot;&gt;&lt;strong&gt;Rust Meetup Prague (May 2024)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2261. &lt;/ul&gt;
  2262. &lt;/li&gt;
  2263. &lt;li&gt;2024-05-21 | Aarhus, DK | &lt;a href=&quot;https://www.meetup.com/rust-aarhus/&quot;&gt;Rust Aarhus&lt;/a&gt;&lt;ul&gt;
  2264. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-aarhus/events/300307155/&quot;&gt;&lt;strong&gt;Hack Night&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2265. &lt;/ul&gt;
  2266. &lt;/li&gt;
  2267. &lt;li&gt;2024-05-21 | Zurich, CH | &lt;a href=&quot;https://www.meetup.com/rust-zurich/&quot;&gt;Rust Zurich&lt;/a&gt;&lt;ul&gt;
  2268. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-zurich/events/300513957/&quot;&gt;&lt;strong&gt;Save the date - Mai Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2269. &lt;/ul&gt;
  2270. &lt;/li&gt;
  2271. &lt;/ul&gt;
  2272. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#north-america&quot;&gt;North America&lt;/a&gt;&lt;/h5&gt;
  2273. &lt;ul&gt;
  2274. &lt;li&gt;2024-04-24 | Austin, TX, US | &lt;a href=&quot;https://www.meetup.com/rust-atx/&quot;&gt;Rust ATX&lt;/a&gt;&lt;ul&gt;
  2275. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-atx/events/299960315/&quot;&gt;&lt;strong&gt;Rust Lunch - Fareground&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2276. &lt;/ul&gt;
  2277. &lt;/li&gt;
  2278. &lt;li&gt;2024-04-25 | Nashville, TN, US | &lt;a href=&quot;https://www.meetup.com/music-city-rust-developers/&quot;&gt;Music City Rust Developers&lt;/a&gt;&lt;ul&gt;
  2279. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/music-city-rust-developers/events/299976876/&quot;&gt;&lt;strong&gt;Music City Rust Developers - Async Rust on Embedded&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2280. &lt;/ul&gt;
  2281. &lt;/li&gt;
  2282. &lt;li&gt;2024-04-26 | Boston, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
  2283. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/300116689/&quot;&gt;&lt;strong&gt;North End Rust Lunch, Apr 26&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2284. &lt;/ul&gt;
  2285. &lt;/li&gt;
  2286. &lt;li&gt;2024-05-04 | Cambridge, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
  2287. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/300116701/&quot;&gt;&lt;strong&gt;Kendall Rust Lunch, May 4&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2288. &lt;/ul&gt;
  2289. &lt;/li&gt;
  2290. &lt;li&gt;2024-05-09 | Spokane, WA, US | &lt;a href=&quot;https://www.meetup.com/spokane-rust/&quot;&gt;Spokane Rust&lt;/a&gt;&lt;ul&gt;
  2291. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/spokane-rust/events/300020003/&quot;&gt;&lt;strong&gt;Monthly Meetup: Topic TBD!&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2292. &lt;/ul&gt;
  2293. &lt;/li&gt;
  2294. &lt;li&gt;2024-05-12 | Brookline, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
  2295. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/300116747/&quot;&gt;&lt;strong&gt;Coolidge Corner Brookline Rust Lunch, May 12&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2296. &lt;/ul&gt;
  2297. &lt;/li&gt;
  2298. &lt;li&gt;2024-05-16 | Seattle, WA, US | &lt;a href=&quot;https://www.meetup.com/seattle-rust-user-group/&quot;&gt;Seattle Rust User Group&lt;/a&gt;&lt;ul&gt;
  2299. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/seattle-rust-user-group/events/299509369/&quot;&gt;&lt;strong&gt;Seattle Rust User Group Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2300. &lt;/ul&gt;
  2301. &lt;/li&gt;
  2302. &lt;li&gt;2024-05-20 | Somerville, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
  2303. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/300116765/&quot;&gt;&lt;strong&gt;Ball Square Rust Lunch, May 20&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2304. &lt;/ul&gt;
  2305. &lt;/li&gt;
  2306. &lt;li&gt;2024-05-21 | 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;
  2307. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/san-francisco-rust-study-group/events/299186931/&quot;&gt;&lt;strong&gt;Rust Hacking in Person&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2308. &lt;/ul&gt;
  2309. &lt;/li&gt;
  2310. &lt;li&gt;2024-05-22 | Austin, TX, US | &lt;a href=&quot;https://www.meetup.com/rust-atx/&quot;&gt;Rust ATX&lt;/a&gt;&lt;ul&gt;
  2311. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-atx/events/xvkdgtygchbdc/&quot;&gt;&lt;strong&gt;Rust Lunch - Fareground&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2312. &lt;/ul&gt;
  2313. &lt;/li&gt;
  2314. &lt;/ul&gt;
  2315. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#oceania&quot;&gt;Oceania&lt;/a&gt;&lt;/h5&gt;
  2316. &lt;ul&gt;
  2317. &lt;li&gt;2024-04-30 | Auckland, NZ | &lt;a href=&quot;https://www.meetup.com/rust-akl/&quot;&gt;Rust AKL&lt;/a&gt;&lt;ul&gt;
  2318. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-akl/events/300304958/&quot;&gt;&lt;strong&gt;Rust AKL: Why Rust? Convince Me!&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2319. &lt;/ul&gt;
  2320. &lt;/li&gt;
  2321. &lt;li&gt;2024-04-30 | Canberra, ACT, AU | &lt;a href=&quot;https://www.meetup.com/rust-canberra/&quot;&gt;Canberra Rust User Group&lt;/a&gt;&lt;ul&gt;
  2322. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-canberra/events/300023000/&quot;&gt;&lt;strong&gt;CRUG April Meetup: Generics and Traits&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2323. &lt;/ul&gt;
  2324. &lt;/li&gt;
  2325. &lt;/ul&gt;
  2326. &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
  2327. it mentioned here. Please remember to add a link to the event too.
  2328. 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;
  2329. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#jobs&quot;&gt;Jobs&lt;/a&gt;&lt;/h4&gt;
  2330.  
  2331.  
  2332. &lt;p&gt;Please see the latest &lt;a href=&quot;https://www.reddit.com/r/rust/comments/1bpg8b8/official_rrust_whos_hiring_thread_for_jobseekers/&quot;&gt;Who's Hiring thread on r/rust&lt;/a&gt;&lt;/p&gt;
  2333. &lt;h3&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#quote-of-the-week&quot;&gt;Quote of the Week&lt;/a&gt;&lt;/h3&gt;
  2334. &lt;blockquote&gt;
  2335. &lt;p&gt;The learning curve for Rust is relatively steep compared to other languages, but once you climb it you'll never look down.&lt;/p&gt;
  2336. &lt;/blockquote&gt;
  2337. &lt;p&gt;– &lt;a href=&quot;https://hachyderm.io/@bd103/112318610927827520&quot;&gt;BD103 on Mastodon&lt;/a&gt;&lt;/p&gt;
  2338. &lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/t/twir-quote-of-the-week/328/1563&quot;&gt;BD103&lt;/a&gt; for the self-suggestion!&lt;/p&gt;
  2339. &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;
  2340. &lt;p&gt;&lt;em&gt;This Week in Rust is edited by: &lt;a href=&quot;https://github.com/nellshamrell&quot;&gt;nellshamrell&lt;/a&gt;, &lt;a href=&quot;https://github.com/llogiq&quot;&gt;llogiq&lt;/a&gt;, &lt;a href=&quot;https://github.com/cdmistman&quot;&gt;cdmistman&lt;/a&gt;, &lt;a href=&quot;https://github.com/ericseppanen&quot;&gt;ericseppanen&lt;/a&gt;, &lt;a href=&quot;https://github.com/extrawurst&quot;&gt;extrawurst&lt;/a&gt;, &lt;a href=&quot;https://github.com/andrewpollack&quot;&gt;andrewpollack&lt;/a&gt;, &lt;a href=&quot;https://github.com/U007D&quot;&gt;U007D&lt;/a&gt;, &lt;a href=&quot;https://github.com/kolharsam&quot;&gt;kolharsam&lt;/a&gt;, &lt;a href=&quot;https://github.com/joelmarcey&quot;&gt;joelmarcey&lt;/a&gt;, &lt;a href=&quot;https://github.com/mariannegoldin&quot;&gt;mariannegoldin&lt;/a&gt;, &lt;a href=&quot;https://github.com/bennyvasquez&quot;&gt;bennyvasquez&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
  2341. &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;
  2342. &lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://www.reddit.com/r/rust/comments/1ccwpku/this_week_in_rust_544/&quot;&gt;Discuss on r/rust&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;</description>
  2343. <pubDate>Wed, 24 Apr 2024 04:00:00 +0000</pubDate>
  2344. <dc:creator>TWiR Contributors</dc:creator>
  2345. </item>
  2346. <item>
  2347. <title>Niko Matsakis: Sized, DynSized, and Unsized</title>
  2348. <guid isPermaLink="false">https://smallcultfollowing.com/babysteps/blog/2024/04/23/dynsized-unsized/</guid>
  2349. <link>https://smallcultfollowing.com/babysteps/blog/2024/04/23/dynsized-unsized/?utm_source=atom_feed</link>
  2350. <description>&lt;p&gt;&lt;a href=&quot;https://rust-lang.github.io/rfcs/1861-extern-types.html&quot;&gt;Extern types&lt;/a&gt; have been blocked for an unreasonably long time on a fairly narrow, specialized question: Rust today divides all types into two categories — &lt;em&gt;sized&lt;/em&gt;, whose size can be statically computed, and &lt;em&gt;unsized&lt;/em&gt;, whose size can only be computed at runtime. But for external types what we really want is a &lt;em&gt;third category&lt;/em&gt;, types whose size can never be known, even at runtime (in C, you can model this by defining structs with an unknown set of fields). The problem is that Rust’s &lt;code&gt;?Sized&lt;/code&gt; notation does not naturally scale to this third case. I think it’s time we fixed this. At some point I read a proposal — I no longer remember where — that seems like the obvious way forward and which I think is a win on several levels. So I thought I would take a bit of time to float the idea again, explain the tradeoffs I see with it, and explain why I think the idea is a good change.&lt;/p&gt;
  2351. &lt;h3&gt;TL;DR: write &lt;code&gt;T: Unsized&lt;/code&gt; in place of &lt;code&gt;T: ?Sized&lt;/code&gt; (and sometimes &lt;code&gt;T: DynSized&lt;/code&gt;)&lt;/h3&gt;
  2352. &lt;p&gt;The basic idea is to deprecate the &lt;code&gt;?Sized&lt;/code&gt; notation and instead have a family of &lt;code&gt;Sized&lt;/code&gt; supertraits. As today, the default is that every type parameter &lt;code&gt;T&lt;/code&gt; gets a &lt;code&gt;T: Sized&lt;/code&gt; bound unless the user explicitly chooses one of the other supertraits:&lt;/p&gt;
  2353. &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;sd&quot;&gt;/// Types whose size is known at compilation time (statically).
  2354. &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;sd&quot;&gt;/// Implemented by (e.g.) `u32`. References to `Sized` types
  2355. &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;sd&quot;&gt;/// are &quot;thin pointers&quot; -- just a pointer.
  2356. &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;sd&quot;&gt;&lt;/span&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;nb&quot;&gt;Sized&lt;/span&gt;: &lt;span class=&quot;nc&quot;&gt;DynSized&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;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2357. &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;
  2358. &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;sd&quot;&gt;/// Types whose size can be computed at runtime (dynamically).
  2359. &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;sd&quot;&gt;/// Implemented by (e.g.) `[u32]` or `dyn Trait`.
  2360. &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;sd&quot;&gt;/// References to these types are &quot;wide pointers&quot;,
  2361. &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;sd&quot;&gt;/// with the extra metadata making it possible to compute the size
  2362. &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;sd&quot;&gt;/// at runtime.
  2363. &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;sd&quot;&gt;&lt;/span&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;DynSized&lt;/span&gt;: &lt;span class=&quot;nc&quot;&gt;Unsized&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;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2364. &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;
  2365. &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;sd&quot;&gt;/// Types that may not have a knowable size at all (either statically or dynamically).
  2366. &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;sd&quot;&gt;/// All types implement this, but extern types **only** implement this.
  2367. &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;sd&quot;&gt;&lt;/span&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;Unsized&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;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2368. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Under this proposal, &lt;code&gt;T: ?Sized&lt;/code&gt; notation could be converted to &lt;code&gt;T: DynSized&lt;/code&gt; or &lt;code&gt;T: Unsized&lt;/code&gt;. &lt;code&gt;T: DynSized&lt;/code&gt; matches the current semantics precisely, but &lt;code&gt;T: Unsized&lt;/code&gt; is probably what most uses actually want. This is because most users of &lt;code&gt;T: ?Sized&lt;/code&gt; never compute the size of &lt;code&gt;T&lt;/code&gt; but rather just refer to existing values of &lt;code&gt;T&lt;/code&gt; by pointer.&lt;/p&gt;
  2369. &lt;h4&gt;Credit where credit is due?&lt;/h4&gt;
  2370. &lt;p&gt;For the record, this design is not my idea, but I’m not sure where I saw it. I would appreciate a link so I can properly give credit.&lt;/p&gt;
  2371. &lt;h3&gt;Why do we have a default &lt;code&gt;T: Sized&lt;/code&gt; bound in the first place?&lt;/h3&gt;
  2372. &lt;p&gt;It’s natural to wonder why we have this &lt;code&gt;T: Sized&lt;/code&gt; default in the first place. The short version is that Rust would be very annoying to use without it. If the compiler doesn’t know the size of a value at compilation time, it cannot (at least, cannot easily) generate code to do a number of common things, such as store a value of type &lt;code&gt;T&lt;/code&gt; on the stack or have structs with fields of type &lt;code&gt;T&lt;/code&gt;. This means that a very large fraction of generic type parameters would wind up with &lt;code&gt;T: Sized&lt;/code&gt;.&lt;/p&gt;
  2373. &lt;h3&gt;So why the &lt;code&gt;?Sized&lt;/code&gt; notation?&lt;/h3&gt;
  2374. &lt;p&gt;The &lt;code&gt;?Sized&lt;/code&gt; notation was the result of a lot of discussion. It satisfied a number of criteria.&lt;/p&gt;
  2375. &lt;h4&gt;&lt;code&gt;?&lt;/code&gt; signals that the bound operates in reverse&lt;/h4&gt;
  2376. &lt;p&gt;The &lt;code&gt;?&lt;/code&gt; is meant to signal that a bound like &lt;code&gt;?Sized&lt;/code&gt; actually works in &lt;strong&gt;reverse&lt;/strong&gt; from a normal bound. When you have &lt;code&gt;T: Clone&lt;/code&gt;, you are saying “type &lt;code&gt;T&lt;/code&gt; &lt;strong&gt;must&lt;/strong&gt; implement &lt;code&gt;Clone&lt;/code&gt;”. So you are &lt;strong&gt;narrowing&lt;/strong&gt; the set of types that &lt;code&gt;T&lt;/code&gt; could be: before, it could have been both types that implement &lt;code&gt;Clone&lt;/code&gt; and those that do not. After, it can &lt;em&gt;only&lt;/em&gt; be types that implement &lt;code&gt;Clone&lt;/code&gt;. &lt;code&gt;T: ?Sized&lt;/code&gt; does the reverse: before, it can &lt;strong&gt;only&lt;/strong&gt; be types that implement &lt;code&gt;Sized&lt;/code&gt; (like &lt;code&gt;u32&lt;/code&gt;), but after, it can &lt;strong&gt;also&lt;/strong&gt; be types that do not (like &lt;code&gt;[u32]&lt;/code&gt; or &lt;code&gt;dyn Debug&lt;/code&gt;). Hence the &lt;code&gt;?&lt;/code&gt;, which can be read as “maybe” — i.e., &lt;code&gt;T&lt;/code&gt; is “maybe” Sized.&lt;/p&gt;
  2377. &lt;h4&gt;&lt;code&gt;?&lt;/code&gt; can be extended to other default bounds&lt;/h4&gt;
  2378. &lt;p&gt;The &lt;code&gt;?&lt;/code&gt; notation also scales to other default traits. Although we’ve been reluctant to exercise this ability, we wanted to leave room to add a new default bound. This power will be needed if we ever adopt &lt;a href=&quot;https://smallcultfollowing.com/babysteps/blog/2023/03/16/must-move-types/&quot;&gt;“must move” types&lt;/a&gt;&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fn:1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; or add a bound like &lt;code&gt;?Leak&lt;/code&gt; to signal a value that cannot be leaked.&lt;/p&gt;
  2379. &lt;h3&gt;But &lt;code&gt;?&lt;/code&gt; doesn’t scale well to “differences in degree”&lt;/h3&gt;
  2380. &lt;p&gt;When we debated the &lt;code&gt;?&lt;/code&gt; notation, we thought a lot about extensibility to other &lt;em&gt;orthogonal&lt;/em&gt; defaults (like &lt;code&gt;?Leak&lt;/code&gt;), but we didn’t consider extending a single dimension (like &lt;code&gt;Sized&lt;/code&gt;) to multiple levels. There is no theoretical challenge. In principle we could say…&lt;/p&gt;
  2381. &lt;ul&gt;
  2382. &lt;li&gt;&lt;code&gt;T&lt;/code&gt; means &lt;code&gt;T: Sized + DynSized&lt;/code&gt;&lt;/li&gt;
  2383. &lt;li&gt;&lt;code&gt;T: ?Sized&lt;/code&gt; drops the &lt;code&gt;Sized&lt;/code&gt; default, leaving &lt;code&gt;T: DynSized&lt;/code&gt;&lt;/li&gt;
  2384. &lt;li&gt;&lt;code&gt;T: ?DynSized&lt;/code&gt; drops both, leaving any type &lt;code&gt;T&lt;/code&gt;&lt;/li&gt;
  2385. &lt;/ul&gt;
  2386. &lt;p&gt;…but I personally find that very confusing. To me, saying something “might be statically sized” does not signify that it &lt;em&gt;is&lt;/em&gt; dynamically sized.&lt;/p&gt;
  2387. &lt;h3&gt;And &lt;code&gt;?&lt;/code&gt; looks “more magical” than it needs to&lt;/h3&gt;
  2388. &lt;p&gt;Despite knowing that &lt;code&gt;T: ?Sized&lt;/code&gt; operates in reverse, I find that in practice it still &lt;em&gt;feels&lt;/em&gt; very much like other bounds. Just like &lt;code&gt;T: Debug&lt;/code&gt; gives the function the extra capability of generating debug info, &lt;code&gt;T: ?Sized&lt;/code&gt; feels to me like it gives the function an extra capability: the ability to be used on unsized types. This logic is specious, these are different kinds of capabilities, but, as I said, it’s how I find myself thinking about it.&lt;/p&gt;
  2389. &lt;p&gt;Moreover, even though I know that &lt;code&gt;T: ?Sized&lt;/code&gt; “most properly” means “a type that may or may not be Sized”, I find it wind up &lt;em&gt;thinking&lt;/em&gt; about it as “a type that is unsized”, just as I think about &lt;code&gt;T: Debug&lt;/code&gt; as a “type that is &lt;code&gt;Debug&lt;/code&gt;”. Why is that? Well, beacuse &lt;code&gt;?Sized&lt;/code&gt; types &lt;em&gt;may&lt;/em&gt; be unsized, I have to treat them as if they &lt;em&gt;are&lt;/em&gt; unsized – i.e., refer to them only by pointer. So the fact that they &lt;em&gt;might&lt;/em&gt; also be sized isn’t very relevant.&lt;/p&gt;
  2390. &lt;h3&gt;How would we use these new traits?&lt;/h3&gt;
  2391. &lt;p&gt;So if we adopted the “family of sized traits” proposal, how would we use it? Well, for starters, the &lt;code&gt;size_of&lt;/code&gt; methods would no longer be defined as &lt;code&gt;T&lt;/code&gt; and &lt;code&gt;T: ?Sized&lt;/code&gt;…&lt;/p&gt;
  2392. &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;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;size_of&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;-&amp;gt; &lt;span class=&quot;kt&quot;&gt;usize&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2393. &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;size_of_val&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;?&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Sized&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;n&quot;&gt;t&lt;/span&gt;: &lt;span class=&quot;kp&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-&amp;gt; &lt;span class=&quot;kt&quot;&gt;usize&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2394. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;… but instead as &lt;code&gt;T&lt;/code&gt; and &lt;code&gt;T: DynSized&lt;/code&gt; …&lt;/p&gt;
  2395. &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;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;size_of&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;-&amp;gt; &lt;span class=&quot;kt&quot;&gt;usize&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2396. &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;size_of_val&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;DynSized&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;n&quot;&gt;t&lt;/span&gt;: &lt;span class=&quot;kp&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-&amp;gt; &lt;span class=&quot;kt&quot;&gt;usize&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2397. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That said, most uses of &lt;code&gt;?Sized&lt;/code&gt; today do not need to compute the size of the value, and would be better translated to &lt;code&gt;Unsized&lt;/code&gt;…&lt;/p&gt;
  2398. &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;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;Unsized&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;Debug&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;o&quot;&gt;&amp;amp;&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;
  2399. &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;fmt&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;n&quot;&gt;f&lt;/span&gt;: &lt;span class=&quot;kp&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;mut&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;n&quot;&gt;fmt&lt;/span&gt;::&lt;span class=&quot;n&quot;&gt;Formatter&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;'_&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 class=&quot;o&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;
  2400. &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;
  2401. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3&gt;Option: Defaults could also be disabled by supertraits?&lt;/h3&gt;
  2402. &lt;p&gt;As an interesting extension to today’s system, we could say that every type parameter &lt;code&gt;T&lt;/code&gt; gets an implicit &lt;code&gt;Sized&lt;/code&gt; bound unless either…&lt;/p&gt;
  2403. &lt;ol&gt;
  2404. &lt;li&gt;There is an explicit weaker alternative(like &lt;code&gt;T: DynSized&lt;/code&gt; or &lt;code&gt;T: Unsized&lt;/code&gt;);&lt;/li&gt;
  2405. &lt;li&gt;Or some other bound &lt;code&gt;T: Trait&lt;/code&gt; has an explicit supertrait &lt;code&gt;DynSized&lt;/code&gt; or &lt;code&gt;Unsized&lt;/code&gt;.&lt;/li&gt;
  2406. &lt;/ol&gt;
  2407. &lt;p&gt;This would clarify that trait aliases can be used to disable the &lt;code&gt;Sized&lt;/code&gt; default. For example, today, one might create a &lt;code&gt;Value&lt;/code&gt; trait is equivalent to &lt;code&gt;Debug + Hash + Org&lt;/code&gt;, roughly like this:&lt;/p&gt;
  2408. &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;Value&lt;/span&gt;: &lt;span class=&quot;nc&quot;&gt;Debug&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;Hash&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;nb&quot;&gt;Ord&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;
  2409. &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;// Note that `Self` is the *only* type parameter that does NOT get `Sized` by default
  2410. &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;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2411. &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;
  2412. &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;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;?&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Sized&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;Debug&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;Hash&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;nb&quot;&gt;Ord&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;Value&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;
  2413. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;But what if, in your particular data structure, all values are boxed and hence can be unsized. Today, you have to repeat &lt;code&gt;?Sized&lt;/code&gt; everywhere:&lt;/p&gt;
  2414. &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;Tree&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;V&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Sized&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;Value&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;
  2415. &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;Box&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;V&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;
  2416. &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;children&lt;/span&gt;: &lt;span class=&quot;nb&quot;&gt;Vec&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Tree&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;o&quot;&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;
  2417. &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;
  2418. &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;
  2419. &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;impl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;V&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Sized&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;Value&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;Tree&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;V&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 class=&quot;err&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;
  2420. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;With this proposal, the &lt;em&gt;explicit&lt;/em&gt; &lt;code&gt;Unsized&lt;/code&gt; bound could be signaled on the trait:&lt;/p&gt;
  2421. &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;Value&lt;/span&gt;: &lt;span class=&quot;nc&quot;&gt;Debug&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;Hash&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;nb&quot;&gt;Ord&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;Unsized&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;
  2422. &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;// Note that `Self` is the *only* type parameter that does NOT get `Sized` by default
  2423. &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;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2424. &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;
  2425. &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;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;Unsized&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;Debug&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;Hash&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;nb&quot;&gt;Ord&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;Value&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;
  2426. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;which would mean that&lt;/p&gt;
  2427. &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;Tree&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;V&lt;/span&gt;: &lt;span class=&quot;nc&quot;&gt;Value&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 class=&quot;err&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;
  2428. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;would imply &lt;code&gt;V: Unsized&lt;/code&gt;.&lt;/p&gt;
  2429. &lt;h3&gt;Alternatives&lt;/h3&gt;
  2430. &lt;h4&gt;Different names&lt;/h4&gt;
  2431. &lt;p&gt;The name of the &lt;code&gt;Unsized&lt;/code&gt; trait in particular is a bit odd. It means “you can treat this type as unsized”, which is true of all types, but it &lt;em&gt;sounds&lt;/em&gt; like the type is &lt;em&gt;definitely&lt;/em&gt; unsized. I’m open to alternative names, but I haven’t come up with one I like yet. Here are some alternatives and the problems with them I see:&lt;/p&gt;
  2432. &lt;ul&gt;
  2433. &lt;li&gt;&lt;code&gt;Unsizeable&lt;/code&gt; — doesn’t meet our typical name conventions, has overlap with the &lt;code&gt;Unsize&lt;/code&gt; trait&lt;/li&gt;
  2434. &lt;li&gt;&lt;code&gt;NoSize&lt;/code&gt;, &lt;code&gt;UnknownSize&lt;/code&gt; — same general problem as &lt;code&gt;Unsize&lt;/code&gt;&lt;/li&gt;
  2435. &lt;li&gt;&lt;code&gt;ByPointer&lt;/code&gt; — in some ways, I kind of like this, because it says “you can work with this type by pointer”, which is clearly true of all types. But it doesn’t align well with the existing &lt;code&gt;Sized&lt;/code&gt; trait — what would we call that, &lt;code&gt;ByValue&lt;/code&gt;? And it seems too tied to today’s limitations: there are, after all, ways that we can make &lt;code&gt;DynSized&lt;/code&gt; types work by value, at least in some places.&lt;/li&gt;
  2436. &lt;li&gt;&lt;code&gt;MaybeSized&lt;/code&gt; — just seems awkward, and should it be &lt;code&gt;MaybeDynSized&lt;/code&gt;?&lt;/li&gt;
  2437. &lt;/ul&gt;
  2438. &lt;p&gt;All told, I think &lt;code&gt;Unsized&lt;/code&gt; is the best name. It’s a &lt;em&gt;bit&lt;/em&gt; wrong, but I think you can understand it, and to me it fits the intuition I have, which is that I mark type parameters as &lt;code&gt;Unsized&lt;/code&gt; and then I tend to just think of them as being unsized (since I have to).&lt;/p&gt;
  2439. &lt;h4&gt;Some sigil&lt;/h4&gt;
  2440. &lt;p&gt;Under this proposal, the &lt;code&gt;DynSized&lt;/code&gt; and &lt;code&gt;Unsized&lt;/code&gt; traits are “magic” in that explicitly declaring them as a bound has the impact of disabling a default &lt;code&gt;T: Sized&lt;/code&gt; bound. We could signify that in their names by having their name be prefixed with some sort of sigil. I’m not really sure what that sigil would be — &lt;code&gt;T: %Unsized&lt;/code&gt;? &lt;code&gt;T: ?Unsized&lt;/code&gt;? It all seems unnecessary.&lt;/p&gt;
  2441. &lt;h4&gt;Drop the implicit bound altogether&lt;/h4&gt;
  2442. &lt;p&gt;The purist in me is tempted to question whether we need the default bound. Maybe in Rust 2027 we should try to drop it altogether. Then people could write&lt;/p&gt;
  2443. &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;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;size_of&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;Sized&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;-&amp;gt; &lt;span class=&quot;kt&quot;&gt;usize&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2444. &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;size_of_val&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;DynSized&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;n&quot;&gt;t&lt;/span&gt;: &lt;span class=&quot;kp&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-&amp;gt; &lt;span class=&quot;kt&quot;&gt;usize&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2445. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and&lt;/p&gt;
  2446. &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;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;Debug&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;o&quot;&gt;&amp;amp;&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;
  2447. &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;fmt&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;n&quot;&gt;f&lt;/span&gt;: &lt;span class=&quot;kp&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;mut&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;n&quot;&gt;fmt&lt;/span&gt;::&lt;span class=&quot;n&quot;&gt;Formatter&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;'_&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 class=&quot;o&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;
  2448. &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;
  2449. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Of course, it would also mean a lot of &lt;code&gt;Sized&lt;/code&gt; bounds cropping up in surprising places. Beyond random functions, consider that every associated type today has a default &lt;code&gt;Sized&lt;/code&gt; bound, so you would need&lt;/p&gt;
  2450. &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;nb&quot;&gt;Iterator&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;
  2451. &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;type&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Item&lt;/span&gt;: &lt;span class=&quot;nb&quot;&gt;Sized&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2452. &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;
  2453. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Overall, I doubt this idea is worth it. Not surprising: it was deemed too annoying before, and now it has the added problem of being hugely disruptive.&lt;/p&gt;
  2454. &lt;h3&gt;Conclusion&lt;/h3&gt;
  2455. &lt;p&gt;I’ve covered a design to move away from &lt;code&gt;?Sized&lt;/code&gt; bounds and towards specialized traits. There are avrious “pros and cons” to this proposal but one aspect in particular feels common to this question and many others: when do you make two “similar but different” concepts feel very different — e.g., via special syntax like &lt;code&gt;T: ?Sized&lt;/code&gt; — and when do you make them feel very similar — e.g., via the idea of “special traits” where a bound like &lt;code&gt;T: Unsized&lt;/code&gt; has extra meaning (disabling defaults).&lt;/p&gt;
  2456. &lt;p&gt;There is a definite trade-off here. Distinct syntax help avoid potential confusion, but it forces people to recognize that something special is going on even when that may not be relevant or important to them. This can deter folks early on, when they are most “deter-able”. I think it can also contribute to a general sense of “big-ness” that makes it feel like understanding the entire language is harder.&lt;/p&gt;
  2457. &lt;p&gt;Over time, I’ve started to believe that it’s generally better to make things feel similar, letting people push off the time at which they have to learn a new concept. In this case, this lessens my fears around the idea that &lt;code&gt;Unsized&lt;/code&gt; and &lt;code&gt;DynSized&lt;/code&gt; traits would be confusing because they behave differently than other traits. In this particular case, I also feel that &lt;code&gt;?Sized&lt;/code&gt; doesn’t “scale well” to default bounds where you want to pick from one of many options, so it’s kind of the worst of both worlds – distinct syntax that shouts at you but which &lt;em&gt;also&lt;/em&gt; fails to add clarity.&lt;/p&gt;
  2458. &lt;p&gt;Ultimately, though, I’m not wedded to this idea, but I am interested in kicking off a discussion of how we can unblock &lt;a href=&quot;https://rust-lang.github.io/rfcs/1861-extern-types.html&quot;&gt;extern types&lt;/a&gt;. I think by now we’ve no doubt covered the space pretty well and we should pick a direction and go for it (or else just give up on &lt;a href=&quot;https://rust-lang.github.io/rfcs/1861-extern-types.html&quot;&gt;extern types&lt;/a&gt;).&lt;/p&gt;
  2459. &lt;div class=&quot;footnotes&quot;&gt;
  2460. &lt;hr /&gt;
  2461. &lt;ol&gt;
  2462. &lt;li id=&quot;fn:1&quot;&gt;
  2463. &lt;p&gt;I still think &lt;a href=&quot;https://smallcultfollowing.com/babysteps/blog/2023/03/16/must-move-types/&quot;&gt;“must move” types&lt;/a&gt; are a good idea — but that’s a topic for another post. &lt;a class=&quot;footnote-backref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fnref:1&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
  2464. &lt;/li&gt;
  2465. &lt;/ol&gt;
  2466. &lt;/div&gt;</description>
  2467. <pubDate>Tue, 23 Apr 2024 20:51:54 +0000</pubDate>
  2468. </item>
  2469. <item>
  2470. <title>Hacks.Mozilla.Org: Porting a cross-platform GUI application to Rust</title>
  2471. <guid isPermaLink="false">https://hacks.mozilla.org/?p=48127</guid>
  2472. <link>https://hacks.mozilla.org/2024/04/porting-a-cross-platform-gui-application-to-rust/</link>
  2473. <description>&lt;p&gt;Firefox’s crash reporter is hopefully not something that most users experience often. However, it is still a very important component of Firefox, as it is integral in providing insight into the most visible bugs: those which crash the main process. These bugs offer the worst user experience (since the entire application must close), so fixing them is a very high priority. Other types of crashes, such as content (tab) crashes, can be handled by the browser and reported gracefully, sometimes without the user being aware that an issue occurred at all. But when the main browser process comes to a halt, we need another separate application to gather information about the crash and interact with the user.&lt;/p&gt;
  2474. &lt;p&gt;This post details the approach we have taken to rewrite the crash reporter in Rust. We discuss the reasoning behind this rewrite, what makes the crash reporter a unique application, the architecture we used, and some details of the implementation.&lt;/p&gt;
  2475. &lt;h3&gt;Why Rewrite?&lt;/h3&gt;
  2476. &lt;p&gt;Even though it is important to properly handle main process crashes, the crash reporter hasn’t received significant development in a while (aside from development to ensure that crash reports and telemetry continue to reliably be delivered)! It has long been stuck in a local maximum of “good enough” and “scary to maintain”: it features 3 individual GUI implementations (for Windows, GTK+ for Linux, and macOS), glue code abstracting a few things (mostly in C++, and Objective-C for macOS), a binary blob produced by obsoleted Apple development tools, and no test suite. Because of this, there is a backlog of features and improvements which haven’t been acted on.&lt;/p&gt;
  2477. &lt;p&gt;We’ve recently had a number of successful pushes to decrease crash rates (including both &lt;a href=&quot;https://hacks.mozilla.org/2022/11/improving-firefox-stability-with-this-one-weird-trick/&quot;&gt;big leaps&lt;/a&gt; and many small bug fixes), and the crash reporter has functioned well enough for our needs during this time. However, we’ve reached an inflection point where improving the crash reporter would provide valuable insight to enable us to decrease the crash rate even further. For the reasons previously mentioned, improving the current codebase is difficult and error-prone, so we deemed it appropriate to rewrite the application so we can more easily act on the feature backlog and improve crash reports.&lt;/p&gt;
  2478. &lt;p&gt;Like many components of Firefox, we decided to use Rust for this rewrite to produce a more reliable and maintainable program. Besides the often-touted memory safety built into Rust, its type system and standard library make reasoning about code, handling errors, and developing cross-platform applications far more robust and comprehensive.&lt;/p&gt;
  2479. &lt;h3&gt;Crash Reporting is an Edge Case&lt;/h3&gt;
  2480. &lt;p&gt;There are a number of features of the crash reporter which make it quite unique, especially compared to other components which have been ported to Rust. For one thing, it is a standalone, individual program; basically no other components of Firefox are used in this way. Firefox itself launches many processes as a means of sandboxing and insulating against crashes, however these processes all talk to one another and have access to the same code base.&lt;/p&gt;
  2481. &lt;p&gt;The crash reporter has a very unique requirement: it must use as &lt;i&gt;little as possible &lt;/i&gt;of the Firefox code base, ideally none! We don’t want it to rely on code which may be buggy and cause the reporter itself to crash. Using a completely independent implementation ensures that when a main process crash does occur, the cause of that crash won’t affect the reporter’s functionality as well.&lt;/p&gt;
  2482. &lt;p&gt;The crash reporter also necessarily has a GUI. This alone may not separate it from other Firefox components, but we can’t leverage any of the cross-platform rendering goodness that Firefox provides! So we need to implement a cross-platform GUI independent of Firefox as well. You might think we could reach for an existing cross-platform GUI crate, however we have a few reasons not to do so.&lt;/p&gt;
  2483. &lt;ul&gt;
  2484. &lt;li&gt;We want to minimize the use of external code: to improve crash reporter reliability (which is paramount), we want it to be as simple and auditable as possible.&lt;/li&gt;
  2485. &lt;li&gt;Firefox vendors all dependencies in-tree, so we are hesitant to bring in large dependencies (GUI libraries are likely pretty sizable).&lt;/li&gt;
  2486. &lt;li&gt;There are only a few third-party crates that provide a native OS look and feel (or actually &lt;i&gt;use&lt;/i&gt; native GUI APIs): it’s desirable for the crash reporter to have a native feel to be familiar to users and take advantage of accessibility features.&lt;/li&gt;
  2487. &lt;/ul&gt;
  2488. &lt;p&gt;So all of this is to say that third-party cross-platform GUI libraries aren’t a favorable option.&lt;/p&gt;
  2489. &lt;p&gt;These requirements significantly narrow the approach that can be used.&lt;/p&gt;
  2490. &lt;h3&gt;Building a GUI View Abstraction&lt;/h3&gt;
  2491. &lt;p&gt;In order to make the crash reporter more maintainable (and make it easier to add new features in the future), we want to have as minimal and generic platform-specific code as possible. We can achieve this by using a simple UI model that can be converted into native GUI code for each platform. Each UI implementation will need to provide two methods (over arbitrary platform-specific &lt;tt&gt;&amp;amp;self&lt;/tt&gt; data):&lt;/p&gt;
  2492. &lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;/// Run a UI loop, displaying all windows of the application until it terminates.
  2493. fn run_loop(&amp;amp;self, app: model::Application)
  2494.  
  2495. /// Invoke a function asynchronously on the UI loop thread.
  2496. fn invoke(&amp;amp;self, f: model::InvokeFn)
  2497. &lt;/code&gt;&lt;/pre&gt;
  2498. &lt;p&gt;The &lt;tt&gt;run_loop&lt;/tt&gt; function is pretty self-explanatory: the UI implementation takes an &lt;tt&gt;Application&lt;/tt&gt; model (which we’ll discuss shortly) and runs the application, &lt;i&gt;blocking&lt;/i&gt; until the application is complete. Conveniently, our target platforms generally have similar assumptions around threading: the UI runs in a single thread and typically runs an event loop which blocks on new events until an event signaling the end of the application is received.&lt;/p&gt;
  2499. &lt;p&gt;There are some cases where we’ll need to run a function on the UI thread asynchronously (like displaying a window, updating a text field, etc). Since &lt;tt&gt;run_loop&lt;/tt&gt; blocks, we need the &lt;tt&gt;invoke&lt;/tt&gt; method to define how to do this. This threading model will make it easy to use the platform GUI frameworks: everything calling native functions will occur on a single thread (the main thread in fact) for the duration of the program.&lt;/p&gt;
  2500. &lt;p&gt;This is a good time to be a bit more specific about exactly what each UI implementation will look like. We’ll discuss pain points for each later on. There are 4 UI implementations:&lt;/p&gt;
  2501. &lt;ul&gt;
  2502. &lt;li&gt;A Windows implementation using the Win32 API.&lt;/li&gt;
  2503. &lt;li&gt;A macOS implementation using Cocoa (AppKit and Foundation frameworks).&lt;/li&gt;
  2504. &lt;li&gt;A Linux implementation using GTK+ 3 (the “+” has since been dropped in GTK 4, so henceforth I’ll refer to it as “GTK”). Linux doesn’t provide its own GUI primitives, and we already ship GTK with Firefox on Linux to make a modern-feeling GUI, so we can use it for the crash reporter, too. Note that some platforms that aren’t directly supported by Mozilla (like BSDs) use the GTK implementation as well.&lt;/li&gt;
  2505. &lt;li&gt;A testing implementation which will allow tests to hook into a virtual UI and poke things (to simulate interactions and read state).&lt;/li&gt;
  2506. &lt;/ul&gt;
  2507. &lt;p&gt;One last detail before we dive in: the crash reporter (at least right now) has a pretty simple GUI. Because of this, an explicit &lt;b&gt;non-goal&lt;/b&gt; of the development was to create a separate Rust GUI crate. We wanted to create just enough of an abstraction to cover the cases we needed in the crash reporter. If we need more controls in the future, we can add them to the abstraction, but we avoided spending extra cycles to fill out every GUI use case.&lt;/p&gt;
  2508. &lt;p&gt;Likewise, we tried to avoid unnecessary development by allowing some tolerance for hacks and built-in edge cases. For example, our model defines a &lt;tt&gt;Button&lt;/tt&gt; as an element which contains an arbitrary element, but actually supporting that with Win32 or AppKit would have required a lot of custom code, so we special case on a &lt;tt&gt;Button&lt;/tt&gt; containing a &lt;tt&gt;Label&lt;/tt&gt; (which is all we need right now, and an easy primitive available to us). I’m happy to say there aren’t really &lt;i&gt;many&lt;/i&gt; special cases like that at all, but we are comfortable with the few that were needed.&lt;/p&gt;
  2509. &lt;h4&gt;The UI Model&lt;/h4&gt;
  2510. &lt;p&gt;Our model is a declarative structuring of concepts mostly present in GTK. Since GTK is a mature library with proven high-level UI concepts, this made it appropriate for our abstraction and made the GTK implementation pretty simple. For instance, the simplest way that GTK does layout (using container GUI elements and per-element margins/alignments) is good enough for our GUI, so we use similar definitions in the model. Notably, this “simple” layout definition is actually somewhat high-level and complicates the macOS and Windows implementations a bit (but this tradeoff is worth the ease of creating UI models).&lt;/p&gt;
  2511. &lt;p&gt;The top-level type of our UI model is &lt;tt&gt;Application&lt;/tt&gt;. This is pretty simple: we define an &lt;tt&gt;Application&lt;/tt&gt; as a set of top-level &lt;tt&gt;Window&lt;/tt&gt;s (though our application only has one) and whether the current locale is &lt;a href=&quot;https://en.wikipedia.org/wiki/Right-to-left_script&quot;&gt;right-to-left&lt;/a&gt;. We inspect Firefox resources to use the same locale that Firefox would, so we don’t rely on the native GUI’s locale settings.&lt;/p&gt;
  2512. &lt;p&gt;As you might expect, each &lt;tt&gt;Window&lt;/tt&gt; contains a single root element. The rest of the model is made up of a handful of typical container and primitive GUI elements:&lt;/p&gt;
  2513. &lt;p&gt;&lt;img alt=&quot;A class diagram showing the inheritance structure. An Application contains one or more Windows. A Window contains one Element. An Element is subclassed to Checkbox, Label, Progress, TextBox, Button, Scroll, HBox, and VBox types.&quot; class=&quot;aligncenter wp-image-48128 size-full&quot; height=&quot;421&quot; src=&quot;https://hacks.mozilla.org/wp-content/uploads/2024/03/class_diagram.png&quot; width=&quot;389&quot; /&gt;&lt;/p&gt;
  2514. &lt;p&gt;The crash reporter only needs 8 types of GUI elements! And really, &lt;tt&gt;Progress&lt;/tt&gt; is used as a spinner rather than indicating any real progress as of right now, so it’s not strictly necessary (but nice to show).&lt;/p&gt;
  2515. &lt;p&gt;Rust does not explicitly support the object-oriented concept of inheritance, so you might be wondering how each GUI element “extends” &lt;tt&gt;Element&lt;/tt&gt;. The relationship represented in the picture is somewhat abstract; the implemented &lt;tt&gt;Element&lt;/tt&gt; looks like:&lt;/p&gt;
  2516. &lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;pub struct Element {
  2517.    pub style: ElementStyle,
  2518.    pub element_type: ElementType
  2519. }
  2520. &lt;/code&gt;&lt;/pre&gt;
  2521. &lt;p&gt;where &lt;tt&gt;ElementStyle&lt;/tt&gt; contains all the common properties of elements (alignment, size, margin, visibility, and enabled state), and &lt;tt&gt;ElementType&lt;/tt&gt; is an &lt;tt&gt;enum&lt;/tt&gt; containing each of the specific GUI elements as variants.&lt;/p&gt;
  2522. &lt;h5&gt;Building the Model&lt;/h5&gt;
  2523. &lt;p&gt;The model elements are all intended to be consumed by the UI implementations; as such, almost all of the fields have public visibility. However, as a means of having a separate interface for &lt;i&gt;building&lt;/i&gt; elements, we define an &lt;tt&gt;ElementBuilder&amp;lt;T&amp;gt;&lt;/tt&gt; type. This type has methods that maintain assertions and provide convenience setters. For instance, many methods accept parameters that are &lt;tt&gt;impl Into&amp;lt;MemberType&amp;gt;&lt;/tt&gt;, some methods like &lt;tt&gt;margin()&lt;/tt&gt; set multiple values (but you can be more specific with &lt;tt&gt;margin_top()&lt;/tt&gt;), etc.&lt;/p&gt;
  2524. &lt;p&gt;There is a general &lt;tt&gt;impl&amp;lt;T&amp;gt; ElementBuilder&amp;lt;T&amp;gt;&lt;/tt&gt; which provides setters for the various &lt;tt&gt;ElementStyle&lt;/tt&gt; properties, and then each specific element type can also provide their own &lt;tt&gt;impl ElementBuilder&amp;lt;SpecificElement&amp;gt;&lt;/tt&gt; with additional properties unique to the element type.&lt;/p&gt;
  2525. &lt;p&gt;We combine &lt;tt&gt;ElementBuilder&amp;lt;T&amp;gt;&lt;/tt&gt; with the final piece of the puzzle: a &lt;tt&gt;ui!&lt;/tt&gt; macro. This macro allows us to write our UI in a declarative manner. For example, it allows us to write:&lt;/p&gt;
  2526. &lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;let details_window = ui! {
  2527.    Window title(&quot;Crash Details&quot;) visible(show_details) modal(true) hsize(600) vsize(400)
  2528.         halign(Alignment::Fill) valign(Alignment::Fill)
  2529.    {
  2530.         VBox margin(10) spacing(10) halign(Alignment::Fill) valign(Alignment::Fill) {
  2531.             Scroll halign(Alignment::Fill) valign(Alignment::Fill) {
  2532.                 TextBox content(details) halign(Alignment::Fill) valign(Alignment::Fill)
  2533.             },
  2534.             Button halign(Alignment::End) on_click(move || *show_details.borrow_mut() = false)
  2535.             {
  2536.                 Label text(&quot;Ok&quot;)
  2537.             }
  2538.         }
  2539.     }
  2540. };
  2541. &lt;/code&gt;&lt;/pre&gt;
  2542. &lt;p&gt;The implementation of &lt;tt&gt;ui!&lt;/tt&gt; is fairly simple. The first identifier provides the element type and an &lt;tt&gt;ElementBuilder&amp;lt;T&amp;gt;&lt;/tt&gt; is created. After that, the remaining method-call-like syntax forms are called on the builder (which is mutable).&lt;/p&gt;
  2543. &lt;p&gt;Optionally, a final set of curly braces indicate that the element has children. In that case, the macro is recursively called to create them, and &lt;tt&gt;add_child&lt;/tt&gt; is called on the builder with the result (so we just need to make sure a builder has an &lt;tt&gt;add_child&lt;/tt&gt; method). Ultimately the syntax transformation is pretty simple, but I believe that this macro is a little bit more than &lt;i&gt;just&lt;/i&gt; syntax sugar: it makes reading and editing the UI a fair bit clearer, since the hierarchy of elements is represented in the syntax. Unfortunately a downside is that there’s no way to support automatic formatting of such macro DSLs, so developers will need to maintain a sane formatting.&lt;/p&gt;
  2544. &lt;p&gt;So now we have a model defined and a declarative way of building it. But we haven’t discussed any dynamic runtime behaviors here. In the above example, we see an &lt;tt&gt;on_click&lt;/tt&gt; handler being set on a &lt;tt&gt;Button&lt;/tt&gt;. We also see things like the &lt;tt&gt;Window&lt;/tt&gt;’s &lt;tt&gt;visible&lt;/tt&gt; property being set to a &lt;tt&gt;show_details&lt;/tt&gt; value which is changed when &lt;tt&gt;on_click&lt;/tt&gt; is pressed. We hook into this declarative UI to change or react to events at runtime using a set of simple data binding primitives with which UI implementations can interact.&lt;/p&gt;
  2545. &lt;div style=&quot;background-color: lightgrey;&quot;&gt;
  2546. &lt;p&gt;&lt;i&gt;Many&lt;/i&gt; GUI frameworks nowadays (both for Rust and other languages) have been built with the “diffing element trees” architecture (think &lt;a href=&quot;https://react.dev/&quot;&gt;React&lt;/a&gt;), where your code is (at least mostly) functional and side-effect-free and produces the GUI view as a function of the current state. This approach has its tradeoffs: for instance, it makes complicated, stateful alterations of the layout very simple to write, understand, and maintain, and encourages a clean separation of model and view! However since we &lt;i&gt;aren’t&lt;/i&gt; writing a framework, and our application is and will remain fairly simple, the benefits of such an architecture were not worth the additional development burden. Our implementation is more similar to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel&quot;&gt;MVVM architecture&lt;/a&gt;:&lt;/p&gt;
  2547. &lt;ul&gt;
  2548. &lt;li&gt;the model is, well, the model discussed here;&lt;/li&gt;
  2549. &lt;li&gt;the views are the various UI implementations; and&lt;/li&gt;
  2550. &lt;li&gt;the viewmodel is (loosely, if you squint) the collection of data bindings.&lt;/li&gt;
  2551. &lt;/ul&gt;
  2552. &lt;/div&gt;
  2553. &lt;h4&gt;Data Binding&lt;/h4&gt;
  2554. &lt;p&gt;There are a few types which we use to declare dynamic (runtime-changeable) values. In our UI, we needed to support a few different behaviors:&lt;/p&gt;
  2555. &lt;ul&gt;
  2556. &lt;li&gt;triggering &lt;b&gt;events&lt;/b&gt;, i.e., what happens when a button is clicked,&lt;/li&gt;
  2557. &lt;li&gt;&lt;b&gt;synchronized&lt;/b&gt; values which will mirror and notify of changes to all clones, and&lt;/li&gt;
  2558. &lt;li&gt;&lt;b&gt;on-demand&lt;/b&gt; values which can be queried for the current value.&lt;/li&gt;
  2559. &lt;/ul&gt;
  2560. &lt;div style=&quot;background-color: lightgrey;&quot;&gt;
  2561. &lt;p&gt;On-demand values are used to get textbox contents rather than using a synchronized value, in an effort to avoid implementing debouncing in each UI. It may not be terribly difficult to do so, but it also wasn’t difficult to support the on-demand implementation.&lt;/p&gt;
  2562. &lt;/div&gt;
  2563. &lt;p&gt;As a means of convenience, we created a &lt;tt&gt;Property&lt;/tt&gt; type which encompasses the value-oriented fields as well. A &lt;tt&gt;Property&amp;lt;T&amp;gt;&lt;/tt&gt; can be set to either a static value (&lt;tt&gt;T&lt;/tt&gt;), a synchronized value (&lt;tt&gt;Synchronized&amp;lt;T&amp;gt;&lt;/tt&gt;), or an on-demand value (&lt;tt&gt;OnDemand&amp;lt;T&amp;gt;&lt;/tt&gt;). It supports an &lt;tt&gt;impl From&lt;/tt&gt; for each of these, so that builder methods can look like &lt;tt&gt;fn my_method(&amp;amp;mut self, value: impl Into&amp;lt;Property&amp;lt;T&amp;gt;&amp;gt;)&lt;/tt&gt; allowing any supported value to be passed in a UI declaration.&lt;/p&gt;
  2564. &lt;p&gt;We won’t discuss the implementation in depth (&lt;a href=&quot;https://searchfox.org/mozilla-central/rev/47a0a01e1f7ad0451c6ba6c790d5c6855df512c1/toolkit/crashreporter/client/app/src/data.rs&quot;&gt;it’s what you’d expect&lt;/a&gt;), but it’s worth noting that these are all &lt;tt&gt;Clone&lt;/tt&gt; to easily share the data bindings: they use &lt;tt&gt;Rc&lt;/tt&gt; (we don’t need thread safety) and &lt;tt&gt;RefCell&lt;/tt&gt; as necessary to access callbacks.&lt;/p&gt;
  2565. &lt;p&gt;In the example from the last section, &lt;tt&gt;show_details&lt;/tt&gt; is a &lt;tt&gt;Synchronized&amp;lt;bool&amp;gt;&lt;/tt&gt; value. When it changes, the UI implementations change the associated window visibility. The &lt;tt&gt;Button&lt;/tt&gt; &lt;tt&gt;on_click&lt;/tt&gt; callback sets the synchronized value to false, hiding the window (note that the details window used in this example is never closed, it is just shown and hidden).&lt;/p&gt;
  2566. &lt;div style=&quot;background-color: lightgrey;&quot;&gt;
  2567. &lt;p&gt;In a former iteration, data binding types had a lifetime parameter which specified the lifetime for which event callbacks were valid. While we were able to make this work, it greatly complicated the code, especially because there’s no way to communicate the correct covariance of the lifetime to the compiler, so there was additional &lt;tt&gt;unsafe&lt;/tt&gt; code transmuting lifetimes (though it was contained as an implementation detail). These lifetimes were also infectious, requiring some of the complicated semantics regarding their safety to be propagated into the model types which stored &lt;tt&gt;Property&lt;/tt&gt; fields.&lt;/p&gt;
  2568. &lt;p&gt;Much of this was to avoid cloning values into the callbacks, but changing these types to all be &lt;tt&gt;Clone&lt;/tt&gt; and store static-lifetime callbacks was worth making the code far more maintainable.&lt;/p&gt;
  2569. &lt;/div&gt;
  2570. &lt;h5&gt;Threading and Thread Safety&lt;/h5&gt;
  2571. &lt;p&gt;The careful reader might remember that we discussed how our threading model involves interacting with the UI implementations &lt;em&gt;only&lt;/em&gt; on the main thread. This includes updating the data bindings, since the UI implementations might have registered callbacks on them! While we &lt;i&gt;could&lt;/i&gt; run everything in the main thread, it’s generally a much better experience to do as much off of the UI thread as possible, even if we don’t do much that’s blocking (though we will be blocking when we send crash reports). We want our business logic to default to being off of the main thread so that the UI doesn’t ever freeze. We can guarantee this with some careful design.&lt;/p&gt;
  2572. &lt;p&gt;The simplest way to guarantee this behavior is to put all of the business logic in one (non-&lt;tt&gt;Clone&lt;/tt&gt;, non-&lt;tt&gt;Sync&lt;/tt&gt;) type (let’s call it &lt;tt&gt;Logic&lt;/tt&gt;) and construct the UI and UI state (like &lt;tt&gt;Property&lt;/tt&gt; values) in another type (let’s call it &lt;tt&gt;UI&lt;/tt&gt;). We can then &lt;i&gt;move&lt;/i&gt; the &lt;tt&gt;Logic&lt;/tt&gt; value into a separate thread to guarantee that &lt;tt&gt;UI&lt;/tt&gt; can’t interact with &lt;tt&gt;Logic&lt;/tt&gt; directly, and vice versa. Of course we do need to communicate sometimes! But we want to ensure that this communication will always be delegated to the thread which owns the values (rather than the values directly interacting with each other).&lt;/p&gt;
  2573. &lt;p&gt;We can accomplish this by creating an enqueuing function for each type and storing that in the opposite type. Such a function will be passed boxed functions to run on the owning thread that get a reference to the owned type (e.g., &lt;tt&gt;Box&amp;lt;dyn FnOnce(&amp;amp;T) + Send + 'static&amp;gt;&lt;/tt&gt;). This is simple to create: for the &lt;tt&gt;UI&lt;/tt&gt; thread, it is just the &lt;tt&gt;UI&lt;/tt&gt; implementation’s &lt;tt&gt;invoke&lt;/tt&gt; method which we briefly discussed previously. The &lt;tt&gt;Logic&lt;/tt&gt; thread does nothing &lt;i&gt;but&lt;/i&gt; run a loop which will get these functions and run them on the owned value (we just enqueue and pass them using an &lt;a href=&quot;https://doc.rust-lang.org/stable/std/sync/mpsc/fn.channel.html&quot;&gt;&lt;tt&gt;mpsc::channel&lt;/tt&gt;&lt;/a&gt;). Now each type can asynchronously call methods on the other with the guarantee that they’ll be run on the correct thread.&lt;/p&gt;
  2574. &lt;div style=&quot;background-color: lightgrey;&quot;&gt;
  2575. &lt;p&gt;In a former iteration, a more complicated scheme was used with thread-local storage and a central type which was responsible for both creating threads and delegating the functions. But with such a basic use case as two threads delegating between each other, we were able to distill this to the essential aspects needed, greatly simplifying the code.&lt;/p&gt;
  2576. &lt;/div&gt;
  2577. &lt;h4&gt;Localization&lt;/h4&gt;
  2578. &lt;p&gt;One nice benefit of this rewrite is that we could bring the localization of the crash reporter up to speed with our modern tooling. In almost every other part of Firefox, we use &lt;a href=&quot;https://projectfluent.org/&quot;&gt;&lt;tt&gt;fluent&lt;/tt&gt;&lt;/a&gt; to handle localization. Using &lt;tt&gt;fluent&lt;/tt&gt; in the crash reporter makes the experience of localizers more uniform and predictable; they do not need to understand more than one localization system (the crash reporter was one of the last holdouts of the old system). It was very easy to use in the new code, with just a bit of extra code to extract the localization files from the Firefox installation when the crash reporter is run. In the worst case scenario where we can’t find or access these files, we have the &lt;tt&gt;en-US&lt;/tt&gt; definitions directly bundled in the crash reporter binary.&lt;/p&gt;
  2579. &lt;h3&gt;The UI Implementations&lt;/h3&gt;
  2580. &lt;p&gt;We won’t go into much detail about the implementations, but it’s worth talking about each a bit.&lt;/p&gt;
  2581. &lt;h4&gt;Linux (GTK)&lt;/h4&gt;
  2582. &lt;p&gt;The GTK implementation is probably the most straightforward and succinct. We use &lt;a href=&quot;https://github.com/rust-lang/rust-bindgen&quot;&gt;&lt;tt&gt;bindgen&lt;/tt&gt;&lt;/a&gt; to generate Rust bindings to the GTK functions we need (avoiding vendoring any external crates). Then we simply call all of the corresponding GTK functions to set up the GTK widgets as described in the model (remember, the model was made to mirror some of the GTK concepts).&lt;/p&gt;
  2583. &lt;p&gt;Since GTK is somewhat modern and meant to be written by humans (not automated tools like some of the other platforms), there weren’t really any pain points or unusual behaviors that needed to be addressed.&lt;/p&gt;
  2584. &lt;p&gt;We have a handful of nice features to improve memory safety and correctness. &lt;a href=&quot;https://searchfox.org/mozilla-central/rev/47a0a01e1f7ad0451c6ba6c790d5c6855df512c1/toolkit/crashreporter/client/app/src/ui/gtk.rs#96,105&quot;&gt;A set of traits&lt;/a&gt; makes it easy to attach owned data to GObjects (ensuring data remains valid and is properly dropped when the GObject is destroyed), and &lt;a href=&quot;https://searchfox.org/mozilla-central/rev/47a0a01e1f7ad0451c6ba6c790d5c6855df512c1/toolkit/crashreporter/client/app/src/ui/gtk.rs#177,205,228&quot;&gt;a few macros&lt;/a&gt; set up the glue code between GTK signals and our data binding types.&lt;/p&gt;
  2585. &lt;h4&gt;Windows (Win32)&lt;/h4&gt;
  2586. &lt;p&gt;The Windows implementation may have been the most difficult to write, since Win32 GUIs are very rarely written nowadays and the API shows its age. We use the &lt;a href=&quot;https://crates.io/crates/windows-sys&quot;&gt;&lt;tt&gt;windows-sys&lt;/tt&gt;&lt;/a&gt; crate to access bindings to the API (which was already vendored in the codebase for many other Windows API uses). This crate is generated directly from Windows function metadata (by Microsoft), but otherwise its bindings aren’t terribly different from what &lt;tt&gt;bindgen&lt;/tt&gt; might have produced (though they are likely a bit more accurate).&lt;/p&gt;
  2587. &lt;p&gt;There were a number of hurdles to overcome. For one thing, the Win32 API doesn’t provide any layout primitives, so the high-level layout concepts we use (which allow graceful resize/repositioning) had to be &lt;a href=&quot;https://searchfox.org/mozilla-central/rev/47a0a01e1f7ad0451c6ba6c790d5c6855df512c1/toolkit/crashreporter/client/app/src/ui/windows/layout.rs&quot;&gt;implemented manually&lt;/a&gt;. There’s also quite a few extra API calls just to get to a GUI that looks somewhat decent (correct window colors, font smoothing, high DPI handling, etc). Even the default font ends up being a terrible looking bitmapped font rather than the more modern system default; we needed to manually retrieve the system default and set it as the font to use, which was a bit surprising!&lt;/p&gt;
  2588. &lt;p&gt;We have &lt;a href=&quot;https://searchfox.org/mozilla-central/rev/47a0a01e1f7ad0451c6ba6c790d5c6855df512c1/toolkit/crashreporter/client/app/src/ui/windows/window.rs#16,40,120&quot;&gt;a set of traits&lt;/a&gt; to facilitate creating custom window classes and managing associated window data of class instances. We also &lt;a href=&quot;https://searchfox.org/mozilla-central/rev/47a0a01e1f7ad0451c6ba6c790d5c6855df512c1/toolkit/crashreporter/client/app/src/ui/windows/gdi.rs&quot;&gt;have&lt;/a&gt; &lt;a href=&quot;https://searchfox.org/mozilla-central/rev/47a0a01e1f7ad0451c6ba6c790d5c6855df512c1/toolkit/crashreporter/client/app/src/ui/windows/font.rs&quot;&gt;wrapper&lt;/a&gt; &lt;a href=&quot;https://searchfox.org/mozilla-central/rev/47a0a01e1f7ad0451c6ba6c790d5c6855df512c1/toolkit/crashreporter/client/app/src/ui/windows/widestring.rs&quot;&gt;types&lt;/a&gt; to properly manage the lifetimes of handles and perform type conversions (mainly &lt;tt&gt;String&lt;/tt&gt; to null-terminated wide strings and back) as an extra layer of safety around the API.&lt;/p&gt;
  2589. &lt;h4&gt;macOS (Cocoa/AppKit)&lt;/h4&gt;
  2590. &lt;p&gt;The macOS implementation had its tricky parts, as overwhelmingly macOS GUIs are written with XCode and there’s a lot of automated and generated portions (such as nibs). We again use &lt;a href=&quot;https://github.com/rust-lang/rust-bindgen&quot;&gt;&lt;tt&gt;bindgen&lt;/tt&gt;&lt;/a&gt; to generate Rust bindings, this time for the Objective-C APIs in macOS framework headers.&lt;/p&gt;
  2591. &lt;p&gt;Unlike Windows and GTK, you don’t get keyboard shortcuts like Cmd-C, Cmd-Q, etc, for free if creating a GUI without e.g. XCode (which generates it for you as part of a new project template). To have these typical shortcuts that users expect, we needed to manually implement the application main menu (which is what governs keyboard shortcuts). We also had to handle runtime setup like creating Objective-C autorelease pools, bringing the window &lt;i&gt;and application&lt;/i&gt; (which are separate concepts) to the foreground, etc. Even implementing &lt;tt&gt;invoke&lt;/tt&gt; to call a function on the main thread had its nuances, since modal windows use a nested event loop which would not call queued functions under the default &lt;tt&gt;NSRunLoop&lt;/tt&gt; mode.&lt;/p&gt;
  2592. &lt;p&gt;We wrote some &lt;a href=&quot;https://searchfox.org/mozilla-central/rev/47a0a01e1f7ad0451c6ba6c790d5c6855df512c1/toolkit/crashreporter/client/app/src/ui/macos/objc.rs&quot;&gt;simple helper types and a macro&lt;/a&gt; to make it easy to implement, register, and create Objective-C classes from Rust code. We used this for creating delegate classes as well as subclassing some controls for the implementation (like &lt;a href=&quot;https://searchfox.org/mozilla-central/rev/47a0a01e1f7ad0451c6ba6c790d5c6855df512c1/toolkit/crashreporter/client/app/src/ui/macos/mod.rs#365-386&quot;&gt;&lt;tt&gt;NSButton&lt;/tt&gt;&lt;/a&gt;); it made it easy to safely manage the memory of Rust values underlying the classes and correctly register class method selectors.&lt;/p&gt;
  2593. &lt;h4&gt;The Test UI&lt;/h4&gt;
  2594. &lt;p&gt;We’ll discuss testing in the next section. Our testing UI is very simple. It &lt;i&gt;doesn’t&lt;/i&gt; create a GUI, but allows us to interact directly with the model. The &lt;tt&gt;ui!&lt;/tt&gt; macro supports an extra piece of syntax when tests are enabled to optionally set a string identifier for each element. We use these strings in unit tests to access and interact with the UI. The data binding types also support a few additional methods in tests to easily manipulate values. This UI allows us to simulate button presses, field entry, etc, to ensure that other UI state changes as expected as well as simulating the system side effects.&lt;/p&gt;
  2595. &lt;h3&gt;Mocking and Testing&lt;/h3&gt;
  2596. &lt;p&gt;An important goal of our rewrite was to add tests to the crash reporter; our old code was sorely lacking them (in part because unit testing GUIs is notoriously difficult).&lt;/p&gt;
  2597. &lt;h4&gt;Mocking Everything&lt;/h4&gt;
  2598. &lt;p&gt;In the new code, we can mock the crash reporter regardless of whether we are running tests or not (though it is always mocked for tests). This is important because mocking allows us to (manually) run the GUI in various states to check that the GUI implementations are correct and render well. Our mocking not only mocks the inputs to the crash reporter (environment variables, command line parameters, etc), it also mocks &lt;i&gt;all&lt;/i&gt; side-effectful std functions.&lt;/p&gt;
  2599. &lt;p&gt;We accomplish this by having a &lt;tt&gt;std&lt;/tt&gt; module in the crate, and using &lt;tt&gt;crate::std&lt;/tt&gt; throughout the rest of the code. When mocking is disabled, &lt;tt&gt;crate::std&lt;/tt&gt; is simply the same as &lt;tt&gt;::std&lt;/tt&gt;. But when it is enabled, a bunch of functions that we have written are used instead. These mock the filesystem, environment, launching external commands, and other side effects. Importantly, only the minimal amount to mock the existing functions is implemented, so that if e.g. some new functions from &lt;tt&gt;std::fs&lt;/tt&gt;, &lt;tt&gt;std::net&lt;/tt&gt;, etc. are used, the crate will fail to compile with mocking enabled (so that we don’t &lt;i&gt;miss&lt;/i&gt; any side effects). This might sound like a lot of effort, but you might be surprised at how little of &lt;tt&gt;std&lt;/tt&gt; really needed to be mocked, and most implementations were pretty straightforward.&lt;/p&gt;
  2600. &lt;p&gt;Now that we have our code using different mocked functions, we need to have a way of injecting the desired mock data (both in tests and in our normal mocked operation). For example, we have the ability to return some data when a &lt;tt&gt;File&lt;/tt&gt; is read, but we need to be able to set that data differently for tests. Without going into too much detail, we accomplish this using a thread-local store of mock data. This way, we don’t need to change any code to accommodate the mock data; we only need to make changes where we set and retrieve it. The programming language enthusiasts out there may recognize this as a form of &lt;a href=&quot;https://en.wikipedia.org/wiki/Scope_(computer_science)#Dynamic_scope&quot;&gt;dynamic scoping&lt;/a&gt;. The &lt;a href=&quot;https://searchfox.org/mozilla-central/rev/47a0a01e1f7ad0451c6ba6c790d5c6855df512c1/toolkit/crashreporter/client/app/src/std/mock.rs&quot;&gt;implementation&lt;/a&gt; allows our mock data to be set with code like&lt;/p&gt;
  2601. &lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;mock::builder()
  2602.    .set(
  2603.        crate::std::env::MockCurrentExe,
  2604.        &quot;work_dir/crashreporter&quot;.into(),
  2605.    )
  2606.    .run(|| crash_reporter_main())
  2607. &lt;/code&gt;&lt;/pre&gt;
  2608. &lt;p&gt;in tests, and&lt;/p&gt;
  2609. &lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;pub fn current_exe() -&amp;gt; std::io::Result {
  2610.    Ok(MockCurrentExe.get(|r| r.clone()))
  2611. }
  2612. &lt;/code&gt;&lt;/pre&gt;
  2613. &lt;p&gt;in our &lt;tt&gt;crate::std::env&lt;/tt&gt; implementation.&lt;/p&gt;
  2614. &lt;h4&gt;Testing&lt;/h4&gt;
  2615. &lt;p&gt;With our mocking setup and test UI, we are able to extensively test the behavior of the crash reporter. The “last mile” of this testing which we can’t automate easily is whether each UI implementation faithfully represents the UI model. We manually test this with a mocked GUI for each platform.&lt;/p&gt;
  2616. &lt;p&gt;Besides that, we are able to automatically test how arbitrary UI interactions cause the crash reporter to affect its own UI state and the environment (checking which programs are invoked and network connections are made, what happens if they fail, succeed, or timeout, etc). We also set up a mock filesystem and add assertions in various scenarios over the precise resulting filesystem state once the crash reporter completes. This greatly increases our confidence in the current behaviors and ensures that future changes will not alter them, which is of the utmost importance for such an essential component of our crash reporting pipeline.&lt;/p&gt;
  2617. &lt;h3&gt;The End Product&lt;/h3&gt;
  2618. &lt;p&gt;Of course we can’t get away with writing all of this without a picture of the crash reporter! This is what it looks like on Linux using GTK. The other GUI implementations look the same but styled with a native look and feel.&lt;/p&gt;
  2619. &lt;p&gt;&lt;img alt=&quot;The crash reporter dialog on Linux.&quot; class=&quot;alignnone wp-image-48136 size-large&quot; height=&quot;356&quot; src=&quot;https://hacks.mozilla.org/wp-content/uploads/2024/04/crashreporter-500x356.png&quot; width=&quot;500&quot; /&gt;&lt;/p&gt;
  2620. &lt;p&gt;Note that, for now, we wanted to keep it looking exactly the same as it previously did. So if you are unfortunate enough to see it, it shouldn’t appear as if anything has changed!&lt;/p&gt;
  2621. &lt;p&gt;With a new, cleaned up crash reporter, we can finally unblock a number of feature requests and bug reports, such as:&lt;/p&gt;
  2622. &lt;ul&gt;
  2623. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1821414&quot;&gt;detecting whether an installation is corrupt and telling the user to re-install Firefox&lt;/a&gt;,&lt;/li&gt;
  2624. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1565033&quot;&gt;checking whether there is faulty memory hardware on the crashing system&lt;/a&gt;, and&lt;/li&gt;
  2625. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1866863&quot;&gt;using the Firefox network stack for the first attempt at submitting crashes (which respects user network settings like proxies)&lt;/a&gt;.&lt;/li&gt;
  2626. &lt;/ul&gt;
  2627. &lt;p&gt;We are excited to iterate and improve further on crash reporter functionality. But ultimately it’d be wonderful if you never see or use it, and we are constantly working toward that goal!&lt;/p&gt;
  2628. &lt;p&gt;The post &lt;a href=&quot;https://hacks.mozilla.org/2024/04/porting-a-cross-platform-gui-application-to-rust/&quot;&gt;Porting a cross-platform GUI application to Rust&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;</description>
  2629. <pubDate>Tue, 23 Apr 2024 19:08:08 +0000</pubDate>
  2630. <dc:creator>Alex Franchuk</dc:creator>
  2631. </item>
  2632. <item>
  2633. <title>Firefox Nightly: Wall to Wall Improvements – These Weeks in Firefox: Issue 159</title>
  2634. <guid isPermaLink="false">https://blog.nightly.mozilla.org/?p=1620</guid>
  2635. <link>https://blog.nightly.mozilla.org/2024/04/23/wall-to-wall-improvements-these-weeks-in-firefox-issue-159/</link>
  2636. <description>&lt;h3&gt;Highlights&lt;/h3&gt;
  2637. &lt;ul&gt;
  2638. &lt;li&gt;The team is in the early stages of adding wallpaper support! This is still very preliminary, but you can test what they’ve currently landed on Nightly:
  2639. &lt;ul&gt;
  2640. &lt;li&gt;Set &lt;code&gt;browser.newtabpage.activity-stream.newtabWallpapers.enabled&lt;/code&gt; to true in about:config&lt;/li&gt;
  2641. &lt;li&gt;Click on the “gear” icon in the top-right of the new tab page&lt;/li&gt;
  2642. &lt;li&gt;Choose a wallpaper! Note that you get different options depending on whether or not you’re using a light or dark theme.&lt;/li&gt;
  2643. &lt;/ul&gt;
  2644. &lt;/li&gt;
  2645. &lt;/ul&gt;
  2646. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1616&quot; style=&quot;width: 1006px;&quot;&gt;&lt;img alt=&quot;Firefox's New Tab page with a beautiful image of the aurora borealis set as the background wallpaper&quot; class=&quot;size-full wp-image-1616&quot; height=&quot;740&quot; src=&quot;https://blog.nightly.mozilla.org/files/2024/04/image2.png&quot; width=&quot;996&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1616&quot;&gt;Set a new look for new tabs!&lt;/p&gt;&lt;/div&gt;
  2647. &lt;ul&gt;
  2648. &lt;li&gt;Among other things, Firefox 125 is going to ship with support for the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Popover_API&quot;&gt;Popover Web API&lt;/a&gt;
  2649. &lt;ul&gt;
  2650. &lt;li&gt;This should make it easier to create dropdown / popup menus without doing so much management with JavaScript. &lt;a href=&quot;https://mdn.github.io/dom-examples/popover-api/&quot;&gt;Here are some demos&lt;/a&gt;.&lt;/li&gt;
  2651. &lt;/ul&gt;
  2652. &lt;/li&gt;
  2653. &lt;li&gt;Niklas &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1864038&quot;&gt;added keyboard shortcuts&lt;/a&gt; for copying and downloading a screenshot in the Screenshots tool
  2654. &lt;ul&gt;
  2655. &lt;li&gt;The keyboard shortcuts work in the overlay and in the preview window
  2656. &lt;ul&gt;
  2657. &lt;li&gt;&lt;code&gt;ctrl/cmd + c&lt;/code&gt; to copy the screenshot&lt;/li&gt;
  2658. &lt;li&gt;&lt;code&gt;ctrl/cmd + s&lt;/code&gt; to download/save the screenshot&lt;/li&gt;
  2659. &lt;/ul&gt;
  2660. &lt;/li&gt;
  2661. &lt;/ul&gt;
  2662. &lt;/li&gt;
  2663. &lt;li&gt;Nicolas fixed some &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1886818&quot;&gt;performance&lt;/a&gt; &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1886947&quot;&gt;issues&lt;/a&gt; in the Rules view in the Firefox DevTools Inspector tab when there are &lt;b&gt;a lot&lt;/b&gt; of rules with pseudo elements. For example, with 1500 pseudo elements, what was taking &lt;b&gt;3 seconds&lt;/b&gt; on a developer machine now only takes &lt;b&gt;~30ms! &lt;/b&gt;These fixes are slated to go out in Firefox 126.&lt;/li&gt;
  2664. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1356686&quot;&gt;jesup moved brotli decompression fully off of the main thread.&lt;/a&gt; This has shown major wins in the wild – &lt;a href=&quot;https://glam.telemetry.mozilla.org/firefox/probe/perf_first_contentful_paint_from_responsestart_ms/explore?currentPage=1&amp;amp;os=Windows&amp;amp;ref=20240318110542&amp;amp;visiblePercentiles=%5B99.9%2C99%2C95%2C75%2C50%2C25%2C5%5D&quot;&gt;we’re seeing a 10% improvement for FirstContentfulPaint&lt;/a&gt; pretty much across the board, and a &lt;a href=&quot;https://glam.telemetry.mozilla.org/firefox/probe/perf_largest_contentful_paint_from_response_start_ms/explore?currentPage=1&amp;amp;os=Windows&amp;amp;ref=20240319215652&quot;&gt;10% improvement on LargestContentfulPaint&lt;/a&gt; at the 50% percentile, 20% at the 75% percentile and 95%(!) at the 95% percentile. Nice! This improvement is rolling out in Firefox 126.&lt;/li&gt;
  2665. &lt;/ul&gt;
  2666. &lt;h3&gt;Friends of the Firefox team&lt;/h3&gt;
  2667. &lt;div&gt;
  2668. &lt;div&gt;
  2669. &lt;h4 dir=&quot;ltr&quot; id=&quot;m_2704358428833711463gmail-docs-internal-guid-ef3a8f36-7fff-eb59-ec7a-5ab8df1d7e62&quot;&gt;Introductions/Shout-Outs&lt;/h4&gt;
  2670. &lt;ul&gt;
  2671. &lt;li&gt;Shoutout to Yi Xiong Wong for submitting &lt;strong&gt;16 patches&lt;/strong&gt; to refactor a bunch of &lt;code&gt;browser.js&lt;/code&gt; code into a separate file (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1880914&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;bug&lt;/a&gt;)&lt;/li&gt;
  2672. &lt;/ul&gt;
  2673. &lt;/div&gt;
  2674. &lt;/div&gt;
  2675. &lt;h4&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/buglist.cgi?title=Resolved%20bugs%20(excluding%20employees)&amp;amp;quicksearch=1856717%2C1888221%2C1887529%2C1887821%2C1889710%2C1887543%2C1886858%2C1838152%2C1883058%2C1876286%2C1880914&quot;&gt;Resolved bugs (excluding employees)&lt;/a&gt;&lt;/h4&gt;
  2676. &lt;h4&gt;Volunteers that fixed more than one bug&lt;/h4&gt;
  2677. &lt;ul&gt;
  2678. &lt;li&gt;Camille&lt;/li&gt;
  2679. &lt;li&gt;Magnus Melin [:mkmelin]&lt;/li&gt;
  2680. &lt;li&gt;Meera Murthy&lt;/li&gt;
  2681. &lt;/ul&gt;
  2682. &lt;h4&gt;New contributors (🌟 = first patch)&lt;/h4&gt;
  2683. &lt;ul&gt;
  2684. &lt;li&gt;🌟 Camille added &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1856717&quot;&gt;`text-align: start` to moz-message-bar&lt;/a&gt; so it doesn’t inherit alignment from parent and updated &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1883058&quot;&gt;moz-toggle to only show active state&lt;/a&gt; when hovering&lt;/li&gt;
  2685. &lt;li&gt;gravyant &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1838152&quot;&gt;improved error message&lt;/a&gt; when sending session.new without capabilities&lt;/li&gt;
  2686. &lt;li&gt;🌟 Harshit &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1888221&quot;&gt;replaced `validateURL`&lt;/a&gt; with `URL.parse()`&lt;/li&gt;
  2687. &lt;/ul&gt;
  2688. &lt;h3&gt;Project Updates&lt;/h3&gt;
  2689. &lt;h4&gt;Add-ons / Web Extensions&lt;/h4&gt;
  2690. &lt;h5&gt;WebExtension APIs&lt;/h5&gt;
  2691. &lt;ul&gt;
  2692. &lt;li&gt;As part of the ongoing work related to improving cross-browser compatibility for Manifest Version 3 extensions:
  2693. &lt;ul&gt;
  2694. &lt;li&gt;The &lt;code&gt;options_page&lt;/code&gt; manifest property is supported as an alias of &lt;code&gt;options_page.ui&lt;/code&gt; – &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1816960&quot;&gt;Bug 1816960&lt;/a&gt;&lt;/li&gt;
  2695. &lt;li&gt;A new &lt;code&gt;webRequestAuthProvider&lt;/code&gt; permission allows extensions to register  webRequest.onAuthRequired blocking listeners (in addition to the &lt;code&gt;webRequestBlocking&lt;/code&gt; permission, which is deprecated on Chrome but still supported by Firefox) – &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1820569&quot;&gt;Bug 1820569&lt;/a&gt;&lt;/li&gt;
  2696. &lt;li&gt;&lt;code&gt;commands.onCommand&lt;/code&gt; listeners now receive details of the currently active tab – &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1843866&quot;&gt;Bug 1843866&lt;/a&gt;&lt;/li&gt;
  2697. &lt;li&gt;WebExtensions with a granted active tab permission can now call &lt;code&gt;tabs.captureVisibleTab&lt;/code&gt; API method without any additional host permissions – &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1784920&quot;&gt;Bug 1784920&lt;/a&gt;&lt;/li&gt;
  2698. &lt;li&gt;MessageSender details received by &lt;code&gt;runtime.onMessage/runtime.onConnect&lt;/code&gt; listeners include a new &lt;code&gt;origin&lt;/code&gt; property – &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1787379&quot;&gt;Bug 1787379&lt;/a&gt;&lt;/li&gt;
  2699. &lt;/ul&gt;
  2700. &lt;/li&gt;
  2701. &lt;/ul&gt;
  2702. &lt;h4&gt;Developer Tools&lt;/h4&gt;
  2703. &lt;h5&gt;DevTools&lt;/h5&gt;
  2704. &lt;ul&gt;
  2705. &lt;li&gt;Artem Manushenkov added a setting to disable the split console (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1731635&quot;&gt;#1731635&lt;/a&gt;)&lt;/li&gt;
  2706. &lt;li&gt;Yury added support for &lt;a href=&quot;https://github.com/WebAssembly/exception-handling/&quot;&gt;Wasm exception handling proposal&lt;/a&gt; in the Debugger (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885589&quot;&gt;#1885589&lt;/a&gt;)&lt;/li&gt;
  2707. &lt;li&gt;Emilio fixed a rendering issue that could happen after exiting Responsive Design Mode (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1888242&quot;&gt;#1888242&lt;/a&gt;)&lt;/li&gt;
  2708. &lt;li&gt;Alex migrated the last DevTools JSMs to ESMs (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1789981&quot;&gt;#1789981&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1827382&quot;&gt;#1827382&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1888171&quot;&gt;#1888171&lt;/a&gt;)&lt;/li&gt;
  2709. &lt;li&gt;Nicolas improved performance of the Inspector when modifying a single rule, in a stylesheet with a lot of rules (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1888079&quot;&gt;#1888079&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1888081&quot;&gt;#1888081&lt;/a&gt;)&lt;/li&gt;
  2710. &lt;li&gt;Nicolas improved the Rules view by showing the color picker button on color functions using CSS variables in their definition (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1718894&quot;&gt;#1718894&lt;/a&gt;)&lt;/li&gt;
  2711. &lt;li&gt;Bomsy fixed a crash in the netmonitor (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1884571&quot;&gt;#1884571&lt;/a&gt;)&lt;/li&gt;
  2712. &lt;li&gt;Julian reverted the location of DevTools screenshots on OSX to match where Firefox screenshots are saved (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1845037&quot;&gt;#1845037&lt;/a&gt;)&lt;/li&gt;
  2713. &lt;li&gt;Nicolas added &lt;code&gt;@property&lt;/code&gt; rules (enabled on Nightly by default) in the Style Editor sidebar (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1886392&quot;&gt;#1886392&lt;/a&gt;)&lt;/li&gt;
  2714. &lt;/ul&gt;
  2715. &lt;h5&gt;WebDriver BiDi&lt;/h5&gt;
  2716. &lt;ul&gt;
  2717. &lt;li&gt;New contributor: &lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=752453&quot;&gt;:gravyant&lt;/a&gt; improved the error message when the session.new command is used without a proper capabilities parameter (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1838152&quot;&gt;#1838152&lt;/a&gt;)&lt;/li&gt;
  2718. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=559949&quot;&gt;Julian Descottes&lt;/a&gt; added support for the &lt;code&gt;contexts&lt;/code&gt; argument of the network.addIntercept command which allows to restrict a network intercept to a set of top-level browsing contexts (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1882260&quot;&gt;#1882260&lt;/a&gt;)&lt;/li&gt;
  2719. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=704132&quot;&gt;Sasha Borovova&lt;/a&gt; updated the &lt;code&gt;storage.getCookies&lt;/code&gt; command to return third party cookies selectively, based on the value of the network.cookie.cookieBehavior and &lt;code&gt;network.cookie.cookieBehavior.optInPartitioning&lt;/code&gt; preferences (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1879503&quot;&gt;#1879503&lt;/a&gt;)&lt;/li&gt;
  2720. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=704132&quot;&gt;Sasha Borovova&lt;/a&gt; removed the &lt;code&gt;ownership&lt;/code&gt; and &lt;code&gt;sandbox&lt;/code&gt; parameters for the &lt;code&gt;browsingContext.locateNodes&lt;/code&gt; command to align with a recent specification update (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1884935&quot;&gt;#1884935&lt;/a&gt;)&lt;/li&gt;
  2721. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=704132&quot;&gt;Sasha Borovova&lt;/a&gt; updated the &lt;code&gt;session.subscribe&lt;/code&gt; and &lt;code&gt;session.unsubscribe&lt;/code&gt; commands to throw an error when the events or contexts parameters are empty arrays (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1887871&quot;&gt;#1887871&lt;/a&gt;)&lt;/li&gt;
  2722. &lt;li&gt;The team completed the Milestone 10 of the project (&lt;a href=&quot;https://bugzilla.mozilla.org/buglist.cgi?f5=status_whiteboard&amp;amp;f4=short_desc&amp;amp;f1=classification&amp;amp;query_format=advanced&amp;amp;list_id=16990273&amp;amp;v1=Graveyard&amp;amp;f6=CP&amp;amp;o5=substring&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;bug_status=RESOLVED&amp;amp;bug_status=VERIFIED&amp;amp;bug_status=CLOSED&amp;amp;j3=OR&amp;amp;f7=CP&amp;amp;o4=substring&amp;amp;v5=webdriver%3Am10%5D&amp;amp;f3=OP&amp;amp;v4=webdriver%3Am10%5D&amp;amp;o1=notequals&amp;amp;f2=OP&quot;&gt;bug list&lt;/a&gt;), where we implemented 50% of the commands needed to completely support Puppeteer, with 75% of the Puppeteer unit-tests passing with WebDriver BiDi. For Milestone 11 (&lt;a href=&quot;https://bugzilla.mozilla.org/buglist.cgi?quicksearch=%5Bwebdriver%3Am11&amp;amp;list_id=16990274&quot;&gt;bug list&lt;/a&gt;), our focus remains to implement the remaining commands and features required to fully support Puppeteer (&lt;a href=&quot;https://docs.google.com/document/d/1dDl1038bCehxUEot-21_bn_zn8uRCidjpXZ0SxwU-Ng/edit&quot;&gt;doc&lt;/a&gt;).&lt;/li&gt;
  2723. &lt;/ul&gt;
  2724. &lt;h4&gt;Lint, Docs and Workflow&lt;/h4&gt;
  2725. &lt;ul&gt;
  2726. &lt;li&gt;Enabling ESLint rules for requiring JSDocs just got easier.
  2727. &lt;ul&gt;
  2728. &lt;li&gt;The rules are &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1799465&quot;&gt;now enabled by default&lt;/a&gt;.&lt;/li&gt;
  2729. &lt;li&gt;Places where there are currently failures are &lt;a href=&quot;https://searchfox.org/mozilla-central/rev/77f8c66362e5f18f8e7cbaf1ba3ed6286f203d33/.eslintrc.js#631-797&quot;&gt;explicitly disabled&lt;/a&gt; in the top-level .eslintrc.js file.&lt;/li&gt;
  2730. &lt;li&gt;Please consider enabling these (and the valid-jsdoc ones) on your area, especially if you are using (or will be using) &lt;a href=&quot;https://firefox-source-docs.mozilla.org/tools/moztreedocs/jsdoc-support.html&quot;&gt;JSDoc document generation&lt;/a&gt; for source docs.&lt;/li&gt;
  2731. &lt;/ul&gt;
  2732. &lt;/li&gt;
  2733. &lt;li&gt;eslint-plugin-mozilla &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1890330&quot;&gt;now supports ESLint v9 APIs&lt;/a&gt;.
  2734. &lt;ul&gt;
  2735. &lt;li&gt;We still have some work to complete to fully support the new flat configuration.&lt;/li&gt;
  2736. &lt;/ul&gt;
  2737. &lt;/li&gt;
  2738. &lt;li&gt;We’re now rejecting the &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1889087&quot;&gt;JSM based ChromeUtils.import across the tree&lt;/a&gt; via ESLint.&lt;/li&gt;
  2739. &lt;/ul&gt;
  2740. &lt;h4&gt;Migration Improvements&lt;/h4&gt;
  2741. &lt;ul&gt;
  2742. &lt;li&gt;Negin &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1889703&quot;&gt;fixed an issue&lt;/a&gt; where the migration wizard title wasn’t appearing when embedded in about:welcome&lt;/li&gt;
  2743. &lt;li&gt;Negin is working on &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1886362&quot;&gt;fixing an issue on about:welcome&lt;/a&gt; where clicking on the browser/profile selector when the panel is already open doesn’t close the panel.&lt;/li&gt;
  2744. &lt;li&gt;For the backup project, we’ve made some pretty big strides!
  2745. &lt;ul&gt;
  2746. &lt;li&gt;We closed out &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1883503&quot;&gt;the measurement metabug&lt;/a&gt;, and have the measurements &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1886174&quot;&gt;being collected by default&lt;/a&gt; starting in Firefox 126.&lt;/li&gt;
  2747. &lt;li&gt;We’re now staging backups for various resources
  2748. &lt;ul&gt;
  2749. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885939&quot;&gt;User preferences&lt;/a&gt;&lt;/li&gt;
  2750. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885609&quot;&gt;The Places databases (history, bookmarks, favicons)&lt;/a&gt;&lt;/li&gt;
  2751. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885929&quot;&gt;Credentials (passwords, certificates, payment methods, addresses)&lt;/a&gt;&lt;/li&gt;
  2752. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885944&quot;&gt;A bunch of miscellaneous data stores&lt;/a&gt;&lt;/li&gt;
  2753. &lt;/ul&gt;
  2754. &lt;/li&gt;
  2755. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1888491&quot;&gt;We added a very simple debug tool&lt;/a&gt; in Nightly at &lt;code&gt;chrome://browser/content/backup/debug.html&lt;/code&gt;. You can test staging a backup at runtime with what we have so far using this tool. It may take several minutes depending on how big your databases are, and how intensely you’re using the browser while the backup is underway.&lt;/li&gt;
  2756. &lt;/ul&gt;
  2757. &lt;/li&gt;
  2758. &lt;/ul&gt;
  2759. &lt;h4&gt;Picture-in-Picture&lt;/h4&gt;
  2760. &lt;ul&gt;
  2761. &lt;li&gt;Thanks to :joe.scott.webster for submitting a patch that fixes PiP captions issues with several Yahoo sites (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1825105&quot;&gt;bug&lt;/a&gt;) and filing a follow-up ticket for AOL (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1891599&quot;&gt;bug&lt;/a&gt;).
  2762. &lt;ul&gt;
  2763. &lt;li&gt;Also thanks to Niklas Baumgardner (:niklas) for lending a hand!&lt;/li&gt;
  2764. &lt;/ul&gt;
  2765. &lt;/li&gt;
  2766. &lt;/ul&gt;
  2767. &lt;h4&gt;Performance&lt;/h4&gt;
  2768. &lt;ul&gt;
  2769. &lt;li&gt;mconley &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1879136&quot;&gt;got rid of some nsTerminator telemetry that was causing us to block shutting down the browser if a quit was requested very soon after a startup.&lt;/a&gt;&lt;/li&gt;
  2770. &lt;/ul&gt;
  2771. &lt;h4&gt;Screenshots (enabled by default in Nightly)&lt;/h4&gt;
  2772. &lt;ul&gt;
  2773. &lt;li&gt;Niklas made the save full page the &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1886843&quot;&gt;primary action button&lt;/a&gt;
  2774. &lt;ul&gt;
  2775. &lt;li&gt;Thanks reusable components for moz-button-group!&lt;/li&gt;
  2776. &lt;/ul&gt;
  2777. &lt;/li&gt;
  2778. &lt;li&gt;Niklas fixed an issue where &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1889438&quot;&gt;dragging the scrollbar could drag a region&lt;/a&gt;&lt;/li&gt;
  2779. &lt;li&gt;Niklas fixed an issue where &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1889473&quot;&gt;the window would sometimes scroll&lt;/a&gt; when focusing the download or copy button&lt;/li&gt;
  2780. &lt;/ul&gt;
  2781. &lt;h4&gt;Search and Navigation&lt;/h4&gt;
  2782. &lt;ul&gt;
  2783. &lt;li&gt;Firefox Suggest experience
  2784. &lt;ul&gt;
  2785. &lt;li&gt;Daisuke renamed the “Learn More about Firefox Suggest” menuitem to a more direct “Manage Firefox Suggest”. &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1889820&quot;&gt;Bug 1889820&lt;/a&gt;&lt;/li&gt;
  2786. &lt;li&gt;Drew added new telemetry to measure in experiments the potential exposure of simulated results, depending on the typed search string. &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1881875&quot;&gt;Bug 1881875&lt;/a&gt;&lt;/li&gt;
  2787. &lt;/ul&gt;
  2788. &lt;/li&gt;
  2789. &lt;li&gt;SERP categorization telemetry
  2790. &lt;ul&gt;
  2791. &lt;li&gt;James, Stephanie and Karandeep have landed many fixes to the storage, logging and measurements.&lt;/li&gt;
  2792. &lt;/ul&gt;
  2793. &lt;/li&gt;
  2794. &lt;li&gt;Search Config v2
  2795. &lt;ul&gt;
  2796. &lt;li&gt;Enabling new config in Nightly lowered the number of initialization errors for the Search Service&lt;/li&gt;
  2797. &lt;li&gt;Mark fixed character-set handling. &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1890698&quot;&gt;Bug 1890698&lt;/a&gt;&lt;/li&gt;
  2798. &lt;li&gt;Mark added a new property covering the device type. &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1889910&quot;&gt;Bug 1889910&lt;/a&gt;&lt;/li&gt;
  2799. &lt;li&gt;Mandy sorted collections by engine identifier and property names, to make the config more easily navigable and diffs nicer and easier to maintain. &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1889247&quot;&gt;Bug 1889247&lt;/a&gt;&lt;/li&gt;
  2800. &lt;li&gt;Mandy updated the &lt;a href=&quot;https://firefox-source-docs.mozilla.org/toolkit/search/index.html&quot;&gt;documentation&lt;/a&gt;. &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1889037&quot;&gt;Bug 1889037&lt;/a&gt;&lt;/li&gt;
  2801. &lt;/ul&gt;
  2802. &lt;/li&gt;
  2803. &lt;li&gt;Other fixes
  2804. &lt;ul&gt;
  2805. &lt;li&gt;Marco fixed a bug causing engagement on certain results to be registered both as engagement and abandonment. &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1888627&quot;&gt;Bug 1888627&lt;/a&gt;&lt;/li&gt;
  2806. &lt;li&gt;Dao has fixed alignment of “switch to tab” and “visit” chiclets. &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1886761&quot;&gt;Bug 1886761&lt;/a&gt;&lt;/li&gt;
  2807. &lt;/ul&gt;
  2808. &lt;/li&gt;
  2809. &lt;/ul&gt;
  2810. &lt;h4&gt;Storybook/Reusable Components&lt;/h4&gt;
  2811. &lt;ul&gt;
  2812. &lt;li&gt;Thanks to Camille Davis for fixing these two bugs!
  2813. &lt;ul&gt;
  2814. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1856717&quot;&gt;Bug 1856717 – Set ‘text-align: start’ on ‘:host’ in moz-message-bar.css&lt;/a&gt;&lt;/li&gt;
  2815. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1883058&quot;&gt;Bug 1883058 – moz-toggle should only show active state on hover&lt;/a&gt;&lt;/li&gt;
  2816. &lt;/ul&gt;
  2817. &lt;/li&gt;
  2818. &lt;li&gt;Thanks to :nordzilla for &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1886276&quot;&gt;fixing a race condition in menulist&lt;/a&gt;&lt;/li&gt;
  2819. &lt;li&gt;Thanks to :kcochrane for &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1883091&quot;&gt;adding documentation to moz-page-nav&lt;/a&gt; and &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1877826&quot;&gt;adding support for external and support links in moz-page-nav&lt;/a&gt;&lt;/li&gt;
  2820. &lt;li&gt;:hjones &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1890433&quot;&gt;fixed the interactive storybook component examples on Windows&lt;/a&gt;&lt;/li&gt;
  2821. &lt;li&gt;:tgiles &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1889469&quot;&gt;fixed the ./mach addstory command&lt;/a&gt;&lt;/li&gt;
  2822. &lt;li&gt;Work is underway to remove the &lt;code&gt;window.ensureCustomElements&lt;/code&gt; function now that we can lazy load ES modules. See &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1803678&quot;&gt;Bug 1803678 – Enable on-demand/lazy loading for ESModule based reusable components&lt;/a&gt; for more details
  2823. &lt;ul&gt;
  2824. &lt;li&gt;Big thanks to :arai for the work to make this possible! &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1803810&quot;&gt;Bug 1803810 – Support synchronously loading ESMs into given global, in the same way as Services.scriptloader.loadSubScript&lt;/a&gt;&lt;/li&gt;
  2825. &lt;/ul&gt;
  2826. &lt;/li&gt;
  2827. &lt;/ul&gt;</description>
  2828. <pubDate>Tue, 23 Apr 2024 17:32:41 +0000</pubDate>
  2829. <dc:creator>Katherine Patenio</dc:creator>
  2830. </item>
  2831. <item>
  2832. <title>Firefox Nightly: Firefox Nightly Now Available for Linux on ARM64</title>
  2833. <guid isPermaLink="false">https://blog.nightly.mozilla.org/?p=1595</guid>
  2834. <link>https://blog.nightly.mozilla.org/2024/04/19/firefox-nightly-now-available-for-linux-on-arm64/</link>
  2835. <description>&lt;p&gt;We’re excited to share an update with people running Linux on ARM64 (also known as AArch64) architectures.&lt;/p&gt;
  2836. &lt;h3&gt;ARM64 Binaries Are Here&lt;/h3&gt;
  2837. &lt;p&gt;After &lt;a href=&quot;https://blog.nightly.mozilla.org/2023/10/30/introducing-mozillas-firefox-nightly-deb-packages-for-debian-based-linux-distributions/&quot;&gt;launching the Firefox Nightly .deb package&lt;/a&gt;, feedback highlighted a demand for ARM64 builds. In response, we’re excited to now offer Firefox Nightly for ARM64 as both &lt;code&gt;.tar&lt;/code&gt; archives and &lt;code&gt;.deb&lt;/code&gt; packages. Keep the suggestions coming – feedback is always welcome!&lt;/p&gt;
  2838. &lt;ul&gt;
  2839. &lt;li&gt;&lt;strong&gt;.tar Archives: &lt;/strong&gt;Prefer our traditional &lt;code&gt;.tar.bz2&lt;/code&gt; binaries? You can get them from &lt;a href=&quot;https://www.mozilla.org/firefox/all/#product-desktop-nightly&quot;&gt;our downloads page&lt;/a&gt; by selecting &lt;code&gt;Firefox Nightly&lt;/code&gt; for &lt;code&gt;Linux ARM64/AArch64&lt;/code&gt;.&lt;/li&gt;
  2840. &lt;li&gt;&lt;strong&gt;.deb Packages: &lt;/strong&gt;For updates and installation via our APT repository, you can &lt;a href=&quot;https://support.mozilla.org/kb/install-firefox-linux#w_install-firefox-deb-package-for-debian-based-distributions&quot;&gt;follow these instructions&lt;/a&gt; and install the &lt;code&gt;firefox-nightly&lt;/code&gt; package.&lt;/li&gt;
  2841. &lt;/ul&gt;
  2842. &lt;h3&gt;On ARM64 Build Stability&lt;/h3&gt;
  2843. &lt;p&gt;We want to be upfront about the current state of our ARM64 builds. Although we are confident in the quality of Firefox on this architecture, we are still incorporating comprehensive ARM64 testing into Firefox’s continuous integration and release pipeline. Our goal is to integrate ARM64 builds into Firefox’s extensive automated test suite, which will enable us to offer this architecture across the beta, release, and ESR channels.&lt;/p&gt;
  2844. &lt;h3&gt;Your Feedback Is Crucial&lt;/h3&gt;
  2845. &lt;p&gt;We encourage you to download the new ARM64 Firefox Nightly binaries, test them, and share your findings with us. By using these builds and reporting any issues, you’re empowering our developers to better support and test on this architecture, ultimately leading to a stable and reliable Firefox for ARM64. Please share your findings through &lt;a href=&quot;https://bugzilla.mozilla.org/enter_bug.cgi?format=__default__&amp;amp;blocked=1867368&amp;amp;product=Release%20Engineering&amp;amp;component=General&amp;amp;rep_platform=ARM64&amp;amp;op_sys=Linux&quot;&gt;Bugzilla&lt;/a&gt; and stay tuned for more updates. Thank you for your ongoing participation in the Firefox Nightly community!&lt;/p&gt;</description>
  2846. <pubDate>Fri, 19 Apr 2024 17:35:32 +0000</pubDate>
  2847. <dc:creator>Gabriel Bustamante</dc:creator>
  2848. </item>
  2849. <item>
  2850. <title>IRL (podcast): Mozilla’s IRL podcast is a Shorty Awards finalist - we need your help to win!</title>
  2851. <guid isPermaLink="false">63cfa320-a1c6-47d7-9b08-0bda89510d45</guid>
  2852. <link>https://irlpodcast.org/</link>
  2853. <description>&lt;p&gt;We’re excited to share that Mozilla's IRL podcast is a &lt;a href=&quot;https://shortyawards.com/16th/irl-online-life-is-real-life-season-7&quot;&gt;Shorty Awards finalist&lt;/a&gt; in the Science and Technology Podcast category! If you enjoy IRL you can show your support by voting for us.&lt;/p&gt;&lt;p&gt;The Shorty Awards recognizes great content by brands, agencies and nonprofits. It’s really an honor to be able to feature the voices and stories of the folks who are putting people over profit in AI. A Shorty Award will help bring these stories to even more listeners. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;How to vote&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1. Go to &lt;a href=&quot;http://mzl.la/shorty&quot;&gt;mzl.la/shorty&lt;/a&gt;&lt;/p&gt;&lt;p&gt;2. Click 'Vote in Science and Technology Podcast'&lt;/p&gt;&lt;p&gt;3. create a username and password (it's easy, we promise!)&lt;/p&gt;&lt;p&gt;4. Come back and &lt;strong&gt;vote every day until April 30th&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;We believe putting people over profit is award-worthy. Don’t you?  Thanks for your support!&lt;/p&gt;</description>
  2854. <pubDate>Fri, 19 Apr 2024 16:51:37 +0000</pubDate>
  2855. <author>info@pacific-content.com (Mozilla)</author>
  2856.        <enclosure url="https://cdn.simplecast.com/audio/9b52b824-909f-4be5-aaf0-10f9e93c7818/episodes/c6f576bb-c082-4e2f-903d-3e95735862fc/audio/4e2e64e8-2066-42bf-9243-3bda4505bfb9/default_tc.mp3?aid=rss_feed&amp;feed=lP7owBq8" length="6037192" type="audio/mpeg"/>
  2857. </item>
  2858. <item>
  2859. <title>Mozilla Thunderbird: Adventures In Rust: Bringing Exchange Support To Thunderbird</title>
  2860. <guid isPermaLink="false">https://blog.thunderbird.net/?p=1702</guid>
  2861. <link>https://blog.thunderbird.net/2024/04/adventures-in-rust-bringing-exchange-support-to-thunderbird/</link>
  2862. <description>&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;attachment-640x360 size-640x360 wp-post-image&quot; height=&quot;320&quot; src=&quot;https://blog.thunderbird.net/files/2024/04/Tb-rust1.png&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
  2863. &lt;p&gt;Microsoft Exchange is a popular choice of email service for corporations and educational institutions, and so it’s no surprise that there’s demand among Thunderbird users to support Exchange. Until recently, this functionality was only available through an add-on. But, in the next ESR (Extended Support) release of Thunderbird in July 2024, we expect to provide this support natively within Thunderbird. Because of the size of this undertaking, the first roll-out of the Exchange support will &lt;a href=&quot;https://youtu.be/7jNV1J2pdPc&quot;&gt;initially cover only email&lt;/a&gt;, with calendar and address book support coming at a later date.&lt;/p&gt;
  2864.  
  2865.  
  2866.  
  2867. &lt;p&gt;This article will go into technical detail on how we are implementing support for the Microsoft Exchange Web Services mail protocol, and some idea of where we’re going next with the knowledge gained from this adventure.&lt;/p&gt;
  2868.  
  2869.  
  2870.  
  2871. &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;
  2872.  
  2873. &lt;/div&gt;&lt;/figure&gt;
  2874.  
  2875.  
  2876.  
  2877. &lt;h3&gt;Historical context&lt;/h3&gt;
  2878.  
  2879.  
  2880.  
  2881. &lt;p&gt;Thunderbird is a long-lived project, which means there’s lots of old code. The current architecture for supporting mail protocols predates Thunderbird itself, having been developed more than 20 years ago as part of Netscape Communicator. There was also no paid maintainership from about 2012 — when Mozilla divested and  transferred ownership of Thunderbird to its community — until 2017, when Thunderbird rejoined the Mozilla Foundation. That means years of ad hoc changes without a larger architectural vision and a lot of decaying C++ code that was not using modern standards.&lt;/p&gt;
  2882.  
  2883.  
  2884.  
  2885. &lt;p&gt;Furthermore, in the entire 20 year lifetime of the Thunderbird project, no one has added support for a new mail protocol before. As such, no one has updated the architecture as mail protocols change and adapt to modern usage patterns, and a great deal of institutional knowledge has been lost. Implementing this much-needed feature is the first organization-led effort to actually understand and address limitations of Thunderbird’s architecture in an incremental fashion.&lt;/p&gt;
  2886.  
  2887.  
  2888.  
  2889. &lt;h3&gt;Why we chose Rust&lt;/h3&gt;
  2890.  
  2891.  
  2892.  
  2893. &lt;p&gt;Thunderbird is a large project maintained by a small team, so choosing a language for new work cannot be taken lightly. We need powerful tools to develop complex features relatively quickly, but we absolutely must balance this with long-term maintainability. Selecting Rust as the language for our new protocol support brings some important benefits:&lt;/p&gt;
  2894.  
  2895.  
  2896.  
  2897. &lt;ol&gt;
  2898. &lt;li&gt;&lt;strong&gt;Memory safety.&lt;/strong&gt; Thunderbird takes input from anyone who sends an email, so we need to be diligent about keeping security bugs out.&lt;/li&gt;
  2899.  
  2900.  
  2901.  
  2902. &lt;li&gt;&lt;strong&gt;Performance.&lt;/strong&gt; Rust runs as native code with all of the associated performance benefits.&lt;/li&gt;
  2903.  
  2904.  
  2905.  
  2906. &lt;li&gt;&lt;strong&gt;Modularity and Ecosystem.&lt;/strong&gt; The built-in modularity of Rust gives us access to a large ecosystem where there are already a lot of people doing things related to email which we can benefit from.&lt;/li&gt;
  2907. &lt;/ol&gt;
  2908.  
  2909.  
  2910.  
  2911. &lt;p&gt;The above are all on the standard list of benefits when discussing Rust. However, there are some additional considerations for Thunderbird:&lt;/p&gt;
  2912.  
  2913.  
  2914.  
  2915. &lt;ol&gt;
  2916. &lt;li&gt;&lt;strong&gt;Firefox.&lt;/strong&gt; Thunderbird is built on top of Firefox code and we use a shared CI infrastructure with Firefox which already enables Rust. Additionally, Firefox provides a language interop layer called XPCOM (Cross-Platform Component Object Model), which has Rust support and allows us to call between Rust, C++, and JavaScript.&lt;/li&gt;
  2917.  
  2918.  
  2919.  
  2920. &lt;li&gt;&lt;strong&gt;Powerful tools.&lt;/strong&gt; Rust gives us a large toolbox for building APIs which are difficult to misuse by pushing logical errors into the domain of the compiler. We can easily avoid circular references or provide functions which simply cannot be called with values which don’t make sense, letting us have a high degree of confidence in features with a large scope. Rust also provides first-class tooling for documentation, which is critically important on a small team.&lt;/li&gt;
  2921.  
  2922.  
  2923.  
  2924. &lt;li&gt;&lt;strong&gt;Addressing architectural technical debt.&lt;/strong&gt; Introducing a new language gives us a chance to reconsider some aging architectures while benefiting from a growing language community.&lt;/li&gt;
  2925.  
  2926.  
  2927.  
  2928. &lt;li&gt;&lt;strong&gt;Platform support and portability.&lt;/strong&gt; Rust supports a broad set of host platforms. By building modular crates, we can reuse our work in other projects, such as Thunderbird for Android/K-9 Mail.&lt;/li&gt;
  2929. &lt;/ol&gt;
  2930.  
  2931.  
  2932.  
  2933. &lt;h4&gt;Some mishaps along the way&lt;/h4&gt;
  2934.  
  2935.  
  2936.  
  2937. &lt;p&gt;Of course, the endeavor to introduce our first Rust component in Thunderbird is not without its challenges, mostly related to the size of the Thunderbird codebase. For example, there is a lot of existing code with idiosyncratic asynchronous patterns that don’t integrate nicely with idiomatic Rust. There are also lots of features and capabilities in the Firefox and Thunderbird codebase that don’t have any existing Rust bindings.&lt;/p&gt;
  2938.  
  2939.  
  2940.  
  2941. &lt;h5&gt;The first roadblock: the build system&lt;/h5&gt;
  2942.  
  2943.  
  2944.  
  2945. &lt;p&gt;Our first hurdle came with getting any Rust code to run in Thunderbird at all. There are two things you need to know to understand why:&lt;/p&gt;
  2946.  
  2947.  
  2948.  
  2949. &lt;p&gt;First, since the Firefox code is a dependency of Thunderbird, you might expect that we pull in their code as a subtree of our own, or some similar mechanism. However, for historical reasons, it’s the other way around: building Thunderbird requires fetching Firefox’s code, fetching Thunderbird’s code as a subtree of Firefox’s, and using a build configuration file to point into that subtree.&lt;/p&gt;
  2950.  
  2951.  
  2952.  
  2953. &lt;p&gt;Second, because Firefox’s entrypoint is written in C++ and Rust calls happen via an interoperability layer, there is no single point of entry for Rust. In order to create a tree-wide dependency graph for Cargo and avoid duplicate builds or version/feature conflicts, Firefox introduced a hack to generate a single Cargo workspace which aggregates all the individual crates in the tree.&lt;/p&gt;
  2954.  
  2955.  
  2956.  
  2957. &lt;p&gt;In isolation, neither of these is a problem in itself. However, in order to build Rust into Thunderbird, we needed to define our own Cargo workspace which lives in our tree, and Cargo does not allow nesting workspaces. To solve this issue, we had to define our own workspace and add configuration to the upstream build tool, &lt;code&gt;mach&lt;/code&gt;, to build from this workspace instead of Firefox’s. We then use a newly-added &lt;code&gt;mach&lt;/code&gt; subcommand to sync our dependencies and lockfile with upstream and to vendor the resulting superset.&lt;/p&gt;
  2958.  
  2959.  
  2960.  
  2961. &lt;h5&gt;XPCOM&lt;/h5&gt;
  2962.  
  2963.  
  2964.  
  2965. &lt;p&gt;While the availability of language interop through XPCOM is important for integrating our frontend and backend, the developer experience has presented some challenges. Because XPCOM was originally designed with C++ in mind, implementing or consuming an XPCOM interface requires a lot of boilerplate and prevents us from taking full advantage of tools like rust-analyzer. Over time, Firefox has significantly reduced its reliance on XPCOM, making a clunky Rust+XPCOM experience a relatively minor consideration. However, as part of the previously-discussed maintenance gap, Thunderbird never undertook a similar project, and supporting a new mail protocol requires implementing hundreds of functions defined in XPCOM.&lt;/p&gt;
  2966.  
  2967.  
  2968.  
  2969. &lt;p&gt;Existing protocol implementations ease this burden by inheriting C++ classes which provide the basis for most of the shared behavior. Since we can’t do this directly, we are instead implementing our protocol-specific logic in Rust and communicating with a bridge class in C++ which combines our Rust implementations (an internal crate called &lt;code&gt;ews_xpcom&lt;/code&gt;) with the existing code for shared behavior, with as small an interface between the two as we can manage.&lt;/p&gt;
  2970.  
  2971.  
  2972.  
  2973. &lt;p&gt;Please visit our &lt;a href=&quot;https://source-docs.thunderbird.net/en/latest/rust/index.html&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;documentation&lt;/a&gt; to learn more about how to create Rust components in Thunderbird.&lt;/p&gt;
  2974.  
  2975.  
  2976.  
  2977. &lt;h3&gt;Implementing Exchange support with Rust&lt;/h3&gt;
  2978.  
  2979.  
  2980.  
  2981. &lt;p&gt;Despite the technical hiccups experienced along the way, we were able to clear the hurdles, use, and build Rust within Thunderbird. Now we can talk about how we’re using it and the tools we’re building. Remember all the way back to the beginning of this blog post, where we stated that our goal is to support Microsoft’s Exchange Web Services (EWS) API. EWS communicates over HTTP with request and response bodies in XML.&lt;/p&gt;
  2982.  
  2983.  
  2984.  
  2985. &lt;h4&gt;Sending HTTP requests&lt;/h4&gt;
  2986.  
  2987.  
  2988.  
  2989. &lt;p&gt;Firefox already includes a full-featured HTTP stack via its &lt;code&gt;necko&lt;/code&gt; networking component. However, &lt;code&gt;necko&lt;/code&gt; is written in C++ and exposed over XPCOM, which as previously stated does not make for nice, idiomatic Rust. Simply sending a GET request requires a great deal of boilerplate, including nasty-looking unsafe blocks where we call into XPCOM. (XPCOM manages the lifetime of pointers and their referents, ensuring memory safety, but the Rust compiler doesn’t know this.) Additionally, the interfaces we need are callback-based. For making HTTP requests to be simple for developers, we need to do two things:&lt;/p&gt;
  2990.  
  2991.  
  2992.  
  2993. &lt;ol&gt;
  2994. &lt;li&gt;&lt;strong&gt;Support native Rust async/await syntax.&lt;/strong&gt; For this, we added a new Thunderbird-internal crate, &lt;code&gt;xpcom_async&lt;/code&gt;. This is a low-level crate which translates asynchronous operations in XPCOM into Rust’s native async syntax by defining callbacks to buffer incoming data and expose it by implementing Rust’s &lt;code&gt;Future&lt;/code&gt; trait so that it can be awaited by consumers. (If you’re not familiar with the &lt;code&gt;Future&lt;/code&gt; concept in Rust, it is similar to a JS &lt;code&gt;Promise&lt;/code&gt; or a Python coroutine.)&lt;/li&gt;
  2995.  
  2996.  
  2997.  
  2998. &lt;li&gt;&lt;strong&gt;Provide an idiomatic HTTP API.&lt;/strong&gt; Now that we had native &lt;code&gt;async&lt;/code&gt;/&lt;code&gt;await&lt;/code&gt; support, we created another internal crate (&lt;code&gt;moz_http&lt;/code&gt;) which provides an HTTP client inspired by &lt;code&gt;reqwest&lt;/code&gt;. This crate handles creating all of the necessary XPCOM objects and providing Rustic error handling (much nicer than the standard XPCOM error handling).&lt;/li&gt;
  2999. &lt;/ol&gt;
  3000.  
  3001.  
  3002.  
  3003. &lt;h4&gt;Handling XML requests and responses&lt;/h4&gt;
  3004.  
  3005.  
  3006.  
  3007. &lt;p&gt;The hardest task in working with EWS is translating between our code’s own data structures and the XML expected/provided by EWS. Existing crates for serializing/deserializing XML didn’t meet our needs. &lt;code&gt;serde&lt;/code&gt;’s data model doesn’t align well with XML, making distinguishing XML attributes and elements difficult. EWS is also sensitive to XML namespaces, which are completely foreign to &lt;code&gt;serde&lt;/code&gt;. Various &lt;code&gt;serde&lt;/code&gt;-inspired crates designed for XML exist, but these require explicit annotation of how to serialize every field. EWS defines hundreds of types which can have dozens of fields, making that amount of boilerplate untenable.&lt;/p&gt;
  3008.  
  3009.  
  3010.  
  3011. &lt;p&gt;Ultimately, we found that existing &lt;code&gt;serde&lt;/code&gt;-based implementations worked fine for deserializing XML into Rust, but we were unable to find a satisfactory tool for serialization. To that end, we introduced another new crate, &lt;code&gt;xml_struct&lt;/code&gt;. This crate defines traits governing serialization behavior and uses Rust’s procedural derive macros to automatically generate implementations of these traits for Rust data structures. It is built on top of the existing &lt;code&gt;quick_xml&lt;/code&gt; crate and designed to create a low-boilerplate, intuitive mapping between XML and Rust.  While it is in the early stages of development, it does not make use of any Thunderbird/Firefox internals and is &lt;a href=&quot;https://github.com/thunderbird/xml-struct-rs&quot;&gt;available on GitHub&lt;/a&gt;.&lt;/p&gt;
  3012.  
  3013.  
  3014.  
  3015. &lt;p&gt;We have also introduced one more new crate, &lt;code&gt;ews&lt;/code&gt;, which defines types for working with EWS and an API for XML serialization/deserialization, based on &lt;code&gt;xml_struct&lt;/code&gt; and &lt;code&gt;serde&lt;/code&gt;. Like &lt;code&gt;xml_struct&lt;/code&gt;, it is in the early stages of development, but is &lt;a href=&quot;https://github.com/thunderbird/ews-rs&quot;&gt;available on GitHub&lt;/a&gt;.&lt;/p&gt;
  3016.  
  3017.  
  3018.  
  3019. &lt;h4&gt;Overall flow chart&lt;/h4&gt;
  3020.  
  3021.  
  3022.  
  3023. &lt;p&gt;Below, you can find a handy flow chart to help understand the logical flow for making an Exchange request and handling the response. &lt;/p&gt;
  3024.  
  3025.  
  3026.  
  3027. &lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2024/04/pasted-image-.png&quot;&gt;&lt;img alt=&quot;A bird's eye view of the flow&quot; class=&quot;wp-image-1708&quot; height=&quot;716&quot; src=&quot;https://blog.thunderbird.net/files/2024/04/pasted-image-.png&quot; title=&quot;A bird’s eye view of the flow&quot; width=&quot;1600&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  3028.  
  3029.  
  3030.  
  3031. &lt;p&gt;Fig 1. A bird’s eye view of the flow&lt;/p&gt;
  3032.  
  3033.  
  3034.  
  3035. &lt;h3&gt;What’s next?&lt;/h3&gt;
  3036.  
  3037.  
  3038.  
  3039. &lt;h4&gt;Testing all the things&lt;/h4&gt;
  3040.  
  3041.  
  3042.  
  3043. &lt;p&gt;Before landing our next major features, we are taking some time to build out our automated tests. In addition to unit tests, we just landed a mock EWS server for integration testing. The current focus on testing is already paying dividends, having exposed a couple of crashes and some double-sync issues which have since been rectified. Going forward, new features can now be easily tested and verified.&lt;/p&gt;
  3044.  
  3045.  
  3046.  
  3047. &lt;h4&gt;Improving error handling&lt;/h4&gt;
  3048.  
  3049.  
  3050.  
  3051. &lt;p&gt;While we are working on testing, we are also busy improving the story around error handling. EWS’s error behavior is often poorly documented, and errors can occur at multiple levels (e.g., a request may fail as a whole due to throttling or incorrect structure, or parts of a request may succeed while other parts fail due to incorrect IDs). Some errors we can handle at the protocol level, while others may require user intervention or may be intractable. In taking the time now to improve error handling, we can provide a more polished implementation and set ourselves up for easier long-term maintenance.&lt;/p&gt;
  3052.  
  3053.  
  3054.  
  3055. &lt;h4&gt;Expanding support&lt;/h4&gt;
  3056.  
  3057.  
  3058.  
  3059. &lt;p&gt;We are working on expanding protocol support for EWS (via &lt;code&gt;ews&lt;/code&gt; and the internal &lt;code&gt;ews_xpcom&lt;/code&gt; crate) and hooking it into the Thunderbird UI. Earlier this month, we landed a series of patches which allow adding an EWS account to Thunderbird, syncing the account’s folder hierarchy from the remote server, and displaying those folders in the UI. (At present, this alpha-state functionality is gated behind a build flag and a preference.) Next up, we’ll work on fetching message lists from the remote server as well as generalizing outgoing mail support in Thunderbird.&lt;/p&gt;
  3060.  
  3061.  
  3062.  
  3063. &lt;h4&gt;Documentation&lt;/h4&gt;
  3064.  
  3065.  
  3066.  
  3067. &lt;p&gt;Of course, all of our work on maintainability is for naught if no one understands what the code does. To that end, we’re producing documentation on how all of the bits we have talked about here come together, as well as describing the existing architecture of mail protocols in Thunderbird and thoughts on future improvements, so that once the work of supporting EWS is done, we can continue building and improving on the Thunderbird you know and love.&lt;/p&gt;
  3068.  
  3069.  
  3070.  
  3071. &lt;h5&gt;QUESTIONS FROM YOU&lt;/h5&gt;
  3072.  
  3073.  
  3074.  
  3075. &lt;h5&gt;EWS is deprecated for removal in 2026. Are there plans to add support for Microsoft Graph into Thunderbird?&lt;/h5&gt;
  3076.  
  3077.  
  3078.  
  3079. &lt;blockquote class=&quot;wp-block-quote&quot;&gt;
  3080. &lt;p&gt;This is a common enough question that we probably should have addressed it in the post! EWS will no longer be available for Exchange Online in October 2026, but our research in the lead-up to this project showed that there’s a significant number of users who are still using on-premise installs of Exchange Server. That is, many companies and educational institutions are running Exchange Server on their own hardware.&lt;/p&gt;
  3081. &lt;/blockquote&gt;
  3082.  
  3083.  
  3084.  
  3085. &lt;blockquote class=&quot;wp-block-quote&quot;&gt;
  3086. &lt;p&gt;These on-premise installs largely support EWS, but they cannot support the Azure-based Graph API. We expect that this will continue to be the case for some time to come, and EWS provides a means of supporting those users for the foreseeable future. Additionally, we found a few outstanding issues with the Graph API (which is built with web-based services in mind, not desktop applications), and adding EWS support allows us to take some extra time to find solutions to those problems before building Graph API support.&lt;/p&gt;
  3087.  
  3088.  
  3089.  
  3090. &lt;p&gt;Diving into the past has enabled a sound engineering-led strategy for dealing with the future: Thanks to the deep dive into the existing Thunderbird architecture we can begin to leverage more efficient and productive patterns and technologies when implementing protocols.&lt;/p&gt;
  3091.  
  3092.  
  3093.  
  3094. &lt;p&gt;In time this will have far reaching consequences for the Thunderbird code base which will not only run faster and more reliably, but significantly reduce maintenance burden when landing bug fixes and new features.&lt;/p&gt;
  3095.  
  3096.  
  3097.  
  3098. &lt;p&gt;Rust and EWS are elements of a larger effort in Thunderbird to reduce turnarounds and build resilience into the very core of the software.&lt;/p&gt;
  3099. &lt;/blockquote&gt;
  3100. &lt;p&gt;The post &lt;a href=&quot;https://blog.thunderbird.net/2024/04/adventures-in-rust-bringing-exchange-support-to-thunderbird/&quot;&gt;Adventures In Rust: Bringing Exchange Support To Thunderbird&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;</description>
  3101. <pubDate>Fri, 19 Apr 2024 16:50:17 +0000</pubDate>
  3102. <dc:creator>Sean Burke</dc:creator>
  3103. </item>
  3104. <item>
  3105. <title>Firefox UX: On Purpose: Collectively Defining Our Team’s Mission Statement</title>
  3106. <guid isPermaLink="false">https://blog.mozilla.org/ux/?p=4477</guid>
  3107. <link>https://blog.mozilla.org/ux/2024/04/on-purpose-collectively-defining-our-teams-mission-statement/</link>
  3108. <description>&lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;7f2c&quot;&gt;&lt;em class=&quot;aep&quot;&gt;How the Firefox User Research team crafted our mission statement&lt;/em&gt;&lt;/p&gt;
  3109. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_4478&quot; style=&quot;width: 788px;&quot;&gt;&lt;img alt=&quot;Image of person hugging Firefox logo&quot; class=&quot; wp-image-4478&quot; height=&quot;589&quot; src=&quot;https://blog.mozilla.org/ux/files/2024/04/firefox-hug-300x227.jpg&quot; width=&quot;778&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-4478&quot;&gt;Firefox illustration by UX designer &lt;a href=&quot;https://www.gbrielle.design/&quot;&gt;Gabrielle Lussier&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
  3110. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;6b08&quot;&gt;Like many people who work at Mozilla, I’m inspired by the &lt;a class=&quot;af jo&quot; href=&quot;https://www.mozilla.org/en-US/mission/&quot; rel=&quot;noopener ugc nofollow&quot; target=&quot;_blank&quot;&gt;organization’s mission&lt;/a&gt;: &lt;em class=&quot;aep&quot;&gt;to ensure the Internet is a global public resource, open and accessible to all&lt;/em&gt;. In thinking about the team I belong to, though, what’s our piece of this bigger puzzle?&lt;/p&gt;
  3111. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;8035&quot;&gt;The Firefox User Research team tackled this question early last year. We gathered in person for a week of team-focused activities; defining a team mission statement was on the agenda. As someone who enjoys workshop creation and strategic planning, I was on point to develop the workshop. The end goal? A team-backed statement that communicated our unique purpose and value.&lt;/p&gt;
  3112. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;85c6&quot;&gt;Mission statement development was new territory for me. I read up on approaches for creating them and landed on a workshop design (adapted from &lt;a class=&quot;af jo&quot; href=&quot;https://itk.mitre.org/toolkit-tools/mission-and-vision-canvas/&quot; rel=&quot;noopener ugc nofollow&quot; target=&quot;_blank&quot;&gt;MITRE’s Innovation Toolkit&lt;/a&gt;) that would enable the team to participate in a process of collectively reflecting on our work and defining our shared purpose.&lt;/p&gt;
  3113. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;2627&quot;&gt;To my delight, the workshop was fruitful and engaging. Not only did it lead us to a statement that resonates, it sparked meaningful discussion along the way.&lt;/p&gt;
  3114. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;b135&quot;&gt;Here, I outline the &lt;strong class=&quot;adw jx&quot;&gt;five workshop activities &lt;/strong&gt;that guided us there.&lt;/p&gt;
  3115. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;252e&quot;&gt;&lt;strong class=&quot;adw jx&quot;&gt;1) Discuss the value of a good mission statement&lt;/strong&gt;&lt;/p&gt;
  3116. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;861a&quot;&gt;We kicked off the workshop by discussing the value of a well-crafted statement. Why were we aiming to define one in the first place? Benefits include: fostering alignment between the team’s activities and objectives, communicating the team’s purpose, and helping the team to cohere around a shared direction. In contrast to a vision statement, which describes future conditions in aspirational language, a mission statement describes present conditions in concrete terms.&lt;/p&gt;
  3117. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;9804&quot;&gt;In our case, the team had recently grown in size to thirteen people. We had a fairly new leadership team, along with a few new members of the team. With a mix of longer tenure and newer members, and quantitative and mixed methods researchers (which at one point in the past had been on separate teams), we wanted to inspire team alignment around our shared goals and build bridges between team members.&lt;/p&gt;
  3118. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;9378&quot;&gt;&lt;strong class=&quot;adw jx&quot;&gt;2) Individually answer a set of questions about our team’s work&lt;/strong&gt;&lt;/p&gt;
  3119. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;d613&quot;&gt;Large sheets of paper were set up around the room with the following questions:&lt;/p&gt;
  3120. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;7dd2&quot;&gt;A. What do we, as a user research team, do?&lt;/p&gt;
  3121. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;cc8c&quot;&gt;B. How do we do what we do?&lt;/p&gt;
  3122. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;c133&quot;&gt;C. What value do we bring?&lt;/p&gt;
  3123. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;ea1c&quot;&gt;D. Who benefits from our work?&lt;/p&gt;
  3124. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;abfd&quot;&gt;E. Why does our team exist?&lt;/p&gt;
  3125. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;1f72&quot;&gt;Markers in hand, team members dispersed around the room, spending a few minutes writing answers to each question until we had cycled through them all.&lt;/p&gt;
  3126. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_4479&quot; style=&quot;width: 775px;&quot;&gt;&lt;img alt=&quot;People in a workshop&quot; class=&quot; wp-image-4479&quot; height=&quot;574&quot; src=&quot;https://blog.mozilla.org/ux/files/2024/04/IMG_25821-300x225.jpg&quot; width=&quot;765&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-4479&quot;&gt;Team members during the workshop&lt;/p&gt;&lt;/div&gt;
  3127. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;d0f0&quot;&gt;&lt;strong class=&quot;adw jx&quot;&gt;3) Highlight keywords and work in groups to create draft statements&lt;/strong&gt;&lt;/p&gt;
  3128. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;8431&quot;&gt;Small groups were formed and were tasked with highlighting keywords from the answers provided in the previous step. These keywords served as the foundation for drafting statements, with the following format provided as a helpful guide:&lt;/p&gt;
  3129. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;9344&quot;&gt;Our mission is to (A — &lt;em class=&quot;aep&quot;&gt;what we do&lt;/em&gt;) by (B — &lt;em class=&quot;aep&quot;&gt;how we do it&lt;/em&gt;).&lt;/p&gt;
  3130. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;d66a&quot;&gt;We (C &lt;em class=&quot;aep&quot;&gt;— the value we bring&lt;/em&gt;) so that (D — &lt;em class=&quot;aep&quot;&gt;who benefits from our work&lt;/em&gt; ) can (E — &lt;em class=&quot;aep&quot;&gt;why we exist&lt;/em&gt;).&lt;/p&gt;
  3131. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_4480&quot; style=&quot;width: 591px;&quot;&gt;&lt;img alt=&quot;&quot; class=&quot; wp-image-4480&quot; height=&quot;775&quot; src=&quot;https://blog.mozilla.org/ux/files/2024/04/IMG_2585-2-300x400.jpg&quot; width=&quot;581&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-4480&quot;&gt;One group’s draft statement from Step 3&lt;/p&gt;&lt;/div&gt;
  3132. &lt;article&gt;
  3133. &lt;div class=&quot;l&quot;&gt;
  3134. &lt;div class=&quot;l&quot;&gt;
  3135. &lt;section&gt;
  3136. &lt;div&gt;
  3137. &lt;div class=&quot;kd lo mf zn zo&quot;&gt;
  3138. &lt;div class=&quot;ab cl&quot;&gt;
  3139. &lt;div class=&quot;cm bg cn co cp cq&quot;&gt;
  3140. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;99bc&quot;&gt;&lt;strong class=&quot;adw jx&quot;&gt;4) Review and discuss resulting statements&lt;/strong&gt;&lt;/p&gt;
  3141. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;7ee9&quot;&gt;Draft statements emerged remarkably fluidly from the activities in Steps 2 and 3. Common elements were easy to identify (we develop insights and shape product decisions), while the differences sparked worthwhile discussions. For example: How well does the term ‘human-centered’ capture the work of our quantitative researchers? Is creating empathy for our users a core part of our purpose? How does our value extend beyond impacting product decisions?&lt;/p&gt;
  3142. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;53dc&quot;&gt;As a group, we reviewed and discussed the statements, crossing out any jargony terms and underlining favoured actions and words. After this step, we knew we were close to a final statement. We concluded the workshop, with a plan to revisit the statements when we were back to work the following week.&lt;/p&gt;
  3143. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;2588&quot;&gt;&lt;strong class=&quot;adw jx&quot;&gt;5) Refine and share for feedback&lt;/strong&gt;&lt;/p&gt;
  3144. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;3866&quot;&gt;The following week, we refined our work and shared the outcome with the lead of our Content Design practice for review. Her sharp feedback included encouraging us to change the phrase ‘&lt;em class=&quot;aep&quot;&gt;informing &lt;/em&gt;strategic decisions’ to ‘&lt;em class=&quot;aep&quot;&gt;influencing&lt;/em&gt; strategic decisions’ to articulate our role as less passive — a change we were glad to make. After another round of editing, we arrived at our final mission statement:&lt;/p&gt;
  3145. &lt;blockquote class=&quot;afh afi afj&quot;&gt;
  3146. &lt;p class=&quot;adu adv aep adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;40b1&quot;&gt;&lt;strong class=&quot;adw jx&quot;&gt;Our mission is to influence strategic decisions through systematic, qualitative, and quantitative research. We develop insights that uncover opportunities for Mozilla to build an open and healthy internet for all.&lt;/strong&gt;&lt;/p&gt;
  3147. &lt;/blockquote&gt;
  3148. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;e4b4&quot;&gt;&lt;strong class=&quot;adw jx&quot;&gt;Closing thoughts&lt;/strong&gt;&lt;/p&gt;
  3149. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;1bab&quot;&gt;If you’re considering involving your team in defining a team mission statement, it makes for a rewarding workshop activity. The five steps presented in this article give team members the opportunity to reflect on important foundational questions (what value do we bring?), while deepening mutual understanding.&lt;/p&gt;
  3150. &lt;p class=&quot;pw-post-body-paragraph adu adv zq adw b adx ady adz aea aeb aec aed aee wn aef aeg aeh wq aei aej aek wt ael aem aen aeo kd bj&quot; id=&quot;ea14&quot;&gt;Crafting a team mission statement was much less of an exercise in wordsmithing than I might have assumed. Instead, it was an exercise in aligning on the bigger questions of why we exist and who benefits from our work. I walked away with a better understanding of the value our team brings to Mozilla, a clearer way to articulate how our work ladders up to the organization’s mission, and a deeper appreciation for the individual perspectives of our team members.&lt;/p&gt;
  3151. &lt;/div&gt;
  3152. &lt;/div&gt;
  3153. &lt;/div&gt;
  3154. &lt;/div&gt;
  3155. &lt;/section&gt;
  3156. &lt;/div&gt;
  3157. &lt;/div&gt;
  3158. &lt;/article&gt;</description>
  3159. <pubDate>Thu, 18 Apr 2024 20:17:26 +0000</pubDate>
  3160. <dc:creator>Brooke Sykes</dc:creator>
  3161. </item>
  3162. <item>
  3163. <title>The Mozilla Blog: Unboxing AI with the next generation</title>
  3164. <guid isPermaLink="false">https://blog.mozilla.org/?p=74633</guid>
  3165. <link>https://blog.mozilla.org/en/mozilla/ai/ai-tactical-tech-mozilla/</link>
  3166. <description>&lt;p&gt;Technology and Artificial Intelligence (AI) are just about everywhere, all the time — and that’s even more the case for the younger generation. We rely on apps, algorithms and chatbots to stay informed and connected. We work, study and entertain ourselves online. We check the news, learn about elections and stay informed during crises through screens. We monitor our health using smart devices and make choices based on the results and recommendations displayed back to us. Very few aspects of our lives evades digitization, and even those that remain analog require intention and mindfulness to keep it that way.&lt;/p&gt;
  3167.  
  3168.  
  3169.  
  3170. &lt;p&gt;In this context and with the rise of AI and a growing generation of teens relying on the internet for learning, entertainment and socializing, now more than ever, it’s important to find ways to involve them in conversations about how technology influences their lives, their communities and the future of the planet.&lt;/p&gt;
  3171.  
  3172.  
  3173.  
  3174. &lt;p&gt;&lt;strong&gt;Tech isn’t all or nothing — it’s something in between&lt;/strong&gt;&lt;/p&gt;
  3175.  
  3176.  
  3177.  
  3178. &lt;p&gt;The message adults used early on when it came to discussing technology with teens was “don’t.” Don’t spend too much time on your phone. Don’t play video games. Don’t use social media. This old-school method proved ineffective and, in some cases, counterproductive.&lt;/p&gt;
  3179.  
  3180.  
  3181.  
  3182. &lt;p&gt;More recently, things have changed, and in some cases, adults have welcomed technology into their homes with open arms, sometimes without critique or caution. At the same time, schools have put great emphasis on training teens in web development and robotics in order to prepare them for the ever-changing job market. But before slow-motion running on a beach into a full embrace with technology, pause for a moment to reflect on the power of what we hold in our hands, and consider the profound ways in which it has reshaped our world.&lt;/p&gt;
  3183.  
  3184.  
  3185.  
  3186. &lt;p&gt;It’s as if adults jumped between two extreme poles: from utter dystopia, to bright and shiny techno-solutionism, skipping the nuances in between. So, how can adults prepare to foster discussions with teens about technological ethics and the impacts of technology? How can teens be involved and engaged in conversations about their relationship to the technologies they use? We share the future with younger generations, so we need to involve them in these conversations in meaningful ways.&lt;/p&gt;
  3187.  
  3188.  
  3189.  
  3190. &lt;figure class=&quot;wp-block-embed aligncenter 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;
  3191.  
  3192. &lt;/div&gt;&lt;/figure&gt;
  3193.  
  3194.  
  3195.  
  3196. &lt;p&gt;&lt;strong&gt;Teens don’t just want to have fun, they want to talk about what matters to them&lt;/strong&gt;&lt;/p&gt;
  3197.  
  3198.  
  3199.  
  3200. &lt;p&gt;At &lt;a href=&quot;https://tacticaltech.org/&quot;&gt;Tactical Tech, &lt;/a&gt;we’re always coming up with creative, sometimes unconventional ways to talk about technology and its impacts. We make public exhibitions in unexpected places. We create toolkits and guides in surprising formats. But to make interventions specifically for teens, we knew we needed to get them involved. We asked almost 300 international teens what matters to them, what they worry about and what they expect the future to be like. The results gave us goosebumps. Here are just a few quotes:&lt;/p&gt;
  3201.  
  3202.  
  3203.  
  3204. &lt;ul&gt;
  3205. &lt;li&gt;“I have a sad feeling that everything in the future will be online, including school.”&lt;/li&gt;
  3206.  
  3207.  
  3208.  
  3209. &lt;li&gt;“Everyone is inside all the time, they’re not outside enjoying the world.”&lt;/li&gt;
  3210.  
  3211.  
  3212.  
  3213. &lt;li&gt;“Loneliness is a problem. Online relationships aren’t real.”&lt;/li&gt;
  3214. &lt;/ul&gt;
  3215.  
  3216.  
  3217.  
  3218. &lt;p&gt;But not all of their responses were so despairing. They also had dreams about technology being used to help us, such as through education and medical advancements.&lt;/p&gt;
  3219.  
  3220.  
  3221.  
  3222. &lt;ul&gt;
  3223. &lt;li&gt;“Internet can close the distance gap that currently exists. Since society is more connected, cultures are more accepted.”&lt;/li&gt;
  3224.  
  3225.  
  3226.  
  3227. &lt;li&gt;“Nobody dies. Artificial intelligence has trained on their personalities, and we can digitally bring them back to life thanks to this data.”&lt;/li&gt;
  3228. &lt;/ul&gt;
  3229.  
  3230.  
  3231.  
  3232. &lt;p&gt;We also asked 100 international educators what they needed in order to confidently talk to teens about technology. Educators felt positive about our creative, and non-judgmental approach. They encouraged us to make resources that are even more playful, to add more relatable examples and to make sure the points are as concrete and transferable as possible.&lt;/p&gt;
  3233.  
  3234.  
  3235.  
  3236. &lt;p&gt;&lt;strong&gt;Breaching serious topics in fun and creative ways&lt;/strong&gt;&lt;/p&gt;
  3237.  
  3238.  
  3239.  
  3240. &lt;p&gt;With all that in mind, we co-created &lt;a href=&quot;https://www.theglassroom.org/youth/everywhere-all-the-time/&quot;&gt;Everywhere, All The Time, &lt;/a&gt;a fun-yet-impactful learning experience for teens. Educators can use it to encourage young people to talk about technology, AI and how it affects them. Everywhere, All The Time, can be used to create a space where they can think about their relationship with technology and become inspired to make choices about the digital world they want to live in. This self-learning intervention includes a package with captivating posters and activities about:&lt;/p&gt;
  3241.  
  3242.  
  3243.  
  3244. &lt;ul&gt;
  3245. &lt;li&gt;Gaming and the attention economy&lt;/li&gt;
  3246.  
  3247.  
  3248.  
  3249. &lt;li&gt;Our relationship to technology&lt;/li&gt;
  3250.  
  3251.  
  3252.  
  3253. &lt;li&gt;How Large Language Models (LLMs) work&lt;/li&gt;
  3254.  
  3255.  
  3256.  
  3257. &lt;li&gt;Algorithms in everyday life&lt;/li&gt;
  3258.  
  3259.  
  3260.  
  3261. &lt;li&gt;The materiality of the internet&lt;/li&gt;
  3262.  
  3263.  
  3264.  
  3265. &lt;li&gt;The invisible labor behind technology&lt;/li&gt;
  3266. &lt;/ul&gt;
  3267.  
  3268.  
  3269.  
  3270. &lt;p&gt;The package, created by Tactical Tech’s youth initiative, What the Future Wants, includes provocative posters, engaging activity cards and a detailed guidebook that trains educators to facilitate these nuanced and sometimes delicate conversations.&lt;/p&gt;
  3271.  
  3272.  
  3273.  
  3274. &lt;p&gt;Whether you work in a school, library, community center or want to hang it up at home, you can use the Everywhere, All The Time posters, activity cards and guidebook to start conversations with teens about the topics they care about. Now is the moment to come together and involve teens in these conversations.&lt;/p&gt;
  3275.  
  3276.  
  3277.  
  3278. &lt;a class=&quot;ft-c-inline-cta&quot; href=&quot;https://www.mozilla.org/en-US/firefox/new?utm_medium=mozilla-websites&amp;amp;utm_source=blog.mozilla.org&amp;amp;utm_content=inline-cta&quot;&gt;
  3279.  &lt;div class=&quot;ft-c-inline-cta__media&quot;&gt;
  3280.  &lt;img alt=&quot;&quot; class=&quot;attachment-1x1 size-1x1&quot; height=&quot;512&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2020/12/Fx-Browser-icon-fullColor-512-512x512.png&quot; width=&quot;512&quot; /&gt;  &lt;/div&gt;
  3281.  &lt;div class=&quot;ft-c-inline-cta__content&quot;&gt;
  3282.     &lt;h3&gt;Get Firefox&lt;/h3&gt;      &lt;span&gt;Get the browser that protects what’s important&lt;/span&gt;   &lt;/div&gt;
  3283. &lt;/a&gt;
  3284. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/mozilla/ai/ai-tactical-tech-mozilla/&quot;&gt;Unboxing AI with the next generation&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;</description>
  3285. <pubDate>Thu, 18 Apr 2024 16:34:36 +0000</pubDate>
  3286. <dc:creator>Aron Yohannes</dc:creator>
  3287. </item>
  3288. <item>
  3289. <title>The Mozilla Blog: Finn Myrstad reflects on holding tech companies accountable and ensuring that human rights are respected</title>
  3290. <guid isPermaLink="false">https://blog.mozilla.org/?p=74537</guid>
  3291. <link>https://blog.mozilla.org/en/internet-culture/finn-myrstad-rise25-mozilla-norwegian-consumer-council/</link>
  3292. <description>&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;
  3293.  
  3294. &lt;/div&gt;&lt;/figure&gt;
  3295.  
  3296.  
  3297.  
  3298. &lt;p&gt;&lt;em&gt;At Mozilla, we know we can’t create a better future alone, that is why each year we will be highlighting the work of 25 digital leaders using technology to amplify voices, effect change, and build new technologies globally through our &lt;a href=&quot;https://rise25.mozilla.org/?_gl=1*585km0*_ga*MTY1MDQ4MTg2NC4xNjk5NDc0NTE5*_ga_X4N05QV93S*MTcwNzE4MDk3Ny40NC4wLjE3MDcxODA5NzcuMC4wLjA.&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Rise 25 Awards.&lt;/a&gt; These storytellers, innovators, activists, advocates, builders and artists are helping make the internet more diverse, ethical, responsible and inclusive.&lt;/em&gt;&lt;/p&gt;
  3299.  
  3300.  
  3301.  
  3302. &lt;p&gt;&lt;em&gt;This week, we chatted with Finn Lützow-Holm Myrstad, a true leader of development of better and more ethical digital policies and standards for the Norwegian Consumer Council. We talked with Finn about his work focusing on tech policy, the biggest concerns in 2024 and ways people can take action against those in power.&lt;/em&gt;&lt;/p&gt;
  3303.  
  3304.  
  3305.  
  3306. &lt;p&gt;&lt;strong&gt;You started your journey to the work you do now when you were a little kid going to camps. What did that experience teach you that you appreciate now as an adult?&lt;/strong&gt;&lt;/p&gt;
  3307.  
  3308.  
  3309.  
  3310. &lt;p&gt;Since CISV International gathered children from around the world and emphasized team building and friendship, it gave me a more global perspective and made me realize how we need to work together to solve problems that concern us all. Now that the internet is spreading to all corners of the world and occupying a larger part of our lives, we also need to work together to solve the challenges this creates.&lt;/p&gt;
  3311.  
  3312.  
  3313.  
  3314. &lt;p&gt;&lt;strong&gt;There’s a magnitude of subjects of concern in the tech policy space, especially considering how rapid tech is evolving in our world. Which area has you most concerned?&lt;/strong&gt;&lt;/p&gt;
  3315.  
  3316.  
  3317.  
  3318. &lt;p&gt;Our freedom to think and act freely is under pressure as increased power and information asymmetries put people at an unprecedented disadvantage, which is reinforced by deceptive design, addictive design and artificial intelligence. This makes all of us vulnerable in certain contexts. Vulnerabilities can be identified and reinforced by increased data collection, in combination with harmful design and surveillance-based advertising. Harm will probably be reinforced against groups who are already vulnerable.&lt;/p&gt;
  3319.  
  3320.  
  3321.  
  3322. &lt;p&gt;&lt;strong&gt;What do you think are easy ways people can speak up and hold companies, politicians, etc. accountable that they might not even be thinking about?&lt;/strong&gt;&lt;/p&gt;
  3323.  
  3324.  
  3325.  
  3326. &lt;p&gt;This is not easy for the reason outlined above. Having said that, we all need to speak up. Talk to your local politicians and media about your concerns, and try to use alternative tech services when possible (for example: for messaging, browsing and web searches.) However, it is important to stress that many of the challenges need to be dealt with at the political and regulatory level.&lt;/p&gt;
  3327.  
  3328.  
  3329.  
  3330. &lt;p&gt;&lt;strong&gt;What do you think is the biggest challenge we face in the world this year on and offline? How do we combat it?&lt;/strong&gt;&lt;/p&gt;
  3331.  
  3332.  
  3333.  
  3334. &lt;p&gt;I see the biggest challenges as interlocked with each other. For example, this year in 2024, at least 49 percent of people in the world are meant to hold national elections. The decrease in trust in democracy and public institutions is a threat to freedom and to solving existential problems such as the climate emergency. Technology can be a part of solving these problems. However, that lack of transparency and accountability, in combination with power concentrated in a few tech companies, algorithms that favor enraging content, and a large climate and resource footprint, are currently part of the problem and not the solution.&lt;/p&gt;
  3335.  
  3336.  
  3337.  
  3338. &lt;p&gt;We need to hold companies to account and ensure that fundamental human rights are respected. &lt;/p&gt;
  3339.  
  3340.  
  3341. &lt;div class=&quot;wp-block-image&quot;&gt;
  3342. &lt;figure class=&quot;aligncenter size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-74548&quot; height=&quot;1024&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2024/04/Mozilla_rise25_Finn-Lutzow-Holm-Myrstad_1-683x1024.jpg&quot; width=&quot;683&quot; /&gt;&amp;lt;figcaption class=&quot;wp-element-caption&quot;&amp;gt;Finn Lützow-Holm Myrstad at Mozilla’s Rise25 award ceremony in October 2023.&amp;lt;/figcaption&amp;gt;&lt;/figure&gt;&lt;/div&gt;
  3343.  
  3344.  
  3345. &lt;p&gt;&lt;strong&gt;What is one action that you think everyone should take to make the world and our lives online a little better?&lt;/strong&gt;&lt;/p&gt;
  3346.  
  3347.  
  3348.  
  3349. &lt;p&gt;Pause to think before you post is generally a good rule. If we all took a bit more care when posting and resharing content online, we could probably contribute to a less polarized discussion and maybe also get less addicted to our phones.&lt;/p&gt;
  3350.  
  3351.  
  3352.  
  3353. &lt;p&gt;&lt;strong&gt;We started Rise25 to celebrate Mozilla’s 25th anniversary, what do you hope people are celebrating in the next 25 years?&lt;/strong&gt;&lt;/p&gt;
  3354.  
  3355.  
  3356.  
  3357. &lt;p&gt;That we managed to use the internet for positive change in the world, and that open internet is still alive.&lt;/p&gt;
  3358.  
  3359.  
  3360.  
  3361. &lt;p&gt;&lt;strong&gt;What gives you hope about the future of our world?&lt;/strong&gt;&lt;/p&gt;
  3362.  
  3363.  
  3364.  
  3365. &lt;p&gt;That there is increased focus from all generations on the need for collective action. Together, I hope we can solve big challenges like the climate crisis and securing a free and open internet.&lt;/p&gt;
  3366.  
  3367.  
  3368.  
  3369. &lt;a class=&quot;ft-c-inline-cta&quot; href=&quot;https://www.mozilla.org/en-US/firefox/new?utm_medium=mozilla-websites&amp;amp;utm_source=blog.mozilla.org&amp;amp;utm_content=inline-cta&quot;&gt;
  3370.  &lt;div class=&quot;ft-c-inline-cta__media&quot;&gt;
  3371.  &lt;img alt=&quot;&quot; class=&quot;attachment-1x1 size-1x1&quot; height=&quot;512&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2020/12/Fx-Browser-icon-fullColor-512-512x512.png&quot; width=&quot;512&quot; /&gt;  &lt;/div&gt;
  3372.  &lt;div class=&quot;ft-c-inline-cta__content&quot;&gt;
  3373.     &lt;h3&gt;Get Firefox&lt;/h3&gt;      &lt;span&gt;Get the browser that protects what’s important&lt;/span&gt;   &lt;/div&gt;
  3374. &lt;/a&gt;
  3375. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/internet-culture/finn-myrstad-rise25-mozilla-norwegian-consumer-council/&quot;&gt;Finn Myrstad reflects on holding tech companies accountable and ensuring that human rights are respected&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;</description>
  3376. <pubDate>Thu, 18 Apr 2024 16:00:00 +0000</pubDate>
  3377. <dc:creator>Aron Yohannes</dc:creator>
  3378. </item>
  3379. <item>
  3380. <title>Support.Mozilla.Org: Freshening up the Knowledge Base for spring 2024</title>
  3381. <guid isPermaLink="false">https://blog.mozilla.org/sumo/?p=4107</guid>
  3382. <link>https://blog.mozilla.org/sumo/2024/04/18/freshening-up-the-knowledge-base-for-spring-2024/</link>
  3383. <description>&lt;p&gt;Hello, SUMO community!&lt;/p&gt;
  3384. &lt;p&gt;This spring we’re happy to announce that we’re refreshing the Mozilla Firefox Desktop and Mobile knowledge bases. This is a project that we’ve been working on for the past several months and now, we’re ready to finally share it with you all! We’ve put together a video to walk you through what these changes mean for SUMO and how they’ll impact you.&lt;/p&gt;
  3385. &lt;p&gt;&lt;/p&gt;
  3386. &lt;p&gt;&lt;b&gt;Introduction of Article Categories&lt;/b&gt;&lt;/p&gt;
  3387. &lt;p&gt;When exploring our knowledge base, we realized there’s so many articles and it’s important to set expectations for users. We’ll be introducing three article types:&lt;/p&gt;
  3388. &lt;ul&gt;
  3389. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/en-US/kb/about-article-type-best-practices&quot;&gt;About&lt;/a&gt; – Article that aims to be educational and informs the reader about a certain feature.&lt;/li&gt;
  3390. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/en-US/kb/how-to-article-type-best-practices&quot;&gt;How To&lt;/a&gt; – Article that aims to teach a user how to interact with a feature or complete a task.&lt;/li&gt;
  3391. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/en-US/kb/troubleshooting-article-type-best-practices&quot;&gt;Troubleshooting&lt;/a&gt; – Article that aims to provide solutions to an issue a user might encounter.&lt;/li&gt;
  3392. &lt;li&gt;&lt;a href=&quot;https://support.mozilla.org/en-US/kb/faq-article-type-best-practices&quot;&gt;FAQ&lt;/a&gt; – Article that focuses on answering frequently asked questions that a user might have.&lt;/li&gt;
  3393. &lt;/ul&gt;
  3394. &lt;p&gt;We will standardize titles and how articles are formatted per category, so users know what to expect when interacting with an article.&lt;/p&gt;
  3395. &lt;p&gt;&lt;b&gt;Downsizing and concentration of articles&lt;/b&gt;&lt;/p&gt;
  3396. &lt;p&gt;There’s hundreds upon hundreds of articles in our knowledge base. However, many of them are repetitive and contain similar information. We want to reduce the number of articles and improve the quality of our content. We will be archiving articles and revising active articles throughout this refresh.&lt;/p&gt;
  3397. &lt;p&gt;&lt;b&gt;Style guideline update focus on reducing cognitive load&lt;/b&gt;&lt;/p&gt;
  3398. &lt;p&gt;As mentioned in a previous post, we will be updating the style guideline and aiming to reduce the cognitive load on users by introducing new style guidelines like in-line images. There’s not huge changes, but we’ll go over them more when we release the updated style guidelines.&lt;/p&gt;
  3399. &lt;p&gt;With all this coming up, we hope you join us for the community call today and learn more about the knowledge base refresh today. We hope to collaborate with our community to make this update successful.&lt;/p&gt;
  3400. &lt;p&gt;Have questions or feedback? Drop us a message in this &lt;a href=&quot;https://support.mozilla.org/en-US/forums/contributors/716916?last=87365&quot;&gt;SUMO forum thread&lt;/a&gt;.&lt;/p&gt;</description>
  3401. <pubDate>Thu, 18 Apr 2024 13:47:39 +0000</pubDate>
  3402. <dc:creator>Lucas Siebert</dc:creator>
  3403. </item>
  3404. <item>
  3405. <title>Mozilla Thunderbird: April 2024 Community Office Hours: Rust and Exchange Support</title>
  3406. <guid isPermaLink="false">https://blog.thunderbird.net/?p=1692</guid>
  3407. <link>https://blog.thunderbird.net/2024/04/april-2024-community-office-hours-rust-and-exchange-support/</link>
  3408. <description>&lt;p&gt;&lt;img alt=&quot;Text &amp;quot;COMMUNITY OFFICE HOURS APRIL 2024: RUST AND EXCHANGE&amp;quot; with a stylized Thunderbird bird icon in shades of blue and a custom community icon Iin the center on a lavender background with abstract circular design elements.&quot; class=&quot;attachment-640x360 size-640x360 wp-post-image&quot; height=&quot;360&quot; src=&quot;https://blog.thunderbird.net/files/2024/04/COH-APRIL-2024-768x432.png&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
  3409. &lt;p&gt;We admit it. Thunderbird is getting a bit Rusty, but in a good way!  In our monthly Development Digests, we’ve been updating the community about &lt;a href=&quot;https://blog.thunderbird.net/2024/01/thunderbird-monthly-development-digest-january-2024/&quot;&gt;enabling Rust in Thunderbird&lt;/a&gt; &lt;a href=&quot;https://blog.thunderbird.net/2024/02/thunderbird-monthly-development-digest-february-2024/&quot;&gt;to implement&lt;/a&gt; &lt;a href=&quot;https://blog.thunderbird.net/2024/04/thunderbird-monthly-development-digest-march-24/&quot;&gt;native support for Exchange&lt;/a&gt;. Now, we’d like to invite you for a chat with Team Thunderbird and the developers making this change possible.  As always, send your questions in advance to &lt;a href=&quot;mailto:officehours@thunderbird.net&quot;&gt;officehours@thunderbird.net&lt;/a&gt;! This is a great way to get answers even if you can’t join live.&lt;/p&gt;
  3410.  
  3411.  
  3412.  
  3413. &lt;p&gt;Be sure to note the change in day of the week and the UTC time. (At least the time changes are done for now!) We had to shift our calendar a bit to fit everyone’s schedules and time zones!&lt;/p&gt;
  3414.  
  3415.  
  3416.  
  3417. &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;
  3418.  
  3419. &lt;/div&gt;&amp;lt;figcaption class=&quot;wp-element-caption&quot;&amp;gt;UPDATE: Watch the entire conversation here. &amp;lt;/figcaption&amp;gt;&lt;/figure&gt;
  3420.  
  3421.  
  3422.  
  3423. &lt;h3&gt;April Office Hours: Rust and Exchange&lt;/h3&gt;
  3424.  
  3425.  
  3426.  
  3427. &lt;p&gt;This month’s topic is a new and exciting change to the core functionality: using Rust to natively support Microsoft Exchange. Join us and talk with the three key Thunderbird developers responsible for this shiny (&lt;em&gt;rusty&lt;/em&gt;) new addition: Sean Burke, Ikey Doherty, and Brendan Abolivier! You’ll find out why we chose Rust,  challenges we encountered, how we used Rust  to interface with XPCOM and Necko to provide Exchange support. We’ll also give you a peek into some future plans around Rust.&lt;/p&gt;
  3428.  
  3429.  
  3430.  
  3431. &lt;h3&gt;Catch Up On Last Month’s Thunderbird Community Office Hours&lt;/h3&gt;
  3432.  
  3433.  
  3434.  
  3435. &lt;p&gt;While you’re thinking of questions to ask, watch last month’s office hours where we answered some of your frequently asked recent questions. You can watch clips of specific questions and answers &lt;a href=&quot;https://tilvids.com/c/thunderbird_channel/videos?s=1&quot;&gt;on our TILvids channel&lt;/a&gt;. If you’d prefer a written summary, &lt;a href=&quot;https://blog.thunderbird.net/2024/04/team-thunderbird-answers-your-most-frequently-asked-questions/&quot;&gt;this blog post&lt;/a&gt; has you covered. &lt;/p&gt;
  3436.  
  3437.  
  3438.  
  3439. &lt;h3&gt;Join The Video Chat&lt;/h3&gt;
  3440.  
  3441.  
  3442.  
  3443. &lt;p&gt;We’ve also got a shiny new Big Blue Button room, thanks to KDE! We encourage everyone to check out their &lt;a href=&quot;https://community.kde.org/Get_Involved&quot;&gt;Get Involved page&lt;/a&gt;. We’re grateful for their support and to have an open source web conferencing solution for our community office hours.&lt;/p&gt;
  3444.  
  3445.  
  3446.  
  3447. &lt;p&gt;&lt;strong&gt;Date and Time: &lt;/strong&gt;Tuesday, April 23 at 16:00 UTC&lt;/p&gt;
  3448.  
  3449.  
  3450.  
  3451. &lt;p&gt;&lt;strong&gt;Direct URL to Join:&lt;/strong&gt; &lt;a href=&quot;https://meet.thunderbird.net/b/hea-uex-usn-rb1&quot;&gt;https://meet.thunderbird.net/b/hea-uex-usn-rb1&lt;/a&gt;&lt;/p&gt;
  3452.  
  3453.  
  3454.  
  3455. &lt;p&gt;&lt;strong&gt;Access Code: &lt;/strong&gt;964573&lt;/p&gt;
  3456. &lt;p&gt;The post &lt;a href=&quot;https://blog.thunderbird.net/2024/04/april-2024-community-office-hours-rust-and-exchange-support/&quot;&gt;April 2024 Community Office Hours: Rust and Exchange Support&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;</description>
  3457. <pubDate>Wed, 17 Apr 2024 17:22:44 +0000</pubDate>
  3458. <dc:creator>Monica Ayhens-Madon</dc:creator>
  3459. </item>
  3460. <item>
  3461. <title>Firefox Developer Experience: Firefox WebDriver Newsletter — 125</title>
  3462. <guid isPermaLink="false">https://fxdx.dev/?p=268</guid>
  3463. <link>https://fxdx.dev/firefox-webdriver-newsletter-125/</link>
  3464. <description>&lt;p&gt;&lt;em&gt;WebDriver is a remote control interface that enables introspection and control of user agents. As such it can&lt;/em&gt; &lt;em&gt;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;
  3465.  
  3466.  
  3467.  
  3468. &lt;p id=&quot;block-657c8643-6b93-4546-8626-3d7c3976c217&quot;&gt;&lt;em&gt;This newsletter gives an overview of the work we’ve done as part of the Firefox 125 release cycle&lt;/em&gt;.&lt;/p&gt;
  3469.  
  3470.  
  3471.  
  3472. &lt;h3&gt;Contributions&lt;/h3&gt;
  3473.  
  3474.  
  3475.  
  3476. &lt;p id=&quot;block-9278fa20-63dc-4975-a72b-e3ba73b202a4&quot;&gt;With Firefox being an open source project, we are grateful to get contributions from people outside of Mozilla.&lt;/p&gt;
  3477.  
  3478.  
  3479.  
  3480. &lt;p id=&quot;block-f6e2b9b0-63b6-4a4b-aeea-cffbde1019dd&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/devtools/getting-started/README.html&quot;&gt;how to setup 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.&lt;/p&gt;
  3481.  
  3482.  
  3483.  
  3484. &lt;h3&gt;General&lt;/h3&gt;
  3485.  
  3486.  
  3487.  
  3488. &lt;h4&gt;New: Support for the “userAgent” capability&lt;/h4&gt;
  3489.  
  3490.  
  3491.  
  3492. &lt;p&gt;We added &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885495&quot;&gt;support for the User Agent capability&lt;/a&gt; which is returned with all the other capabilities by the new session commands. It is listed under the &lt;code&gt;userAgent&lt;/code&gt; key and contains the default user-agent string of the browser. For instance when connecting to Firefox 125 (here on macos), the capabilities will contain a &lt;code&gt;userAgent&lt;/code&gt; property such as: &lt;/p&gt;
  3493.  
  3494.  
  3495.  
  3496. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;&quot;userAgent&quot;: &quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:125.0) Gecko/20100101 Firefox/125.0&quot;&lt;/code&gt;&lt;/pre&gt;
  3497.  
  3498.  
  3499.  
  3500. &lt;h3&gt;WebDriver BiDi&lt;/h3&gt;
  3501.  
  3502.  
  3503.  
  3504. &lt;h4&gt;New: Support for the “input.setFiles” command&lt;/h4&gt;
  3505.  
  3506.  
  3507.  
  3508. &lt;p&gt;The &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1855040&quot;&gt;“input.setFiles” command&lt;/a&gt; is a new feature which allows clients to interact with &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt; elements with &lt;code&gt;type=&quot;file&quot;&lt;/code&gt;. As the name suggests, it can be used to set the list of files of such an input. The command expects three mandatory parameters. First the &lt;code&gt;context&lt;/code&gt; parameter identifies the &lt;a href=&quot;https://w3c.github.io/webdriver-bidi/#type-browsingContext-Browsingcontext&quot;&gt;BrowsingContext&lt;/a&gt; (tab or window) where we expect to find an &lt;code&gt;&amp;lt;input type=&quot;file&quot;&amp;gt;&lt;/code&gt;. Then &lt;code&gt;element&lt;/code&gt; should be a &lt;a href=&quot;https://w3c.github.io/webdriver-bidi/#deserialize-shared-reference&quot;&gt;sharedReference&lt;/a&gt; to this specific &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt; element. Finally the &lt;code&gt;files&lt;/code&gt; parameter should be a list (potentially empty) of strings which are the paths of the files to set for the &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt;. This command has a &lt;code&gt;null&lt;/code&gt; return value.&lt;/p&gt;
  3509.  
  3510.  
  3511.  
  3512. &lt;pre class=&quot;wp-block-prismatic-blocks&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;-&amp;gt; {
  3513.  &quot;method&quot;: &quot;input.setFiles&quot;,
  3514.  &quot;params&quot;: {
  3515.    &quot;context&quot;: &quot;096fca46-5860-412b-8107-dae7a80ee412&quot;,
  3516.    &quot;element&quot;: {
  3517.      &quot;sharedId&quot;: &quot;520c3e2b-6210-41da-8ae3-2c499ad66049&quot;
  3518.    },
  3519.    &quot;files&quot;: [
  3520.      &quot;/Users/test/somefile.txt&quot;
  3521.    ]
  3522.  },
  3523.  &quot;id&quot;: 7
  3524. }
  3525. &amp;lt;- { &quot;type&quot;: &quot;success&quot;, &quot;id&quot;: 7, &quot;result&quot;: {} }&lt;/code&gt;&lt;/pre&gt;
  3526.  
  3527.  
  3528.  
  3529. &lt;p&gt;Note that providing more than one path in the &lt;code&gt;files&lt;/code&gt; parameter is only supported for &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt; elements with the &lt;code&gt;multiple&lt;/code&gt; attribute set. Trying to send several paths to a regular &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt; element will result in an error.&lt;/p&gt;
  3530.  
  3531.  
  3532.  
  3533. &lt;p&gt;It’s also worth highlighting that the command will override the files which were previously set on the input. For instance providing an empty list as the &lt;code&gt;files&lt;/code&gt; parameter will reset the input to have no file selected.&lt;/p&gt;
  3534.  
  3535.  
  3536.  
  3537. &lt;h4&gt;New: Support for the “storage.deleteCookies” command&lt;/h4&gt;
  3538.  
  3539.  
  3540.  
  3541. &lt;p&gt;In Firefox 124, we added two methods to interact with cookies: “storage.getCookies” and “storage.setCookie”. &lt;a href=&quot;http://bugzilla.mozilla.org/show_bug.cgi?id=1854581&quot;&gt;In Firefox 125 we are adding “storage.deleteCookies”&lt;/a&gt; so that you can remove previously created cookies. The parameters for the “deleteCookies” command are identical to the ones for the “getCookies” command: the &lt;code&gt;filter&lt;/code&gt; argument allows to match cookies based on specific criteria and the &lt;code&gt;partition&lt;/code&gt; argument allows to match cookies owned by a certain storage partition. All the cookies matching the provided parameters will be deleted. Similarly to “getCookies” and “setCookie”, “deleteCookies” will return the &lt;code&gt;partitionKey&lt;/code&gt; which was built to retrieve the cookies.&lt;/p&gt;
  3542.  
  3543.  
  3544.  
  3545. &lt;pre class=&quot;wp-block-prismatic-blocks&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;# Assuming we have two cookies on fxfdx.dev, foo=value1 and bar=value2
  3546.  
  3547. -&amp;gt; {
  3548.  &quot;method&quot;: &quot;storage.deleteCookies&quot;,
  3549.  &quot;params&quot;: {
  3550.    &quot;filter&quot;: {
  3551.      &quot;name&quot;: &quot;foo&quot;,
  3552.      &quot;domain&quot;: &quot;fxdx.dev&quot;
  3553.    }
  3554.  },
  3555.  &quot;id&quot;: 8
  3556. }
  3557.  
  3558. &amp;lt;- { &quot;type&quot;: &quot;success&quot;, &quot;id&quot;: 8, &quot;result&quot;: { &quot;partitionKey&quot;: {} } }
  3559.  
  3560. -&amp;gt; {
  3561.  &quot;method&quot;: &quot;storage.getCookies&quot;,
  3562.  &quot;params&quot;: {
  3563.    &quot;filter&quot;: {
  3564.      &quot;domain&quot;: &quot;fxdx.dev&quot;
  3565.    }
  3566.  },
  3567.  &quot;id&quot;: 9
  3568. }
  3569.  
  3570. &amp;lt;- {
  3571.  &quot;type&quot;: &quot;success&quot;,
  3572.  &quot;id&quot;: 9,
  3573.  &quot;result&quot;: {
  3574.    &quot;cookies&quot;: [
  3575.      {
  3576.        &quot;domain&quot;: &quot;fxdx.dev&quot;,
  3577.        &quot;httpOnly&quot;: false,
  3578.        &quot;name&quot;: &quot;bar&quot;,
  3579.        &quot;path&quot;: &quot;/&quot;,
  3580.        &quot;sameSite&quot;: &quot;none&quot;,
  3581.        &quot;secure&quot;: false,
  3582.        &quot;size&quot;: 9,
  3583.        &quot;value&quot;: {
  3584.          &quot;type&quot;: &quot;string&quot;,
  3585.          &quot;value&quot;: &quot;value2&quot;
  3586.        }
  3587.      }
  3588.    ],
  3589.    &quot;partitionKey&quot;: {}
  3590.  }
  3591. }&lt;/code&gt;&lt;/pre&gt;
  3592.  
  3593.  
  3594.  
  3595. &lt;h4&gt;New: Support for the “userContext” property in the “partition” argument&lt;/h4&gt;
  3596.  
  3597.  
  3598.  
  3599. &lt;p&gt;All storage commands accept a &lt;code&gt;partition&lt;/code&gt; parameter to specify which storage partition it should use, whether it is to retrieve, create or delete cookie(s). Clients can now provide a &lt;code&gt;userContext&lt;/code&gt; property in the &lt;code&gt;partition&lt;/code&gt; parameter to build a partition key tied to a specific user context. As a reminder, user contexts are collections of browsing contexts sharing the same storage partition, and are implemented as Containers in Firefox.&lt;/p&gt;
  3600.  
  3601.  
  3602.  
  3603. &lt;pre class=&quot;wp-block-prismatic-blocks&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;-&amp;gt; { &quot;method&quot;: &quot;browser.createUserContext&quot;, &quot;params&quot;: {}, &quot;id&quot;: 8 }
  3604. &amp;lt;- { &quot;type&quot;: &quot;success&quot;, &quot;id&quot;: 8, &quot;result&quot;: { &quot;userContext&quot;: &quot;6ade5b81-ef5b-4669-83d6-8119c238a3f7&quot; } }
  3605. -&amp;gt; {
  3606.  &quot;method&quot;: &quot;storage.setCookie&quot;,
  3607.  &quot;params&quot;: {
  3608.    &quot;cookie&quot;: {
  3609.      &quot;name&quot;: &quot;test&quot;,
  3610.      &quot;value&quot;: {
  3611.        &quot;type&quot;: &quot;string&quot;,
  3612.        &quot;value&quot;: &quot;cookie in user context partition&quot;
  3613.      },
  3614.      &quot;domain&quot;: &quot;fxdx.dev&quot;
  3615.    },
  3616.    &quot;partition&quot;: {
  3617.      &quot;type&quot;: &quot;storageKey&quot;,
  3618.      &quot;userContext&quot;: &quot;6ade5b81-ef5b-4669-83d6-8119c238a3f7&quot;
  3619.    }
  3620.  },
  3621.  &quot;id&quot;: 9
  3622. }
  3623.  
  3624. &amp;lt;- { &quot;type&quot;: &quot;success&quot;, &quot;id&quot;: 9, &quot;result&quot;: { &quot;partitionKey&quot;: { &quot;userContext&quot;: &quot;6ade5b81-ef5b-4669-83d6-8119c238a3f7&quot; } } }&lt;/code&gt;&lt;/pre&gt;
  3625.  
  3626.  
  3627.  
  3628. &lt;h4&gt;Bug fixes&lt;/h4&gt;
  3629.  
  3630.  
  3631.  
  3632. &lt;ul&gt;
  3633. &lt;li&gt;Fixed &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1884647&quot;&gt;a bug where “storage.getCookies” would not retrieve all expected cookies&lt;/a&gt; for a &lt;code&gt;partition&lt;/code&gt; with a given “sourceOrigin”.&lt;/li&gt;
  3634.  
  3635.  
  3636.  
  3637. &lt;li&gt;Fixed &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1882748&quot;&gt;an issue where recommended preferences would not be applied&lt;/a&gt; if WebDriver BiDi is the only remote protocol enabled, which means CDP is disabled.&lt;/li&gt;
  3638.  
  3639.  
  3640.  
  3641. &lt;li&gt;Fixed an issue where &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1877469&quot;&gt;creating and switching to a new tab would not wait for the &lt;code&gt;visibilityState&lt;/code&gt; to be updated&lt;/a&gt;.&lt;/li&gt;
  3642. &lt;/ul&gt;</description>
  3643. <pubDate>Wed, 17 Apr 2024 15:59:43 +0000</pubDate>
  3644. <dc:creator>Julian Descottes</dc:creator>
  3645. </item>
  3646. <item>
  3647. <title>This Week In Rust: This Week in Rust 543</title>
  3648. <guid isPermaLink="false">tag:this-week-in-rust.org,2024-04-17:/blog/2024/04/17/this-week-in-rust-543/</guid>
  3649. <link>https://this-week-in-rust.org/blog/2024/04/17/this-week-in-rust-543/</link>
  3650. <description>&lt;p&gt;Hello and welcome to another issue of &lt;em&gt;This Week in Rust&lt;/em&gt;!
  3651. &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.
  3652. This is a weekly summary of its progress and community.
  3653. Want something mentioned? Tag us at &lt;a href=&quot;https://twitter.com/ThisWeekInRust&quot;&gt;@ThisWeekInRust&lt;/a&gt; on Twitter 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;.
  3654. Want to get involved? &lt;a href=&quot;https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md&quot;&gt;We love contributions&lt;/a&gt;.&lt;/p&gt;
  3655. &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;.
  3656. 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;
  3657. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#updates-from-rust-community&quot;&gt;Updates from Rust Community&lt;/a&gt;&lt;/h4&gt;
  3658.  
  3659.  
  3660. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust-nation-uk&quot;&gt;Rust Nation UK&lt;/a&gt;&lt;/h5&gt;
  3661. &lt;ul&gt;
  3662. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=hQWZGOuDYTE&quot;&gt;Tim McNamara - 4 levels of error handling&lt;/a&gt;&lt;/li&gt;
  3663. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=tSnKx2irwzE&quot;&gt;Mithun Hunsur - Ambient: A Rust and WebAssembly Runtime for Cross-Platform Multiplayer Games&lt;/a&gt;&lt;/li&gt;
  3664. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Lc3aw_NIOt0&quot;&gt;Alice Ryhl - What it takes to keep Tokio running&lt;/a&gt;&lt;/li&gt;
  3665. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=CnoDOc6ML0Y&amp;amp;t=51s&quot;&gt;Chris Biscardi - Bevy: A case study in ergonomic Rust&lt;/a&gt;&lt;/li&gt;
  3666. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=_ITnWoPvMKA&quot;&gt;Pietro Albini - How Ferrocene qualified the Rust Compiler&lt;/a&gt;&lt;/li&gt;
  3667. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=JJV5crU405s&quot;&gt;Ben Wishovich - Full Stack Rust - Building Rust Websites with Leptos&lt;/a&gt;&lt;/li&gt;
  3668. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=n-ESPxF11tM&quot;&gt;Natalie Serebryakova - Rustic Persistence: Automating PVC Lifecycles with Rust in Kubernetes&lt;/a&gt;&lt;/li&gt;
  3669. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=HiqId_9pysM&quot;&gt;Daniel McKenna - Creating a Text-To-Speech System in Rust&lt;/a&gt;&lt;/li&gt;
  3670. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=fYaaBoKbDQs&quot;&gt;Konstantin Grechishchev - Java and Rust Integration&lt;/a&gt;&lt;/li&gt;
  3671. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=z40rgjZqrs4&quot;&gt;Heiko Seeberger - EventSourced – async_fn_in_trait in anger&lt;/a&gt;&lt;/li&gt;
  3672. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=aK5lHOJxl98&quot;&gt;Tim Janus - Let's get interdisciplinary: Rust Design Patterns for Chemical Plants&lt;/a&gt;&lt;/li&gt;
  3673. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=HzTZoh7WaGo&quot;&gt;Marco Ieni - How Rust makes open-source easier&lt;/a&gt;&lt;/li&gt;
  3674. &lt;/ul&gt;
  3675. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#newsletters&quot;&gt;Newsletters&lt;/a&gt;&lt;/h5&gt;
  3676. &lt;ul&gt;
  3677. &lt;li&gt;&lt;a href=&quot;https://thisweekinbevy.com/issue/2024-04-15-new-meshes-new-examples-and-compute-shaders&quot;&gt;New Meshes, New Examples, and Compute Shaders&lt;/a&gt;&lt;/li&gt;
  3678. &lt;/ul&gt;
  3679. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#projecttooling-updates&quot;&gt;Project/Tooling Updates&lt;/a&gt;&lt;/h5&gt;
  3680. &lt;ul&gt;
  3681. &lt;li&gt;&lt;a href=&quot;https://github.com/yoshuawuyts/futures-concurrency/releases/tag/v7.6.0&quot;&gt;futures-concurrency v7.6.0: Portable Concurrent Async Iteration&lt;/a&gt;&lt;/li&gt;
  3682. &lt;li&gt;&lt;a href=&quot;https://ratatui.rs/highlights/v0262/&quot;&gt;Ratatui v0.26.2&lt;/a&gt;&lt;/li&gt;
  3683. &lt;li&gt;&lt;a href=&quot;https://mabez.dev/blog/posts/esp-rust-12-04-2024/&quot;&gt;Rust on Espressif chips&lt;/a&gt;&lt;/li&gt;
  3684. &lt;li&gt;&lt;a href=&quot;https://www.s2e-systems.com/2024/04/12/introducing_dust_dds/&quot;&gt;Introducing Dust DDS – A native Rust implementation of the Data Distribution Service (DDS) middleware&lt;/a&gt;&lt;/li&gt;
  3685. &lt;li&gt;&lt;a href=&quot;https://www.dfns.co/article/cggmp21-in-rust-at-last&quot;&gt;Announcing the first audited Rust implementation of CGGMP21, the state-of-the-art ECDSA threshold protocol&lt;/a&gt;&lt;/li&gt;
  3686. &lt;li&gt;&lt;a href=&quot;https://github.com/greyblake/nutype/releases/tag/v0.4.2&quot;&gt;Nutype 0.4.2 - newtype with guarantees&lt;/a&gt;&lt;/li&gt;
  3687. &lt;li&gt;&lt;a href=&quot;https://github.com/plabayo/venndb/releases/tag/0.2.1&quot;&gt;venndb 0.2.1 - any filters&lt;/a&gt;&lt;/li&gt;
  3688. &lt;li&gt;[ZH|EN] &lt;a href=&quot;https://ideas.reify.ing/en/blog/announcing-async-openai-wasm/&quot;&gt;Announcing async-openai-wasm, and thoughts on wasmization and streams&lt;/a&gt;&lt;/li&gt;
  3689. &lt;/ul&gt;
  3690. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#observationsthoughts&quot;&gt;Observations/Thoughts&lt;/a&gt;&lt;/h5&gt;
  3691. &lt;ul&gt;
  3692. &lt;li&gt;&lt;a href=&quot;https://noiseonthenet.space/noise/2024/04/climbing-a-binary-tree/&quot;&gt;Climbing a (binary) Tree - Noise On The Net&lt;/a&gt;&lt;/li&gt;
  3693. &lt;li&gt;&lt;a href=&quot;https://shift.click/blog/missing-alloc-api/&quot;&gt;Why is there no realloc that takes the number of bytes to copy?&lt;/a&gt;&lt;/li&gt;
  3694. &lt;li&gt;&lt;a href=&quot;https://boinkor.net/2024/04/some-useful-types-for-database-using-rust-web-apps/&quot;&gt;Some useful types for database-using Rust web apps&lt;/a&gt;&lt;/li&gt;
  3695. &lt;li&gt;&lt;a href=&quot;https://www.matildasmeds.com/posts/rust-logging-recipe/&quot;&gt;My logging recipe for server side Rust&lt;/a&gt;&lt;/li&gt;
  3696. &lt;/ul&gt;
  3697. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust-walkthroughs&quot;&gt;Rust Walkthroughs&lt;/a&gt;&lt;/h5&gt;
  3698. &lt;ul&gt;
  3699. &lt;li&gt;&lt;a href=&quot;https://rust.code-maven.com/surrealdb-with-docker&quot;&gt;Getting started with SurrealDB using Docker and a Rust client&lt;/a&gt;&lt;/li&gt;
  3700. &lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/watch?v=4iM9t5dgvU4&quot;&gt;developerlife.com - Rust testing deep dive with r3bl_terminal_async crate&lt;/a&gt;&lt;/li&gt;
  3701. &lt;/ul&gt;
  3702. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#research&quot;&gt;Research&lt;/a&gt;&lt;/h5&gt;
  3703. &lt;ul&gt;
  3704. &lt;li&gt;&lt;a href=&quot;https://rust-digger.code-maven.com/news/msrv-stats&quot;&gt;Rust Digger: 7.53% of crates have both 'edition' and 'rust-version', 11.21% have neither&lt;/a&gt;&lt;/li&gt;
  3705. &lt;/ul&gt;
  3706. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#miscellaneous&quot;&gt;Miscellaneous&lt;/a&gt;&lt;/h5&gt;
  3707. &lt;ul&gt;
  3708. &lt;li&gt;&lt;a href=&quot;https://leafheap.com/articles/iced-tutorial-version-0-12&quot;&gt;Iced Tutorial 0.12&lt;/a&gt;&lt;/li&gt;
  3709. &lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/watch?v=vwUz95Oo8IA&quot;&gt;Infinite Pong in the Bevy Game Engine - Let's Code!&lt;/a&gt;&lt;/li&gt;
  3710. &lt;li&gt;[audio] &lt;a href=&quot;https://rustacean-station.org/episode/marco-ieni/&quot;&gt;Release-plz with Marco Ieni&lt;/a&gt;&lt;/li&gt;
  3711. &lt;/ul&gt;
  3712. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#crate-of-the-week&quot;&gt;Crate of the Week&lt;/a&gt;&lt;/h4&gt;
  3713. &lt;p&gt;This week's crate is &lt;a href=&quot;https://crates.io/crates/venndb&quot;&gt;venndb&lt;/a&gt;, an append-only memory DB whose tables can be build via a derive macro.&lt;/p&gt;
  3714. &lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/t/crate-of-the-week/2704/1303&quot;&gt;Glen De Cauwsemaecker&lt;/a&gt; for the self-suggestion!&lt;/p&gt;
  3715. &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;
  3716. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#call-for-testing&quot;&gt;Call for Testing&lt;/a&gt;&lt;/h4&gt;
  3717. &lt;p&gt;An important step for RFC implementation is for people to experiment with the
  3718. implementation and give feedback, especially before stabilization.  The following
  3719. RFCs would benefit from user testing before moving forward:&lt;/p&gt;
  3720. &lt;ul&gt;
  3721. &lt;li&gt;&lt;em&gt;No calls for testing were issued this week.&lt;/em&gt;&lt;/li&gt;
  3722. &lt;/ul&gt;
  3723. &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;
  3724. label to your RFC along with a comment providing testing instructions and/or guidance on which aspect(s) of the feature
  3725. need testing.&lt;/p&gt;
  3726. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://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;
  3727. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#cfp-projects&quot;&gt;CFP - Projects&lt;/a&gt;&lt;/h5&gt;
  3728. &lt;p&gt;Always wanted to contribute to open-source projects but did not know where to start?
  3729. Every week we highlight some tasks from the Rust community for you to pick and get started!&lt;/p&gt;
  3730. &lt;p&gt;Some of these tasks may also have mentors available, visit the task page for more information.&lt;/p&gt;
  3731. &lt;ul&gt;
  3732. &lt;li&gt;&lt;a href=&quot;https://github.com/metalbear-co/mirrord/issues/1668&quot;&gt;mirrord - medschool generated malformed JSON&lt;/a&gt;&lt;/li&gt;
  3733. &lt;/ul&gt;
  3734. &lt;p&gt;If you are a Rust project owner and are looking for contributors, please submit tasks &lt;a href=&quot;https://users.rust-lang.org/t/twir-call-for-participation/4821&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  3735. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#cfp-speakers&quot;&gt;CFP - Speakers&lt;/a&gt;&lt;/h5&gt;
  3736. &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;
  3737. &lt;ul&gt;
  3738. &lt;li&gt;&lt;a href=&quot;https://foundation.rust-lang.org/news/the-rustconf-2024-call-for-talk-proposals-is-open/&quot;&gt;RustConf 2024&lt;/a&gt; | Closes 2024-04-25 | Montreal, Canada | Event date: 2024-09-10&lt;/li&gt;
  3739. &lt;li&gt;&lt;a href=&quot;https://sessionize.com/rustlab-2024&quot;&gt;RustLab 2024&lt;/a&gt; | Closes 2024-05-01 | Florence, Italy | Event date: 2024-11-09 - 2024-11-11&lt;/li&gt;
  3740. &lt;li&gt;&lt;a href=&quot;https://www.papercall.io/eurorust-2024&quot;&gt;EuroRust 2024&lt;/a&gt;| Closes 2024-06-03 | Vienna, Austria &amp;amp; online | Event date: 2024-10-10&lt;/li&gt;
  3741. &lt;li&gt;&lt;a href=&quot;https://scientificcomputing.rs/&quot;&gt;Scientific Computing in Rust 2024&lt;/a&gt;| Closes 2024-06-14 | online | Event date: 2024-07-17 - 2024-07-19&lt;/li&gt;
  3742. &lt;li&gt;&lt;a href=&quot;https://www.papercall.io/conf42-rustlang-2024&quot;&gt;Conf42 Rustlang 2024&lt;/a&gt; | Closes 2024-07-22 | online | Event date: 2024-08-22&lt;/li&gt;
  3743. &lt;/ul&gt;
  3744. &lt;p&gt;If you are an event organizer hoping to expand the reach of your event, please submit a link to the submission website through a &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;PR to TWiR&lt;/a&gt;.&lt;/p&gt;
  3745. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://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;
  3746. &lt;p&gt;430 pull requests were &lt;a href=&quot;https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2024-04-09..2024-04-16&quot;&gt;merged in the last week&lt;/a&gt;&lt;/p&gt;
  3747. &lt;ul&gt;
  3748. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123507&quot;&gt;add support for Arm64EC inline assembly (as unstable)&lt;/a&gt;&lt;/li&gt;
  3749. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123928&quot;&gt;&lt;code&gt;statx&lt;/code&gt; probe: &lt;code&gt;ENOSYS&lt;/code&gt; might come from a faulty FUSE driver&lt;/a&gt;&lt;/li&gt;
  3750. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123523&quot;&gt;account for trait/impl difference when suggesting changing argument from ref to mut ref&lt;/a&gt;&lt;/li&gt;
  3751. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/118391&quot;&gt;add &lt;code&gt;REDUNDANT_LIFETIMES&lt;/code&gt; lint to detect lifetimes which are semantically redundant&lt;/a&gt;&lt;/li&gt;
  3752. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123867&quot;&gt;add &lt;code&gt;unsafe&lt;/code&gt; to two functions with safety invariants&lt;/a&gt;&lt;/li&gt;
  3753. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123689&quot;&gt;add const generics support for pattern types&lt;/a&gt;&lt;/li&gt;
  3754. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123659&quot;&gt;add support to intrinsics fallback body&lt;/a&gt;&lt;/li&gt;
  3755. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123668&quot;&gt;async closure coroutine by move body MirPass refactoring&lt;/a&gt;&lt;/li&gt;
  3756. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122882&quot;&gt;avoid a panic in &lt;code&gt;set_output_capture&lt;/code&gt; in the default panic handler&lt;/a&gt;&lt;/li&gt;
  3757. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122954&quot;&gt;be more specific when flagging imports as redundant due to the extern prelude&lt;/a&gt;&lt;/li&gt;
  3758. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123738&quot;&gt;call &lt;code&gt;lower_const_param&lt;/code&gt; instead of duplicating the code&lt;/a&gt;&lt;/li&gt;
  3759. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123825&quot;&gt;call the panic hook for non-unwind panics in proc-macros&lt;/a&gt;&lt;/li&gt;
  3760. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122603&quot;&gt;detect borrow checker errors where &lt;code&gt;.clone()&lt;/code&gt; would be an appropriate user action&lt;/a&gt;&lt;/li&gt;
  3761. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123788&quot;&gt;disable Ctrl-C handling on WASM&lt;/a&gt;&lt;/li&gt;
  3762. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123618&quot;&gt;discard overflow obligations in &lt;code&gt;impl_may_apply&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3763. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123249&quot;&gt;do not add prolog for variadic naked functions&lt;/a&gt;&lt;/li&gt;
  3764. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123254&quot;&gt;do not allocate for ZST ThinBox (attempt 2 using &lt;code&gt;const_allocate&lt;/code&gt;)&lt;/a&gt;&lt;/li&gt;
  3765. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123736&quot;&gt;don't delay a bug if we suggest adding a semicolon to the RHS of an assign operator&lt;/a&gt;&lt;/li&gt;
  3766. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123834&quot;&gt;don't do coroutine-closure-specific upvar analysis if tainted by errors&lt;/a&gt;&lt;/li&gt;
  3767. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123603&quot;&gt;don't even parse an intrinsic unless the feature gate is enabled&lt;/a&gt;&lt;/li&gt;
  3768. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123931&quot;&gt;don't leak unnameable types in &lt;code&gt;-&amp;gt; _&lt;/code&gt; recover&lt;/a&gt;&lt;/li&gt;
  3769. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123662&quot;&gt;don't rely on upvars being assigned just because coroutine-closure kind is assigned&lt;/a&gt;&lt;/li&gt;
  3770. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123941&quot;&gt;fix UB in LLVM FFI when passing zero or &amp;gt;1 bundle&lt;/a&gt;&lt;/li&gt;
  3771. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123223&quot;&gt;fix invalid silencing of parsing error&lt;/a&gt;&lt;/li&gt;
  3772. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123924&quot;&gt;fix various bugs in &lt;code&gt;ty_kind_suggestion&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3773. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123898&quot;&gt;generic associated consts: Check regions earlier when comparing impl with trait item def&lt;/a&gt;&lt;/li&gt;
  3774. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123841&quot;&gt;improve diagnostic by suggesting to remove visibility qualifier&lt;/a&gt;&lt;/li&gt;
  3775. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123989&quot;&gt;just use &lt;code&gt;type_dependent_def_id&lt;/code&gt; to figure out what the method is for an expr&lt;/a&gt;&lt;/li&gt;
  3776. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123656&quot;&gt;linker flavors next steps: linker features&lt;/a&gt;&lt;/li&gt;
  3777. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123827&quot;&gt;linker: avoid some allocations in search directory iteration&lt;/a&gt;&lt;/li&gt;
  3778. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123854&quot;&gt;linker: remove laziness and caching from native search directory walks&lt;/a&gt;&lt;/li&gt;
  3779. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123775&quot;&gt;make &lt;code&gt;PlaceRef&lt;/code&gt; and &lt;code&gt;OperandValue::Ref&lt;/code&gt; share a common &lt;code&gt;PlaceValue&lt;/code&gt; type&lt;/a&gt;&lt;/li&gt;
  3780. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123660&quot;&gt;make the computation of &lt;code&gt;coroutine_captures_by_ref_ty&lt;/code&gt; more sophisticated&lt;/a&gt;&lt;/li&gt;
  3781. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123701&quot;&gt;only assert for child/parent projection compatibility AFTER checking that theyre coming from the same place&lt;/a&gt;&lt;/li&gt;
  3782. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123272&quot;&gt;only collect mono items from reachable blocks&lt;/a&gt;&lt;/li&gt;
  3783. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123779&quot;&gt;openBSD fix long socket addresses&lt;/a&gt;&lt;/li&gt;
  3784. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123806&quot;&gt;panic on overflow in &lt;code&gt;BorrowedCursor::advance&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3785. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/121346&quot;&gt;propagate temporary lifetime extension into if and match&lt;/a&gt;&lt;/li&gt;
  3786. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122213&quot;&gt;provide suggestion to dereference closure tail if appropriate&lt;/a&gt;&lt;/li&gt;
  3787. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123490&quot;&gt;refactor &lt;code&gt;panic_unwind/seh.rs&lt;/code&gt; pointer use&lt;/a&gt;&lt;/li&gt;
  3788. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123830&quot;&gt;remove &lt;code&gt;From&lt;/code&gt; impls for unstable types that break inference&lt;/a&gt;&lt;/li&gt;
  3789. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123007&quot;&gt;rework ptr-to-ref conversion suggestion for method calls&lt;/a&gt;&lt;/li&gt;
  3790. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123612&quot;&gt;set target-abi module flag for RISC-V targets&lt;/a&gt;&lt;/li&gt;
  3791. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123314&quot;&gt;skip &lt;code&gt;unused_parens&lt;/code&gt; report for &lt;code&gt;Paren(Path(..))&lt;/code&gt; in macro&lt;/a&gt;&lt;/li&gt;
  3792. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123658&quot;&gt;stop making any assumption about the projections applied to the upvars in the &lt;code&gt;ByMoveBody&lt;/code&gt; pass&lt;/a&gt;&lt;/li&gt;
  3793. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123804&quot;&gt;stop using &lt;code&gt;HirId&lt;/code&gt; for fn-like parents since closures are not &lt;code&gt;OwnerNode&lt;/code&gt;s&lt;/a&gt;&lt;/li&gt;
  3794. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123900&quot;&gt;stop using &lt;code&gt;PolyTraitRef&lt;/code&gt; for closure/coroutine predicates already instantiated w placeholders&lt;/a&gt;&lt;/li&gt;
  3795. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123633&quot;&gt;store all args in the unsupported Command implementation&lt;/a&gt;&lt;/li&gt;
  3796. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123847&quot;&gt;suppress &lt;code&gt;let else&lt;/code&gt; suggestion for uninitialized refutable &lt;code&gt;let&lt;/code&gt;s&lt;/a&gt;&lt;/li&gt;
  3797. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123704&quot;&gt;tweak value suggestions in &lt;code&gt;borrowck&lt;/code&gt; and &lt;code&gt;hir_analysis&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3798. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123654&quot;&gt;typeck: fix &lt;code&gt;?&lt;/code&gt; suggestion span&lt;/a&gt;&lt;/li&gt;
  3799. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123703&quot;&gt;use &lt;code&gt;fn&lt;/code&gt; ptr signature instead of &lt;code&gt;{closure@..}&lt;/code&gt; in infer error&lt;/a&gt;&lt;/li&gt;
  3800. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123761&quot;&gt;use &lt;code&gt;suggest_impl_trait&lt;/code&gt; in return type suggestion on type error&lt;/a&gt;&lt;/li&gt;
  3801. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3457&quot;&gt;miri: &lt;code&gt;MIRI_REPLACE_LIBRS_IF_NOT_TEST&lt;/code&gt;: also apply to crates.io crates&lt;/a&gt;&lt;/li&gt;
  3802. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3466&quot;&gt;miri: add some basic support for GetFullPathNameW&lt;/a&gt;&lt;/li&gt;
  3803. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3465&quot;&gt;miri: fix error display for './miri run --dep'&lt;/a&gt;&lt;/li&gt;
  3804. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3411&quot;&gt;miri: handle Miri sysroot entirely outside the Miri driver&lt;/a&gt;&lt;/li&gt;
  3805. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3462&quot;&gt;miri: make &lt;code&gt;split_simd_to_128bit_chunks&lt;/code&gt; take only one operand&lt;/a&gt;&lt;/li&gt;
  3806. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123937&quot;&gt;miri on Windows: run .CRT$XLB linker section on thread-end&lt;/a&gt;&lt;/li&gt;
  3807. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3464&quot;&gt;miri: windows: add basic support for FormatMessageW&lt;/a&gt;&lt;/li&gt;
  3808. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/115717&quot;&gt;stabilize --json &lt;code&gt;unused-externs(-silent)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3809. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123868&quot;&gt;stabilize &lt;code&gt;(const_)slice_ptr_len&lt;/code&gt; and &lt;code&gt;(const_)slice_ptr_is_empty_nonnull&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3810. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123661&quot;&gt;stabilize &lt;code&gt;cstr_count_bytes&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3811. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/107462&quot;&gt;implement &lt;code&gt;FromIterator&lt;/code&gt; for &lt;code&gt;(impl Default + Extend, impl Default + Extend)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3812. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123257&quot;&gt;re-enable &lt;code&gt;has_thread_local&lt;/code&gt; for i686-msvc&lt;/a&gt;&lt;/li&gt;
  3813. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123857&quot;&gt;&lt;code&gt;std::net&lt;/code&gt;: TcpListener shrinks the backlog argument to 32 for Haiku&lt;/a&gt;&lt;/li&gt;
  3814. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122812&quot;&gt;show &lt;code&gt;mode_t&lt;/code&gt; as octal in &lt;code&gt;std::fs&lt;/code&gt; Debug impls&lt;/a&gt;&lt;/li&gt;
  3815. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/120092&quot;&gt;add &lt;code&gt;A: 'static&lt;/code&gt; bound for &lt;code&gt;Arc/Rc::pin_in&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3816. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122470&quot;&gt;&lt;code&gt;f16&lt;/code&gt; and &lt;code&gt;f128&lt;/code&gt; step 4: basic library support&lt;/a&gt;&lt;/li&gt;
  3817. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123783&quot;&gt;add a &lt;code&gt;Debug&lt;/code&gt; impl and some basic functions to &lt;code&gt;f16&lt;/code&gt; and &lt;code&gt;f128&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3818. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122393&quot;&gt;specialize many implementations of &lt;code&gt;Read::read_buf_exact&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3819. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123534&quot;&gt;windows: set main thread name without re-encoding&lt;/a&gt;&lt;/li&gt;
  3820. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13659&quot;&gt;cargo: make sure to also wrap the initial &lt;code&gt;-vV&lt;/code&gt; invocation&lt;/a&gt;&lt;/li&gt;
  3821. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13738&quot;&gt;cargo resolve: Respect '--ignore-rust-version'&lt;/a&gt;&lt;/li&gt;
  3822. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13743&quot;&gt;cargo resolve: Fallback to 'rustc -V' for MSRV resolving&lt;/a&gt;&lt;/li&gt;
  3823. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13728&quot;&gt;cargo fix: dont apply same suggestion twice&lt;/a&gt;&lt;/li&gt;
  3824. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13729&quot;&gt;cargo package: Normalize paths in &lt;code&gt;Cargo.toml&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3825. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13744&quot;&gt;cargo test: don't compress test registry crates&lt;/a&gt;&lt;/li&gt;
  3826. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123459&quot;&gt;rustdoc: correctly handle inlining of doc hidden foreign items&lt;/a&gt;&lt;/li&gt;
  3827. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123905&quot;&gt;rustdoc: check redundant explicit links with correct itemid&lt;/a&gt;&lt;/li&gt;
  3828. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123204&quot;&gt;rustdoc: point at span in &lt;code&gt;include_str!&lt;/code&gt;-ed md file&lt;/a&gt;&lt;/li&gt;
  3829. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123706&quot;&gt;rustdoc: reduce per-page HTML overhead&lt;/a&gt;&lt;/li&gt;
  3830. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12573&quot;&gt;clippy: &lt;code&gt;module_name_repetition&lt;/code&gt; Recognize common prepositions&lt;/a&gt;&lt;/li&gt;
  3831. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12094&quot;&gt;clippy: fix: incorrect suggestions when &lt;code&gt;.then&lt;/code&gt; and &lt;code&gt;.then_some&lt;/code&gt; is used&lt;/a&gt;&lt;/li&gt;
  3832. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12668&quot;&gt;clippy: pin &lt;code&gt;remark-lint-maximum-line-length&lt;/code&gt; version&lt;/a&gt;&lt;/li&gt;
  3833. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12646&quot;&gt;clippy: turn &lt;code&gt;duplicated_attributes&lt;/code&gt; into a late lint&lt;/a&gt;&lt;/li&gt;
  3834. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12635&quot;&gt;clippy: use &lt;code&gt;check_attributes&lt;/code&gt; in doc lints&lt;/a&gt;&lt;/li&gt;
  3835. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17074&quot;&gt;rust-analyzer: add static and const highlighting token types&lt;/a&gt;&lt;/li&gt;
  3836. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17073&quot;&gt;rust-analyzer: better inline preview for postfix completion&lt;/a&gt;&lt;/li&gt;
  3837. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/16813&quot;&gt;rust-analyzer: wrap/Unwrap &lt;code&gt;cfg_attr&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3838. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17019&quot;&gt;rust-analyzer: VFS should not confuse paths with source roots that have the same prefix&lt;/a&gt;&lt;/li&gt;
  3839. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/16877&quot;&gt;rust-analyzer: fix &lt;code&gt;impl Trait&amp;lt;Self&amp;gt;&lt;/code&gt; causing stack overflows&lt;/a&gt;&lt;/li&gt;
  3840. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17063&quot;&gt;rust-analyzer: fix inlay hint resolution being broken&lt;/a&gt;&lt;/li&gt;
  3841. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17051&quot;&gt;rust-analyzer: fix: support auto-closing for triple backticks&lt;/a&gt;&lt;/li&gt;
  3842. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17056&quot;&gt;rust-analyzer: run cargo test per workspace in the test explorer&lt;/a&gt;&lt;/li&gt;
  3843. &lt;/ul&gt;
  3844. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust-compiler-performance-triage&quot;&gt;Rust Compiler Performance Triage&lt;/a&gt;&lt;/h5&gt;
  3845. &lt;p&gt;A quiet week, with slightly more improvements than regressions.
  3846. There were a few noise spikes, but other than that nothing too interesting.&lt;/p&gt;
  3847. &lt;p&gt;Triage done by &lt;strong&gt;@Kobzol&lt;/strong&gt;.
  3848. Revision
  3849. range: &lt;a href=&quot;https://perf.rust-lang.org/?start=86b603cd792b3f6172ba4f676d7b586c1af7630a&amp;amp;end=ccfcd950b333fed046275dd8d54fe736ca498aa7&amp;amp;absolute=false&amp;amp;stat=instructions%3Au&quot;&gt;86b603cd..ccfcd950b&lt;/a&gt;&lt;/p&gt;
  3850. &lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;:&lt;/p&gt;
  3851. &lt;table&gt;
  3852. &lt;thead&gt;
  3853. &lt;tr&gt;
  3854. &lt;th align=&quot;center&quot;&gt;(instructions:u)&lt;/th&gt;
  3855. &lt;th align=&quot;center&quot;&gt;mean&lt;/th&gt;
  3856. &lt;th align=&quot;center&quot;&gt;range&lt;/th&gt;
  3857. &lt;th align=&quot;center&quot;&gt;count&lt;/th&gt;
  3858. &lt;/tr&gt;
  3859. &lt;/thead&gt;
  3860. &lt;tbody&gt;
  3861. &lt;tr&gt;
  3862. &lt;td align=&quot;center&quot;&gt;Regressions ❌ &lt;br /&gt; (primary)&lt;/td&gt;
  3863. &lt;td align=&quot;center&quot;&gt;0.5%&lt;/td&gt;
  3864. &lt;td align=&quot;center&quot;&gt;[0.3%, 1.4%]&lt;/td&gt;
  3865. &lt;td align=&quot;center&quot;&gt;9&lt;/td&gt;
  3866. &lt;/tr&gt;
  3867. &lt;tr&gt;
  3868. &lt;td align=&quot;center&quot;&gt;Regressions ❌ &lt;br /&gt; (secondary)&lt;/td&gt;
  3869. &lt;td align=&quot;center&quot;&gt;0.4%&lt;/td&gt;
  3870. &lt;td align=&quot;center&quot;&gt;[0.2%, 1.1%]&lt;/td&gt;
  3871. &lt;td align=&quot;center&quot;&gt;20&lt;/td&gt;
  3872. &lt;/tr&gt;
  3873. &lt;tr&gt;
  3874. &lt;td align=&quot;center&quot;&gt;Improvements ✅ &lt;br /&gt; (primary)&lt;/td&gt;
  3875. &lt;td align=&quot;center&quot;&gt;-0.6%&lt;/td&gt;
  3876. &lt;td align=&quot;center&quot;&gt;[-2.5%, -0.2%]&lt;/td&gt;
  3877. &lt;td align=&quot;center&quot;&gt;41&lt;/td&gt;
  3878. &lt;/tr&gt;
  3879. &lt;tr&gt;
  3880. &lt;td align=&quot;center&quot;&gt;Improvements ✅ &lt;br /&gt; (secondary)&lt;/td&gt;
  3881. &lt;td align=&quot;center&quot;&gt;-0.8%&lt;/td&gt;
  3882. &lt;td align=&quot;center&quot;&gt;[-1.4%, -0.2%]&lt;/td&gt;
  3883. &lt;td align=&quot;center&quot;&gt;4&lt;/td&gt;
  3884. &lt;/tr&gt;
  3885. &lt;tr&gt;
  3886. &lt;td align=&quot;center&quot;&gt;All ❌✅ (primary)&lt;/td&gt;
  3887. &lt;td align=&quot;center&quot;&gt;-0.4%&lt;/td&gt;
  3888. &lt;td align=&quot;center&quot;&gt;[-2.5%, 1.4%]&lt;/td&gt;
  3889. &lt;td align=&quot;center&quot;&gt;50&lt;/td&gt;
  3890. &lt;/tr&gt;
  3891. &lt;/tbody&gt;
  3892. &lt;/table&gt;
  3893. &lt;p&gt;1 Regressions, 3 Improvements, 6 Mixed; 5 of them in rollups
  3894. 62 artifact comparisons made in total&lt;/p&gt;
  3895. &lt;p&gt;&lt;a href=&quot;https://github.com/Kobzol/rustc-perf/blob/28ee0f9b94c85d8591588b84a4048f46ab3fe0c2/triage/2024-04-16.md&quot;&gt;Full report here&lt;/a&gt;&lt;/p&gt;
  3896. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://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;
  3897. &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
  3898. are the RFCs that were approved for implementation this week:&lt;/p&gt;
  3899. &lt;ul&gt;
  3900. &lt;li&gt;&lt;em&gt;No RFCs were approved this week.&lt;/em&gt;&lt;/li&gt;
  3901. &lt;/ul&gt;
  3902. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#final-comment-period&quot;&gt;Final Comment Period&lt;/a&gt;&lt;/h5&gt;
  3903. &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
  3904. which are reaching a decision. Express your opinions now.&lt;/p&gt;
  3905. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/labels/final-comment-period&quot;&gt;RFCs&lt;/a&gt;&lt;/h6&gt;
  3906. &lt;ul&gt;
  3907. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3595&quot;&gt;Move the Crates.io Team under the Dev Tools team&lt;/a&gt;&lt;/li&gt;
  3908. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3519&quot;&gt;Arbitrary self types v2&lt;/a&gt;&lt;/li&gt;
  3909. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3503&quot;&gt;RFC: Syntax for embedding cargo-script manifests&lt;/a&gt;&lt;/li&gt;
  3910. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/2872&quot;&gt;rust-lang org GitHub access policy&lt;/a&gt;&lt;/li&gt;
  3911. &lt;/ul&gt;
  3912. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#tracking-issues-prs&quot;&gt;Tracking Issues &amp;amp; PRs&lt;/a&gt;&lt;/h6&gt;
  3913. &lt;a class=&quot;toclink&quot; href=&quot;http://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+label%3Afinal-comment-period+sort%3Aupdated-desc&quot;&gt;Rust&lt;/a&gt;
  3914. &lt;ul&gt;
  3915. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/123531&quot;&gt;Enforce closure args + return type are WF&lt;/a&gt;&lt;/li&gt;
  3916. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/99262&quot;&gt;Tracking Issue for &lt;code&gt;io_error_downcast&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3917. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/123794&quot;&gt;More DefineOpaqueTypes::Yes&lt;/a&gt;&lt;/li&gt;
  3918. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/92750&quot;&gt;Tracking Issue for &lt;code&gt;std::path::absolute&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3919. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/99543&quot;&gt;Tracking Issue for &lt;code&gt;utf8_chunks&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3920. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/121557&quot;&gt;restrict promotion of &lt;code&gt;const fn&lt;/code&gt; calls&lt;/a&gt;&lt;/li&gt;
  3921. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/123594&quot;&gt;Fix trait solver overflow with &lt;code&gt;non_local_definitions&lt;/code&gt; lint&lt;/a&gt;&lt;/li&gt;
  3922. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/122317&quot;&gt;Use fulfillment in method probe, not evaluation &lt;/a&gt;&lt;/li&gt;
  3923. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/119912&quot;&gt;rustdoc-search: single result for items with multiple paths&lt;/a&gt;&lt;/li&gt;
  3924. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/115120&quot;&gt;Ignore &lt;code&gt;-C strip&lt;/code&gt; on MSVC&lt;/a&gt;&lt;/li&gt;
  3925. &lt;/ul&gt;
  3926. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://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;/h6&gt;
  3927. &lt;ul&gt;
  3928. &lt;li&gt;&lt;em&gt;No New or Updated RFCs were created this week.&lt;/em&gt;&lt;/li&gt;
  3929. &lt;/ul&gt;
  3930. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#upcoming-events&quot;&gt;Upcoming Events&lt;/a&gt;&lt;/h4&gt;
  3931. &lt;p&gt;Rusty Events between 2024-04-17 - 2024-05-15 🦀&lt;/p&gt;
  3932. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#virtual&quot;&gt;Virtual&lt;/a&gt;&lt;/h5&gt;
  3933. &lt;ul&gt;
  3934. &lt;li&gt;2024-04-17 | 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;
  3935. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/300325512/&quot;&gt;&lt;strong&gt;Reflections on RustNation UK 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3936. &lt;/ul&gt;
  3937. &lt;/li&gt;
  3938. &lt;li&gt;2024-04-17 | Virtual (Vancouver, BC, CA) | &lt;a href=&quot;https://www.meetup.com/vancouver-rust/&quot;&gt;Vancouver Rust&lt;/a&gt;&lt;ul&gt;
  3939. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/vancouver-rust/events/298542323/&quot;&gt;&lt;strong&gt;Camigo (Peter Kehl)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3940. &lt;/ul&gt;
  3941. &lt;/li&gt;
  3942. &lt;li&gt;2024-04-18 | 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;
  3943. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/events/298368799/&quot;&gt;&lt;strong&gt;Crafting Interpreters in Rust Collaboratively&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3944. &lt;/ul&gt;
  3945. &lt;/li&gt;
  3946. &lt;li&gt;2024-04-21 | Virtual (Israel) | &lt;a href=&quot;https://rust.org.il/&quot;&gt;Rust in Israel&lt;/a&gt;&lt;ul&gt;
  3947. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/code-mavens/events/300265648/&quot;&gt;&lt;strong&gt;Using AstroNvim for Rust development (in Hebrew)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3948. &lt;/ul&gt;
  3949. &lt;/li&gt;
  3950. &lt;li&gt;2024-04-23 | Trondheim, NO | &lt;a href=&quot;https://www.meetup.com/rust-trondheim/&quot;&gt;Rust Trondheim&lt;/a&gt;&lt;ul&gt;
  3951. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-trondheim/events/300469130/&quot;&gt;&lt;strong&gt;Show and Tell in April&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3952. &lt;/ul&gt;
  3953. &lt;/li&gt;
  3954. &lt;li&gt;2024-04-24 | Virtual + In Person (Prague, CZ) | &lt;a href=&quot;https://www.meetup.com/rust-czech-republic/&quot;&gt;Rust Czech Republic&lt;/a&gt;&lt;ul&gt;
  3955. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-czech-republic/events/300388563&quot;&gt;&lt;strong&gt;#2: Making Safe Rust Safer (Pavel Šimerda)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3956. &lt;/ul&gt;
  3957. &lt;/li&gt;
  3958. &lt;li&gt;2024-04-25 | Virtual (Berlin, DE) | &lt;a href=&quot;https://berline.rs/&quot;&gt;OpenTechSchool Berlin&lt;/a&gt; + &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  3959. &lt;li&gt;&lt;a href=&quot;https://meet.jit.si/RustHackAndLearnBerlin&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt; | &lt;a href=&quot;https://www.meetup.com/rust-berlin/events/298477692/&quot;&gt;&lt;strong&gt;Mirror: Rust Hack n Learn Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3960. &lt;/ul&gt;
  3961. &lt;/li&gt;
  3962. &lt;li&gt;2024-04-30 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust/&quot;&gt;Dallas Rust&lt;/a&gt;&lt;ul&gt;
  3963. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/mvdtgtygcgbnc/&quot;&gt;&lt;strong&gt;Last Tuesday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3964. &lt;/ul&gt;
  3965. &lt;/li&gt;
  3966. &lt;li&gt;2024-05-01 | 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;
  3967. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/300325526/&quot;&gt;&lt;strong&gt;Rust for Rustaceans Book Club: Chapter 5 - Project Structure&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3968. &lt;/ul&gt;
  3969. &lt;/li&gt;
  3970. &lt;li&gt;2024-05-01 | Virtual (Indianapolis, IN, US) | &lt;a href=&quot;https://www.meetup.com/indyrs/&quot;&gt;Indy Rust&lt;/a&gt;&lt;ul&gt;
  3971. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/indyrs/events/299047895/&quot;&gt;&lt;strong&gt;Indy.rs - with Social Distancing&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3972. &lt;/ul&gt;
  3973. &lt;/li&gt;
  3974. &lt;li&gt;2024-05-02 | Virtual (Charlottesville, NC, US) | &lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/&quot;&gt;Charlottesville Rust Meetup&lt;/a&gt;&lt;ul&gt;
  3975. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/events/298368804/&quot;&gt;&lt;strong&gt;Crafting Interpreters in Rust Collaboratively&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3976. &lt;/ul&gt;
  3977. &lt;/li&gt;
  3978. &lt;li&gt;2024-05-07 | Virtual (Buffalo, NY) | &lt;a href=&quot;https://www.meetup.com/buffalo-rust-meetup/&quot;&gt;Buffalo Rust Meetup&lt;/a&gt;&lt;ul&gt;
  3979. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/buffalo-rust-meetup/events/300100279/&quot;&gt;&lt;strong&gt;Buffalo Rust User Group&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3980. &lt;/ul&gt;
  3981. &lt;/li&gt;
  3982. &lt;li&gt;2024-05-09 | Virtual (Berlin, DE) | &lt;a href=&quot;https://berline.rs/&quot;&gt;OpenTechSchool Berlin&lt;/a&gt; + &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  3983. &lt;li&gt;&lt;a href=&quot;https://meet.jit.si/RustHackAndLearnBerlin&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt; | &lt;a href=&quot;https://www.meetup.com/rust-berlin/events/298477697/&quot;&gt;&lt;strong&gt;Mirror: Rust Hack n Learn Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3984. &lt;/ul&gt;
  3985. &lt;/li&gt;
  3986. &lt;li&gt;2024-05-09 | Virtual (Israel) | &lt;a href=&quot;https://rust.org.il/&quot;&gt;Rust in Israel&lt;/a&gt;&lt;ul&gt;
  3987. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/code-mavens/events/300144781/&quot;&gt;&lt;strong&gt;Rust at Microsoft, Tel Aviv - Are we embedded yet?&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3988. &lt;/ul&gt;
  3989. &lt;/li&gt;
  3990. &lt;li&gt;2024-05-09 | Virtual (Nuremberg/Nürnberg, DE) | &lt;a href=&quot;https://www.meetup.com/rust-noris/&quot;&gt;Rust Nuremberg&lt;/a&gt;&lt;ul&gt;
  3991. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-noris/events/297945257/&quot;&gt;&lt;strong&gt;Rust Nürnberg online&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3992. &lt;/ul&gt;
  3993. &lt;/li&gt;
  3994. &lt;li&gt;2024-05-14| Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust/&quot;&gt;Dallas Rust&lt;/a&gt;&lt;ul&gt;
  3995. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/298341699/&quot;&gt;&lt;strong&gt;Last Tuesday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3996. &lt;/ul&gt;
  3997. &lt;/li&gt;
  3998. &lt;li&gt;2024-05-14 | Virtual + In-Person (München/Munich, DE) | &lt;a href=&quot;https://www.meetup.com/rust-munich/&quot;&gt;Rust Munich&lt;/a&gt;&lt;ul&gt;
  3999. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-munich/events/298507657/&quot;&gt;&lt;strong&gt;Rust Munich 2024 / 1 - hybrid (Rescheduled)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4000. &lt;/ul&gt;
  4001. &lt;/li&gt;
  4002. &lt;li&gt;2024-05-15 | Virtual (Vancouver, BC, CA) | &lt;a href=&quot;https://www.meetup.com/vancouver-rust/&quot;&gt;Vancouver Rust&lt;/a&gt;&lt;ul&gt;
  4003. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/vancouver-rust/events/298542323/&quot;&gt;&lt;strong&gt;Rust Study/Hack/Hang-out&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4004. &lt;/ul&gt;
  4005. &lt;/li&gt;
  4006. &lt;/ul&gt;
  4007. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#africa&quot;&gt;Africa&lt;/a&gt;&lt;/h5&gt;
  4008. &lt;ul&gt;
  4009. &lt;li&gt;2024-05-04 | Kampala, UG | &lt;a href=&quot;https://www.eventbrite.com/o/rust-circle-kampala-65249289033&quot;&gt;Rust Circle Kampala&lt;/a&gt;&lt;ul&gt;
  4010. &lt;li&gt;&lt;a href=&quot;https://www.eventbrite.com/e/rust-circle-meetup-tickets-628763176587?aff=ebdsoporgprofile&quot;&gt;&lt;strong&gt;Rust Circle Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4011. &lt;/ul&gt;
  4012. &lt;/li&gt;
  4013. &lt;/ul&gt;
  4014. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#asia&quot;&gt;Asia&lt;/a&gt;&lt;/h5&gt;
  4015. &lt;ul&gt;
  4016. &lt;li&gt;2024-04-20 | Kuala Lumpur, MY | &lt;a href=&quot;https://t.me/golangmalaysia&quot;&gt;GoLang Malaysia&lt;/a&gt;&lt;ul&gt;
  4017. &lt;li&gt;&lt;a href=&quot;https://docs.google.com/forms/d/e/1FAIpQLSfeWzcnWic--G2Sj6uJFJNc_L2Iv7J27hIofZwhBYXu2CbUjQ/viewform&quot;&gt;&lt;strong&gt;Rust Talk &amp;amp; Workshop - Parallel Programming April 2024&lt;/strong&gt;&lt;/a&gt; | &lt;a href=&quot;https://t.me/+dF46Fly4A_BjOTJl&quot;&gt;Event updates Telegram&lt;/a&gt; | &lt;a href=&quot;https://t.me/golangmalaysia&quot;&gt;Event group chat&lt;/a&gt;&lt;/li&gt;
  4018. &lt;/ul&gt;
  4019. &lt;/li&gt;
  4020. &lt;li&gt;2024-05-11 | Bangalore, IN | &lt;a href=&quot;https://hasgeek.com/rustbangalore&quot;&gt;Rust Bangalore&lt;/a&gt;&lt;ul&gt;
  4021. &lt;li&gt;&lt;a href=&quot;https://hasgeek.com/rustbangalore/may-2024-rustacean-meetup/&quot;&gt;&lt;strong&gt;May 2024 Rustacean meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4022. &lt;/ul&gt;
  4023. &lt;/li&gt;
  4024. &lt;/ul&gt;
  4025. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#europe&quot;&gt;Europe&lt;/a&gt;&lt;/h5&gt;
  4026. &lt;ul&gt;
  4027. &lt;li&gt;2024-04-17 | Bergen, NO | &lt;a href=&quot;https://www.meetup.com/bergen-html-css-meetup-group/&quot;&gt;Hubbel kodeklubb&lt;/a&gt;&lt;ul&gt;
  4028. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bergen-html-css-meetup-group/events/300031586/&quot;&gt;&lt;strong&gt;Lær Rust med Conways Game of Life&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4029. &lt;/ul&gt;
  4030. &lt;/li&gt;
  4031. &lt;li&gt;2024-04-17 | Lyon, FR | &lt;a href=&quot;https://www.meetup.com/rust-lyon/&quot;&gt;Rust Lyon&lt;/a&gt;&lt;ul&gt;
  4032. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-lyon/events/300268616/&quot;&gt;&lt;strong&gt;Rust Lyon Meetup #10&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4033. &lt;/ul&gt;
  4034. &lt;/li&gt;
  4035. &lt;li&gt;2024-04-17 | Ostrava, CZ | &lt;a href=&quot;https://www.meetup.com/techmeetupostrava/&quot;&gt;TechMeetup Ostrava&lt;/a&gt;&lt;ul&gt;
  4036. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/techmeetupostrava/events/299912212/&quot;&gt;&lt;strong&gt;TechMeetup: RUST&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4037. &lt;/ul&gt;
  4038. &lt;/li&gt;
  4039. &lt;li&gt;2024-04-20 | Augsburg, DE | &lt;a href=&quot;https://www.luga.de/static/LIT-2024/&quot;&gt;Augsburger Linux-Infotag 2024&lt;/a&gt;&lt;/li&gt;
  4040. &lt;li&gt;&lt;a href=&quot;https://www.luga.de/static/LIT-2024/talks/einstieg_in_embedded_rust_mit_dem_raspberry_pico_wh/&quot;&gt;&lt;strong&gt;Augsburger Linux-Infotag 2024: Workshop Einstieg in Embedded Rust mit dem Raspberry Pico WH&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4041. &lt;li&gt;2024-04-23 | Berlin, DE | &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  4042. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-berlin/events/300047151/&quot;&gt;&lt;strong&gt;Rust'n'Tell - Rust for the Web&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4043. &lt;/ul&gt;
  4044. &lt;/li&gt;
  4045. &lt;li&gt;2024-04-23 | Paris, FR | &lt;a href=&quot;https://mobilizon.fr/@rust_paris&quot;&gt;Rust Paris&lt;/a&gt;&lt;ul&gt;
  4046. &lt;li&gt;&lt;a href=&quot;https://mobilizon.fr/events/4ba93021-c43a-4e4a-b3e5-09c1c0d0a957&quot;&gt;&lt;strong&gt;Paris Rust Meetup #67&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4047. &lt;/ul&gt;
  4048. &lt;/li&gt;
  4049. &lt;li&gt;2024-04-24 | Virtual + In Person (Prague, CZ) | &lt;a href=&quot;https://www.meetup.com/rust-czech-republic/&quot;&gt;Rust Czech Republic&lt;/a&gt;&lt;ul&gt;
  4050. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-czech-republic/events/300388563&quot;&gt;&lt;strong&gt;#2: Making Safe Rust Safer (Pavel Šimerda)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4051. &lt;/ul&gt;
  4052. &lt;/li&gt;
  4053. &lt;li&gt;2024-04-25 | Aarhus, DK | &lt;a href=&quot;https://www.meetup.com/rust-aarhus/&quot;&gt;Rust Aarhus&lt;/a&gt;&lt;ul&gt;
  4054. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-aarhus/events/299564517/&quot;&gt;&lt;strong&gt;Talk Night at MFT Energy&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4055. &lt;/ul&gt;
  4056. &lt;/li&gt;
  4057. &lt;li&gt;2024-04-25 | Berlin, DE | &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  4058. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-berlin/events/299288960/&quot;&gt;&lt;strong&gt;Rust and Tell - TBD&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4059. &lt;/ul&gt;
  4060. &lt;/li&gt;
  4061. &lt;li&gt;2024-04-25 | København/Copenhagen, DK | &lt;a href=&quot;https://www.meetup.com/copenhagen-rust-community/&quot;&gt;Copenhagen Rust Community&lt;/a&gt;&lt;ul&gt;
  4062. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/copenhagen-rust-community/events/300458178/&quot;&gt;&lt;strong&gt;Rust meetup #46 sponsored by Nine A/S&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4063. &lt;/ul&gt;
  4064. &lt;/li&gt;
  4065. &lt;li&gt;2024-04-25 | Vienna, AT | &lt;a href=&quot;https://www.meetup.com/rust-vienna/&quot;&gt;Rust Vienna&lt;/a&gt;&lt;ul&gt;
  4066. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-vienna/events/300389154/&quot;&gt;&lt;strong&gt;Rust Vienna x Python User Group - April&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4067. &lt;/ul&gt;
  4068. &lt;/li&gt;
  4069. &lt;li&gt;2024-04-27 | Basel, CH | &lt;a href=&quot;https://www.meetup.com/rust-basel/&quot;&gt;Rust Basel&lt;/a&gt;&lt;ul&gt;
  4070. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-basel/events/299933581/&quot;&gt;&lt;strong&gt;Fullstack Rust - Workshop #2 (Register by 23 April)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4071. &lt;/ul&gt;
  4072. &lt;/li&gt;
  4073. &lt;li&gt;2024-04-27 | Stockholm, SE | &lt;a href=&quot;https://www.meetup.com/stockholm-rust/&quot;&gt;Stockholm Rust&lt;/a&gt;&lt;ul&gt;
  4074. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/stockholm-rust/events/300369409&quot;&gt;&lt;strong&gt;Ferris' Fika Forum #2&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4075. &lt;/ul&gt;
  4076. &lt;/li&gt;
  4077. &lt;li&gt;2024-04-30 | Budapest, HU | &lt;a href=&quot;https://www.meetup.com/budapest-rust-meetup-group/&quot;&gt;Budapest Rust Meetup Group&lt;/a&gt;&lt;ul&gt;
  4078. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/budapest-rust-meetup-group/events/300269044/&quot;&gt;&lt;strong&gt;Rust Meetup Budapest 2&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4079. &lt;/ul&gt;
  4080. &lt;/li&gt;
  4081. &lt;li&gt;2024-04-30 | Salzburg, AT | Rust Salzburg&lt;ul&gt;
  4082. &lt;li&gt;[&lt;strong&gt;Rust Salzburg meetup&lt;/strong&gt;]: 6:30pm - CCC Salzburg, 1. OG, ArgeKultur, Ulrike-Gschwandtner-Straße 5, 5020 Salzburg&lt;/li&gt;
  4083. &lt;/ul&gt;
  4084. &lt;/li&gt;
  4085. &lt;li&gt;2024-05-01 | Utrecht, NL | &lt;a href=&quot;https://nl-rse.org/events/2024-05-01-meetup&quot;&gt;NL-RSE Community&lt;/a&gt;&lt;ul&gt;
  4086. &lt;li&gt;&lt;a href=&quot;https://www.eventbrite.nl/e/nl-rse-rust-meetup-tickets-871056271757&quot;&gt;&lt;strong&gt;NL-RSE RUST meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4087. &lt;/ul&gt;
  4088. &lt;/li&gt;
  4089. &lt;li&gt;2024-05-06 | Delft, NL | &lt;a href=&quot;https://www.gosim.org/&quot;&gt;GOSIM&lt;/a&gt;&lt;ul&gt;
  4090. &lt;li&gt;&lt;a href=&quot;https://europe2024.gosim.org/&quot;&gt;&lt;strong&gt;GOSIM Europe 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4091. &lt;/ul&gt;
  4092. &lt;/li&gt;
  4093. &lt;li&gt;2024-05-07 &amp;amp; 2024-05-08 | Delft, NL | &lt;a href=&quot;https://rustnl.org/&quot;&gt;RustNL&lt;/a&gt;&lt;ul&gt;
  4094. &lt;li&gt;&lt;a href=&quot;https://2024.rustnl.org/&quot;&gt;&lt;strong&gt;RustNL 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4095. &lt;/ul&gt;
  4096. &lt;/li&gt;
  4097. &lt;li&gt;2024-05-09 | Gdańsk, PL | &lt;a href=&quot;https://www.meetup.com/rust-gdansk/&quot;&gt;Rust Gdansk&lt;/a&gt;&lt;ul&gt;
  4098. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-gdansk/events/299766774/&quot;&gt;&lt;strong&gt;Rust Gdansk Meetup #2&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4099. &lt;/ul&gt;
  4100. &lt;/li&gt;
  4101. &lt;li&gt;2024-05-14 | Virtual + In-Person (München/Munich, DE) | &lt;a href=&quot;https://www.meetup.com/rust-munich/&quot;&gt;Rust Munich&lt;/a&gt;&lt;ul&gt;
  4102. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-munich/events/298507657/&quot;&gt;&lt;strong&gt;Rust Munich 2024 / 1 - hybrid (Rescheduled)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4103. &lt;/ul&gt;
  4104. &lt;/li&gt;
  4105. &lt;/ul&gt;
  4106. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#north-america&quot;&gt;North America&lt;/a&gt;&lt;/h5&gt;
  4107. &lt;ul&gt;
  4108. &lt;li&gt;2024-04-18 | Chicago, IL, US | &lt;a href=&quot;https://www.meetup.com/deep-dish-rust/&quot;&gt;Deep Dish Rust&lt;/a&gt;&lt;ul&gt;
  4109. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/deep-dish-rust/events/300204763/&quot;&gt;&lt;strong&gt;Rust Talk: What Are Panics?&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4110. &lt;/ul&gt;
  4111. &lt;/li&gt;
  4112. &lt;li&gt;2024-04-18 | Mountain View, CA, US | &lt;a href=&quot;https://www.meetup.com/mv-rust-meetup/&quot;&gt;Mountain View Rust Meetup&lt;/a&gt;&lt;ul&gt;
  4113. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/mv-rust-meetup/events/299803586/&quot;&gt;&lt;strong&gt;Rust Meetup at Hacker Dojo&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4114. &lt;/ul&gt;
  4115. &lt;/li&gt;
  4116. &lt;li&gt;2024-04-24 | Austin, TX, US | &lt;a href=&quot;https://www.meetup.com/rust-atx/&quot;&gt;Rust ATX&lt;/a&gt;&lt;ul&gt;
  4117. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-atx/events/299960315/&quot;&gt;&lt;strong&gt;Rust Lunch - Fareground&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4118. &lt;/ul&gt;
  4119. &lt;/li&gt;
  4120. &lt;li&gt;2024-04-25 | Nashville, TN, US | &lt;a href=&quot;https://www.meetup.com/music-city-rust-developers/&quot;&gt;Music City Rust Developers&lt;/a&gt;&lt;ul&gt;
  4121. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/music-city-rust-developers/events/299976876/&quot;&gt;&lt;strong&gt;Music City Rust Developers - Async Rust on Embedded&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4122. &lt;/ul&gt;
  4123. &lt;/li&gt;
  4124. &lt;li&gt;2024-04-26 | Boston, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
  4125. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/300116689/&quot;&gt;&lt;strong&gt;North End Rust Lunch, Apr 26&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4126. &lt;/ul&gt;
  4127. &lt;/li&gt;
  4128. &lt;li&gt;2024-05-04 | Cambridge, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
  4129. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/300116701/&quot;&gt;&lt;strong&gt;Kendall Rust Lunch, May 4&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4130. &lt;/ul&gt;
  4131. &lt;/li&gt;
  4132. &lt;li&gt;2024-05-12 | Brookline, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
  4133. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/300116747/&quot;&gt;&lt;strong&gt;Coolidge Corner Brookline Rust Lunch, May 12&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4134. &lt;/ul&gt;
  4135. &lt;/li&gt;
  4136. &lt;/ul&gt;
  4137. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#oceania&quot;&gt;Oceania&lt;/a&gt;&lt;/h5&gt;
  4138. &lt;ul&gt;
  4139. &lt;li&gt;2024-04-17 | Sydney, NSW, AU | &lt;a href=&quot;https://www.meetup.com/rust-sydney/&quot;&gt;Rust Sydney&lt;/a&gt;&lt;ul&gt;
  4140. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-sydney/events/299882966/&quot;&gt;&lt;strong&gt;WMaTIR 2024 Gala &amp;amp; Talks&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4141. &lt;/ul&gt;
  4142. &lt;/li&gt;
  4143. &lt;li&gt;2024-04-30 | Auckland, NZ | &lt;a href=&quot;https://www.meetup.com/rust-akl/&quot;&gt;Rust AKL&lt;/a&gt;&lt;ul&gt;
  4144. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-akl/events/300304958/&quot;&gt;&lt;strong&gt;Rust AKL: Why Rust? Convince Me!&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4145. &lt;/ul&gt;
  4146. &lt;/li&gt;
  4147. &lt;li&gt;2024-04-30 | Canberra, ACT, AU | &lt;a href=&quot;https://www.meetup.com/rust-canberra/&quot;&gt;Canberra Rust User Group&lt;/a&gt;&lt;ul&gt;
  4148. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-canberra/events/300023000/&quot;&gt;&lt;strong&gt;CRUG April Meetup: Generics and Traits&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4149. &lt;/ul&gt;
  4150. &lt;/li&gt;
  4151. &lt;/ul&gt;
  4152. &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
  4153. it mentioned here. Please remember to add a link to the event too.
  4154. 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;
  4155. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#jobs&quot;&gt;Jobs&lt;/a&gt;&lt;/h4&gt;
  4156.  
  4157.  
  4158. &lt;p&gt;Please see the latest &lt;a href=&quot;https://www.reddit.com/r/rust/comments/1bpg8b8/official_rrust_whos_hiring_thread_for_jobseekers&quot;&gt;Who's Hiring thread on r/rust&lt;/a&gt;&lt;/p&gt;
  4159. &lt;h3&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#quote-of-the-week&quot;&gt;Quote of the Week&lt;/a&gt;&lt;/h3&gt;
  4160. &lt;blockquote&gt;
  4161. &lt;p&gt;There is absolutely no way I can imagine that &lt;code&gt;Option&lt;/code&gt; is causing that error. That'd be like turning on the &quot;Hide Taskbar&quot; setting causing your GPU to catch fire.&lt;/p&gt;
  4162. &lt;p&gt;[...]&lt;/p&gt;
  4163. &lt;p&gt;If it's not any of those, consider an exorcist because your machine &lt;em&gt;might&lt;/em&gt; be haunted.&lt;/p&gt;
  4164. &lt;/blockquote&gt;
  4165. &lt;p&gt;– &lt;a href=&quot;https://users.rust-lang.org/t/access-is-denied-os-error-5/109515/2&quot;&gt;Daniel Keep on rust-users&lt;/a&gt;&lt;/p&gt;
  4166. &lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/t/twir-quote-of-the-week/328/1561&quot;&gt;Hayden Brown&lt;/a&gt; for the suggestion!&lt;/p&gt;
  4167. &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;
  4168. &lt;p&gt;&lt;em&gt;This Week in Rust is edited by: &lt;a href=&quot;https://github.com/nellshamrell&quot;&gt;nellshamrell&lt;/a&gt;, &lt;a href=&quot;https://github.com/llogiq&quot;&gt;llogiq&lt;/a&gt;, &lt;a href=&quot;https://github.com/cdmistman&quot;&gt;cdmistman&lt;/a&gt;, &lt;a href=&quot;https://github.com/ericseppanen&quot;&gt;ericseppanen&lt;/a&gt;, &lt;a href=&quot;https://github.com/extrawurst&quot;&gt;extrawurst&lt;/a&gt;, &lt;a href=&quot;https://github.com/andrewpollack&quot;&gt;andrewpollack&lt;/a&gt;, &lt;a href=&quot;https://github.com/U007D&quot;&gt;U007D&lt;/a&gt;, &lt;a href=&quot;https://github.com/kolharsam&quot;&gt;kolharsam&lt;/a&gt;, &lt;a href=&quot;https://github.com/joelmarcey&quot;&gt;joelmarcey&lt;/a&gt;, &lt;a href=&quot;https://github.com/mariannegoldin&quot;&gt;mariannegoldin&lt;/a&gt;, &lt;a href=&quot;https://github.com/bennyvasquez&quot;&gt;bennyvasquez&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
  4169. &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;
  4170. &lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://www.reddit.com/r/rust/comments/1c6o935/this_week_in_rust_543&quot;&gt;Discuss on r/rust&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;</description>
  4171. <pubDate>Wed, 17 Apr 2024 04:00:00 +0000</pubDate>
  4172. <dc:creator>TWiR Contributors</dc:creator>
  4173. </item>
  4174. <item>
  4175. <title>Mozilla Thunderbird: Team Thunderbird Answers Your Most Frequently Asked Questions</title>
  4176. <guid isPermaLink="false">https://blog.thunderbird.net/?p=1675</guid>
  4177. <link>https://blog.thunderbird.net/2024/04/team-thunderbird-answers-your-most-frequently-asked-questions/</link>
  4178. <description>&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;attachment-640x360 size-640x360 wp-post-image&quot; height=&quot;320&quot; src=&quot;https://blog.thunderbird.net/files/2024/04/QA.png&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
  4179. &lt;div class=&quot;wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex&quot;&gt;
  4180. &lt;div class=&quot;wp-block-button has-custom-font-size has-small-font-size&quot;&gt;&lt;a class=&quot;wp-block-button__link has-black-color has-white-background-color has-text-color has-background wp-element-button&quot; href=&quot;https://translate.google.com/translate?js=n&amp;amp;sl=auto&amp;amp;tl=de&amp;amp;u=https://blog.thunderbird.net/2024/04/team-thunderbird-answers-your-most-frequently-asked-questions&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Auf Deutsch übersetzen&lt;/a&gt;&lt;/div&gt;
  4181.  
  4182.  
  4183.  
  4184. &lt;div class=&quot;wp-block-button has-custom-font-size has-small-font-size&quot;&gt;&lt;a class=&quot;wp-block-button__link has-black-color has-white-background-color has-text-color has-background wp-element-button&quot; href=&quot;https://translate.google.com/translate?js=n&amp;amp;sl=auto&amp;amp;tl=fr&amp;amp;u=https://blog.thunderbird.net/2024/04/team-thunderbird-answers-your-most-frequently-asked-questions&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Traduire en français&lt;/a&gt;&lt;/div&gt;
  4185.  
  4186.  
  4187.  
  4188. &lt;div class=&quot;wp-block-button has-custom-font-size has-small-font-size&quot;&gt;&lt;a class=&quot;wp-block-button__link has-black-color has-white-background-color has-text-color has-background wp-element-button&quot; href=&quot;https://translate.google.com/translate?js=n&amp;amp;sl=auto&amp;amp;tl=ja&amp;amp;u=https://blog.thunderbird.net/2024/04/team-thunderbird-answers-your-most-frequently-asked-questions&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;日本語に翻訳&lt;/a&gt;&lt;/div&gt;
  4189. &lt;/div&gt;
  4190.  
  4191.  
  4192.  
  4193. &lt;p&gt;We know the Thunderbird community has LOTS of questions! We get them on &lt;a href=&quot;https://support.mozilla.org/products/thunderbird&quot;&gt;Mozilla Support&lt;/a&gt;, &lt;a href=&quot;https://mastodon.online/@thunderbird&quot;&gt;Mastodon&lt;/a&gt;, and &lt;a href=&quot;https://x.com/mozthunderbird&quot;&gt;X.com&lt;/a&gt; (formerly Twitter). They pop up everywhere, from the &lt;a href=&quot;https://www.reddit.com/r/Thunderbird/&quot;&gt;Thunderbird subreddit&lt;/a&gt; to the teeming halls of conferences like FOSDEM and SCaLE. During our March Community Office Hours, we took your most frequently asked questions to Team Thunderbird and got some answers. If you couldn’t watch the full session, or would rather have the answers in abbreviated text clips, this post is for you!&lt;/p&gt;
  4194.  
  4195.  
  4196.  
  4197. &lt;h3&gt;&lt;strong&gt;Thunderbird for Android / K-9 Mail&lt;/strong&gt;&lt;/h3&gt;
  4198.  
  4199.  
  4200.  
  4201. &lt;p&gt;The upcoming release on Android is definitely on everyone’s mind! We received lots of questions about this at our conference booths, so let’s answer them!&lt;/p&gt;
  4202.  
  4203.  
  4204.  
  4205. &lt;p&gt;&lt;em&gt;&lt;strong&gt;Will there be Exchange support for Thunderbird for Android?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
  4206.  
  4207.  
  4208.  
  4209. &lt;p&gt;Yes! Implementing Exchange in Rust in the Thunderbird Desktop client will enable us to reuse those Rust crates as shared libraries with the Mobile client. Stay up to date on Exchange support progress via our monthly &lt;a href=&quot;https://blog.thunderbird.net/tag/dev-digest/&quot;&gt;Developer Digests&lt;/a&gt;.&lt;/p&gt;
  4210.  
  4211.  
  4212.  
  4213. &lt;p&gt;&lt;em&gt;&lt;strong&gt;Will Thunderbird Add-ons be available on Android?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
  4214.  
  4215.  
  4216.  
  4217. &lt;p&gt;Right now, no, they will not be available. K-9 Mail uses a different code base than Thunderbird Desktop. Thunderbird add-ons are designed for a desktop experience, not a mobile one. We &lt;em&gt;want&lt;/em&gt; to have add-ons in the future, but this will likely not happen within the next two years.&lt;/p&gt;
  4218.  
  4219.  
  4220.  
  4221. &lt;p&gt;&lt;em&gt;&lt;strong&gt;When Thunderbird for Android &lt;/strong&gt;&lt;/em&gt;&lt;strong&gt;&lt;em&gt;launches, will it be available on &lt;a href=&quot;https://f-droid.org&quot;&gt;F-Droid&lt;/a&gt;?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
  4222.  
  4223.  
  4224.  
  4225. &lt;p&gt;It absolutely will. &lt;/p&gt;
  4226.  
  4227.  
  4228.  
  4229. &lt;p&gt;&lt;em&gt;&lt;strong&gt;When Thunderbird for Android is ready to be released, what will the upgrade path look like?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
  4230.  
  4231.  
  4232.  
  4233. &lt;p&gt;We know some in the K-9 Mail community love their adorable robot dog and don’t want to give him up yet. So we will support K-9 Mail (same code, different brand) in parallel for a year or two, until the product is more mature, and we see that more K-9 Mail users are organically switching.&lt;/p&gt;
  4234.  
  4235.  
  4236.  
  4237. &lt;p&gt;Because of Android security, users will need to manually migrate from K-9 Mail to Thunderbird for Android, versus an automatic migration. We want to make that effortless and unobtrusive, and the Sync feature using Mozilla accounts will be a large part of that. We are exploring one-tap migration tools that will prompt you to switch easily and keep all your data and settings – and your peace of mind.&lt;/p&gt;
  4238.  
  4239.  
  4240.  
  4241. &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;
  4242.  
  4243. &lt;/div&gt;&lt;/figure&gt;
  4244.  
  4245.  
  4246.  
  4247. &lt;p&gt;&lt;em&gt;&lt;strong&gt;Will CalDAV and CardDAV be available on Thunderbird for Android?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
  4248.  
  4249.  
  4250.  
  4251. &lt;p&gt;Probably! We’re still determining this, but we know our users like having their contacts and calendars inside one app for convenience, as well as out of privacy concerns. While it would be a lot of engineering effort, we understand the reasoning behind these requests. As we consider how to go forward, we’ll release all these explorations and ideas in our monthly updates, where people can give us feedback.&lt;/p&gt;
  4252.  
  4253.  
  4254.  
  4255. &lt;p&gt;&lt;em&gt;&lt;strong&gt;Will the K-9 Mail API provide the ability to download the save preferences that Sync stores locally to plug into automation like Ansible?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
  4256.  
  4257.  
  4258.  
  4259. &lt;p&gt;Yes! Sync is open source, so users can self-host their own instead of using Mozilla services. This question touches on the differences between data structure for desktop and mobile, and how they handle settings. So this will take a while, but once we have something stable in a beta release, we’ll have articles on how to hook up your own sync server and do your own automation.&lt;/p&gt;
  4260.  
  4261.  
  4262.  
  4263. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  4264.  
  4265.  
  4266.  
  4267. &lt;h3&gt;&lt;strong&gt;Thunderbird for Desktop&lt;/strong&gt;&lt;/h3&gt;
  4268.  
  4269.  
  4270.  
  4271. &lt;p&gt;&lt;em&gt;&lt;strong&gt;When will we have native Exchange support for desktop Thunderbird?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
  4272.  
  4273.  
  4274.  
  4275. &lt;p&gt;We hope to land this in the next ESR (Extended Support Release), version 128, in limited capacity. Users will still need to use the OWL Add-on for all situations where the standard exchange web service is not available. We don’t yet know if native calendar and address book support will be included in the ESR. We want to support every aspect of Exchange, but there is a lot of code complexity and a history of changes from Microsoft. So our primary goal is good, stable support for email by default, and calendar and address book if possible, for the next ESR.&lt;/p&gt;
  4276.  
  4277.  
  4278.  
  4279. &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;
  4280.  
  4281. &lt;/div&gt;&lt;/figure&gt;
  4282.  
  4283.  
  4284.  
  4285. &lt;p&gt;&lt;em&gt;&lt;strong&gt;When will conversations and a true threaded view be added to Thunderbird?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
  4286.  
  4287.  
  4288.  
  4289. &lt;p&gt;Viewing your own sent emails is an important component of a true conversation view. This is a top priority and we’re actively working towards it. Unfortunately, this requires overhauling the backend database that underlies Thunderbird, which is 20 years old. Our legacy database is not built to handle conversation views with received and sent messages listed in the same thread. Restructuring a two decades old database is not easy. Our goal is to have a new global message database in place by May 31. If nothing has exploded, it should be much easier to enable conversation view in the front end.&lt;/p&gt;
  4290.  
  4291.  
  4292.  
  4293. &lt;p&gt;&lt;em&gt;&lt;strong&gt;When will we get a full sender name column&lt;/strong&gt;&lt;/em&gt; &lt;em&gt;&lt;strong&gt;with the raw email address of the sender&lt;/strong&gt;&lt;/em&gt;?&lt;em&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/em&gt;&lt;strong&gt;&lt;em&gt;This will&lt;/em&gt;&lt;/strong&gt;&lt;em&gt;&lt;strong&gt; help further avoid phishing and spam&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;
  4294.  
  4295.  
  4296.  
  4297. &lt;p&gt;We plan to make this available in the next ESR — Thunderbird 128 — which is due July 2024.&lt;/p&gt;
  4298.  
  4299.  
  4300.  
  4301. &lt;p&gt;&lt;em&gt;&lt;strong&gt;Will there ever be a browser-based view of Thunderbird?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
  4302.  
  4303.  
  4304.  
  4305. &lt;p&gt;Despite our foundations in Firefox, this is a huge effort that would have to be built from scratch. This isn’t on our roadmap and not in our plans for now. If there was a high demand, we might examine how feasible this could be. Alex explains this in more detail during the short video below:&lt;/p&gt;
  4306.  
  4307.  
  4308.  
  4309. &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;
  4310.  
  4311. &lt;/div&gt;&lt;/figure&gt;
  4312. &lt;p&gt;The post &lt;a href=&quot;https://blog.thunderbird.net/2024/04/team-thunderbird-answers-your-most-frequently-asked-questions/&quot;&gt;Team Thunderbird Answers Your Most Frequently Asked Questions&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;</description>
  4313. <pubDate>Tue, 16 Apr 2024 13:59:00 +0000</pubDate>
  4314. <dc:creator>Monica Ayhens-Madon</dc:creator>
  4315. </item>
  4316. <item>
  4317. <title>Mozilla Performance Blog: Performance Testing Newsletter, Q1 Edition</title>
  4318. <guid isPermaLink="false">https://blog.mozilla.org/performance/?p=502</guid>
  4319. <link>https://blog.mozilla.org/performance/2024/04/16/performance-testing-newsletter-q1-edition/</link>
  4320. <description>&lt;div class=&quot;Ar Au Ao&quot; id=&quot;:1mc&quot;&gt;
  4321. &lt;div class=&quot;Am aiL Al editable LW-avf tS-tW tS-tY&quot; contenteditable=&quot;true&quot; id=&quot;:1m8&quot; tabindex=&quot;1&quot;&gt;
  4322. &lt;p dir=&quot;ltr&quot; id=&quot;gmail-docs-internal-guid-6605a564-7fff-78e7-5da5-47ac73c643d0&quot;&gt;Welcome to the latest edition of the Performance Testing Newsletter! The PerfTools team empowers engineers with tools to continuously improve the performance of Mozilla products. See below for highlights from the changes made in the last quarter.&lt;/p&gt;
  4323. &lt;h3&gt;Highlights &lt;img height=&quot;31&quot; src=&quot;https://lh7-us.googleusercontent.com/emyZXyy_8A-kowHeY1AoiLXtM3WBGpLDfxtL5Oj0tzFoH7eA5_siRJiM-zJbe5uIWPyRBYVDUG4cFOuARt072bpSZH0kqlZQZ83ManvR-AYnuGqjIRNYqNE1YxOgJOlAaHPAuv8M7TTRCytwE9TXrPA&quot; width=&quot;29&quot; /&gt;&lt;/h3&gt;
  4324. &lt;ul&gt;
  4325. &lt;li dir=&quot;ltr&quot;&gt;
  4326. &lt;p dir=&quot;ltr&quot;&gt;[gijs] &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1762951&quot;&gt;Made a fix to remove the statuspanel in our raptor performance tests.&lt;/a&gt;&lt;/p&gt;
  4327. &lt;/li&gt;
  4328. &lt;li dir=&quot;ltr&quot;&gt;
  4329. &lt;p dir=&quot;ltr&quot;&gt;[jmaher] &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1859911&quot;&gt;Manifest test files in Raptor now follow the toml format.&lt;/a&gt;&lt;/p&gt;
  4330. &lt;/li&gt;
  4331. &lt;li dir=&quot;ltr&quot;&gt;
  4332. &lt;p dir=&quot;ltr&quot;&gt;[myeongjun] &lt;a href=&quot;https://github.com/mozilla/treeherder/commit/b4a2a528dce7b72a74225ee56cd4dbcb42b32f7a&quot;&gt;Fixed an issue with manual ingestion in Treeherder.&lt;/a&gt;&lt;/p&gt;
  4333. &lt;/li&gt;
  4334. &lt;li dir=&quot;ltr&quot;&gt;
  4335. &lt;p dir=&quot;ltr&quot;&gt;[myeongjun] &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1830984&quot;&gt;Added the –non-pgo flag to mach-try-perf to allow users to easily make use of opt builds instead of pgo builds. This will result in faster try run times.&lt;/a&gt;&lt;/p&gt;
  4336. &lt;/li&gt;
  4337. &lt;li dir=&quot;ltr&quot;&gt;
  4338. &lt;p dir=&quot;ltr&quot;&gt;[andrej] &lt;a href=&quot;https://docs.google.com/document/d/1VsomiBS_LiF0xbC8TL0mV3AqBM7gVApeih5XIZmLuaU/edit?usp=sharing&quot;&gt;Produced some documentation to help firefox-android engineers with mobile performance testing in mozilla-central.&lt;/a&gt;&lt;/p&gt;
  4339. &lt;p&gt;[kshampur] &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1689537&quot;&gt;Added Motionmark 1.3 tests to Raptor.&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
  4340. &lt;li dir=&quot;ltr&quot;&gt;
  4341. &lt;p dir=&quot;ltr&quot;&gt;[kshampur] &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1861731&quot;&gt;Failing Raptor tasks now provide a screenshot of the failure.&lt;/a&gt;&lt;/p&gt;
  4342. &lt;/li&gt;
  4343. &lt;li dir=&quot;ltr&quot;&gt;
  4344. &lt;p dir=&quot;ltr&quot;&gt;[fbilt] &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1615258&quot;&gt;Added searchfox links from tests to test manifests in our Raptor performance documentations.&lt;/a&gt; &lt;a href=&quot;https://firefox-source-docs.mozilla.org/testing/perfdocs/raptor.html#wasm-godot-baseline-b&quot;&gt;Example here.&lt;/a&gt;&lt;/p&gt;
  4345. &lt;/li&gt;
  4346. &lt;li dir=&quot;ltr&quot;&gt;
  4347. &lt;p dir=&quot;ltr&quot;&gt;[sparky] &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1855674&quot;&gt;Talos pdfpaint test has been updated to use a larger, and newer set of PDFs.&lt;/a&gt;&lt;/p&gt;
  4348. &lt;/li&gt;
  4349. &lt;/ul&gt;
  4350. &lt;h3&gt;Contributors &lt;img height=&quot;31&quot; src=&quot;https://lh7-us.googleusercontent.com/gyN-8bl66lKh7I-Op-GihM7KjlKRGt3y8c9A57Br034ic1a8OGWHyITHCGv9gNgh2TSddD2yxQNjCwbPwj-4f9NMQPoJm1dMWnHAMy2u44vOPFdZJHWbls4k8DHj7DBRsv9BrfHtiS2HnYUU65NXA7Y&quot; width=&quot;31&quot; /&gt;&lt;/h3&gt;
  4351. &lt;ul&gt;
  4352. &lt;li dir=&quot;ltr&quot;&gt;
  4353. &lt;p dir=&quot;ltr&quot;&gt;Myeongjun Go [:myeongjun]&lt;/p&gt;
  4354. &lt;/li&gt;
  4355. &lt;/ul&gt;
  4356. &lt;p dir=&quot;ltr&quot;&gt;If you have any questions, or are looking to add performance testing for your code component, you can find us in &lt;a href=&quot;https://matrix.to/#/#perftest:mozilla.org&quot;&gt;#perftest on Element&lt;/a&gt;, or &lt;a href=&quot;https://mozilla.slack.com/archives/C03U19JCSFQ&quot;&gt;#perf-help on Slack&lt;/a&gt;.&lt;/p&gt;
  4357. &lt;p dir=&quot;ltr&quot;&gt;P.S. If you’re interested in including updates from your teams in a quarterly newsletter like this, and you are not currently covered by another newsletter, please reach out to me (:sparky). I’m interested in making a more general newsletter for these.&lt;/p&gt;
  4358. &lt;/div&gt;
  4359. &lt;/div&gt;</description>
  4360. <pubDate>Tue, 16 Apr 2024 13:34:38 +0000</pubDate>
  4361. <dc:creator>Gregory Mierzwinski</dc:creator>
  4362. </item>
  4363. <item>
  4364. <title>Will Kahn-Greene: Observability Team Newsletter (2024q1)</title>
  4365. <guid isPermaLink="true">https://bluesock.org/~willkg/blog/mozilla/obs_2024q1.html</guid>
  4366. <link>https://bluesock.org/~willkg/blog/mozilla/obs_2024q1.html</link>
  4367. <description>&lt;p&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://mozilla-hub.atlassian.net/wiki/spaces/CS1/pages/428965889/Observability+Team&quot;&gt;Observability Team&lt;/a&gt;
  4368. is a team dedicated to the problem domain and discipline of Observability at
  4369. Mozilla.&lt;/p&gt;
  4370. &lt;p&gt;We own, manage, and support monitoring infrastructure and tools supporting
  4371. Mozilla products and services. Currently this includes
  4372. &lt;a class=&quot;reference external&quot; href=&quot;https://mozilla-hub.atlassian.net/wiki/spaces/CS1/pages/609845437/Sentry&quot;&gt;Sentry&lt;/a&gt;
  4373. and crash ingestion related services
  4374. (&lt;a class=&quot;reference external&quot; href=&quot;https://mozilla-hub.atlassian.net/wiki/spaces/CS1/pages/6849069/Crash+Stats+Crash+Reports+Crash+ingestion+Socorro+Antenna&quot;&gt;Crash Stats (Socorro)&lt;/a&gt;,
  4375. &lt;a class=&quot;reference external&quot; href=&quot;https://mozilla-hub.atlassian.net/wiki/spaces/CS1/pages/178061663/Symbols+aka+Tecken&quot;&gt;Mozilla Symbols Server (Tecken)&lt;/a&gt;,
  4376. and &lt;a class=&quot;reference external&quot; href=&quot;https://mozilla-hub.atlassian.net/wiki/spaces/CS1/pages/178192647/Symbolication+Eliot&quot;&gt;Mozilla Symbolication Service (Eliot)&lt;/a&gt;).&lt;/p&gt;
  4377. &lt;p&gt;In 2024, we'll be working with SRE to take over other monitoring services they
  4378. are currently supporting like New Relic, InfluxDB/Grafana, and others.&lt;/p&gt;
  4379. &lt;p&gt;This newsletter covers an overview of 2024q1. Please forward it to interested
  4380. readers.&lt;/p&gt;
  4381. &lt;section id=&quot;highlights&quot;&gt;
  4382. &lt;h3&gt;Highlights&lt;/h3&gt;
  4383. &lt;ul class=&quot;simple&quot;&gt;
  4384. &lt;li&gt;&lt;p&gt;🤹 Observability Services: Change in user support&lt;/p&gt;&lt;/li&gt;
  4385. &lt;li&gt;&lt;p&gt;🏆 Sentry: Change in ownership&lt;/p&gt;&lt;/li&gt;
  4386. &lt;li&gt;&lt;p&gt;‼️ Sentry: Please don't start new trials&lt;/p&gt;&lt;/li&gt;
  4387. &lt;li&gt;&lt;p&gt;⏲️ Sentry: Cron monitoring trial ending April 30th&lt;/p&gt;&lt;/li&gt;
  4388. &lt;li&gt;&lt;p&gt;⏱️ Sentry: Performance monitoring pilot&lt;/p&gt;&lt;/li&gt;
  4389. &lt;li&gt;&lt;p&gt;🤖 Socorro: Improvements to Fenix support&lt;/p&gt;&lt;/li&gt;
  4390. &lt;li&gt;&lt;p&gt;🐛 Socorro: Support guard page access information&lt;/p&gt;&lt;/li&gt;
  4391. &lt;/ul&gt;
  4392. &lt;p&gt;See details below.&lt;/p&gt;
  4393. &lt;/section&gt;
  4394. &lt;section id=&quot;blog-posts&quot;&gt;
  4395. &lt;h3&gt;Blog posts&lt;/h3&gt;
  4396. &lt;p&gt;None this quarter.&lt;/p&gt;
  4397. &lt;/section&gt;
  4398. &lt;section id=&quot;detailed-project-updates&quot;&gt;
  4399. &lt;h3&gt;Detailed project updates&lt;/h3&gt;
  4400. &lt;section id=&quot;observability-services-change-in-user-support&quot;&gt;
  4401. &lt;h4&gt;Observability Services: Change in user support&lt;/h4&gt;
  4402. &lt;p&gt;We overhauled our pages in Confluence, started an #obs-help Slack channel,
  4403. created a new Jira OBSHELP project, built out a support rotation, and leveled
  4404. up our ability to do support for Observability-owned services.&lt;/p&gt;
  4405. &lt;p&gt;See our &lt;a class=&quot;reference external&quot; href=&quot;https://mozilla-hub.atlassian.net/wiki/spaces/CS1/pages/605978960/Observability+Service+User+Support&quot;&gt;User Support Confluence page&lt;/a&gt;
  4406. for:&lt;/p&gt;
  4407. &lt;ul class=&quot;simple&quot;&gt;
  4408. &lt;li&gt;&lt;p&gt;where to get user support&lt;/p&gt;&lt;/li&gt;
  4409. &lt;li&gt;&lt;p&gt;documentation for common tasks (get protected data access, create a Sentry
  4410. team, etc)&lt;/p&gt;&lt;/li&gt;
  4411. &lt;li&gt;&lt;p&gt;self-serve instructions&lt;/p&gt;&lt;/li&gt;
  4412. &lt;/ul&gt;
  4413. &lt;p&gt;Hop in &lt;a class=&quot;reference external&quot; href=&quot;https://app.slack.com/client/T027LFU12/C06N3QR11E0&quot;&gt;#obs-help in Slack&lt;/a&gt; to ask for service
  4414. support, help with monitoring problems, and advice.&lt;/p&gt;
  4415. &lt;/section&gt;
  4416. &lt;section id=&quot;sentry-change-in-ownership&quot;&gt;
  4417. &lt;h4&gt;Sentry: Change in ownership&lt;/h4&gt;
  4418. &lt;p&gt;The Observability team now owns Sentry service at Mozilla!&lt;/p&gt;
  4419. &lt;p&gt;We successfully completed &lt;a class=&quot;reference external&quot; href=&quot;https://mozilla-hub.atlassian.net/browse/OBS-21&quot;&gt;Phase 1 of the transition&lt;/a&gt; in Q1. If you're a member
  4420. of the Mozilla Sentry organization, you should have received a separate email
  4421. about this to the &lt;a class=&quot;reference external&quot; href=&quot;https://groups.google.com/a/mozilla.com/g/sentry-users&quot;&gt;sentry-users&lt;/a&gt; Google group.&lt;/p&gt;
  4422. &lt;p&gt;We've overhauled Sentry user support documentation to improve it in a few ways:&lt;/p&gt;
  4423. &lt;ul class=&quot;simple&quot;&gt;
  4424. &lt;li&gt;&lt;p&gt;easier to find &quot;how to&quot; articles for common tasks&lt;/p&gt;&lt;/li&gt;
  4425. &lt;li&gt;&lt;p&gt;best practices to help you set up and configure Sentry for your project needs&lt;/p&gt;&lt;/li&gt;
  4426. &lt;/ul&gt;
  4427. &lt;p&gt;Check out our
  4428. &lt;a class=&quot;reference external&quot; href=&quot;https://mozilla-hub.atlassian.net/wiki/spaces/CS1/pages/609452284/Sentry+User+Guide&quot;&gt;Sentry user guide&lt;/a&gt;.&lt;/p&gt;
  4429. &lt;p&gt;There's still a lot that we're figuring out, so we appreciate your patience and
  4430. cooperation.&lt;/p&gt;
  4431. &lt;/section&gt;
  4432. &lt;section id=&quot;sentry-please-don-t-start-new-trials&quot;&gt;
  4433. &lt;h4&gt;Sentry: Please don't start new trials&lt;/h4&gt;
  4434. &lt;p&gt;Sentry sends marketing and promotional emails to Sentry users which often
  4435. include links to start a new trial. Please contact us before starting any new
  4436. feature trials in Sentry.&lt;/p&gt;
  4437. &lt;p&gt;Starting new trials may prevent us from trialing those features in the future
  4438. when we’re in a better position to evaluate the feature. There's no way for
  4439. admins to prevent users from starting a trial.&lt;/p&gt;
  4440. &lt;/section&gt;
  4441. &lt;section id=&quot;sentry-cron-monitoring-trial-ending-april-30th&quot;&gt;
  4442. &lt;h4&gt;Sentry: Cron monitoring trial ending April 30th&lt;/h4&gt;
  4443. &lt;p&gt;The &lt;a class=&quot;reference external&quot; href=&quot;https://docs.sentry.io/product/crons/&quot;&gt;Cron Monitoring&lt;/a&gt; trial that was
  4444. started a couple of months ago will end April 30th.&lt;/p&gt;
  4445. &lt;p&gt;Based on feedback so far and other factors, we will not be enabling this
  4446. feature once the trial ends.&lt;/p&gt;
  4447. &lt;p&gt;This is a good reminder to build in redundancy in your monitoring systems.
  4448. Don't rely solely on trial or pilot features for mission critical information!&lt;/p&gt;
  4449. &lt;p&gt;Once the trial is over, we'll put together an evaluation summary.&lt;/p&gt;
  4450. &lt;/section&gt;
  4451. &lt;section id=&quot;sentry-performance-monitoring-pilot&quot;&gt;
  4452. &lt;h4&gt;Sentry: Performance monitoring pilot&lt;/h4&gt;
  4453. &lt;p&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://docs.sentry.io/product/performance/&quot;&gt;Performance Monitoring&lt;/a&gt; is
  4454. being piloted by a couple of teams; it is not currently available for general
  4455. use.&lt;/p&gt;
  4456. &lt;p&gt;In the meantime, if you are not one of these pilot teams, please do not use
  4457. Performance Monitoring. There is a shared transaction event quota for the
  4458. entire Mozilla Sentry organization. Once we hit that quota, events are dumped.&lt;/p&gt;
  4459. &lt;p&gt;If you have questions about any of this, please reach out.&lt;/p&gt;
  4460. &lt;p&gt;Once the trial is over, we'll put together an evaluation summary.&lt;/p&gt;
  4461. &lt;/section&gt;
  4462. &lt;section id=&quot;socorro-improvements-to-fenix-support&quot;&gt;
  4463. &lt;h4&gt;Socorro: Improvements to Fenix support&lt;/h4&gt;
  4464. &lt;p&gt;We worked on improvements to crash ingestion and the Crash Stats site for the
  4465. Fenix project:&lt;/p&gt;
  4466. &lt;p&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1812771&quot;&gt;1812771: Fenix crash reporter's Socorro crash reports for Java exceptions have &quot;Platform&quot; = &quot;Unknown&quot; instead of &quot;Android&quot;&lt;/a&gt;&lt;/p&gt;
  4467. &lt;p&gt;Previously, the platform would be &quot;Unknown&quot;. Now the platform for Fenix crash
  4468. reports is &quot;Android&quot;. Further, the &lt;code class=&quot;docutils literal&quot;&gt;platform_pretty_version&lt;/code&gt; includes the
  4469. Android ABI version.&lt;/p&gt;
  4470. &lt;figure&gt;
  4471. &lt;a class=&quot;reference external image-reference&quot; href=&quot;https://bluesock.org/~willkg/blog/images/obs_2024q1_android_version.png&quot;&gt;&lt;img alt=&quot;/images/obs_2024q1_android_version.thumbnail.png&quot; src=&quot;https://bluesock.org/~willkg/blog/images/obs_2024q1_android_version.thumbnail.png&quot; /&gt;&lt;/a&gt;
  4472. &amp;lt;figcaption&amp;gt;
  4473. &lt;p&gt;Figure 1: Screenshot of Crash Stats Super Search results showing Android
  4474. versions for crash reports.&lt;/p&gt;
  4475. &amp;lt;/figcaption&amp;gt;
  4476. &lt;/figure&gt;
  4477. &lt;p&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1819628&quot;&gt;1819628: reject crash reports for unsupported Fenix forks&lt;/a&gt;&lt;/p&gt;
  4478. &lt;p&gt;Forks of Fenix outside of our control periodically send large swaths of crash
  4479. reports to Socorro. When these sudden spikes happened, Mozillians would spend
  4480. time looking into them only to discover they're not related to our code or our
  4481. users. This is a waste of our time and resources.&lt;/p&gt;
  4482. &lt;p&gt;We implemented support for the &lt;code class=&quot;docutils literal&quot;&gt;Android_PackageName&lt;/code&gt; crash annotation and
  4483. added a throttle rule to the collector to drop crash reports from any
  4484. non-Mozilla releases of Fenix.&lt;/p&gt;
  4485. &lt;p&gt;From 2024-01-18 to 2024-03-31, Socorro accepted 2,072,785 Fenix crash reports
  4486. for processing and rejected 37,483 unhelpful crash reports with this new rule.
  4487. That's roughly 1.7%. That's not a huge amount, but because they sometimes come
  4488. in bursts with the same signature, they show up in Top Crashers wasting
  4489. investigation time.&lt;/p&gt;
  4490. &lt;p&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1884041&quot;&gt;1884041: fix create-a-bug links to work with java_exception&lt;/a&gt;&lt;/p&gt;
  4491. &lt;p&gt;A long time ago, in an age partially forgotten, Fenix crash reports from a
  4492. crash in Java code would send a crash report with a &lt;code class=&quot;docutils literal&quot;&gt;JavaStackTrace&lt;/code&gt; crash
  4493. annotation. This crash annotation was a string representation of the Java
  4494. exception. As such, it was difficult-to-impossible to parse reliably.&lt;/p&gt;
  4495. &lt;p&gt;In 2020, Roger Yang and Will Kahn-Greene spec'd out a new &lt;code class=&quot;docutils literal&quot;&gt;JavaException&lt;/code&gt; crash
  4496. annotation. The value is a JSON-encoded structure mirroring what Sentry uses
  4497. for exception information. This structure provides more information than the
  4498. &lt;code class=&quot;docutils literal&quot;&gt;JavaStackTrace&lt;/code&gt; crash annotation did and is much easier to work with because we
  4499. don't have to parse it first.&lt;/p&gt;
  4500. &lt;p&gt;Between 2020 and now, we have been transitioning from crash reports that only
  4501. contained a &lt;code class=&quot;docutils literal&quot;&gt;JavaStackTrace&lt;/code&gt; to crash reports that contained both a
  4502. &lt;code class=&quot;docutils literal&quot;&gt;JavaStackTrace&lt;/code&gt; and a &lt;code class=&quot;docutils literal&quot;&gt;JavaException&lt;/code&gt;. Once all Fenix crash reports from
  4503. crashes in Java code contained a &lt;code class=&quot;docutils literal&quot;&gt;JavaException&lt;/code&gt;, we could transition Socorro
  4504. code to use the &lt;code class=&quot;docutils literal&quot;&gt;JavaException&lt;/code&gt; value for Crash Stats views, signature
  4505. generation, generate-create-bug-url, and other things.&lt;/p&gt;
  4506. &lt;p&gt;Recently, Fenix dropped the &lt;code class=&quot;docutils literal&quot;&gt;JavaStackTrace&lt;/code&gt; crash annotation. However, we
  4507. hadn't yet gotten to updating Socorro code to use--and prefer--the
  4508. &lt;code class=&quot;docutils literal&quot;&gt;JavaException&lt;/code&gt; values. This broke the ability to generate a bug for a Fenix
  4509. crash with the needed data added to the bug description.  Work on bug 1884041
  4510. fixed that.&lt;/p&gt;
  4511. &lt;p&gt;Comments for Fenix Java crash reports went from:&lt;/p&gt;
  4512. &lt;pre class=&quot;literal-block&quot;&gt;Crash report: https://crash-stats.mozilla.org/report/index/eb6f852b-4656-4cf5-8350-fd91a0240408&lt;/pre&gt;
  4513. &lt;p&gt;to:&lt;/p&gt;
  4514. &lt;pre class=&quot;literal-block&quot;&gt;Crash report: https://crash-stats.mozilla.org/report/index/eb6f852b-4656-4cf5-8350-fd91a0240408
  4515.  
  4516. Top 10 frames:
  4517.  
  4518. 0  android.database.sqlite.SQLiteConnection  nativePrepareStatement  SQLiteConnection.java:-2
  4519. 1  android.database.sqlite.SQLiteConnection  acquirePreparedStatement  SQLiteConnection.java:939
  4520. 2  android.database.sqlite.SQLiteConnection  executeForString  SQLiteConnection.java:684
  4521. 3  android.database.sqlite.SQLiteConnection  setJournalMode  SQLiteConnection.java:369
  4522. 4  android.database.sqlite.SQLiteConnection  setWalModeFromConfiguration  SQLiteConnection.java:299
  4523. 5  android.database.sqlite.SQLiteConnection  open  SQLiteConnection.java:218
  4524. 6  android.database.sqlite.SQLiteConnection  open  SQLiteConnection.java:196
  4525. 7  android.database.sqlite.SQLiteConnectionPool  openConnectionLocked  SQLiteConnectionPool.java:503
  4526. 8  android.database.sqlite.SQLiteConnectionPool  open  SQLiteConnectionPool.java:204
  4527. 9  android.database.sqlite.SQLiteConnectionPool  open  SQLiteConnectionPool.java:196&lt;/pre&gt;
  4528. &lt;p&gt;This both fixes the bug and also vastly improves the bug comments from what we
  4529. were previously doing with &lt;code class=&quot;docutils literal&quot;&gt;JavaStackTrace&lt;/code&gt;.&lt;/p&gt;
  4530. &lt;p&gt;Between 2024-03-31 and 2024-04-06, there were 158,729 Fenix crash reports
  4531. processed. Of those, 15,556 have the circumstances affected by this bug: a
  4532. &lt;code class=&quot;docutils literal&quot;&gt;JavaException&lt;/code&gt; but don't have a &lt;code class=&quot;docutils literal&quot;&gt;JavaStackTrace&lt;/code&gt;. That's roughly 10% of
  4533. incoming Fenix crash reports.&lt;/p&gt;
  4534. &lt;p&gt;While working on this, we refactored the code that generates these crash report
  4535. bugs, so it's in a separate module that's easier to copy and use in external
  4536. systems in case others want to generate bug comments from processed crash data.&lt;/p&gt;
  4537. &lt;p&gt;Further, we changed the code so that instead of dropping arguments in function
  4538. signatures, it now truncates them at 80 characters.&lt;/p&gt;
  4539. &lt;p&gt;We're hoping to improve signature generation for Java crashes using
  4540. &lt;code class=&quot;docutils literal&quot;&gt;JavaException&lt;/code&gt; values in 2024q2. That work is tracked in
  4541. &lt;a class=&quot;reference external&quot; href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1541120&quot;&gt;bug #1541120&lt;/a&gt;.&lt;/p&gt;
  4542. &lt;/section&gt;
  4543. &lt;section id=&quot;socorro-support-guard-page-access-information&quot;&gt;
  4544. &lt;h4&gt;Socorro: Support guard page access information&lt;/h4&gt;
  4545. &lt;p&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1830954&quot;&gt;1830954: Expose crashes which were likely accessing a guard page&lt;/a&gt;&lt;/p&gt;
  4546. &lt;p&gt;We updated the stackwalker to pick up the changes for determining
  4547. &lt;code class=&quot;docutils literal&quot;&gt;is_likely_guard_page&lt;/code&gt;. Then we exposed that in crash reports in the
  4548. &lt;code class=&quot;docutils literal&quot;&gt;has_guard_page_access&lt;/code&gt; field. We added this field to the Details tab in
  4549. crash reports and made it searchable. We also added this to the signature
  4550. report.&lt;/p&gt;
  4551. &lt;p&gt;This helps us know if a crash is possibly due to a bug with memory access that
  4552. could be a possible security vulnerability vector--something we want to
  4553. prioritize fixing.&lt;/p&gt;
  4554. &lt;p&gt;Since this field is security sensitive, it requires protected data access to
  4555. view and search with.&lt;/p&gt;
  4556. &lt;/section&gt;
  4557. &lt;section id=&quot;socorro-misc&quot;&gt;
  4558. &lt;h4&gt;Socorro misc&lt;/h4&gt;
  4559. &lt;ul class=&quot;simple&quot;&gt;
  4560. &lt;li&gt;&lt;p&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://pypi.org/project/crashstats-tools/2.0.0/&quot;&gt;crashstats-tools 2.0.0 release&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
  4561. &lt;li&gt;&lt;p&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://pypi.org/project/siggen/2.1.20240412/&quot;&gt;socorro-siggen 2.1.20240412 release&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
  4562. &lt;li&gt;&lt;p&gt;4 signature generation changes. Thank you Andrew McCreight and Jim Blandy!&lt;/p&gt;&lt;/li&gt;
  4563. &lt;li&gt;&lt;p&gt;Maintenance and documentation improvements.&lt;/p&gt;&lt;/li&gt;
  4564. &lt;li&gt;&lt;p&gt;6 production deploys. Created 71 issues. Resolved 61 issues.&lt;/p&gt;&lt;/li&gt;
  4565. &lt;/ul&gt;
  4566. &lt;/section&gt;
  4567. &lt;section id=&quot;tecken-eliot-misc&quot;&gt;
  4568. &lt;h4&gt;Tecken/Eliot misc&lt;/h4&gt;
  4569. &lt;ul class=&quot;simple&quot;&gt;
  4570. &lt;li&gt;&lt;p&gt;Maintenance and documentation improvements.&lt;/p&gt;&lt;/li&gt;
  4571. &lt;li&gt;&lt;p&gt;5 production deploys. Created 21 issues. Resolved 28 issues.&lt;/p&gt;&lt;/li&gt;
  4572. &lt;/ul&gt;
  4573. &lt;/section&gt;
  4574. &lt;/section&gt;
  4575. &lt;section id=&quot;more-information&quot;&gt;
  4576. &lt;h3&gt;More information&lt;/h3&gt;
  4577. &lt;p&gt;Find us:&lt;/p&gt;
  4578. &lt;ul class=&quot;simple&quot;&gt;
  4579. &lt;li&gt;&lt;p&gt;Confluence page: &lt;a class=&quot;reference external&quot; href=&quot;https://mozilla-hub.atlassian.net/wiki/spaces/CS1/pages/428965889/Observability+Team&quot;&gt;Observability Team&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
  4580. &lt;li&gt;&lt;p&gt;User support hub: &lt;a class=&quot;reference external&quot; href=&quot;https://mozilla-hub.atlassian.net/wiki/spaces/CS1/pages/605978960/Observability+Service+User+Support&quot;&gt;User Support&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
  4581. &lt;li&gt;&lt;p&gt;Support: &lt;a class=&quot;reference external&quot; href=&quot;https://app.slack.com/client/T027LFU12/C06N3QR11E0&quot;&gt;#obs-help&lt;/a&gt; (Slack)&lt;/p&gt;&lt;/li&gt;
  4582. &lt;li&gt;&lt;p&gt;Crash ingestion: &lt;a class=&quot;reference external&quot; href=&quot;https://matrix.to/#/%23crashreporting:mozilla.org&quot;&gt;#crashreporting&lt;/a&gt; (Matrix)&lt;/p&gt;&lt;/li&gt;
  4583. &lt;/ul&gt;
  4584. &lt;p&gt;Thank you for reading!&lt;/p&gt;
  4585. &lt;/section&gt;</description>
  4586. <pubDate>Tue, 16 Apr 2024 13:00:00 +0000</pubDate>
  4587. <dc:creator>Will Kahn-Greene</dc:creator>
  4588. </item>
  4589. <item>
  4590. <title>The Mozilla Blog: Open Source in the Age of LLMs</title>
  4591. <guid isPermaLink="false">https://blog.mozilla.org/?p=74617</guid>
  4592. <link>https://blog.mozilla.org/en/mozilla/ai/open-source-llms-large-language-models-mozilla-ai/</link>
  4593. <description>&lt;p&gt;(To read the complete Mozilla.ai publication featuring all our OSS contributions, please visit the &lt;a href=&quot;https://blog.mozilla.ai/open-source-in-the-age-of-llms/&quot;&gt;Mozilla.ai blog&lt;/a&gt;)&lt;/p&gt;
  4594.  
  4595.  
  4596.  
  4597. &lt;p class=&quot;has-text-align-left&quot;&gt;Like our parent company, Mozilla.ai’s &lt;a href=&quot;https://blog.mozilla.ai/introducing-mozilla-ai-investing-in-trustworthy-ai/&quot;&gt;founding story&lt;/a&gt; is rooted in open-source principles and community collaboration. Since our start last year, our key focus has been exploring state-of-the-art methods for evaluating and fine-tuning large-language models (LLMs).&lt;/p&gt;
  4598.  
  4599.  
  4600.  
  4601. &lt;p&gt;Throughout this process, we’ve been diving into the open-source ecosystem around LLMs.  What we’ve found is an electric environment where everyone is building. As Nathan Lambert &lt;a href=&quot;https://www.interconnects.ai/p/they-want-to-learn&quot;&gt;writes in his post&lt;/a&gt;, “It’s 2024, and they just want to learn.”&lt;/p&gt;
  4602.  
  4603.  
  4604.  
  4605. &lt;p&gt;“While everything is on track across multiple communities, that also unlocks the ability for people to tap into excitement and energy that they’ve never experienced in their career (and maybe lives).”&lt;/p&gt;
  4606.  
  4607.  
  4608.  
  4609. &lt;p&gt;The energy in the space, with &lt;a href=&quot;https://originality.ai/blog/huggingface-statistics&quot;&gt;new model releases every day&lt;/a&gt;, is made even more exciting by the promise of open source where, as I’ve &lt;a href=&quot;https://twitter.com/vboykis/status/1741270933979984052&quot;&gt;observed before&lt;/a&gt;, anyone can make a contribution and have it be meaningful regardless of credentials, and there are plenty of contributions to be made. If the fundamental question of the web is, “&lt;a href=&quot;https://www.ftrain.com/wwic&quot;&gt;Why wasn’t I consulted&lt;/a&gt;,” open-source in machine learning today offers the answer, “You are as long as you can productively contribute PRs, come have a seat at the table.”&lt;/p&gt;
  4610.  
  4611.  
  4612.  
  4613. &lt;p&gt;Even though some of us have been active in open-source work for some time, building and contributing to it at a team and company level is a qualitatively different and rewarding feeling. And it’s been especially fun watching upstream make its way into both the communities and our own projects. &lt;/p&gt;
  4614.  
  4615.  
  4616.  
  4617. &lt;p&gt;At a high level, here’s what we’ve learned about the process of successful open-source contributions: &lt;/p&gt;
  4618.  
  4619.  
  4620.  
  4621. &lt;p&gt;&lt;strong&gt;1. &lt;a href=&quot;https://jvns.ca/blog/2017/08/06/contributing-to-open-source/&quot;&gt;Start small&lt;/a&gt; when you’re starting with a new project. &lt;/strong&gt;If you’re contributing to a new project for the first time, it takes time to understand the project’s norms: how fast they review, who the key people are, their preferences for communication, code review style, build systems, and more. It’s like starting a new job entirely from scratch. &lt;br /&gt;&lt;br /&gt;Be gentle with both yourself and the reviewers and pick something like a documentation task, or a “good first issue” label just to get a feel for how things work.&lt;/p&gt;
  4622.  
  4623.  
  4624.  
  4625. &lt;p&gt;&lt;strong&gt;2. Be easy to work with. &lt;/strong&gt;There are specific norms around working with open source, and they closely &lt;a href=&quot;https://jacobian.org/2017/nov/1/you-have-two-jobs/&quot;&gt;follow this fantastic post&lt;/a&gt; of understanding how to be an effective developer – “As a developer you have two jobs: to write code, and be easy to work with.”&lt;/p&gt;
  4626.  
  4627.  
  4628.  
  4629. &lt;p&gt;In open source, being easy to work with means different things to different people, but I generally see it as:&lt;/p&gt;
  4630.  
  4631.  
  4632.  
  4633. &lt;p&gt;a. Submitting clean PRs with working code that passes tests or gets as close as possible. No one wants to fix your build. &lt;/p&gt;
  4634.  
  4635.  
  4636.  
  4637. &lt;p&gt;b. Making small code changes by yourself, and proposing larger architecture changes in a group before getting them down in code for approval. Asking “What do you think about this?” Always try to also propose a solution instead of posing more problems to maintainers: they are busy!&lt;/p&gt;
  4638.  
  4639.  
  4640.  
  4641. &lt;p&gt;c. Write unit tests if you’re adding a significant feature, where significant is anything more than a single line of code. &lt;/p&gt;
  4642.  
  4643.  
  4644.  
  4645. &lt;p&gt;d. Remembering &lt;a href=&quot;https://www.meyerperin.com/posts/2022-04-02-chestertons-fence.html&quot;&gt;Chesterton’s fence&lt;/a&gt;: that code is there for a reason, study it before you suggest removing it. &lt;/p&gt;
  4646.  
  4647.  
  4648.  
  4649. &lt;p&gt;&lt;strong&gt;3. Assume good intent, but make intent explicit. &lt;/strong&gt; When you’re working with people in writing, asynchronously, potentially in other countries or timezones, it’s extremely easy for context, tone, and intent to get lost in translation. Implicit knowledge &lt;a href=&quot;https://vickiboykis.com/2021/03/26/the-ghosts-in-the-data/&quot;&gt;becomes rife.&lt;/a&gt;  Assume people are doing the best they can with what they have, and if you don’t understand something, ask about it first.&lt;/p&gt;
  4650.  
  4651.  
  4652.  
  4653. &lt;p&gt;&lt;strong&gt;4. The AI ecosystem moves quickly.&lt;/strong&gt; Extremely quickly. New models come out every day and are implemented in downstream modules by tomorrow. Make sure you’re ok with this speed and match the pace. Something you can do before you do PRs is to follow issues on the repo, and follow the repo itself so you get a sense for how quickly things move/are approved. If you’re into fast-moving projects, jump in. Otherwise, pick one that moves at a slower cadence.&lt;/p&gt;
  4654.  
  4655.  
  4656.  
  4657. &lt;p&gt;&lt;strong&gt;5. The LLM ecosystem is currently bifurcated between HuggingFace and OpenAI compatibility: &lt;/strong&gt;An &lt;a href=&quot;https://vickiboykis.com/2024/02/28/gguf-the-long-way-around/#how-we-use-llm-artifacts&quot;&gt;interesting pattern has developed&lt;/a&gt; in my development work on open-source in LLMs. It’s become clear to me that, in this new space of developer tooling around transformer-style language models at an industrial scale, you are generally conforming to be downstream of one of two interfaces:&lt;/p&gt;
  4658.  
  4659.  
  4660.  
  4661. &lt;p&gt;a. models that are trained and hosted using HuggingFace libraries and particularly the HuggingFace hub as infrastructure.&lt;/p&gt;
  4662.  
  4663.  
  4664.  
  4665. &lt;p&gt;b. Models that are available via API endpoints, particularly as hosted by OpenAI.&lt;br /&gt;&lt;br /&gt;If you want to be successful in this space today, you as a library or service provider have to be able to interface with both of these. &lt;/p&gt;
  4666.  
  4667.  
  4668.  
  4669. &lt;p&gt;&lt;strong&gt;6. Sunshine is the best disinfectant. &lt;/strong&gt;As the recent &lt;a href=&quot;https://boehs.org/node/everything-i-know-about-the-xz-backdoor&quot;&gt;xz issue proved&lt;/a&gt;, open code is better code and issues get fixed more quickly. This means, don’t be afraid to work out in the open. All code has bugs, even yours and mine, and discovering those bugs is a natural process of learning and developing better code rather than a personal failing. &lt;/p&gt;
  4670.  
  4671.  
  4672.  
  4673. &lt;p&gt;We’re looking forward to both continuing our contributions, upstreaming them and learning from them as we continue our product development work. &lt;br /&gt;&lt;br /&gt;Read the whole publication and subscribe to future ones on the &lt;a href=&quot;http://mozilla.ai&quot;&gt;Mozilla.ai blog&lt;/a&gt;.&lt;/p&gt;
  4674.  
  4675.  
  4676.  
  4677. &lt;a class=&quot;ft-c-inline-cta&quot; href=&quot;https://www.mozilla.org/en-US/firefox/new?utm_medium=mozilla-websites&amp;amp;utm_source=blog.mozilla.org&amp;amp;utm_content=inline-cta&quot;&gt;
  4678.  &lt;div class=&quot;ft-c-inline-cta__media&quot;&gt;
  4679.  &lt;img alt=&quot;&quot; class=&quot;attachment-1x1 size-1x1&quot; height=&quot;512&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2020/12/Fx-Browser-icon-fullColor-512-512x512.png&quot; width=&quot;512&quot; /&gt;  &lt;/div&gt;
  4680.  &lt;div class=&quot;ft-c-inline-cta__content&quot;&gt;
  4681.     &lt;h3&gt;Get Firefox&lt;/h3&gt;      &lt;span&gt;Get the browser that protects what’s important&lt;/span&gt;   &lt;/div&gt;
  4682. &lt;/a&gt;
  4683. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/mozilla/ai/open-source-llms-large-language-models-mozilla-ai/&quot;&gt;Open Source in the Age of LLMs&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;</description>
  4684. <pubDate>Tue, 16 Apr 2024 13:00:00 +0000</pubDate>
  4685. <dc:creator>Mozilla</dc:creator>
  4686. </item>
  4687. <item>
  4688. <title>Firefox Nightly: Exploring improvements to the Firefox sidebar</title>
  4689. <guid isPermaLink="false">https://blog.nightly.mozilla.org/?p=1612</guid>
  4690. <link>https://blog.nightly.mozilla.org/2024/04/15/exploring-improvements-to-the-firefox-sidebar/</link>
  4691. <description>&lt;p&gt;&lt;b&gt;What are we working on? &lt;/b&gt;&lt;/p&gt;
  4692. &lt;p&gt;We have long been excited to improve the existing Firefox sidebar and strengthen productivity use cases in the browser. We are laying the groundwork for these improvements, and you may have seen early work-in-progress in our test builds and in Nightly behind preferences (&lt;a href=&quot;https://www.reddit.com/r/firefox/comments/1bpywre/firefox_nightly_w_vertical_tabs_build/&quot;&gt;Firefox Nightly with vertical tabs&lt;/a&gt; and &lt;a href=&quot;https://www.reddit.com/r/firefox/comments/1bqlb84/looks_like_firefox_is_experimenting_a_sidebar_in/&quot;&gt;Firefox is experimenting with a sidebar in Nightly&lt;/a&gt;).&lt;/p&gt;
  4693. &lt;p&gt;&lt;b&gt;What to expect next?&lt;/b&gt;&lt;/p&gt;
  4694. &lt;p&gt;In the near future, we will be landing foundational sidebar features in Nightly to ensure parity with the existing sidebar and make the new experience more useful and easy to use. Many of the ideas we are exploring are based on your suggestions in Mozilla Connect. You’ve shared how you imagine productivity, switching between contexts, and juggling multiple tasks could improve in Firefox, and we’ve listened.&lt;/p&gt;
  4695. &lt;p&gt;We are encouraged by your positive feedback on our early concepts, and we look forward to engaging with the community and hearing more about what you think once sidebar features are ready for testing. We will announce feature readiness for feedback in the follow-up blog posts and on Connect.&lt;/p&gt;
  4696. &lt;p&gt;In the meantime, if you have questions or general feedback, please engage with us on &lt;a href=&quot;https://connect.mozilla.org/t5/moderation-archive/improvements-to-the-firefox-sidebar-are-on-the-way/td-p/55247&quot;&gt;Mozilla Connect.&lt;/a&gt;&lt;/p&gt;</description>
  4697. <pubDate>Mon, 15 Apr 2024 19:30:02 +0000</pubDate>
  4698. <dc:creator>Ania Safko</dc:creator>
  4699. </item>
  4700. <item>
  4701. <title>Firefox Nightly: Customizing Reader Mode – These Weeks in Firefox: Issue 158</title>
  4702. <guid isPermaLink="false">https://blog.nightly.mozilla.org/?p=1609</guid>
  4703. <link>https://blog.nightly.mozilla.org/2024/04/15/customizing-reader-mode-these-weeks-in-firefox-issue-158/</link>
  4704. <description>&lt;h3&gt;Highlights&lt;/h3&gt;
  4705. &lt;ul&gt;
  4706. &lt;li&gt;Irene has just landed a patch supporting custom color themes! You can flip the pref ​​reader.colors_menu.enabled to preview this feature in Nightly. &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1876432&quot;&gt;Bug 1876432 – Add support for custom themes as its own menu in Reader View&lt;/a&gt;
  4707. &lt;ul&gt;
  4708. &lt;li&gt;&lt;img src=&quot;https://blog.nightly.mozilla.org/files/2024/04/headlines158_0.png&quot; /&gt;&lt;/li&gt;
  4709. &lt;li&gt;&lt;img src=&quot;https://blog.nightly.mozilla.org/files/2024/04/headlines158_1.png&quot; /&gt;&lt;/li&gt;
  4710. &lt;/ul&gt;
  4711. &lt;/li&gt;
  4712. &lt;li&gt;Niklas added &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1883765&quot;&gt;RTL support&lt;/a&gt; for the new screenshots UI component (currently enabled by default in Nightly)&lt;/li&gt;
  4713. &lt;li&gt;Shout-out to Paul Bone who landed &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1857841&quot;&gt;some changes to mozjemalloc&lt;/a&gt;, reducing the number of calls to VirtualAlloc. This change caused various improvements (3.5% – 5%) to both &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1857841#c21&quot;&gt;Speedometer 2&lt;/a&gt; and &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1857841#c22&quot;&gt;Speedometer 3&lt;/a&gt; subtests, with no measurable regression in memory usage!&lt;/li&gt;
  4714. &lt;li&gt;The Search team enabled Search Config V2 in Nightly, and this has shown multiple improvements in startup time,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885002#c4&quot;&gt; by at least 3%&lt;/a&gt;!&lt;/li&gt;
  4715. &lt;/ul&gt;
  4716. &lt;h3&gt;Friends of the Firefox team&lt;/h3&gt;
  4717. &lt;h3&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/buglist.cgi?title=Resolved%20bugs%20%28excluding%20employees%29&amp;amp;quicksearch=1865558%2C1861325%2C1887467%2C1887331%2C1731635&amp;amp;list_id=16968858&quot;&gt;Resolved bugs (excluding employees)&lt;/a&gt;&lt;/h3&gt;
  4718. &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;
  4719. &lt;h4&gt;New contributors (🌟 = first patch)&lt;/h4&gt;
  4720. &lt;ul&gt;
  4721. &lt;li&gt;Golubets added an &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1731635&quot;&gt;option to disable split console&lt;/a&gt;&lt;/li&gt;
  4722. &lt;/ul&gt;
  4723. &lt;h3&gt;Project Updates&lt;/h3&gt;
  4724. &lt;h4&gt;Add-ons / Web Extensions&lt;/h4&gt;
  4725. &lt;h5&gt;WebExtensions Framework&lt;/h5&gt;
  4726. &lt;ul&gt;
  4727. &lt;li&gt;Fixed a regression introduced in Firefox 116 for extensions including a sidebar command shortcut (fixed in Nightly 126 and Beta 125) – &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1881820&quot;&gt;Bug 1881820&lt;/a&gt;
  4728. &lt;ul&gt;
  4729. &lt;li&gt;Thanks to Dao for investigating the regression and then following up with a fix&lt;/li&gt;
  4730. &lt;/ul&gt;
  4731. &lt;/li&gt;
  4732. &lt;li&gt;Fixed a long standing uninterruptible reflow triggered by browser-addons.js on handling “addon-install-confirmation” notifications – &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1360028&quot;&gt;Bug 1360028&lt;/a&gt;
  4733. &lt;ul&gt;
  4734. &lt;li&gt;Thanks to Dao for fixing it too!&lt;/li&gt;
  4735. &lt;/ul&gt;
  4736. &lt;/li&gt;
  4737. &lt;/ul&gt;
  4738. &lt;h4&gt;ESMification status&lt;/h4&gt;
  4739. &lt;ul&gt;
  4740. &lt;li&gt;&lt;a href=&quot;https://spidermonkey.dev/areweesmifiedyet/#/&quot;&gt;100%&lt;/a&gt;
  4741. &lt;ul&gt;
  4742. &lt;li&gt;&lt;a href=&quot;http://groups.google.com/a/mozilla.org/d/msgid/dev-platform/CAPMxTNomzkw8ZrOKwaDG6tXf8e_C9sKTPoyxHpqM4pBsDHR5eA%40mail.gmail.com&quot;&gt;Thank you to everyone&lt;/a&gt; that has worked on and supported this effort.&lt;/li&gt;
  4743. &lt;li&gt;Plan for out-of-tree changes &amp;amp; removing old loaders is coming soon.&lt;/li&gt;
  4744. &lt;/ul&gt;
  4745. &lt;/li&gt;
  4746. &lt;/ul&gt;
  4747. &lt;h4&gt;Lint, Docs and Workflow&lt;/h4&gt;
  4748. &lt;ul&gt;
  4749. &lt;li&gt;Dave has now &lt;a href=&quot;https://groups.google.com/a/mozilla.org/d/msgid/dev-platform/CAPMxTNqotW_KwDZ1TL%3DNZ1iSgsHCbG_WzrUvs09Lmm_1KPwXxg%40mail.gmail.com&quot;&gt;finished landing and turning on&lt;/a&gt; the argument linting for no-unused-vars&lt;/li&gt;
  4750. &lt;/ul&gt;
  4751. &lt;h4&gt;Migration Improvements&lt;/h4&gt;
  4752. &lt;ul&gt;
  4753. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1883503&quot;&gt;The measurements bugs&lt;/a&gt; are basically done, just a few outstanding ones that should hopefully close out this week. &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885369&quot;&gt;We’re now focusing more on copying the various data stores to the “staging” directory&lt;/a&gt;.&lt;/li&gt;
  4754. &lt;li&gt;We’re in talks with the DOM team to get their support for &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1887978&quot;&gt;cloning privileged and WebExtension IndexedDB databases safely&lt;/a&gt; at runtime.&lt;/li&gt;
  4755. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885993&quot;&gt;We hope to turn on measurements this week on Nightly.&lt;/a&gt;&lt;/li&gt;
  4756. &lt;/ul&gt;
  4757. &lt;h4&gt;Screenshots (enabled by default in Nightly)&lt;/h4&gt;
  4758. &lt;ul&gt;
  4759. &lt;li&gt;Niklas fixed &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1883717&quot;&gt;selection pixel size issues&lt;/a&gt; with high device pixel ratios&lt;/li&gt;
  4760. &lt;li&gt;Niklas fixed issues with &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1881506&quot;&gt;right clicking while dragging&lt;/a&gt; in the overlay&lt;/li&gt;
  4761. &lt;/ul&gt;
  4762. &lt;h4&gt;Search and Navigation&lt;/h4&gt;
  4763. &lt;ul&gt;
  4764. &lt;li&gt;Firefox Suggest experience&lt;/li&gt;
  4765. &lt;/ul&gt;
  4766. &lt;ul&gt;
  4767. &lt;li&gt;Work continues integrating the new Rust backend and improving exposure metrics.&lt;/li&gt;
  4768. &lt;li&gt;Daisuke has exposed icons mime-types along with blobs, from the offline Suggest backend.&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1882967&quot;&gt; Bug 1882967&lt;/a&gt;&lt;/li&gt;
  4769. &lt;li&gt;Drew has fixed a problem with the recording of exposure metrics in experiments.&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1886175&quot;&gt; Bug 1886175&lt;/a&gt;&lt;/li&gt;
  4770. &lt;/ul&gt;
  4771. &lt;ul&gt;
  4772. &lt;li&gt;Clipboard result&lt;/li&gt;
  4773. &lt;/ul&gt;
  4774. &lt;ul&gt;
  4775. &lt;li&gt;Karandeep has fixed a problem with empty searches returning no results in Tab, History and Bookmarks Search Mode, and a problem with the clipboard result persisting when switching through multiple empty tabs.&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1884094&quot;&gt; Bug 1884094&lt;/a&gt;,&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1865336&quot;&gt; Bug 1865336&lt;/a&gt;&lt;/li&gt;
  4776. &lt;/ul&gt;
  4777. &lt;ul&gt;
  4778. &lt;li&gt;SERP categorization metrics&lt;/li&gt;
  4779. &lt;/ul&gt;
  4780. &lt;ul&gt;
  4781. &lt;li&gt;Stephanie and James have fixed multiple issues in this area.&lt;/li&gt;
  4782. &lt;li&gt;Categorization metric has been enabled in Nightly.&lt;/li&gt;
  4783. &lt;/ul&gt;
  4784. &lt;ul&gt;
  4785. &lt;li&gt;Search Config v2
  4786. &lt;ul&gt;
  4787. &lt;li&gt;Standard8 and Mandy have fixed multiple issues in this area.&lt;/li&gt;
  4788. &lt;li&gt;Work continues as Config v2 has been enabled in Nightly.&lt;/li&gt;
  4789. &lt;/ul&gt;
  4790. &lt;/li&gt;
  4791. &lt;li&gt;Frecency ranking
  4792. &lt;ul&gt;
  4793. &lt;li&gt;Marco has changed frecency recalculation to accelerate when many changes have been made from the last recalculation. This should help with large imports.&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1873629&quot;&gt; Bug 1873629&lt;/a&gt;&lt;/li&gt;
  4794. &lt;li&gt;Marco has corrected a schema migration mistake, preventing recalculation of frecency for not recently accessed domains. That caused autofill of domains to not work as expected in the Address Bar for Firefox 125 Nightly (and first week of Beta).&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1886975&quot;&gt; Bug 1886975&lt;/a&gt;&lt;/li&gt;
  4795. &lt;/ul&gt;
  4796. &lt;/li&gt;
  4797. &lt;li&gt;Other fixes
  4798. &lt;ul&gt;
  4799. &lt;li&gt;Drew has corrected visual alignment of weather results.&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1886694&quot;&gt; Bug 1886694&lt;/a&gt;&lt;/li&gt;
  4800. &lt;li&gt;Dale has corrected visual alignment of rich search suggestions.&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1871022&quot;&gt; Bug 1871022&lt;/a&gt;&lt;/li&gt;
  4801. &lt;/ul&gt;
  4802. &lt;/li&gt;
  4803. &lt;/ul&gt;
  4804. &lt;h4&gt;Storybook/Reusable Components&lt;/h4&gt;
  4805. &lt;ul&gt;
  4806. &lt;li&gt;Design Tokens
  4807. &lt;ul&gt;
  4808. &lt;li&gt;We’ve recently landed some changes to how our design tokens are handed in mozilla-central, we now have a &lt;a href=&quot;https://searchfox.org/mozilla-central/source/toolkit/themes/shared/design-system/design-tokens.json&quot;&gt;JSON source of truth for these tokens&lt;/a&gt;&lt;/li&gt;
  4809. &lt;li&gt;To update the tokens files (tokens-shared, tokens-platform, tokens-brand), you’ll need to modify the design-tokens.json file and then run ./mach npm run build –prefix=toolkit/themes/shared/design-system&lt;/li&gt;
  4810. &lt;li&gt;Our current docs can be found on Storybook: &lt;a href=&quot;https://firefoxux.github.io/firefox-desktop-components/?path=/docs/docs-json-design-tokens--docs&quot;&gt;JSON design tokens&lt;/a&gt;, and the more general &lt;a href=&quot;https://firefoxux.github.io/firefox-desktop-components/?path=/docs/docs-design-tokens--docs&quot;&gt;design tokens&lt;/a&gt; docs
  4811. &lt;ul&gt;
  4812. &lt;li&gt;Porting these docs over to Firefox Source Docs will happen in the next couple of days&lt;/li&gt;
  4813. &lt;/ul&gt;
  4814. &lt;/li&gt;
  4815. &lt;li&gt;This info will also be sent out to the firefox-dev mailing list with more details and links to Firefox Source Docs&lt;/li&gt;
  4816. &lt;/ul&gt;
  4817. &lt;/li&gt;
  4818. &lt;/ul&gt;</description>
  4819. <pubDate>Mon, 15 Apr 2024 18:34:51 +0000</pubDate>
  4820. <dc:creator>Niklas Baumgardner</dc:creator>
  4821. </item>
  4822. <item>
  4823. <title>The Mozilla Blog: Marek Tuszynski reflects on curating thought-provoking experiences at the intersection of technology and activism</title>
  4824. <guid isPermaLink="false">https://blog.mozilla.org/?p=74558</guid>
  4825. <link>https://blog.mozilla.org/en/internet-culture/marek-tuszynski-rise25-tactical-tech-mozilla/</link>
  4826. <description>&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;
  4827.  
  4828. &lt;/div&gt;&lt;/figure&gt;
  4829.  
  4830.  
  4831.  
  4832. &lt;p&gt;&lt;em&gt;At Mozilla, we know we can’t create a better future alone, that is why each year we will be highlighting the work of 25 digital leaders using technology to amplify voices, effect change, and build new technologies globally through our &lt;a href=&quot;https://rise25.mozilla.org/?_gl=1*585km0*_ga*MTY1MDQ4MTg2NC4xNjk5NDc0NTE5*_ga_X4N05QV93S*MTcwNzE4MDk3Ny40NC4wLjE3MDcxODA5NzcuMC4wLjA.&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Rise 25 Awards.&lt;/a&gt; These storytellers, innovators, activists, advocates, builders and artists are helping make the internet more diverse, ethical, responsible and inclusive.&lt;/em&gt;&lt;/p&gt;
  4833.  
  4834.  
  4835.  
  4836. &lt;p&gt;&lt;em&gt;This week, we chatted with Marek Tuszynski, an artist and curator that is the Executive Director and co-founder of &lt;a href=&quot;https://tacticaltech.org/&quot;&gt;Tactical Tech&lt;/a&gt;&lt;/em&gt;, &lt;em&gt;a program dedicated to supporting initiatives focused on promoting better privacy and digital rights. We talked with Marek about his travels abroad shaping his career, what sparks his inspiration and future challenges we face online.&lt;/em&gt;&lt;/p&gt;
  4837.  
  4838.  
  4839.  
  4840. &lt;p&gt;&lt;strong&gt;So the first question that I had that I wanted to ask you about this is very straightforward, but what initially inspired you to co-found Tactical Tech? What was the first thing that made you really want to start the work that you do?&lt;/strong&gt;&lt;/p&gt;
  4841.  
  4842.  
  4843.  
  4844. &lt;p&gt;Marek Tuszynski: Things were not looked at the ways that I thought it’s important to look at them, especially technical things that have been around for over 20 years now. But the truth is, it was actually more excitement. Excitement that there’s such a massive opportunity, such a massive chance for many different people — actors, places, nations — to do things different and outside of the constraints that they are in, where they are at the time, and so on. I worked internationally at the time in sub-Saharan Africa and Southeast Asia and was just thinking that a lot of tech is being damned there in these places — I’m also from Eastern Europe, so we’ve never seen the leading edge of the technology, we’ve seen the tail if we’re lucky if the censorship allowed. So I just wanted to use technology as not only an opportunity that I have been kind of given by chance — it just happened I was in the right place in the right time — but also to bring it, and to co-develop it and do things together with people. My focus early on was with open source with software, and that was the driving force behind how we think about which technology is better for society, which is a more right one, which gives you more freedoms, not restrict them, and so on, etc. The story now, as we know, it turned kind of dark, but the inspiration was fascination with the possibilities of technology in terms of the tool for how we can access knowledge and information, the tool for how we can refine the way we see the world. It’s still there, and I think was there at the very beginning, and I think that’s a major force.&lt;/p&gt;
  4845.  
  4846.  
  4847.  
  4848. &lt;p&gt;&lt;strong&gt;You mentioned some of the traveling that you did. I’m very much of the belief that traveling is one of the best ways for us to learn. How much did the traveling and the places that you’ve been to and that you’ve seen influence or impact the work that you did and give you a bigger perspective on some of the things that you wanted to do?&lt;/strong&gt;&lt;/p&gt;
  4849.  
  4850.  
  4851.  
  4852. &lt;p&gt;That’s interesting because I come from the art background and one of my fascinations was a period in history of ours where some of the makers spent some of their time when they were learning on traveling. To go and visit other artists or studios, vendors and makers, etc., to see how they do things because there was no other way of information to travel, and for me that was very important. But I think you are right. It is not cool to talk about traveling these days, because travel also means burning fossil fuels and all this kind of stuff — which is unfortunately true, but you can do other travel, I’m doing a lot of sailing these days. But the initial traveling for me, coming from an entirely restricted part of the world and where I was growing up, I actually thought, “I’m never going to travel” in my mind. This is like something I’m going to read in the books, see on films, but never experience because I can’t get a passport. I couldn’t get the basic rights to leave the border that I was constrained with. So the moment I could do that I did it, and I practically never come back. I’ve left the place I’m from 35 years ago.&lt;/p&gt;
  4853.  
  4854.  
  4855.  
  4856. &lt;p&gt;The question that you’re asking is very important because travel teaches you a lot of things, and you become much more humble. Your eyes and brain and heart opens up much more. And you see that the world is unique, that people around you are unique — you’re not that unique yourself and there’s a lot to learn from that. Initially, when you travel, you have this arrogance — I had this arrogance at least —  that I’m going to go to places, learn them, understand them, and turn into something, etc. And then you go, and you learn, and you never stop. Learning is endless, and that’s the most fascinating part. But I think that the biggest privilege was to meet people and meet them on their own ground with their own ideas about everything. And then you confront yourself and rip the way you frame things because you just come from a place with ideas that somebody else put into your education system. So for me, yeah, it (traveling) worked in a way. And it’s not necessarily the travel in the physical space that we need. Now you can do it virtually like we have the conversation, and you get to know people and, you travel in some way. You may not see the actual architecture of the space you are in, but you are seeing “Okay, this is a person coming from somewhere with a certain set of ideas, questions, and so on, etc.” You look at them and think how we can have the conversation knowing that we come from very different places. Travel gives you that. &lt;/p&gt;
  4857.  
  4858.  
  4859.  
  4860. &lt;p&gt;&lt;strong&gt;When it gets to like some of the ideation process, what sparks the inspiration for the experiences you try to create? Is there any research or data that you look at? Are there just trends that you look at to get inspired by? What kind of like starts that? &lt;/strong&gt;&lt;/p&gt;
  4861.  
  4862.  
  4863.  
  4864. &lt;p&gt;There’s a mixture. I think we’re probably the least analyzing organization. Even if it’s a trend or some kind of mainstream stuff with the social media or all media, etc., it’s too late. I think for me personally, it’s always observing what’s being talked about. With AI, it’s what aspects of AI actually are being totally omitted. There’s a lot of focus now, for example, on elections and the visible impact of the AI, so how we can amplify this information, confusion and basically deteriorate trust into what we see, what we hear, what we read. And it’s super important. People are going to learn that very quickly. &lt;/p&gt;
  4865.  
  4866.  
  4867.  
  4868. &lt;p&gt;I think what is happening is the invisible part, where businesses that are interested in influencing political or non-political opinions around issues that are critical for people will be using AI for analyzing the data. For hyper fast profiling of people in much more clever ways of addressing them with more clever advertisements, in that it won’t necessarily be paid — it doesn’t have to be. Or even how you design certain strategies, etc. that can be augmented by how you use AI. And I think this is where I will be focusing on rather than talking about that the deepfakes which we’ve done already. But to the core of the question you asked about how we have topics that we focus on, from the first day of Tactical Tech, we’ve always based our work on partners, collaborators and people that we work with — and often that we are invited to work with like a group of people or institutional organizations, etc. And good listening is for me part of the critical research. So instead of coming in a view and ideas of research questions, we listen to what questions are already there. Where the curiosity is, where the fears are, where the hopes are, and so on, and sometimes start to build backwards toward and think about what you can bring from the position you occupy. &lt;/p&gt;
  4869.  
  4870.  
  4871.  
  4872. &lt;p&gt;&lt;strong&gt;Is there one collaboration or organization that you’ve worked with before that you felt was really impactful that you’re the most proud of? &lt;/strong&gt;&lt;/p&gt;
  4873.  
  4874.  
  4875.  
  4876. &lt;p&gt;There are hundreds of those (laughs). We had this group of people from Tajikistan — many people don’t know what Tajikistan is. And they were amazing. They were basically like a sponge, just sucking everything in and trying to engage with the culture cross between us and them and everybody else and people from probably other countries and so on — it was massive. But everybody was positive and trying to figure out some kind of common language that is bizarre English being mixed with some other languages, and so on. And that first encounter turned into a friendship and collaboration that led them to be the key people that brought the whole open source tool to the school system in Tajikistan, and so on, etc. I think that was one of these examples where it was very positive, encouraging. &lt;/p&gt;
  4877.  
  4878.  
  4879.  
  4880. &lt;p&gt;We do a lot of collaboration. So we have hundreds of partners now, especially on our educational work. And I think the most successful series was with a number of groups in Brazil that we collaborated with because they really took the content and the collaboration to the next level and took ownership of that. And for me, the ideal scenario over the work we do is that we may be developing something on the stage together, but there should be a moment when we disappear from the stage and somebody else take that stage. And that’s what happened. And that’s just beautiful to see. And when somebody tells you about this product that is amazing, and they don’t even know that you were part of that, that is the best compliment you can get. &lt;/p&gt;
  4881.  
  4882.  
  4883. &lt;div class=&quot;wp-block-image&quot;&gt;
  4884. &lt;figure class=&quot;aligncenter size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-74559&quot; height=&quot;1024&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2024/04/Mozilla_rise25_Marek-Tuszynski_1-683x1024.jpg&quot; width=&quot;683&quot; /&gt;&amp;lt;figcaption class=&quot;wp-element-caption&quot;&amp;gt;Marek Tuszynski at Mozilla’s Rise25 award ceremony in October 2023.&amp;lt;/figcaption&amp;gt;&lt;/figure&gt;&lt;/div&gt;
  4885.  
  4886.  
  4887. &lt;p&gt;&lt;strong&gt;What do you think is the biggest challenge we face in the world this year on and offline? How do we combat it?&lt;/strong&gt;&lt;/p&gt;
  4888.  
  4889.  
  4890.  
  4891. &lt;p&gt;I think people have different challenges in different places. The first thing that we are going to launch is a series of election influence situation rooms, which is just kind of a creative space that has the front of the house and back of the house that you would like to mount around some of the elections that are happening — like U.S. or European Parliament, or many other elections. What we would like to showcase and kind of demystify is not only the way we elect people, but how much the entire system works or doesn’t work. &lt;/p&gt;
  4892.  
  4893.  
  4894.  
  4895. &lt;p&gt;And what we’re trying to illustrate with this project “the situation rooms” is to unpack it and show how important, for a lot of entities, confusion is. How important polarization is, how important the lack of trust towards specific formats of communication are, or how institutions fail, because in this environment it is much easier to put forward everything from conspiracy theories to fake information, but it also makes people frustrated. It makes people to be much more black and white and aligning themselves with things that they would not align with earlier. I think this is the major thing that we are focusing on this year. So the set of elections and how we can get people engaged without any paranoia and any kind of dystopian way of thinking about it. It helps ourselves in a way to build apparatus for recognizing this situation we are in. And then let’s build some methods for what we need to know, to understand what is happening and then how that can be useful for democratic person elections, but how also it can be extremely harmful. &lt;/p&gt;
  4896.  
  4897.  
  4898.  
  4899. &lt;p&gt;&lt;strong&gt;What do you think is one action that everyone should take to make the world and our lives online a little bit better?&lt;/strong&gt;&lt;/p&gt;
  4900.  
  4901.  
  4902.  
  4903. &lt;p&gt;Technology is the bridge. Technologies open the channel of communications, so on, etc. Use technology for that. Don’t focus on yourself as much as you can focus on the world and other people. And if technology can help you to understand where they’re coming from, what the needs are and what kind of role you can play from whatever level of privilege you may have, use it. And the fact that you may use better technologies and some people have access to it already, that’s a certain kind of privilege that I think we should be able to share widely. &lt;/p&gt;
  4904.  
  4905.  
  4906.  
  4907. &lt;p&gt;You use technology to engage other people who don’t want to engage. Who lost trust. Don’t give up on them. Don’t give up on people on the other side, those voting for people you don’t have any respect. They are lost. And part of the reason they are lost is the technology they’re using.&lt;/p&gt;
  4908.  
  4909.  
  4910.  
  4911. &lt;p&gt;How it is challenging the information and making them believe in things that they shouldn’t be believing in and that they probably wouldn’t if that technology didn’t happen. I think we passed this kind of libertarian way of using technology for individual good that’s going to turn everything into a better world. We have proven itself wrong many times by now.&lt;/p&gt;
  4912.  
  4913.  
  4914.  
  4915. &lt;p&gt;&lt;strong&gt;We started Rise25 to celebrate Mozilla’s 25th anniversary, what do you hope people are celebrating in the next 25 years?&lt;/strong&gt;&lt;/p&gt;
  4916.  
  4917.  
  4918.  
  4919. &lt;p&gt;I think Rise 25 was fantastic because it was nice to see all the kinds of people. The 25 people who are so different in such different ways thinking about tech and ideas, and so on, etc., and so diverse in many ways that you don’t see very often. And it gave people the space to actually vocalize what they think and so on. And that was definitely unique. So I think Mozilla plays a specific role in this kind of in-between sector thing where it’s a corporation in a city in San Francisco that builds tools, but it’s also a foundation. &lt;/p&gt;
  4920.  
  4921.  
  4922.  
  4923. &lt;p&gt;Mozilla has unique access to people around the world that do a lot of creative work around technology. And I think that should be celebrated. I don’t think there’s enough of that. Usually people are celebrated for what they achieve with technology, usually making a lot of money, and so on, etc., there’s very little to talk about the technology that has positive impact on society in the world. And I think Mozilla should be touching and showcasing that, and I think there are plenty of things that can be celebrated. &lt;/p&gt;
  4924.  
  4925.  
  4926.  
  4927. &lt;p&gt;&lt;strong&gt;What gives you hope about the future of our world?&lt;/strong&gt;&lt;/p&gt;
  4928.  
  4929.  
  4930.  
  4931. &lt;p&gt;You know, it’s going to be okay. Don’t worry. But we are going to see people that’ll be happy and there will be people that separate. I think the more we can do now for the next generations of people that are coming up now, the better. And if you’re lucky to live long, you may feel proud for what you’ve been doing — focus on that, rather than imagining or picturing some future machine. &lt;/p&gt;
  4932.  
  4933.  
  4934.  
  4935. &lt;a class=&quot;ft-c-inline-cta&quot; href=&quot;https://www.mozilla.org/en-US/firefox/new?utm_medium=mozilla-websites&amp;amp;utm_source=blog.mozilla.org&amp;amp;utm_content=inline-cta&quot;&gt;
  4936.  &lt;div class=&quot;ft-c-inline-cta__media&quot;&gt;
  4937.  &lt;img alt=&quot;&quot; class=&quot;attachment-1x1 size-1x1&quot; height=&quot;512&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2020/12/Fx-Browser-icon-fullColor-512-512x512.png&quot; width=&quot;512&quot; /&gt;  &lt;/div&gt;
  4938.  &lt;div class=&quot;ft-c-inline-cta__content&quot;&gt;
  4939.     &lt;h3&gt;Get Firefox&lt;/h3&gt;      &lt;span&gt;Get the browser that protects what’s important&lt;/span&gt;   &lt;/div&gt;
  4940. &lt;/a&gt;
  4941. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/internet-culture/marek-tuszynski-rise25-tactical-tech-mozilla/&quot;&gt;Marek Tuszynski reflects on curating thought-provoking experiences at the intersection of technology and activism&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;</description>
  4942. <pubDate>Mon, 15 Apr 2024 14:05:00 +0000</pubDate>
  4943. <dc:creator>Aron Yohannes</dc:creator>
  4944. </item>
  4945. <item>
  4946. <title>The Servo Blog: Servo and SpiderMonkey</title>
  4947. <guid isPermaLink="true">https://servo.org/blog/2024/04/15/spidermonkey/</guid>
  4948. <link>https://servo.org/blog/2024/04/15/spidermonkey/</link>
  4949. <description>&lt;p&gt;As a web engine, Servo embeds another engine for its script execution capabilities, including both JavaScript and Wasm: &lt;a href=&quot;https://spidermonkey.dev/&quot;&gt;SpiderMonkey&lt;/a&gt;.
  4950. One of the goals of Servo is modularity, and the question of how modular it really was with regards to those capabilities came up.
  4951. For example, how easy would it be for Servo to use Chrome’s V8 engine, or the next big script engine?
  4952. To answer that question, we’ve written a &lt;a href=&quot;https://github.com/servo/servo/wiki/Servo-and-SpiderMonkey-Report&quot;&gt;short report&lt;/a&gt; analysing the relationship between Servo and SpiderMonkey.&lt;/p&gt;
  4953. &lt;h3&gt;The problem &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2024/04/15/spidermonkey/#the-problem&quot;&gt;
  4954.        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
  4955.      &lt;/a&gt;&lt;/h3&gt;
  4956. &lt;p&gt;Running a webpage happens inside the &lt;a href=&quot;https://github.com/servo/servo/tree/main/components/script&quot;&gt;&lt;code&gt;script&lt;/code&gt;&lt;/a&gt; component of Servo; the loading process &lt;a href=&quot;https://github.com/servo/servo/blob/d9f067e998671d16a0274c2a7c8227fec96a4607/components/script/script_thread.rs#L3192&quot;&gt;starts there&lt;/a&gt;, and the page continues to run its &lt;a href=&quot;https://html.spec.whatwg.org/multipage/#event-loop-processing-model&quot;&gt;HTML event loop&lt;/a&gt; there.
  4957. By its very nature, executing a script from within a webpage requires an integration between the script engine and the web engine that surrounds it.
  4958. Anything shared between the two, including the DOM itself and any other construct calling from one into the other, needs to be integrated somehow, and much but not all of that is done via &lt;a href=&quot;https://webidl.spec.whatwg.org/#introduction&quot;&gt;WebIDL&lt;/a&gt;.
  4959. For example, an integration area that is left for web and script engines to implement as they see fit is that with a garbage collector (see example &lt;a href=&quot;https://github.com/servo/mozjs/blob/8603cbf35781ea8f2d57e4822a2b874f56a53914/mozjs-sys/src/jsgc.rs#L87&quot;&gt;in Rust for SpiderMonkey&lt;/a&gt;).&lt;/p&gt;
  4960. &lt;p&gt;The need to integrate can result in tight coupling, but the classic ways of increasing &lt;a href=&quot;https://en.wikipedia.org/wiki/Modularity&quot;&gt;modularity&lt;/a&gt; — abstractions and interfaces — can be applied here as well, and that is where we found Servo lacking in some ways, but also on the right path.
  4961. Servo already comes with abstractions and interfaces for &lt;a href=&quot;https://github.com/servo/servo/tree/d9f067e998671d16a0274c2a7c8227fec96a4607/components/script/dom/bindings&quot;&gt;a large surface area&lt;/a&gt; of its &lt;a href=&quot;https://github.com/servo/mozjs&quot;&gt;integration with SpiderMonkey&lt;/a&gt;, providing ease of use and clarity while preserving boundaries between the two.
  4962. Other parts of that integration rely on direct, and unsafe, calls into the &lt;a href=&quot;https://github.com/servo/mozjs/tree/8603cbf35781ea8f2d57e4822a2b874f56a53914/mozjs-sys/src&quot;&gt;low-level SpiderMonkey APIs&lt;/a&gt;.&lt;/p&gt;
  4963. &lt;h3&gt;The solution &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2024/04/15/spidermonkey/#the-solution&quot;&gt;
  4964.        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
  4965.      &lt;/a&gt;&lt;/h3&gt;
  4966. &lt;p&gt;The low-hanging fruit consists of removing these direct calls into low-level SpiderMonkey APIs, replacing them with safe and higher-level constructs.
  4967. Work on this has started, through a combination of efforts from maintainers and the enthusiasm of community members: &lt;a href=&quot;https://github.com/eerii&quot;&gt;eri&lt;/a&gt;, &lt;a href=&quot;https://github.com/tannal&quot;&gt;tannal&lt;/a&gt;, and &lt;a href=&quot;https://github.com/Taym95&quot;&gt;Taym Haddadi&lt;/a&gt;.
  4968. These efforts have already resulted in the closing of several issues:&lt;/p&gt;
  4969. &lt;ul&gt;
  4970. &lt;li&gt;&lt;a href=&quot;https://github.com/servo/servo/issues/31319&quot;&gt;WedIDL: bring dom/bindings/typedarray further in line with spec&lt;/a&gt;&lt;/li&gt;
  4971. &lt;li&gt;&lt;a href=&quot;https://github.com/servo/servo/issues/31064&quot;&gt;WebIDL: use TypedArray&lt;/a&gt;&lt;/li&gt;
  4972. &lt;li&gt;&lt;a href=&quot;https://github.com/servo/servo/issues/31050&quot;&gt;Remove create_typed_array from dom/bindings&lt;/a&gt;&lt;/li&gt;
  4973. &lt;li&gt;&lt;a href=&quot;https://github.com/servo/servo/issues/31049&quot;&gt;WebIDL: use Float32Array in GamePad&lt;/a&gt;&lt;/li&gt;
  4974. &lt;li&gt;&lt;a href=&quot;https://github.com/servo/servo/issues/31048&quot;&gt;WebIDL: use Float32Array in XRRay&lt;/a&gt;&lt;/li&gt;
  4975. &lt;li&gt;&lt;a href=&quot;https://github.com/servo/servo/issues/31047&quot;&gt;WebIDL: use Float32Array in XRRigidTransform&lt;/a&gt;&lt;/li&gt;
  4976. &lt;li&gt;&lt;a href=&quot;https://github.com/servo/servo/issues/31046&quot;&gt;WebIDL: use Float32Array in XRView&lt;/a&gt;&lt;/li&gt;
  4977. &lt;li&gt;&lt;a href=&quot;https://github.com/servo/servo/issues/30890&quot;&gt;WebIDL impl: remove unsafe JSObject from return value of Document::NamedGetter&lt;/a&gt;&lt;/li&gt;
  4978. &lt;/ul&gt;
  4979. &lt;p&gt;Note that the safer higher-level constructs that replace low-level SpiderMonkey API calls are still &lt;a href=&quot;https://github.com/servo/servo/blob/d9f067e998671d16a0274c2a7c8227fec96a4607/components/script/dom/bindings/buffer_source.rs&quot;&gt;internally tightly coupled&lt;/a&gt; to SpiderMonkey.
  4980. By centralizing these calls, and hiding them from the rest of the codebase, it becomes possible to enumerate what exactly Servo is doing with SpiderMonkey, and to start thinking about a second layer of abstraction: one that would hide the underlying script engine.
  4981. An existing, and encouraging, example of such a layer comes from React Native in the form of its &lt;a href=&quot;https://reactnative.dev/docs/the-new-architecture/landing-page#fast-javascriptnative-interfacing&quot;&gt;JavaScript Interface (JSI)&lt;/a&gt;.&lt;/p&gt;
  4982. &lt;h3&gt;Call to action &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2024/04/15/spidermonkey/#call-to-action&quot;&gt;
  4983.        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
  4984.      &lt;/a&gt;&lt;/h3&gt;
  4985. &lt;p&gt;If you are interested in contributing to these efforts, the issues below are good places to start:&lt;/p&gt;
  4986. &lt;ul&gt;
  4987. &lt;li&gt;&lt;a href=&quot;https://github.com/servo/servo/issues/30863&quot;&gt;Modular JS/execution engine&lt;/a&gt;&lt;/li&gt;
  4988. &lt;li&gt;&lt;a href=&quot;https://github.com/servo/servo/issues/30891&quot;&gt;WebIDL impl: remove unsafe JSObject when returning a ReadableStream&lt;/a&gt;&lt;/li&gt;
  4989. &lt;li&gt;&lt;a href=&quot;https://github.com/servo/servo/issues/30892&quot;&gt;WebIDL impl: remove unsafe JSObject from WebGLExtensionWrapper&lt;/a&gt;&lt;/li&gt;
  4990. &lt;li&gt;&lt;a href=&quot;https://github.com/servo/servo/issues/31072&quot;&gt;Support FinalizationRegistry&lt;/a&gt;&lt;/li&gt;
  4991. &lt;li&gt;&lt;a href=&quot;https://github.com/servo/servo/issues/30889&quot;&gt;WebIDL impl: Replace use of NonNull&lt;/a&gt;&lt;/li&gt;
  4992. &lt;/ul&gt;
  4993. &lt;p&gt;For more details, read &lt;a href=&quot;https://github.com/servo/servo/wiki/Servo-and-SpiderMonkey-Report&quot;&gt;the full report&lt;/a&gt; on our wiki.&lt;/p&gt;</description>
  4994. <pubDate>Mon, 15 Apr 2024 00:00:00 +0000</pubDate>
  4995. </item>
  4996. <item>
  4997. <title>Don Marti: planning for SCALE 2025</title>
  4998. <guid isPermaLink="true">https://blog.zgp.org/scale-2025/</guid>
  4999. <link>https://blog.zgp.org/scale-2025/</link>
  5000. <description>&lt;p&gt;I missed &lt;a href=&quot;https://www.socallinuxexpo.org/scale/21x&quot;&gt;Southern California Linux Expo&lt;/a&gt; this year. Normally I can think of a talk to do, but between work and [virus redacted] I didn’t have a lot of conference abstract writing time last fall. I need some new material anyway. The talks that tend to do well for me there are kind of a mix of tips for doing weird stuff.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/scale-20/&quot;&gt;privacy tools&lt;/a&gt;&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://lwn.net/Articles/589196/&quot;&gt;Using git and make for tasks beyond coding&lt;/a&gt;&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.socallinuxexpo.org/scale6x/conference-info/speakers/Don-Marti/index.html&quot;&gt;tools for working offline&lt;/a&gt;&lt;/p&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;I didn’t really have anything good to submit last fall, but this year I am building up a bunch of miscellaneous Linux stuff similar to what has worked for me at SCALE before. Because of the big Fediverse trend, the search quality crisis, the ends of third-party cookies and Twitter, and enshittification in general, it seems like there’s a lot more interest in redoing your blog—I know I have been doing it, so that’s what I’m going to see if I can come up with something on for next SCALE. But I’m not going to use a blog software package. I’m more comfortable with a mix of different stuff. This blog is now mainly done in Pandoc, &lt;a href=&quot;https://blog.zgp.org/automatically-run-make/&quot;&gt;auto-rebuilt by Make&lt;/a&gt;, and has a bunch of scripts in various languages, including shell, Perl, Python, and even &lt;a href=&quot;https://blog.zgp.org/code/lazy.lua&quot;&gt;a little bit of Lua&lt;/a&gt; now.&lt;/p&gt; &lt;figure&gt; &lt;img alt=&quot;protip: use cowsay(1) to alert the user to errors in Makefile before restarting&quot; src=&quot;https://blog.zgp.org/i/cowsay.png&quot; /&gt;&amp;lt;figcaption&amp;gt;protip: use cowsay(1) to alert the user to errors in Makefile before restarting&amp;lt;/figcaption&amp;gt; &lt;/figure&gt; &lt;p&gt;I don’t really expect anybody to copy this blog, more outdo it by getting the audience to realize how much you can now do with the available tools. I’m not going to win any design prizes but with modern CSS I can make a reasonable responsive layout and dark/light modes. And yes you can make a &lt;a href=&quot;https://validator.w3.org/feed/check.cgi?url=https%3A%2F%2Fblog.zgp.org%2Ffeed.xml&quot;&gt;valid RSS feed&lt;/a&gt; in GNU Make.&lt;/p&gt; &lt;p&gt;The feature I just did today is the &lt;q&gt;similar posts&lt;/q&gt; in the left column. Remember that paper about how you can measure the similarity between two pieces of text by seeing how well they compress together? &lt;a href=&quot;https://aclanthology.org/2023.findings-acl.426/&quot;&gt;“Low-Resource” Text Classification: A Parameter-Free Classification Method with Compressors - ACL Anthology&lt;/a&gt; This is Python code for rating similarity of chunks of text. Check it out in the left column, you can now follow the links to similar blog posts.&lt;/p&gt; &lt;pre&gt;&lt;code&gt;import gzip def z(s): return len(gzip.compress(bytes(s, 'utf-8'))) def simscore(t1, t2): &quot;lower is better&quot; if len(t1) == 0 or len(t2) == 0: return 1 base = z(t1) + z(t2) minsize = min(z(' '.join([t1, t2])), z(' '.join([t2, t1])), base) return int(10000 * minsize/base)&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;Next I will probably try stuff like Fediverse-powered comments, some kind of search feature, LLM training set poisoning, some privacy and p2p features, and maybe something else. A lot of what I’m doing here will be possible to translate into other environments, and should be portable to people’s favorite blog software.&lt;/p&gt; &lt;h3&gt;Related&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;http://blog.zgp.org/am-i-metal-yet/&quot;&gt;Am I metal yet?&lt;/a&gt; The old blog software&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://blog.zgp.org/automatically-run-make/&quot;&gt;Automatically run make when a file changes&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/favicon/&quot;&gt;Hey kids, favicon!&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Bonus links&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://jvns.ca/blog/2024/04/10/notes-on-git-error-messages/&quot;&gt;Notes on git’s error messages&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://daniel.haxx.se/blog/2024/04/10/verified-curl/&quot;&gt;Verified curl&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://a.wholelottanothing.org/a-blueprint-of-my-dream-blogging-cms/&quot;&gt;Ideas for my dream blogging CMS&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.documentfoundation.org/blog/2024/04/04/german-state-moving-30000-pcs-to-libreoffice/&quot;&gt;German state moving 30,000 PCs to LibreOffice&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.tidelift.com/xz-tidelift-and-paying-the-maintainers&quot;&gt;xz, Tidelift, and paying the maintainers&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://lwn.net/Articles/966869/&quot;&gt;[$] Radicle: peer-to-peer collaboration with Git&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://webkit.org/blog/15054/an-html-switch-control/&quot;&gt;An HTML Switch Control&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://shkspr.mobi/blog/2024/02/a-tiny-incomplete-single-user-write-only-activitypub-server-in-php/&quot;&gt;A (tiny, incomplete, single user, write-only) ActivityPub server in PHP&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://jvns.ca/blog/2024/02/16/popular-git-config-options/&quot;&gt;Popular git config options&lt;/a&gt;&lt;/p&gt;</description>
  5001. <pubDate>Sun, 14 Apr 2024 00:00:00 +0000</pubDate>
  5002. </item>
  5003. <item>
  5004. <title>Don Marti: B L O C K in the U S A</title>
  5005. <guid isPermaLink="true">https://blog.zgp.org/b-l-o-c-k-in-the-u-s-a/</guid>
  5006. <link>https://blog.zgp.org/b-l-o-c-k-in-the-u-s-a/</link>
  5007. <description>&lt;p&gt;According to a survey done by Censuswide for Ghostery, a &lt;a href=&quot;https://www.theregister.com/2024/03/27/america_ad_blocker/&quot;&gt;majority of Americans now use ad blockers&lt;/a&gt;. Yes, it looks like a &lt;a href=&quot;https://www.ghostery.com/blog/privacy-report-advertisers-and-adblockers&quot;&gt;well-designed survey of 2,000 people&lt;/a&gt;. But it’s hard to go from what people &lt;em&gt;say&lt;/em&gt; they’re using to figuring out how much protection they really have.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;p&gt;&lt;strong&gt;Are they answering accurately?&lt;/strong&gt; People might be under- or over-reporting their use of ad blockers. Under-reporting because they don’t want to admit to free-riding on ad-supported sites, or over-reporting because &lt;q&gt;install an ad blocker&lt;/q&gt; is now one of the typical Internet tips you’re supposed to do, like not re-using passwords and installing software updates when they come out. People might be trying to look more responsible. When &lt;a href=&quot;https://techcrunch.com/2022/12/22/fbi-ad-blocker/&quot;&gt;the FBI says you should be running an ad blocker to deal with fake search ads&lt;/a&gt;, that puts a certain amount of pressure on people.&lt;span class=&quot;aside&quot;&gt;icymi: &lt;a href=&quot;https://www.fortressofdoors.com/ad-blockers-and-the-four-currencies/&quot;&gt;Ad Blockers and the Four Currencies&lt;/a&gt; by Lars Doucet.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;&lt;strong&gt;Are they using an honest blocker with real protection?&lt;/strong&gt; The ad blocking category has a lot of scams, including adware and paid allow-listing, so most of the people saying yes are not getting the blocking they think they are. (The company that owns the number one ad blocker makes a business out of selling exceptions from blocking. &lt;a href=&quot;https://www.theverge.com/2020/1/14/21065154/ron-wyden-ftc-joe-simons-adblock-plus-ad-blocking-software-investigation&quot;&gt;Senator Ron Wyden wrote a letter to the FTC asking them to investigate the ad-blocking industry&lt;/a&gt; back in 2020, but no action as far as I know. In the meantime you can check your ad blocker using &lt;a href=&quot;https://coveryourtracks.eff.org/&quot;&gt;a tool from the EFF&lt;/a&gt;.)&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;&lt;strong&gt;How much of their browsing is on a protected browser or device?&lt;/strong&gt; It’s a lot easier to install an ad blocker on desktop than on mobile, and people have different habits.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;&lt;strong&gt;Is protection being circumvented by server-to-server tracking?&lt;/strong&gt; Ad blocking has been a thing for a long time, so the surveillance industry has gotten pretty good at working around it. &lt;a href=&quot;https://themarkup.org/privacy/2024/01/17/each-facebook-user-is-monitored-by-thousands-of-companies-study-indicates&quot;&gt;Facebook has responded to Apple ATT and to blockage of their tracking pixels by rolling out server-to-server tracking&lt;/a&gt;, which avoids any protection on the client. Google and other companies also have server-to-server tracking.&lt;/p&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The second most newsworthy part of the new Censuswide survey is &lt;em&gt;why&lt;/em&gt; people say they’re using an ad blocker. &lt;q&gt;Protect online privacy&lt;/q&gt; is now the number one reason, with &lt;q&gt;block ads&lt;/q&gt; and &lt;q&gt;speed up page loads&lt;/q&gt; coming in after that. &lt;span class=&quot;aside&quot;&gt;I’ll leave the most newsworthy part to the end.&lt;/span&gt; I know, I know, the surveillance advertising people are going to reply with something like, yeah, right, these ad blocker users are just rationalizing free-riding on ad-supported sites, like Napster users making bogus fair use arguments instead of paying for CDs back when that was a thing. In order to understand this survey we have to put it in context with other research. Compare to &lt;a href=&quot;http://repository.upenn.edu/asc_papers/137/&quot;&gt;Turow et al.&lt;/a&gt; on attitudes to cross-context tracking, and to an &lt;a href=&quot;https://web.archive.org/web/20180129155334/https://www.iabeurope.eu/wp-content/uploads/2017/09/EuropeOnline_FINAL.pdf&quot;&gt;IAB Europe study&lt;/a&gt; that found only 20% of users &lt;q&gt;would be happy for their data to be shared with third parties for advertising purposes.&lt;/q&gt;&lt;/p&gt; &lt;p&gt;It looks like the privacy concerns are real for a significant subset of people, and part of the same trend as popular &lt;a href=&quot;https://iapp.org/resources/article/us-state-privacy-legislation-tracker/&quot;&gt;US State Privacy Legislation&lt;/a&gt;. &lt;a href=&quot;https://blog.zgp.org/30-40-30/&quot;&gt;Different people have different norms around ad personalization&lt;/a&gt;, and if people can’t get companies to comply with those norms they will get the government to do something about it. For companies, adjusting to privacy norms doesn’t just mean throwing &lt;q&gt;privacy-enhancing technologies&lt;/q&gt; (PETs) at the problem. &lt;a href=&quot;https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4736957&quot;&gt;Jerath et al.&lt;/a&gt; found similar levels of &lt;q&gt;perceived privacy violations&lt;/q&gt; for on-device ad personalization as for old-fashioned cookie-based tracking. PETs have different mathematical properties from cookies, but either don’t address other problems or make them worse.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/personalization-risks/&quot;&gt;personalization risks&lt;/a&gt; such as discrimination&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;complexity and information asymmetry&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;trust&lt;/p&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Companies deploying PETs are asking users to trust that they will do complicated math honestly—but they’re &lt;a href=&quot;https://www.brookings.edu/articles/how-americans-confidence-in-technology-firms-has-dropped-evidence-from-the-second-wave-of-the-american-institutional-confidence-poll/&quot;&gt;not starting from a position of trust&lt;/a&gt;. When users have the opportunity to evaluate the companies’ honesty in a way they do understand, the companies don’t measure up. Most people can look at an online map of their neighborhood and spot &lt;a href=&quot;https://doctorow.medium.com/https-pluralistic-net-2024-03-05-the-map-is-not-the-territory-vapor-locksmith-57251144ea94&quot;&gt;places where a locksmith isn’t&lt;/a&gt;. And it’s easy to look up a person on a social site and see where there are enough profiles that not all of them can be real.&lt;/p&gt; &lt;figure&gt; &lt;img alt=&quot;screenshot of several fake Facebook profiles, all using the same two photos of retired US Army General Mark Hertling&quot; src=&quot;https://blog.zgp.org/i/hertling-facebook.png&quot; /&gt;&amp;lt;figcaption&amp;gt;screenshot of several fake Facebook profiles, all using the same two photos of retired US Army General Mark Hertling&amp;lt;/figcaption&amp;gt; &lt;/figure&gt; &lt;p&gt;The biggest problem with PETs will be that the Big Tech companies do both easy-to-understand activities—like scams, fake profiles, and &lt;a href=&quot;https://www.washingtonpost.com/technology/2024/03/01/youtube-union-contractor-layoffs/&quot;&gt;union busting&lt;/a&gt;—&lt;em&gt;and&lt;/em&gt; hard-to-understand activities, like PET math. &lt;span class=&quot;aside&quot;&gt;&lt;q&gt;I see you served me scam ads and a map with fake companies in my neighborhood, but I totally trust your math to protect my privacy&lt;/q&gt; — no one ever&lt;/span&gt; If you don’t know if the PET math is honest, but you can see the same company acting dishonestly in other ways, then it’s hard to trust the PET math. (Personally I think the actual PETs are probably legit, but they’re being rolled out as part of a &lt;a href=&quot;https://blog.zgp.org/device-drivers-privacy-publishing/&quot;&gt;larger program to squeeze out legit publishers and other smaller companies&lt;/a&gt;.)&lt;/p&gt; &lt;figure&gt; &lt;img alt=&quot;In AIC polls, confidence in Amazon, Meta, and Google has fallen since 2018.&quot; src=&quot;https://blog.zgp.org/i/confidence-in-tech.webp&quot; /&gt;&amp;lt;figcaption&amp;gt;In AIC polls, confidence in Amazon, Meta, and Google has fallen since 2018.&amp;lt;/figcaption&amp;gt; &lt;/figure&gt; &lt;p&gt;Maybe trust issues are behind Censuswide’s most newsworthy data point: &lt;strong&gt;&lt;q&gt;experienced advertisers&lt;/q&gt; (with 5 or more years of experience in advertising) are more likely to run an ad blocker than average. (66% &amp;gt; 52%)&lt;/strong&gt; Reminds me of &lt;a href=&quot;https://blog.zgp.org/apple-s-kangaroo-cookie-robot/&quot;&gt;how experienced email users were early adopters of spam filters&lt;/a&gt;—the more you know, the more you block. Between &lt;a href=&quot;https://checkmyads.org/google-gsp-pmax-transparency/&quot;&gt;sketchy&lt;/a&gt; &lt;a href=&quot;https://checkmyads.org/confirmed-google-shark-tank-keto-scam/&quot;&gt;placements&lt;/a&gt;, &lt;a href=&quot;https://www.vanityfair.com/news/2018/10/was-the-medias-big-pivot-to-video-all-based-on-a-lie&quot;&gt;bogus&lt;/a&gt; &lt;a href=&quot;https://www.msn.com/en-us/money/companies/mark-zuckerberg-led-meta-faces-class-action-lawsuit-over-alleged-misrepresentation-of-facebook-instagram-ad-audience-size/ar-BB1kkhCG&quot;&gt;reports&lt;/a&gt; and &lt;a href=&quot;https://searchengineland.com/google-ads-reps-customer-service-advertisers-low-436434&quot;&gt;a &lt;q&gt;your call is important to us&lt;/q&gt; approach to advertiser support&lt;/a&gt;, the advertisers are having a much worse surveillance advertising experience than the rest of us. The Censuswide survey &lt;a href=&quot;https://ghostery.cdn.prismic.io/ghostery/ZgP8q7LRO5ile652_Ghostery_ThePrivacyPulseReport_2024.pdf&quot;&gt;(full report PDF)&lt;/a&gt; also shows that more &lt;q&gt;experienced advertisers&lt;/q&gt; than ordinary users believe that the Big Tech companies are &lt;q&gt;likely to abuse data.&lt;/q&gt;&lt;span class=&quot;aside&quot;&gt;but realistically, &lt;a href=&quot;https://www.vice.com/en/article/akvmke/facebook-doesnt-know-what-it-does-with-your-data-or-where-it-goes&quot;&gt;who knows if they are or not?&lt;/a&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;The &lt;q&gt;Tragedy of the Commons&lt;/q&gt; is &lt;a href=&quot;https://archive.org/details/governingthecommons/page/n21/mode/2up&quot;&gt;bogus when it comes to actual traditional practices for managing common resources&lt;/a&gt;, but it is a thing within large companies. Individual product managers are incentivized to achieve &lt;a href=&quot;https://www.atlassian.com/agile/agile-at-scale/okr&quot;&gt;short-term goals&lt;/a&gt; either at the expense of other product managers, by dishonest practices that spend down the (common across the whole company) reputation level, or both. For example, within the same large company &lt;a href=&quot;https://blog.zgp.org/ad-supported-piracy/&quot;&gt;one business unit can achieve its goals by licensing e-books, while another business unit can achieve its goals by running ads on infringing copies of the same titles&lt;/a&gt;. Big Tech fans often ask, if these companies are so distrusted, why do people keep using their products? But another question is, if these companies are so trusted, why do voters keep asking the government to take over managing their products? &lt;a href=&quot;https://www.tomscott.com/usvsth3m/realistic-facebook-privacy-simulator/&quot;&gt;Privacy settings are hard for users to figure out&lt;/a&gt; and easy for companies to override, but a vote for privacy is easier and sticks better. (and &lt;a href=&quot;https://vermontbiz.com/news/2024/march/23/vermont-sets-national-precedent-unanimous-house-passage-comprehensive-data&quot;&gt;possibly the one thing that a bitterly divided nation can agree on&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;Doc Searls called ad blocking &lt;q&gt;&lt;a href=&quot;https://doc.searls.com/2015/09/28/beyond-ad-blocking-the-biggest-boycott-in-human-history/&quot;&gt;the biggest boycott in world history&lt;/a&gt;&lt;/q&gt; back in 2015. Ad blocking looks like a response to creepy practices (or &lt;q&gt;perceived privacy violations&lt;/q&gt; if that works better for you) and those practices are part of a more general scam culture crisis. &lt;a href=&quot;https://www.nytimes.com/2021/12/10/opinion/scams-trust-institutions.html&quot;&gt;Tressie McMillan Cottom writes&lt;/a&gt;,&lt;span class=&quot;aside&quot;&gt;read the whole thing&lt;/span&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Scams weaken our trust in social institutions, but their going mainstream—divorced from empathy for the victims or stigma for the perpetrators—means that we have accepted scams as institutions themselves.&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;I can’t see any one big policy solution for surveillance advertising, tech oligopolies, or the broader scam culture problem. All of that stuff would have to change in order to move the ad blocking numbers. It’s going to take a variety of approaches, maybe including a &lt;a href=&quot;https://blog.zgp.org/banning-surveillance-advertising/&quot;&gt;surveillance advertising ban&lt;/a&gt;, maybe &lt;a href=&quot;https://blog.zgp.org/surveillance-marketing-taxes/&quot;&gt;a Pigovian tax on databases containing PII&lt;/a&gt;, maybe &lt;a href=&quot;https://www.schizochronotopia.com/p/a-brief-list-of-business-units-google&quot;&gt;breaking up Big Tech firms&lt;/a&gt;. So far the most promising approach seems to be state laws with private right of action, which is one of the reasons I’m so optimistic about &lt;a href=&quot;https://hintzelaw.com/blog/2023/4/9/wa-my-health-my-data-act-pt1-overview&quot;&gt;Washington State’s My Health My Data Act&lt;/a&gt;. My experience on a jury (not an ad-related case) was the most productive meeting I have been in since I came to California. If surveillance advertising issues can grind their way through a few jury trials, where lawyers have an incentive to explain what’s going on in an accurate, comprehensible way, then both surveillance marketers and privacy nerds will be able to reset how we approach this stuff based on more common sense.&lt;/p&gt; &lt;h3&gt;Related&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/reputation-signal/&quot;&gt;Reputation, signaling, and targeted ads&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/banning-surveillance-advertising/&quot;&gt;banning surveillance advertising&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/improving-web-advertising/&quot;&gt;improving web advertising&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Bonus links&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://www.adexchanger.com/publishers/why-does-ad-tech-still-fail-to-spot-and-stop-mfa-fueled-schemes/&quot;&gt;Why Does Ad Tech Still Fail To Spot – And Stop – MFA-Fueled Schemes?&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.adexchanger.com/data-privacy-roundup/flying-under-the-radar-is-not-a-realistic-compliance-strategy/&quot;&gt;Flying Under The Radar Is Not A Realistic Compliance Strategy&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.adexchanger.com/privacy/7-things-you-should-know-about-californias-privacy-watchdog/&quot;&gt;7 Things You Should Know About California’s Privacy Watchdog&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.schneier.com/blog/archives/2024/04/class-action-lawsuit-against-googles-incognito-mode.html&quot;&gt;Class-Action Lawsuit against Google’s Incognito Mode&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://checkmyads.org/elon-musk-twitter-tag-not-certified/&quot;&gt;CONFIRMED: Elon Musk’s X lost a HUGE brand safety certification after our complaint&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.adexchanger.com/publishers/nubai-ventures-sues-outbrain-claiming-its-traffic-is-riddled-with-bots/&quot;&gt;Nubai Ventures Sues Outbrain, Claiming Its Traffic Is Riddled With Bots&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.theatlantic.com/ideas/archive/2024/03/tiktok-bill-foreign-influence/677806/&quot;&gt;Critics of the TikTok Bill Are Missing the Point&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://techcrunch.com/2024/03/20/meta-privacy-fee-eu-assessment/&quot;&gt;EU signals doubts over legality of Meta’s privacy fee&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.honest-broker.com/p/they-praised-ai-at-sxswand-the-audience&quot;&gt;They Praised AI at SXSW—and the Audience Started Booing&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.mcsweeneys.net/articles/ai-is-threatening-my-tech-and-lifestyle-content-mill&quot;&gt;AI Is Threatening My Tech and Lifestyle Content Mill&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.bitecode.dev/p/there-is-no-eu-cookie-banner-law&quot;&gt;There is no EU cookie banner law&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://krebsonsecurity.com/2024/03/a-close-up-look-at-the-consumer-data-broker-radaris/&quot;&gt;A Close Up Look at the Consumer Data Broker Radaris&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.adexchanger.com/data-privacy-roundup/the-ftcs-privacycon-was-chock-full-of-warning-signs-for-ad-tech/&quot;&gt;The FTC’s PrivacyCon Was Chock-Full Of Warning Signs For Online Advertising&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.bigtechnology.com/p/how-google-blew-up-its-open-culture&quot;&gt;How Google Blew Up Its Open Culture and Compromised Its Product&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://soatok.blog/2024/02/27/the-tech-industry-doesnt-understand-consent/&quot;&gt;The Tech Industry Doesn’t Understand Consent&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://techcrunch.com/2024/03/07/iab-tcf-cjeu/&quot;&gt;Tracking ads industry faces another body blow in the EU&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.adexchanger.com/the-sell-sider/privacy-sandboxs-latency-issues-will-cost-publishers/&quot;&gt;Privacy Sandbox’s Latency Issues Will Cost Publishers&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://searchengineland.com/google-enforcing-stricter-rules-consumer-finance-ad-targeting-437939&quot;&gt;Reminder – Google is enforcing stricter rules for consumer finance ad targeting&lt;/a&gt;&lt;/p&gt;</description>
  5008. <pubDate>Fri, 12 Apr 2024 00:00:00 +0000</pubDate>
  5009. </item>
  5010. <item>
  5011. <title>The Mozilla Blog: Rachel Hislop reflects on working for Beyoncé, creating community for Black women and the power of storytelling</title>
  5012. <guid isPermaLink="false">https://blog.mozilla.org/?p=74443</guid>
  5013. <link>https://blog.mozilla.org/en/internet-culture/rachel-hislop-rise25-mozilla-media-beyonce/</link>
  5014. <description>&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;
  5015.  
  5016. &lt;/div&gt;&lt;/figure&gt;
  5017.  
  5018.  
  5019.  
  5020. &lt;p&gt;&lt;em&gt;At Mozilla, we know we can’t create a better future alone, that is why each year we will be highlighting the work of 25 digital leaders using technology to amplify voices, effect change, and build new technologies globally through our &lt;a href=&quot;https://rise25.mozilla.org/?_gl=1*585km0*_ga*MTY1MDQ4MTg2NC4xNjk5NDc0NTE5*_ga_X4N05QV93S*MTcwNzE4MDk3Ny40NC4wLjE3MDcxODA5NzcuMC4wLjA.&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Rise 25 Awards.&lt;/a&gt; These storytellers, innovators, activists, advocates, builders and artists are helping make the internet more diverse, ethical, responsible and inclusive.&lt;/em&gt;&lt;/p&gt;
  5021.  
  5022.  
  5023.  
  5024. &lt;p&gt;&lt;em&gt;This week, we chatted with creator Rachel Hislop, a true storyteller at heart that is currently the VP of content and editor-in-chief at &lt;a href=&quot;https://www.okayafrica.com/&quot;&gt;OkayAfrica.&lt;/a&gt; We talked with Rachel about the ways the internet allows us to tell our own stories, working for Beyoncé and what’s to come in the next chapter of her career.&lt;/em&gt;&lt;/p&gt;
  5025.  
  5026.  
  5027.  
  5028. &lt;p&gt;&lt;strong&gt;So the first question I have is what was your favorite Beyoncé project to work on? I want to know. Also, what’s your favorite Beyoncé album?  &lt;/strong&gt;&lt;/p&gt;
  5029.  
  5030.  
  5031.  
  5032. &lt;p&gt;I’ll say that my favorite project to work on was definitely Lemonade. It was just so different from anything that had ever existed. It was so culturally relevant. It was well-timed. It was honest and just really beautiful. You can sometimes be jaded by the work when you’re too close to it, and I think that’s across the board in any industry, but there was never a moment of working on that project that I didn’t understand and appreciate just how beautiful everything was. It was really just like, all of you people that I see at work every day, this came out of your minds? And then, it was just a lot of love, and it was a really important time in culture, I think. And I really enjoyed being part of that.&lt;/p&gt;
  5033.  
  5034.  
  5035.  
  5036. &lt;p&gt;My favorite Beyoncé album … I don’t know that I can answer that because every part has had a very important impact on my life. I had The Writings on the Wall on a cassette tape that I used to play in my little boombox. And Dangerously in Love, I was in high school and experiencing little crushes for the first time. The albums grew. I met Sasha Fierce when I’m in college and learning the dualities of self when I’m away from home, and so on and so forth. So, it’s hard to pick a favorite when each of those moments were so tied to different portions of my life. &lt;/p&gt;
  5037.  
  5038.  
  5039.  
  5040. &lt;p&gt;&lt;strong&gt;I’m curious to know what types of stories pull you in and influence the work that you do as a writer?&lt;/strong&gt;&lt;/p&gt;
  5041.  
  5042.  
  5043.  
  5044. &lt;p&gt;It’s living, honestly. I’m a really curious person, and I think all the best writers are. It’s even weird calling myself a writer sometimes because so much of what I write right now is just for me, and projects that I really believe in. It’s really just the curiosity. I want to know how everything went. How did you get here? What inspired you? I’m good for going out alone and sitting next to a stranger and then learning their whole life story because I am just truly interested in people and there is no parallel in lived life. I also love reading fiction. I am not the girl that’s like, “yeah, self-help books and self-improvement” and things like that. I want to fully escape into a story. I want to be able to turn my brain on and imagine things and fully detach and escape from this world. And then I love reading old magazine articles from when people were allowed to have long, luxurious deadlines and follow subjects for a really long time. I remember this article that they would make us read in journalism school, which was &lt;a href=&quot;https://www.esquire.com/news-politics/a638/frank-sinatra-has-a-cold-gay-talese/&quot;&gt;Frank Sinatra has a cold&lt;/a&gt;, and I love that voyeurism journalism where if you can’t get to the subject, you’re talking about the things around them. Everything is so interesting to me. I also love TikTok. I learn so much. I think that it’s a really valuable form of storytelling. In short-form, I think it’s really hard — it’s harder than people give a lot of these creators credit for. My grand hope is that those small insights through those short videos are peaking curiosity and sending people on rabbit holes to go discover and read and just be deeper into the internet. I remember back in college there was this internet plugin called &lt;a href=&quot;https://en.wikipedia.org/wiki/StumbleUpon&quot;&gt;stumbled upon &lt;/a&gt;and it would roulette the internet and land on these random pages and learn things. That is how my brain is always processing. I’ll see something that’ll interest me and then be like, “I want to know more about that.” &lt;/p&gt;
  5045.  
  5046.  
  5047. &lt;div class=&quot;wp-block-image&quot;&gt;
  5048. &lt;figure class=&quot;aligncenter size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-74444&quot; height=&quot;1024&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2024/03/Mozilla_rise25_Rachel-Hislop_1-683x1024.jpg&quot; width=&quot;683&quot; /&gt;&amp;lt;figcaption class=&quot;wp-element-caption&quot;&amp;gt;Rachel Hislop at Mozilla’s Rise25 award ceremony in October 2023.&amp;lt;/figcaption&amp;gt;&lt;/figure&gt;&lt;/div&gt;
  5049.  
  5050.  
  5051. &lt;p&gt;&lt;strong&gt;You’ve been in the content media space for a while. What do you think is the biggest misconception people have about working in this space?&lt;/strong&gt;&lt;/p&gt;
  5052.  
  5053.  
  5054.  
  5055. &lt;p&gt;You know that saying that if you do what you love every day, you’ll never work a day in your life? I think it’s that. There is a pressure that you feel when you are following your actual passion. This is not just my job, this is what I like to do in my free time, this is what I think is important. This is what I feel like I was born to do, right? To storytell. And every day, it feels like work. And it feels even harder than work because it feels like a calling. From the outside, I’m sure people are like, “Oh, you get to do this cool stuff. You get to talk to all these interesting people. You get to talk about the things that you care about.” But there is truly a pressure to document this stuff in a way that pays homage to everyone and everything that came before it that solidifies its place in history to come, and to handle things with delicacy and care and importance.  There’s just so many layers to it. So, it’s never just about the one thing that you love. It’s about the responsibility that you now have to this thing because you love it. And when you’re working in culture spaces specifically, there is always someone that you have to give their flowers to for you to be able to do the work that you’re doing, but you also have to be forward. You have to look forward and innovate, while you are also honoring what has come before. And there can be a misconception about it like it being easy. Or “I can do that” — we see a lot of that with interviewers I love, where people say, “Shannon Sharpe didn’t ask the right questions. Insert podcaster here who got a really great hit and didn’t ask the right questions.” It’s because we’ve lost the art because people see the end product, they believe that it is easy. And they forget that everything that journalists are doing is in service to the audience and not in service to themselves. And we’re seeing this really weird landscape now where everyone is in service to themselves and to their own popularity and to growing their own audiences, but then they don’t serve those audiences with ethics. That for me is the misconception — that it’s just so easy, anyone could do it. Now everyone is doing it, and they’re wondering where the value is and the premium stories and all of these things like that.&lt;/p&gt;
  5056.  
  5057.  
  5058.  
  5059. &lt;p&gt;&lt;strong&gt;Who are the Black women you’re inspired by and the people you go to when you’re faced with so many of the challenges Black people have in the content/media industry?&lt;/strong&gt;&lt;/p&gt;
  5060.  
  5061.  
  5062.  
  5063. &lt;p&gt;I am very intentional about friendships, and I treat my friends like extensions of myself. They’re the board of directors for my life, and these are often friends from college. I think people really discount the friends that you make in your first big girl job and how you’re learning everything together. Those have become the people that I call on throughout my career, who I call on to collaborate with projects, who I call on when things are falling apart. I’ve been just so blessed to have those people in my life as my board of directors for all things. And I serve as the same for them. I am going to tell you the truth: I don’t know that I’ve met a Black woman that I’m not inspired by. I truly am just so in awe of so many women. &lt;/p&gt;
  5064.  
  5065.  
  5066.  
  5067. &lt;p&gt;I made a practice after the pandemic of being like, “I don’t want these people who I like online to just be my online friends.” I wanted to meet these people in real life. I started just DM’ing people and being like, “Hey, we’ve been on here a while. Can we grab lunch?” And then just continuing that connection in person has been so, so fantastic.&lt;/p&gt;
  5068.  
  5069.  
  5070.  
  5071. &lt;p&gt;I do also want to shout out &lt;a href=&quot;https://www.poynter.org/&quot;&gt;Poynter Institute.&lt;/a&gt; I did a training with them in 2019 right before the pandemic for women in leadership positions in newsrooms. When I tell you it was a week-long, intensive, seven days we were in a classroom … it was like therapy for work in a way that I didn’t know I needed, and I didn’t know was available to any of us. We built such strong bonds, even though some people worked at competing publications. But when we put all of that aside, it was just women of all ages and all backgrounds who were working in an industry and really, really cared about the work they were doing and wanted to be their best. And through that group of people, I have just made true, lifelong friends. When things were falling apart in 2020, I was calling on my cohort members and building deep, deep connections from there.&lt;/p&gt;
  5072.  
  5073.  
  5074.  
  5075. &lt;p&gt;&lt;strong&gt;What do you think is the biggest challenge we face in the world this year on and offline? How do we combat it?&lt;/strong&gt;&lt;/p&gt;
  5076.  
  5077.  
  5078.  
  5079. &lt;p&gt;There’s so much happening in the world that I think the one thing that I can say that continues to be dangerous is misinformation online. I’m going to speak specifically about Palestine. We see the power of storytelling from the front lines in a way that we have never witnessed before with any conflict, right? And we’ve seen that unfold into just horrors that we would never know were happening if we did not see it coming from the front lines. I just give kudos to the journalists that are on the ground and the people who have become journalists by force who have documented us through situations that we couldn’t even fathom. Even if we tried, we couldn’t fathom what it’s like to work through that. And while that is really helpful and illuminating the evils of the world, the other side of that there’s so much misinformation because everyone is trying to be fast to discredit what we’re seeing with our own eyes and framing that used to be able to take place is not available anymore. And I’m not going to speak to that being a political tool or otherwise, but the framing is not as readily available. I think we saw this with our election in America. Specifically, we’re in an election year — we saw this with our elections, four, eight years ago — and now as technology starts to grow and change faster than we are learning how to master it, I really do believe that misinformation is going to be one of the hardest things to combat. &lt;/p&gt;
  5080.  
  5081.  
  5082.  
  5083. &lt;p&gt;I really don’t know how to combat it. Things are just changing so quickly and there’s just so much access to so much. I think the answer as it is with most things is community and people coming together to dream together. There’s not going to be a single person that solves for all of this. It’s going to take collective efforts to help make sure that we’re doing our best.&lt;/p&gt;
  5084.  
  5085.  
  5086.  
  5087. &lt;p&gt;&lt;strong&gt;What is one action that you think everyone should take to make the world and our lives online a little better?&lt;/strong&gt;&lt;/p&gt;
  5088.  
  5089.  
  5090.  
  5091. &lt;p&gt;I think everyone can be a little bit more curious. We don’t need to trust things at face value the first time. We need to be more curious about the sources of the information that we are taking in. And it doesn’t mean that we have to be constantly engaging in combat with it. You can take things at face value and then do more research to inform yourself about all sides of a story, and I think that that’s one action that we can take in our day-to-day lives to just be better.  &lt;/p&gt;
  5092.  
  5093.  
  5094.  
  5095. &lt;p&gt;&lt;strong&gt;We started Rise25 to celebrate Mozilla’s 25th anniversary. What do you hope people are celebrating in the next 25 years?&lt;/strong&gt;&lt;/p&gt;
  5096.  
  5097.  
  5098.  
  5099. &lt;p&gt;I hope we get those flying cars that we were promised (laughs). But truly, I hope that in 25 years, we are celebrating the earth more. I really do hope that we’re celebrating the earth still housing us and that we’re all just being a little kinder and more thoughtful in the ways that we’re engaging with nature and ourselves, and that people are spending a little bit more time reconnecting with who they are offline.&lt;/p&gt;
  5100.  
  5101.  
  5102.  
  5103. &lt;p&gt;&lt;strong&gt;What gives you hope about the future of our world?&lt;/strong&gt;&lt;/p&gt;
  5104.  
  5105.  
  5106.  
  5107. &lt;p&gt;I mentor with the Lower East Side Girls Club, which is a nonprofit here in New York, and we do a mentee outing once a month. The girls are aged middle school through high school, and they are so bright and so well-rounded and smart, but they’re also funny, and they have great social cues and they think so deeply about the world and they’re really compassionate. They don’t allow the things that used to trip me up and trip me and my peers up as like middle schoolers, like they’re so evolved past that. Every time that I think that mentoring means me teaching, I realize that it really means me learning, and when I leave those girls, I’m like, “alright, we’re going to be okay.” They give me some hope.&lt;/p&gt;
  5108.  
  5109.  
  5110.  
  5111. &lt;a class=&quot;ft-c-inline-cta&quot; href=&quot;https://www.mozilla.org/en-US/firefox/new?utm_medium=mozilla-websites&amp;amp;utm_source=blog.mozilla.org&amp;amp;utm_content=inline-cta&quot;&gt;
  5112.  &lt;div class=&quot;ft-c-inline-cta__media&quot;&gt;
  5113.  &lt;img alt=&quot;&quot; class=&quot;attachment-1x1 size-1x1&quot; height=&quot;512&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2020/12/Fx-Browser-icon-fullColor-512-512x512.png&quot; width=&quot;512&quot; /&gt;  &lt;/div&gt;
  5114.  &lt;div class=&quot;ft-c-inline-cta__content&quot;&gt;
  5115.     &lt;h3&gt;Get Firefox&lt;/h3&gt;      &lt;span&gt;Get the browser that protects what’s important&lt;/span&gt;   &lt;/div&gt;
  5116. &lt;/a&gt;
  5117. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/internet-culture/rachel-hislop-rise25-mozilla-media-beyonce/&quot;&gt;Rachel Hislop reflects on working for Beyoncé, creating community for Black women and the power of storytelling&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;</description>
  5118. <pubDate>Thu, 11 Apr 2024 18:42:37 +0000</pubDate>
  5119. <dc:creator>Aron Yohannes</dc:creator>
  5120. </item>
  5121. <item>
  5122. <title>Hacks.Mozilla.Org: Prototype even faster with the Gradio UI for Figma component library</title>
  5123. <guid isPermaLink="false">https://hacks.mozilla.org/?p=48138</guid>
  5124. <link>https://hacks.mozilla.org/2024/04/prototype-even-faster-with-the-gradio-ui-for-figma-component-library/</link>
  5125. <description>&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;As an industry, generative AI is moving quickly, and so requires teams exploring new ideas and technologies to move quickly as well. To do so, we have been using Gradio, a low-code prototyping toolkit from Hugging Face, to spin up experiments and experiences. Gradio has allowed us to validate concepts through prototyping without large investments of time, effort, or infrastructure.&lt;/span&gt;&lt;/p&gt;
  5126. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Although Gradio has made the development phase of prototyping easier, the design phase has been largely the same. Even with Gradio, designers have had to create components in Figma, outline expected user flows and behaviors, and hand off designs for developers in the same way they have always done. While working on a recent exploration, we realized something was needed: a set of Figma components based on Gradio that enabled designers to create wireframes quickly.&lt;/span&gt;&lt;/p&gt;
  5127. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Today, we are releasing our library of design components for Gradio for others to use. The components are based on version 4.23.0 of Gradio and will be available through our Figma profile: Mozilla Innovation Projects, &lt;/span&gt;&lt;a href=&quot;https://www.figma.com/@futureatmozilla&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;https://www.figma.com/@futureatmozilla&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;. We hope these components help teams accelerate their discovery and experimentation with ML and generative AI.&lt;/span&gt;&lt;/p&gt;
  5128. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;You can find out more about Gradio at &lt;/span&gt;&lt;a href=&quot;https://www.gradio.app/&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;https://www.gradio.app/&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt; and more about innovation at Mozilla at &lt;/span&gt;&lt;a href=&quot;https://future.mozilla.org&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;https://future.mozilla.org&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
  5129. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Thanks to Amy Chiu and Anais Ron who created the components and to the Gradio team for their work. Happy designing!&lt;/span&gt;&lt;/p&gt;
  5130. &lt;h3&gt;&lt;b&gt;What’s Inside &lt;/b&gt;&lt;b&gt;&lt;i&gt;Gradio UI for Figma&lt;/i&gt;&lt;/b&gt;&lt;b&gt;?&lt;/b&gt;&lt;/h3&gt;
  5131. &lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone wp-image-48140 size-full&quot; height=&quot;900&quot; src=&quot;https://hacks.mozilla.org/wp-content/uploads/2024/04/figma2.png&quot; width=&quot;1600&quot; /&gt;&lt;/p&gt;
  5132. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Because Gradio is an ever-changing prototyping kit, current components are based on version 4.23.0 of Gradio. We selected components based on their wide array of potential uses. Here is a list of the components inside the kit:&lt;/span&gt;&lt;/p&gt;
  5133. &lt;ul&gt;
  5134. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Typography (e.g. headers, body fonts)&lt;/span&gt;&lt;/li&gt;
  5135. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Iconography (e.g. chevrons, arrows, corner expanders) &lt;/span&gt;&lt;/li&gt;
  5136. &lt;/ul&gt;
  5137. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Small Components:&lt;/span&gt;&lt;/p&gt;
  5138. &lt;ul&gt;
  5139. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Buttons&lt;/span&gt;&lt;/li&gt;
  5140. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Checkbox&lt;/span&gt;&lt;/li&gt;
  5141. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Radio&lt;/span&gt;&lt;/li&gt;
  5142. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Sliders&lt;/span&gt;&lt;/li&gt;
  5143. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Tabs&lt;/span&gt;&lt;/li&gt;
  5144. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Accordion&lt;/span&gt;&lt;/li&gt;
  5145. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Delete Button&lt;/span&gt;&lt;/li&gt;
  5146. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Error Message&lt;/span&gt;&lt;/li&gt;
  5147. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Media Type Labels&lt;/span&gt;&lt;/li&gt;
  5148. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Media Player Controller&lt;/span&gt;&lt;/li&gt;
  5149. &lt;/ul&gt;
  5150. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Big Components:&lt;/span&gt;&lt;/p&gt;
  5151. &lt;ul&gt;
  5152. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Label + Textbox&lt;/span&gt;&lt;/li&gt;
  5153. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Accordion with Label + Input&lt;/span&gt;&lt;/li&gt;
  5154. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Video Player&lt;/span&gt;&lt;/li&gt;
  5155. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Label + Counter&lt;/span&gt;&lt;/li&gt;
  5156. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Label + Slider&lt;/span&gt;&lt;/li&gt;
  5157. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Accordion + Label&lt;/span&gt;&lt;/li&gt;
  5158. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Checkbox with Label&lt;/span&gt;&lt;/li&gt;
  5159. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Radio with Label&lt;/span&gt;&lt;/li&gt;
  5160. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Accordion with Content&lt;/span&gt;&lt;/li&gt;
  5161. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Accordion with Label + Input&lt;/span&gt;&lt;/li&gt;
  5162. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Top navigation&lt;/span&gt;&lt;/li&gt;
  5163. &lt;/ul&gt;
  5164. &lt;h3&gt;&lt;b&gt;How to Access and Use &lt;/b&gt;&lt;b&gt;&lt;i&gt;Gradio UI for Figma&lt;/i&gt;&lt;/b&gt;&lt;/h3&gt;
  5165. &lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;To start using the library, follow these simple steps:&lt;/span&gt;&lt;/p&gt;
  5166. &lt;ol&gt;
  5167. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;b&gt;Access the Library&lt;/b&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;: Access the component library directly by visiting our public Figma profile (https://www.figma.com/@futureatmozilla) or by searching for “Gradio UI for Figma” within the Figma Community section of your web or desktop Figma application.&lt;/span&gt;&lt;/li&gt;
  5168. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;b&gt;Explore the Documentation&lt;/b&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;: Familiarize yourself with the components and guidelines to make the most out of your design process.&lt;/span&gt;&lt;/li&gt;
  5169. &lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;b&gt;Connect with Us&lt;/b&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;: Connect with us by following our Figma profile or emailing us at &lt;/span&gt;&lt;a href=&quot;mailto:innovations@mozilla.com&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;innovations@mozilla.com&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
  5170. &lt;/ol&gt;
  5171. &lt;p&gt;The post &lt;a href=&quot;https://hacks.mozilla.org/2024/04/prototype-even-faster-with-the-gradio-ui-for-figma-component-library/&quot;&gt;Prototype even faster with the Gradio UI for Figma component library&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;</description>
  5172. <pubDate>Thu, 11 Apr 2024 15:13:48 +0000</pubDate>
  5173. <dc:creator>Melissa Thermidor</dc:creator>
  5174. </item>
  5175. <item>
  5176. <title>Mozilla Thunderbird: Thunderbird for Android / K-9 Mail: March 2024 Progress Report</title>
  5177. <guid isPermaLink="false">https://blog.thunderbird.net/?p=1662</guid>
  5178. <link>https://blog.thunderbird.net/2024/04/thunderbird-for-android-k-9-mail-march-2024-progress-report/</link>
  5179. <description>&lt;p&gt;&lt;img alt=&quot;Featured graphic for &amp;quot;Thunderbird for Android March 2024 Progress Report&amp;quot; with stylized Thunderbird logo and K-9 Mail Android icon, resembling an envelope with dog ears.&quot; class=&quot;attachment-640x360 size-640x360 wp-post-image&quot; height=&quot;360&quot; src=&quot;https://blog.thunderbird.net/files/2024/04/Progress-Report-March-2024-768x432.jpg&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
  5180. &lt;p&gt;If you’ve been wondering how the work to turn K-9 Mail into Thunderbird for Android is coming along, you’ve found the right place. This blog post contains a report of our development activities in March 2024. &lt;/p&gt;
  5181.  
  5182.  
  5183.  
  5184. &lt;p&gt;We’ve published monthly progress reports for a while now. If you’re interested in what happened previously, check out &lt;a href=&quot;https://blog.thunderbird.net/2024/03/thunderbird-for-android-k-9-mail-february-2024-progress-report/&quot;&gt;February’s progress report&lt;/a&gt;. The report for the preceding month is usually linked in the first section of a post. But you can also browse the &lt;a href=&quot;https://blog.thunderbird.net/category/thunderbird-mobile/&quot;&gt;Android section of our blog&lt;/a&gt; to find progress reports and release announcements.&lt;/p&gt;
  5185.  
  5186.  
  5187.  
  5188. &lt;h3&gt;Fixing bugs&lt;/h3&gt;
  5189.  
  5190.  
  5191.  
  5192. &lt;p&gt;For K-9 Mail, new stable releases typically include a lot of changes. K-9 Mail 6.800 was &lt;a href=&quot;https://github.com/thunderbird/thunderbird-android/compare/6.603...6.800&quot;&gt;no exception&lt;/a&gt;. That means a lot of opportunities to accidentally introduce new bugs. And while we test the app in several ways – manual tests, automated tests, and via beta releases – there’s always some bugs that aren’t caught and make it into a stable version. So we typically spend a couple of weeks after a new major release fixing the bugs reported by our users.&lt;/p&gt;
  5193.  
  5194.  
  5195.  
  5196. &lt;h4&gt;K-9 Mail 6.801&lt;/h4&gt;
  5197.  
  5198.  
  5199.  
  5200. &lt;h5&gt;Stop capitalizing email addresses&lt;/h5&gt;
  5201.  
  5202.  
  5203.  
  5204. &lt;p&gt;One of the known bugs was that some software keyboards automatically capitalized words when entering the email address in the first account setup screen. A user opened a &lt;a href=&quot;https://github.com/thunderbird/thunderbird-android/issues/7665&quot;&gt;bug&lt;/a&gt; and provided enough information (&lt;img alt=&quot;❤&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/14.0.0/72x72/2764.png&quot; style=&quot;height: 1em;&quot; /&gt;) for us to reproduce the issue and come up with a &lt;a href=&quot;https://github.com/thunderbird/thunderbird-android/pull/7694&quot;&gt;fix&lt;/a&gt;.&lt;/p&gt;
  5205.  
  5206.  
  5207.  
  5208. &lt;h5&gt;Line breaks in single line text inputs&lt;/h5&gt;
  5209.  
  5210.  
  5211.  
  5212. &lt;p&gt;At the end of the beta phase a user &lt;a href=&quot;https://github.com/thunderbird/thunderbird-android/issues/7670&quot;&gt;noticed&lt;/a&gt; that K-9 Mail wasn’t able to connect to their email account even though they copy-pasted the correct password to the app. It turned out that the text in the clipboard ended with a line break. The single line text input we use for the password field didn’t automatically strip that line break and didn’t give any visual indication that there was one.&lt;/p&gt;
  5213.  
  5214.  
  5215.  
  5216. &lt;p&gt;While we knew about this issue, we decided it wasn’t important enough to delay the release of K-9 Mail 6.800. After the release we took some time to &lt;a href=&quot;https://github.com/thunderbird/thunderbird-android/pull/7699&quot;&gt;fix&lt;/a&gt; the problem.&lt;/p&gt;
  5217.  
  5218.  
  5219.  
  5220. &lt;h5&gt;DNSSEC? Is anyone using that?&lt;/h5&gt;
  5221.  
  5222.  
  5223.  
  5224. &lt;p&gt;When setting up an account, the app attempts to automatically find the server settings for the given email address. One part of this mechanism is looking up the email domain’s &lt;a href=&quot;https://en.wikipedia.org/wiki/MX_record&quot;&gt;MX record&lt;/a&gt;. We intended for this lookup to support DNSSEC and specifically looked for a library supporting this.&lt;/p&gt;
  5225.  
  5226.  
  5227.  
  5228. &lt;p&gt;Thanks to a beta tester we learned that DNSSEC signatures were never checked. The solution turned out to be embarrassingly simple: &lt;a href=&quot;https://github.com/thunderbird/thunderbird-android/pull/7654/files&quot;&gt;use the library in a way that it actually validates signatures&lt;/a&gt;.&lt;/p&gt;
  5229.  
  5230.  
  5231.  
  5232. &lt;h5&gt;Strange error message on OAuth 2.0 failure&lt;/h5&gt;
  5233.  
  5234.  
  5235.  
  5236. &lt;p&gt;A user in our support forum &lt;a href=&quot;https://forum.k9mail.app/t/error-when-using-oauth2-cannot-serialize-abstract-class/8188&quot;&gt;reported&lt;/a&gt; a strange error message (“Cannot serialize abstract class com.fsck.k9.mail.oauth.XOAuth2Response”) when using OAuth 2.0 while adding their email account. Our intention was to display the error message returned by the OAuth server. Instead an internal error occurred. &lt;/p&gt;
  5237.  
  5238.  
  5239.  
  5240. &lt;p&gt;We tracked this down to the tool optimizing the app by stripping unused code and resources when building the final APK. The optimizer was removing a bit too much. But once the issue was identified, the &lt;a href=&quot;https://github.com/thunderbird/thunderbird-android/pull/7698&quot;&gt;fix&lt;/a&gt; was simple enough.&lt;/p&gt;
  5241.  
  5242.  
  5243.  
  5244. &lt;h5&gt;Crash when downloading an attachment&lt;/h5&gt;
  5245.  
  5246.  
  5247.  
  5248. &lt;p&gt;Shortly after K-9 Mail 6.800 was made available on Google Play, I checked the list of reported app crashes in the developer console. Not a lot of users had gotten the update yet. So there were only very few reports. One was about a crash that occurred when the progress dialog was displayed while downloading an attachment. &lt;/p&gt;
  5249.  
  5250.  
  5251.  
  5252. &lt;p&gt;The crash had been reported before. But the number of crashes never crossed the threshold where we consider a crash important enough to actually look at. &lt;/p&gt;
  5253.  
  5254.  
  5255.  
  5256. &lt;p&gt;It turned out that the code contained the bug since it was first added in 2017. It was a race condition that was very timing sensitive. And so it worked fine much more often than it did not. &lt;/p&gt;
  5257.  
  5258.  
  5259.  
  5260. &lt;p&gt;&lt;a href=&quot;https://github.com/thunderbird/thunderbird-android/pull/7689&quot;&gt;The fix&lt;/a&gt; was simple enough. So now this bug is history.&lt;/p&gt;
  5261.  
  5262.  
  5263.  
  5264. &lt;h5&gt;Don’t write novels in the subject line&lt;/h5&gt;
  5265.  
  5266.  
  5267.  
  5268. &lt;p&gt;The app was crashing when trying to send a message with a very long subject line (around 1000 characters). This, too, wasn’t a new bug. But the crash occurred rarely enough that we didn’t notice it before.&lt;/p&gt;
  5269.  
  5270.  
  5271.  
  5272. &lt;p&gt;The bug is &lt;a href=&quot;https://github.com/thunderbird/thunderbird-android/pull/7687&quot;&gt;fixed&lt;/a&gt; now. But it’s still best practice to keep the subject short!&lt;/p&gt;
  5273.  
  5274.  
  5275.  
  5276. &lt;h4&gt;Work on K-9 Mail 6.802&lt;/h4&gt;
  5277.  
  5278.  
  5279.  
  5280. &lt;p&gt;Even though we fixed quite a few bugs in K-9 Mail 6.801, there’s still more work to do. Besides fixing a couple of minor issues, K-9 Mail 6.802 will include the following changes.&lt;/p&gt;
  5281.  
  5282.  
  5283.  
  5284. &lt;h5&gt;F-Droid metadata&lt;/h5&gt;
  5285.  
  5286.  
  5287.  
  5288. &lt;p&gt;In preparation of building two apps (Thunderbird for Android and K-9 Mail), we moved the app description and screenshots that are used for F-Droid’s app listing to a new location inside our source code repository. We later found out that this new location is not supported by F-Droid, leading to an empty app description on the F-Droid website and inside their app.&lt;/p&gt;
  5289.  
  5290.  
  5291.  
  5292. &lt;p&gt;We switched to a different approach and hope this will fix the app description once K-9 Mail 6.802 is released.&lt;/p&gt;
  5293.  
  5294.  
  5295.  
  5296. &lt;h5&gt;Push not working due to missing permission&lt;/h5&gt;
  5297.  
  5298.  
  5299.  
  5300. &lt;p&gt;Fresh installs of the app on Android 14 no longer automatically get the permission to schedule exact alarms. But this permission is necessary for Push to work. This was a known issue. But since it only affects new installs and users can manually grant this permission via Android settings, we decided not to delay the stable release until we added a user interface to guide the user through the permission flow.&lt;/p&gt;
  5301.  
  5302.  
  5303.  
  5304. &lt;p&gt;K-9 Mail 6.802 will include a first step to improve the user experience. If Push is enabled but the permission to schedule exact alarms hasn’t been granted, the app will change the ongoing Push notification to ask the user to grant this permission.&lt;/p&gt;
  5305.  
  5306.  
  5307.  
  5308. &lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
  5309. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2024/04/image.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1663&quot; height=&quot;1270&quot; src=&quot;https://blog.thunderbird.net/files/2024/04/image-600x1270.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  5310.  
  5311.  
  5312.  
  5313. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2024/04/image-1.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1664&quot; height=&quot;1270&quot; src=&quot;https://blog.thunderbird.net/files/2024/04/image-1-600x1270.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  5314. &lt;/figure&gt;
  5315.  
  5316.  
  5317.  
  5318. &lt;p&gt;In a future update we’ll expand on that and ask the user to grant the permission before allowing them to enable Push.&lt;/p&gt;
  5319.  
  5320.  
  5321.  
  5322. &lt;h3&gt;What about new features?&lt;/h3&gt;
  5323.  
  5324.  
  5325.  
  5326. &lt;p&gt;Of course we haven’t forgotten about our &lt;a href=&quot;https://developer.thunderbird.net/planning/android-roadmap&quot;&gt;roadmap&lt;/a&gt;. As mentioned in &lt;a href=&quot;https://blog.thunderbird.net/2024/03/thunderbird-for-android-k-9-mail-february-2024-progress-report/&quot;&gt;February’s progress report&lt;/a&gt; we’ve started work on switching the user interface to use Material 3 and adding/improving Android 14 compatibility.&lt;/p&gt;
  5327.  
  5328.  
  5329.  
  5330. &lt;p&gt;There’s not much to show yet. Some Material 3 changes have been merged already. But the user interface in our development version is currently very much in a transitional phase.&lt;/p&gt;
  5331.  
  5332.  
  5333.  
  5334. &lt;p&gt;The Android 14 compatibility changes will be tested in beta versions first, and then back-ported to K-9 Mail 6.8xx.&lt;/p&gt;
  5335.  
  5336.  
  5337.  
  5338. &lt;h3&gt;Releases&lt;/h3&gt;
  5339.  
  5340.  
  5341.  
  5342. &lt;p&gt;In March 2024 we published the following stable release:&lt;/p&gt;
  5343.  
  5344.  
  5345.  
  5346. &lt;ul&gt;
  5347. &lt;li&gt;&lt;a href=&quot;https://github.com/thunderbird/thunderbird-android/releases/tag/6.801&quot;&gt;K-9 Mail v6.801&lt;/a&gt; (2024-03-11)&lt;/li&gt;
  5348. &lt;/ul&gt;
  5349.  
  5350.  
  5351.  
  5352. &lt;p&gt;There hasn’t been a release of a new beta version in March.&lt;/p&gt;
  5353. &lt;p&gt;The post &lt;a href=&quot;https://blog.thunderbird.net/2024/04/thunderbird-for-android-k-9-mail-march-2024-progress-report/&quot;&gt;Thunderbird for Android / K-9 Mail: March 2024 Progress Report&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;</description>
  5354. <pubDate>Thu, 11 Apr 2024 13:00:00 +0000</pubDate>
  5355. <dc:creator>cketti</dc:creator>
  5356. </item>
  5357. <item>
  5358. <title>Chris H-C: How to go from “Looks like something changed in a Firefox Desktop version” to “Here is a list of potential culprit bugs”</title>
  5359. <guid isPermaLink="false">http://chuttenblog.wordpress.com/?p=6362</guid>
  5360. <link>https://chuttenblog.wordpress.com/2024/04/10/how-to-go-from-looks-like-something-changed-in-a-firefox-desktop-version-to-here-is-a-list-of-potential-culprit-bugs/</link>
  5361. <description>&lt;p&gt;This will mostly be helpful to Firefox Desktop folks, so if you’re not one of those, please instead enjoy a different blogpost. I recommend &lt;a href=&quot;https://chuttenblog.wordpress.com/2021/10/22/this-week-in-glean-the-three-roles-of-data-engagements/&quot;&gt;this one about the three roles of data engagements&lt;/a&gt;.&lt;/p&gt;
  5362.  
  5363.  
  5364.  
  5365. &lt;p&gt;So you’ve found yourself a plot that looks like this:&lt;/p&gt;
  5366.  
  5367.  
  5368. &lt;div class=&quot;wp-block-image&quot;&gt;
  5369. &lt;figure class=&quot;aligncenter size-large&quot;&gt;&lt;img alt=&quot;A timeseries bar plot that begins as an uptake curve then has a sudden drop around February 22. There is no legend and no y-axis as they are unimportant, and sometimes I like to be cagey about absolute figures.&quot; class=&quot;wp-image-6365&quot; height=&quot;432&quot; src=&quot;https://chuttenblog.files.wordpress.com/2024/04/image.png?w=524&quot; width=&quot;524&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  5370.  
  5371.  
  5372. &lt;p&gt;You suspect this has something to do with a code change because, wouldn’t you know it, the sharp decline starts around Feb 22 and we released Firefox 123 on Feb 20. But where do you go from here? Here’s a step-by-step of how I went from this plot arriving in Slack#data-help to finding the bugfix that most likely caused the change:&lt;/p&gt;
  5373.  
  5374.  
  5375.  
  5376. &lt;h3&gt;1. Ensure this is actually a version-specific change&lt;/h3&gt;
  5377.  
  5378.  
  5379.  
  5380. &lt;p&gt;It’s interesting that the cliff in the plot happened near a release day, and it’s an excellent intuition to consider code releases for these sorts of sea-changes in data volume or character. But we should verify that this is the case by grouping by &lt;code&gt;mozfun.norm.truncate_version(app_version, 'major') AS major_version&lt;/code&gt; which in our case gives us:&lt;/p&gt;
  5381.  
  5382.  
  5383. &lt;div class=&quot;wp-block-image&quot;&gt;
  5384. &lt;figure class=&quot;aligncenter size-large&quot;&gt;&lt;img alt=&quot;The same timeseries bar plot as before, but coloured to show groups by major Firefox Desktop version. The cliff happens solely in the colours for Firefox 123 and above.&quot; class=&quot;wp-image-6369&quot; height=&quot;426&quot; src=&quot;https://chuttenblog.files.wordpress.com/2024/04/image-1.png?w=567&quot; width=&quot;567&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  5385.  
  5386.  
  5387. &lt;p&gt;Sure enough, in this case the volume cliff happens entirely within the Firefox 123+ colours. If this isn’t what you get, then it’s somewhat less likely that this is caused by a client code change and this guide might not help you. But for us this is near-certain confirmation that the change in the data is caused by a code change that landed in Firefox 123… but which one?&lt;/p&gt;
  5388.  
  5389.  
  5390.  
  5391. &lt;p&gt;( This is where I spent a little time checking some frequent “gotcha” changes that could’ve happened. I checked: was it because data went from all-channel to pre-release-only? (No, the probe definitions didn’t change and the fall isn’t severe enough for that (would look more like an order of magnitude)) Was it because specific instrumentation within the group happened to expire in Fx123? (No, the first plot is grouped by specific probe, and all of the groups shared the same shape as their sum) Was it an incredibly-successful engagement-boosting experiment that ended? (No, there haven’t been any relevant experiments since last July) )&lt;/p&gt;
  5392.  
  5393.  
  5394.  
  5395. &lt;h3&gt;2. Figure out which Nightly builds are affected&lt;/h3&gt;
  5396.  
  5397.  
  5398.  
  5399. &lt;p&gt;Firefox Desktop releases new software versions twice a day on the Nightly channel. We can look at the numbers reported by these builds to narrow down what specific 12h period the code landed that caused this drastic shift. Or, well, you’d think we could, but when you group by &lt;code&gt;build_id&lt;/code&gt; you get:&lt;/p&gt;
  5400.  
  5401.  
  5402. &lt;div class=&quot;wp-block-image&quot;&gt;
  5403. &lt;figure class=&quot;aligncenter size-large&quot;&gt;&lt;img alt=&quot;Another bar plot, but instead of the x-axis being time it is now &amp;quot;build id&amp;quot; which is a timestamp of a sort. The data is all over the place and patchy with no or little clear pattern.&quot; class=&quot;wp-image-6373&quot; height=&quot;406&quot; src=&quot;https://chuttenblog.files.wordpress.com/2024/04/image-2.png?w=623&quot; width=&quot;623&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  5404.  
  5405.  
  5406. &lt;p&gt;Because our Nightly population isn’t randomly distributed across timezones, there are usage patterns that affect the population who use which build on which day. And sometimes there are “respins” where specific days will have more than 2 nightlies. And since our Nightly population is so small (You Can Help! &lt;a href=&quot;https://www.mozilla.org/firefox/channel/desktop/&quot;&gt;Download Nightly Today&lt;/a&gt;!), and this data is a little sparse to begin with, little changes have big effects.&lt;/p&gt;
  5407.  
  5408.  
  5409.  
  5410. &lt;p&gt;No, far more commonly the correct thing to do is to look at what I call a “build day”. This is how &lt;a href=&quot;https://glam.telemetry.mozilla.org/&quot;&gt;GLAM&lt;/a&gt; makes things useful, and this is how I make patterns visible. So group by &lt;code&gt;SUBSTR(build_id, 1, 8) AS build_day,&lt;/code&gt; and you get:&lt;/p&gt;
  5411.  
  5412.  
  5413. &lt;div class=&quot;wp-block-image&quot;&gt;
  5414. &lt;figure class=&quot;aligncenter size-large&quot;&gt;&lt;img alt=&quot;It looks like a timeseries bar plot, but the x-axis is &amp;quot;build day&amp;quot; so it isn't quite. Notably, there's a sudden cliff starting with the nightlies for January 18.&quot; class=&quot;wp-image-6377&quot; height=&quot;406&quot; src=&quot;https://chuttenblog.files.wordpress.com/2024/04/image-3.png?w=618&quot; width=&quot;618&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  5415.  
  5416.  
  5417. &lt;p&gt;Much better. We can see that the change likely landed in Jan 18’s nightlies. That Jan 18-20 are all of a level suggests to me that it probably ended up in all of Jan 18’s nightly builds (if it only landed in one of the (normally) two nightly builds we’d expect to see a short fall-off where Jan 18 would be more like an average between Jan 17 and 19.). &lt;/p&gt;
  5418.  
  5419.  
  5420.  
  5421. &lt;p&gt;Regardless of when during the day, we’re pretty sure we have this nailed down to only one day’s worth of patches! That’s good… but it could be better.&lt;/p&gt;
  5422.  
  5423.  
  5424.  
  5425. &lt;h3&gt;3. Going from build days to pushlog&lt;/h3&gt;
  5426.  
  5427.  
  5428.  
  5429. &lt;p&gt;Ever since I was the human glue keeping the (now-decommissioned) automated regression detection system “alerts.tmo” working, I’ve had a document on my disk reminding me how to transform build days or build_ids into a “pushlog” of changes that landed in the suspect builds. This is how it works:&lt;/p&gt;
  5430.  
  5431.  
  5432.  
  5433. &lt;ol&gt;
  5434. &lt;li&gt;Get the hg revisions of the suspect builds by looking through &lt;a href=&quot;https://hg.mozilla.org/mozilla-central/firefoxreleases&quot;&gt;this list of all firefox releases&lt;/a&gt; for the suspect builds’ ids. You want the final build of the day &lt;em&gt;before&lt;/em&gt; the first suspect build day and the final build of the final suspect build day, which in this case are Jan 17 and Jan 18, so we get f593f07c9772 and 9c0c2aab123:&lt;/li&gt;
  5435. &lt;/ol&gt;
  5436.  
  5437.  
  5438. &lt;div class=&quot;wp-block-image&quot;&gt;
  5439. &lt;figure class=&quot;aligncenter size-large&quot;&gt;&lt;img alt=&quot;A visual excerpt of the firefox releases list https://hg.mozilla.org/mozilla-central/firefoxreleases. For illustration only.&quot; class=&quot;wp-image-6380&quot; height=&quot;241&quot; src=&quot;https://chuttenblog.files.wordpress.com/2024/04/image-4.png?w=433&quot; width=&quot;433&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  5440.  
  5441.  
  5442. &lt;ol start=&quot;2&quot;&gt;
  5443. &lt;li&gt;Put them into this template: &lt;code&gt;https://hg.mozilla.org/mozilla-central/pushloghtml?fromchange={}&amp;amp;tochange={}&lt;/code&gt; — which gives us &lt;a href=&quot;https://hg.mozilla.org/mozilla-central/pushloghtml?fromchange=f593f07c9772&amp;amp;tochange=9c0c2aaab123&quot;&gt;https://hg.mozilla.org/mozilla-central/pushloghtml?fromchange=f593f07c9772&amp;amp;tochange=9c0c2aaab123&lt;/a&gt;&lt;/li&gt;
  5444. &lt;/ol&gt;
  5445.  
  5446.  
  5447.  
  5448. &lt;p&gt;This gives you a list of all changes that are in the suspect builds, plus links to the specific code changes and the relevant bugs, with the topic sentence from each commit right there for you. Handy!&lt;/p&gt;
  5449.  
  5450.  
  5451.  
  5452. &lt;h3&gt;4. Going from a pushlog to a culprit&lt;/h3&gt;
  5453.  
  5454.  
  5455.  
  5456. &lt;p&gt;This is where human pattern matching, domain expertise, organizational memory, culture and practices, and institutional conventions all combine… or, to put it another way, I don’t know how to help you get from the list of all code that &lt;em&gt;could&lt;/em&gt; have caused your data change to the one (or more) likely suspects. My brain has handily built me a heuristic and not handed me the source code, alas. But I’ve noticed some patterns:&lt;/p&gt;
  5457.  
  5458.  
  5459.  
  5460. &lt;ul&gt;
  5461. &lt;li&gt;Any change that is backed out can be disregarded. Often for reasons of test failures changes will be backed out and relanded later. Sometimes that’s later the same day. Sometimes that’s outside our pushlog. Skip any changes that have been backed out by disregarding any commits from a bug that is mentioned before a commit that says “Backed out N changesets (bug ###)…”.&lt;/li&gt;
  5462.  
  5463.  
  5464.  
  5465. &lt;li&gt;You can often luck out by just text searching for keywords. It is custom at Mozilla to try to be descriptive about the “what” of a change in the commit’s topic, so you could try looking for “telemetry” or “ping” or “glean” to see if there’s anything from the data collection system itself in there. Or, since this particular example had to do with Firefox Relay’s integration with Firefox Desktop, I looked for “relay” (no hits) and then “form” (which hit a few times, like on the word “information”, … but also on the culprit which was in the form detector code.)&lt;/li&gt;
  5466.  
  5467.  
  5468.  
  5469. &lt;li&gt;This is a web view on the source code, so you’re not limited to what it gives you. If you have a mozilla-central checkout yourself, you can pull up the commits (if you’re using &lt;a href=&quot;https://github.com/glandium/git-cinnabar&quot;&gt;git-cinnabar&lt;/a&gt; you can use its &lt;code&gt;hg2git&lt;/code&gt; functionality to change the revs from hg to git) and dump their sum-total changes to a viewer, or pipe it through grep, or turn it into a spreadsheet you can go through row-by-row, or anything you want. I’m lazy so I always try keywording on the pushlog first, but these are always there for when I strike out.&lt;/li&gt;
  5470. &lt;/ul&gt;
  5471.  
  5472.  
  5473.  
  5474. &lt;h3&gt;5. Getting it wrong&lt;/h3&gt;
  5475.  
  5476.  
  5477.  
  5478. &lt;p&gt;Just because you found the one and only commit that landed in a suspect build that is at all related, even if that commit’s bug specifically mentions that it fixed a double-counting issue, even if there’s commentary in the code review that explains that they expect to see this exact change you just saw… you might be wrong.&lt;/p&gt;
  5479.  
  5480.  
  5481.  
  5482. &lt;p&gt;Do not be brusque in your reporting. Do not cast blame. And for goodness’ sake be kind. Even if you are correct, being the person who caused a change that resulted in this investigation can be a not-fun experience. &lt;em&gt;Ask Me How I Know&lt;/em&gt;.&lt;/p&gt;
  5483.  
  5484.  
  5485.  
  5486. &lt;p&gt;Firefox Desktop is a complex system, and &lt;a href=&quot;https://how.complexsystems.fail/&quot;&gt;complex systems fail&lt;/a&gt;. It’s in their nature.&lt;/p&gt;
  5487.  
  5488.  
  5489.  
  5490. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  5491.  
  5492.  
  5493.  
  5494. &lt;p&gt;And that’s it! If you have any comments, question, or (better yet) improvements, please find me on &lt;a href=&quot;https://chat.mozilla.org/#/room/#glean:mozilla.org&quot;&gt;the #glean:mozilla.org channel on Matrix&lt;/a&gt; and I’d love to chat.&lt;/p&gt;
  5495.  
  5496.  
  5497.  
  5498. &lt;p&gt;:chutten&lt;/p&gt;</description>
  5499. <pubDate>Wed, 10 Apr 2024 20:24:31 +0000</pubDate>
  5500. <dc:creator>chuttenc</dc:creator>
  5501. </item>
  5502. <item>
  5503. <title>This Week In Rust: This Week in Rust 542</title>
  5504. <guid isPermaLink="false">tag:this-week-in-rust.org,2024-04-10:/blog/2024/04/10/this-week-in-rust-542/</guid>
  5505. <link>https://this-week-in-rust.org/blog/2024/04/10/this-week-in-rust-542/</link>
  5506. <description>&lt;p&gt;Hello and welcome to another issue of &lt;em&gt;This Week in Rust&lt;/em&gt;!
  5507. &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.
  5508. This is a weekly summary of its progress and community.
  5509. Want something mentioned? Tag us at &lt;a href=&quot;https://twitter.com/ThisWeekInRust&quot;&gt;@ThisWeekInRust&lt;/a&gt; on Twitter 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;.
  5510. Want to get involved? &lt;a href=&quot;https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md&quot;&gt;We love contributions&lt;/a&gt;.&lt;/p&gt;
  5511. &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;.
  5512. 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;
  5513. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#updates-from-rust-community&quot;&gt;Updates from Rust Community&lt;/a&gt;&lt;/h4&gt;
  5514.  
  5515.  
  5516. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#official&quot;&gt;Official&lt;/a&gt;&lt;/h5&gt;
  5517. &lt;ul&gt;
  5518. &lt;li&gt;&lt;a href=&quot;https://blog.rust-lang.org/2024/04/09/Rust-1.77.2.html&quot;&gt;Announcing Rust 1.77.2&lt;/a&gt;&lt;/li&gt;
  5519. &lt;li&gt;&lt;a href=&quot;https://blog.rust-lang.org/2024/04/09/cve-2024-24576.html&quot;&gt;Security advisory for the standard library (CVE-2024-24576)&lt;/a&gt;&lt;/li&gt;
  5520. &lt;li&gt;&lt;a href=&quot;https://blog.rust-lang.org/2024/04/09/updates-to-rusts-wasi-targets.html&quot;&gt;Changes to Rust's WASI targets&lt;/a&gt;&lt;/li&gt;
  5521. &lt;/ul&gt;
  5522. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust-nation-uk&quot;&gt;Rust Nation UK&lt;/a&gt;&lt;/h5&gt;
  5523. &lt;ul&gt;
  5524. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=mM8TiAoPdQQ&quot;&gt;Hannah Aubrey - A Web of Rust: The Future of the Internet Depends on Trust&lt;/a&gt;&lt;/li&gt;
  5525. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=GnLZMJ2r7sk&quot;&gt;JD Nose - Rust Infrastructure: What it takes to keep Rust running&lt;/a&gt;&lt;/li&gt;
  5526. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=MY5kYqWeV1Q&quot;&gt;Amanieu D'Antras - The path to a stable ABI for Rust&lt;/a&gt;&lt;/li&gt;
  5527. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=cMea6IMRk2s&quot;&gt;Luca Palmieri - Pavex: re-imaging API development in Rust&lt;/a&gt;&lt;/li&gt;
  5528. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pnloY3pDgk4&quot;&gt;Lachezar Lechev - Typed for Safety&lt;/a&gt;&lt;/li&gt;
  5529. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=sMN9q4RkcuI&quot;&gt;Marco Concetto Rudilosso - Building a profiler for web assembly&lt;/a&gt;&lt;/li&gt;
  5530. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=qfknfCsICUM&quot;&gt;Jon Gjengset - Towards Impeccable Rust&lt;/a&gt;&lt;/li&gt;
  5531. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=RILymfTIcoo&quot;&gt;Nicholas Yang - Porting Turborepo From Go To Rust&lt;/a&gt;&lt;/li&gt;
  5532. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=GKMIYXK1I74&quot;&gt;David Haig - What’s that behind your ear? An open source hearing aid in Rust.&lt;/a&gt;&lt;/li&gt;
  5533. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Z1xMvm3eS4k&quot;&gt;Frédéric Ameye - Renault want to sell cars with rust!&lt;/a&gt;&lt;/li&gt;
  5534. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=8rZJY9ps4ZE&quot;&gt;Nikita Lapkov - Type-safe and fault-tolerant mesh services with Rust&lt;/a&gt;&lt;/li&gt;
  5535. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=33FG6O3qejM&quot;&gt;Andre Bogus - Easy Mode Rust&lt;/a&gt;&lt;/li&gt;
  5536. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=QrrH2lcl9ew&quot;&gt;Lars Bergstrom - Beyond Safety and Speed: How Rust Fuels Team Productivity&lt;/a&gt;&lt;/li&gt;
  5537. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=mdaWeql7C3k&quot;&gt;Tim McNamara - Unwrapping unsafe&lt;/a&gt;&lt;/li&gt;
  5538. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=04gTQmLETFI&quot;&gt;Nicholas Matsakis - Rust 2024 and beyond&lt;/a&gt;&lt;/li&gt;
  5539. &lt;/ul&gt;
  5540. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#projecttooling-updates&quot;&gt;Project/Tooling Updates&lt;/a&gt;&lt;/h5&gt;
  5541. &lt;ul&gt;
  5542. &lt;li&gt;&lt;a href=&quot;https://blog.yoshuawuyts.com/jco-1-0-wasi-0-2/&quot;&gt;Shipping Jco 1.0, WASI 0.2&lt;/a&gt;&lt;/li&gt;
  5543. &lt;li&gt;&lt;a href=&quot;https://www.lpalmieri.com/posts/this-month-in-pavex-10/&quot;&gt;This month in Pavex, #10&lt;/a&gt;&lt;/li&gt;
  5544. &lt;li&gt;&lt;a href=&quot;https://harrystern.net/extrasafe-user-namespaces.html&quot;&gt;&quot;Containerize&quot; individual functions in Rust with extrasafe&lt;/a&gt;&lt;/li&gt;
  5545. &lt;li&gt;&lt;a href=&quot;https://rust-analyzer.github.io/thisweek/2024/04/08/changelog-228.html&quot;&gt;rust-analyzer changelog #228&lt;/a&gt;&lt;/li&gt;
  5546. &lt;li&gt;&lt;a href=&quot;https://github.com/rerun-io/rerun/releases/tag/0.15.0&quot;&gt;Rerun 0.15.0 - Blueprints from Python · rerun-io/rerun&lt;/a&gt;&lt;/li&gt;
  5547. &lt;li&gt;&lt;a href=&quot;https://thisweekinbevy.com/issue/2024-04-08-bevy-0-13-2-curves-gizmos-and-games&quot;&gt;Bevy 0.13.2, Curves, Gizmos, and Games&lt;/a&gt;&lt;/li&gt;
  5548. &lt;li&gt;&lt;a href=&quot;https://www.sea-ql.org/blog/2024-04-08-whats-new-in-seaorm-1.0-rc.x/&quot;&gt;What's new in SeaORM 1.0-rc.x&lt;/a&gt;&lt;/li&gt;
  5549. &lt;/ul&gt;
  5550. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#observationsthoughts&quot;&gt;Observations/Thoughts&lt;/a&gt;&lt;/h5&gt;
  5551. &lt;ul&gt;
  5552. &lt;li&gt;&lt;a href=&quot;https://blog.cocl2.com/posts/const-currying-rs/&quot;&gt;Improve performance of you Rust functions by const currying&lt;/a&gt;&lt;/li&gt;
  5553. &lt;li&gt;&lt;a href=&quot;https://smallcultfollowing.com/babysteps/blog/2024/04/05/ownership-in-rust/&quot;&gt;Ownership in Rust&lt;/a&gt;&lt;/li&gt;
  5554. &lt;li&gt;&lt;a href=&quot;https://gendignoux.com/blog/2024/04/08/xz-backdoor.html&quot;&gt;Thoughts on the xz backdoor: an lzma-rs perspective&lt;/a&gt;&lt;/li&gt;
  5555. &lt;li&gt;&lt;a href=&quot;https://seanmonstar.com/blog/hyper-http2-continuation-flood/&quot;&gt;hyper HTTP/2 Continuation Flood&lt;/a&gt;&lt;/li&gt;
  5556. &lt;li&gt;&lt;a href=&quot;https://medium.com/itnext/leaky-abstractions-and-a-rusty-pin-fbf3b84eea1f&quot;&gt;Leaky Abstractions and a Rusty Pin&lt;/a&gt;&lt;/li&gt;
  5557. &lt;li&gt;[audio] &lt;a href=&quot;https://rustacean-station.org/episode/vitaly-bragilevsky/&quot;&gt;Launching RustRover: JetBrains' Investment in Rust&lt;/a&gt;&lt;/li&gt;
  5558. &lt;li&gt;[audio] &lt;a href=&quot;https://rustacean-station.org/episode/luca-palmieri-pavex/&quot;&gt;Pavex with Luca Palmieri&lt;/a&gt;&lt;/li&gt;
  5559. &lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/watch?v=o2ob8zkeq2s&quot;&gt;Decrusting the tokio crate&lt;/a&gt;&lt;/li&gt;
  5560. &lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/watch?v=A6NJfq5pPaw&quot;&gt;Rust 1.77.0: 70 highlights in 30 minutes&lt;/a&gt;&lt;/li&gt;
  5561. &lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/watch?v=SNnXP4TBc7g&quot;&gt;Simulate the three body problem in #rustlang&lt;/a&gt;&lt;/li&gt;
  5562. &lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/watch?v=wCASwxfPBGM&quot;&gt;Exploring Fiberplane's 3-Year Rust Journey - with Benno van den Berg&lt;/a&gt;&lt;/li&gt;
  5563. &lt;/ul&gt;
  5564. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust-walkthroughs&quot;&gt;Rust Walkthroughs&lt;/a&gt;&lt;/h5&gt;
  5565. &lt;ul&gt;
  5566. &lt;li&gt;&lt;a href=&quot;https://www.shuttle.rs/blog/2024/04/04/using-openapi-rust&quot;&gt;Working with OpenAPI using Rust&lt;/a&gt;&lt;/li&gt;
  5567. &lt;li&gt;&lt;a href=&quot;https://zed.dev/blog/zed-decoded-async-rust&quot;&gt;Zed Decoded: Async Rust&lt;/a&gt;&lt;/li&gt;
  5568. &lt;li&gt;&lt;a href=&quot;https://vmm.dev/en/rust/osinrust.md&quot;&gt;Writing a Unix-like OS in Rust&lt;/a&gt;&lt;/li&gt;
  5569. &lt;li&gt;&lt;a href=&quot;https://www.greptime.com/blogs/2024-04-09-rust-protobuf-performance&quot;&gt;Fivefold Slower Compared to Go? Optimizing Rust's Protobuf Decoding Performance&lt;/a&gt;&lt;/li&gt;
  5570. &lt;li&gt;&lt;a href=&quot;https://aayushyavajpayee.substack.com/p/coming-soon&quot;&gt;Write Cleaner, More Maintainable Rust Code with PhantomData&lt;/a&gt;&lt;/li&gt;
  5571. &lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/watch?v=jO-oQH_gK4M&quot;&gt;Extreme Clippy for an existing Rust Crate&lt;/a&gt;&lt;/li&gt;
  5572. &lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/watch?v=_QjsGDds270&quot;&gt;developerlife.com - Build a color gradient animation for a spinner component, for CLI, in Rust&lt;/a&gt;&lt;/li&gt;
  5573. &lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/watch?v=fcb6rstRniI&quot;&gt;developerlife.com - Build a spinner component, for CLI, in Rust&lt;/a&gt;&lt;/li&gt;
  5574. &lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/playlist?list=PLofhE49PEwmwelPkhfiqdFQ9IXnmGdnSE&quot;&gt;developerlife.com - Build an async readline, and spinner in Rust, for interactive CLI&lt;/a&gt;&lt;/li&gt;
  5575. &lt;/ul&gt;
  5576. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#research&quot;&gt;Research&lt;/a&gt;&lt;/h5&gt;
  5577. &lt;ul&gt;
  5578. &lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2404.02230&quot;&gt;&quot;Against the Void&quot;: An Interview and Survey Study on How Rust Developers Use Unsafe Code&lt;/a&gt;&lt;/li&gt;
  5579. &lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2404.02680&quot;&gt;Sound Borrow-Checking for Rust via Symbolic Semantics&lt;/a&gt;&lt;/li&gt;
  5580. &lt;/ul&gt;
  5581. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#miscellaneous&quot;&gt;Miscellaneous&lt;/a&gt;&lt;/h5&gt;
  5582. &lt;ul&gt;
  5583. &lt;li&gt;&lt;a href=&quot;https://rust-indexed.com/&quot;&gt;Rust indexed - Rust mdbooks search&lt;/a&gt;&lt;/li&gt;
  5584. &lt;li&gt;&lt;a href=&quot;https://filtra.io/rust-mar-24&quot;&gt;March 2024 Rust Jobs Report&lt;/a&gt;&lt;/li&gt;
  5585. &lt;li&gt;&lt;a href=&quot;https://rust.code-maven.com/user-groups&quot;&gt;Rust Meetup and user groups (updated)&lt;/a&gt;&lt;/li&gt;
  5586. &lt;li&gt;&lt;a href=&quot;https://www.kdab.com/embedding-servo-in-qt/&quot;&gt;Embedding the Servo Web Engine in Qt&lt;/a&gt;&lt;/li&gt;
  5587. &lt;li&gt;&lt;a href=&quot;https://lwn.net/SubscriberLink/967049/0ffb9b9ed8940013/&quot;&gt;A memory model for Rust code in the kernel&lt;/a&gt;&lt;/li&gt;
  5588. &lt;li&gt;&lt;a href=&quot;https://medium.com/@harshiljani2002/building-stock-market-engine-from-scratch-in-rust-ii-0c7b5d8a60b6&quot;&gt;Building Stock Market Engine from scratch in Rust (II)&lt;/a&gt;&lt;/li&gt;
  5589. &lt;li&gt;&lt;a href=&quot;https://blog.orhun.dev/open-source-funding-with-ratatui/&quot;&gt;Ratatui Received Funding: What's Next?&lt;/a&gt;&lt;/li&gt;
  5590. &lt;/ul&gt;
  5591. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#crate-of-the-week&quot;&gt;Crate of the Week&lt;/a&gt;&lt;/h4&gt;
  5592. &lt;p&gt;This week's crate is &lt;a href=&quot;https://github.com/prefix-dev/archspec-rs&quot;&gt;archspec-rs&lt;/a&gt;, a library to track system architecture aspects.&lt;/p&gt;
  5593. &lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/t/crate-of-the-week/2704/1302&quot;&gt;Orhun Parmaksız&lt;/a&gt; for the suggestion!&lt;/p&gt;
  5594. &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;
  5595. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#call-for-testing&quot;&gt;Call for Testing&lt;/a&gt;&lt;/h4&gt;
  5596. &lt;p&gt;An important step for RFC implementation is for people to experiment with the
  5597. implementation and give feedback, especially before stabilization.  The following
  5598. RFCs would benefit from user testing before moving forward:&lt;/p&gt;
  5599. &lt;ul&gt;
  5600. &lt;li&gt;&lt;em&gt;No calls for testing were issued this week.&lt;/em&gt;&lt;/li&gt;
  5601. &lt;/ul&gt;
  5602. &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;
  5603. label to your RFC along with a comment providing testing instructions and/or guidance on which aspect(s) of the feature
  5604. need testing.&lt;/p&gt;
  5605. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://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;
  5606. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#cfp-projects&quot;&gt;CFP - Projects&lt;/a&gt;&lt;/h5&gt;
  5607. &lt;p&gt;Always wanted to contribute to open-source projects but did not know where to start?
  5608. Every week we highlight some tasks from the Rust community for you to pick and get started!&lt;/p&gt;
  5609. &lt;p&gt;Some of these tasks may also have mentors available, visit the task page for more information.&lt;/p&gt;
  5610. &lt;ul&gt;
  5611. &lt;li&gt;&lt;a href=&quot;https://github.com/metalbear-co/mirrord/issues/1399&quot;&gt;mirrord - Fix all check-rust-docs warnings&lt;/a&gt;&lt;/li&gt;
  5612. &lt;/ul&gt;
  5613. &lt;p&gt;If you are a Rust project owner and are looking for contributors, please submit tasks &lt;a href=&quot;https://users.rust-lang.org/t/twir-call-for-participation/4821&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  5614. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#cfp-speakers&quot;&gt;CFP - Speakers&lt;/a&gt;&lt;/h5&gt;
  5615. &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;
  5616. &lt;ul&gt;
  5617. &lt;li&gt;&lt;a href=&quot;https://foundation.rust-lang.org/news/the-rustconf-2024-call-for-talk-proposals-is-open/&quot;&gt;RustConf 2024&lt;/a&gt; | Closes 2024-04-25 | Montreal, Canada | Event date: 2024-09-10&lt;/li&gt;
  5618. &lt;li&gt;&lt;a href=&quot;https://sessionize.com/rustlab-2024&quot;&gt;RustLab 2024&lt;/a&gt; | Closes 2024-05-01 | Florence, Italy | Event date: 2024-11-09 - 2024-11-11&lt;/li&gt;
  5619. &lt;li&gt;&lt;a href=&quot;https://www.papercall.io/eurorust-2024&quot;&gt;EuroRust 2024&lt;/a&gt;| Closes 2024-06-03 | Vienna, Austria &amp;amp; online | Event date: 2024-10-10&lt;/li&gt;
  5620. &lt;li&gt;&lt;a href=&quot;https://scientificcomputing.rs/&quot;&gt;Scientific Computing in Rust 2024&lt;/a&gt;| Closes 2024-06-14 | online | Event date: 2024-07-17 - 2024-07-19&lt;/li&gt;
  5621. &lt;li&gt;&lt;a href=&quot;https://www.papercall.io/conf42-rustlang-2024&quot;&gt;Conf42 Rustlang 2024&lt;/a&gt; | Closes 2024-07-22 | online | Event date: 2024-08-22&lt;/li&gt;
  5622. &lt;/ul&gt;
  5623. &lt;p&gt;If you are an event organizer hoping to expand the reach of your event, please submit a link to the submission website through a &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;PR to TWiR&lt;/a&gt;.&lt;/p&gt;
  5624. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://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;
  5625. &lt;p&gt;431 pull requests were &lt;a href=&quot;https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2024-04-02..2024-04-09&quot;&gt;merged in the last week&lt;/a&gt;&lt;/p&gt;
  5626. &lt;ul&gt;
  5627. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123212&quot;&gt;CFI: change type transformation to use TypeFolder&lt;/a&gt;&lt;/li&gt;
  5628. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123635&quot;&gt;CFI: fix ICE in KCFI non-associated function pointers&lt;/a&gt;&lt;/li&gt;
  5629. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123487&quot;&gt;CFI: restore &lt;code&gt;typeid_for_instance&lt;/code&gt; default behavior&lt;/a&gt;&lt;/li&gt;
  5630. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123052&quot;&gt;CFI: support function pointers for trait methods&lt;/a&gt;&lt;/li&gt;
  5631. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123368&quot;&gt;CFI: support non-general coroutines&lt;/a&gt;&lt;/li&gt;
  5632. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123467&quot;&gt;MSVC targets should use COFF as their archive format&lt;/a&gt;&lt;/li&gt;
  5633. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123350&quot;&gt;actually use the inferred &lt;code&gt;ClosureKind&lt;/code&gt; from signature inference in coroutine-closures&lt;/a&gt;&lt;/li&gt;
  5634. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/118310&quot;&gt;add &lt;code&gt;Ord::cmp&lt;/code&gt; for primitives as a &lt;code&gt;BinOp&lt;/code&gt; in MIR&lt;/a&gt;&lt;/li&gt;
  5635. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123559&quot;&gt;add a debug asserts call to &lt;code&gt;match_projection_projections&lt;/code&gt; to ensure invariant&lt;/a&gt;&lt;/li&gt;
  5636. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/121419&quot;&gt;add aarch64-apple-visionos and aarch64-apple-visionos-sim tier 3 targets&lt;/a&gt;&lt;/li&gt;
  5637. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122807&quot;&gt;add consistency with phrases &quot;meantime&quot; and &quot;mean time&quot;&lt;/a&gt;&lt;/li&gt;
  5638. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123382&quot;&gt;assert &lt;code&gt;FnDef&lt;/code&gt; kind&lt;/a&gt;&lt;/li&gt;
  5639. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123240&quot;&gt;assert that args are actually compatible with their generics, rather than just their count&lt;/a&gt;&lt;/li&gt;
  5640. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123648&quot;&gt;avoid ICEing without the &lt;code&gt;pattern_types&lt;/code&gt; feature gate&lt;/a&gt;&lt;/li&gt;
  5641. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123182&quot;&gt;avoid expanding to unstable internal method&lt;/a&gt;&lt;/li&gt;
  5642. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123389&quot;&gt;avoid panicking unnecessarily on startup&lt;/a&gt;&lt;/li&gt;
  5643. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/121595&quot;&gt;better reporting on generic argument mismatchs&lt;/a&gt;&lt;/li&gt;
  5644. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123464&quot;&gt;cleanup: rename &lt;code&gt;HAS_PROJECTIONS&lt;/code&gt; to &lt;code&gt;HAS_ALIASES&lt;/code&gt; etc&lt;/a&gt;&lt;/li&gt;
  5645. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123477&quot;&gt;do not ICE in &lt;code&gt;fn forced_ambiguity&lt;/code&gt; if we get an error&lt;/a&gt;&lt;/li&gt;
  5646. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123516&quot;&gt;do not ICE on field access check on expr with &lt;code&gt;ty::Error&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5647. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123526&quot;&gt;do not ICE when calling incorrectly defined &lt;code&gt;transmute&lt;/code&gt; intrinsic&lt;/a&gt;&lt;/li&gt;
  5648. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123518&quot;&gt;fix &lt;code&gt;ByMove&lt;/code&gt; coroutine-closure shim (for 2021 precise closure capturing behavior)&lt;/a&gt;&lt;/li&gt;
  5649. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123349&quot;&gt;fix capture analysis for by-move closure bodies&lt;/a&gt;&lt;/li&gt;
  5650. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123397&quot;&gt;fix diagnostic for qualifier in extern block&lt;/a&gt;&lt;/li&gt;
  5651. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123454&quot;&gt;hir: use &lt;code&gt;ItemLocalId::ZERO&lt;/code&gt; in a couple more places&lt;/a&gt;&lt;/li&gt;
  5652. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/114788&quot;&gt;impl &lt;code&gt;get_mut_or_init&lt;/code&gt; and &lt;code&gt;get_mut_or_try_init&lt;/code&gt; for OnceCell and OnceLock&lt;/a&gt;&lt;/li&gt;
  5653. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122747&quot;&gt;implement T-types suggested logic for perfect non-local impl detection&lt;/a&gt;&lt;/li&gt;
  5654. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/120131&quot;&gt;implement minimal, internal-only pattern types in the type system&lt;/a&gt;&lt;/li&gt;
  5655. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/119820&quot;&gt;instantiate higher ranked goals outside of candidate selection&lt;/a&gt;&lt;/li&gt;
  5656. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123359&quot;&gt;link against libc++abi and libunwind as well when building LLVM wrappers on AIX&lt;/a&gt;&lt;/li&gt;
  5657. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122791&quot;&gt;make inductive cycles always ambiguous&lt;/a&gt;&lt;/li&gt;
  5658. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123302&quot;&gt;make sure to insert &lt;code&gt;Sized&lt;/code&gt; bound first into clauses list&lt;/a&gt;&lt;/li&gt;
  5659. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123311&quot;&gt;match ergonomics: implement &quot;&lt;code&gt;&amp;amp;&lt;/code&gt;pat everywhere&quot;&lt;/a&gt;&lt;/li&gt;
  5660. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123324&quot;&gt;match lowering: make false edges more precise&lt;/a&gt;&lt;/li&gt;
  5661. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123395&quot;&gt;more postfix match fixes&lt;/a&gt;&lt;/li&gt;
  5662. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122894&quot;&gt;move check for error in impl header outside of reporting&lt;/a&gt;&lt;/li&gt;
  5663. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123347&quot;&gt;only allow &lt;code&gt;compiler_builtins&lt;/code&gt; to call LLVM intrinsics, not any &lt;code&gt;link_name&lt;/code&gt; function&lt;/a&gt;&lt;/li&gt;
  5664. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123377&quot;&gt;only inspect user-written predicates for privacy concerns&lt;/a&gt;&lt;/li&gt;
  5665. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122077&quot;&gt;pass list of defineable opaque types into canonical queries&lt;/a&gt;&lt;/li&gt;
  5666. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123301&quot;&gt;pattern analysis: fix union handling&lt;/a&gt;&lt;/li&gt;
  5667. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123394&quot;&gt;postfix match fixes&lt;/a&gt;&lt;/li&gt;
  5668. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/120144&quot;&gt;privacy: stabilize lint &lt;code&gt;unnameable_types&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5669. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123411&quot;&gt;put checks that detect UB under their own flag below &lt;code&gt;debug_assertions&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5670. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123500&quot;&gt;revert removing miri jobserver workaround&lt;/a&gt;&lt;/li&gt;
  5671. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123367&quot;&gt;safe Transmute: Compute transmutability from &lt;code&gt;rustc_target::abi::Layout&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5672. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123620&quot;&gt;sanitizers: create the &lt;code&gt;rustc_sanitizers&lt;/code&gt; crate&lt;/a&gt;&lt;/li&gt;
  5673. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122865&quot;&gt;split hir ty lowerer's error reporting code in check functions to mod errors&lt;/a&gt;&lt;/li&gt;
  5674. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123444&quot;&gt;teach MIR inliner query cycle avoidance about &lt;code&gt;const_eval_select&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5675. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/120614&quot;&gt;transforms match into an assignment statement&lt;/a&gt;&lt;/li&gt;
  5676. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122768&quot;&gt;use the more informative generic type inference failure error on method calls on raw pointers&lt;/a&gt;&lt;/li&gt;
  5677. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/chalk/pull/810&quot;&gt;add missing &lt;code&gt;?Sized&lt;/code&gt; bounds for &lt;code&gt;HasInterner&lt;/code&gt; impls&lt;/a&gt;&lt;/li&gt;
  5678. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/chalk/pull/809&quot;&gt;introduce &lt;code&gt;Lifetime::Error&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5679. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123058&quot;&gt;perf: cache type info for ParamEnv&lt;/a&gt;&lt;/li&gt;
  5680. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122070&quot;&gt;encode dep graph edges directly from the previous graph when promoting&lt;/a&gt;&lt;/li&gt;
  5681. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123608&quot;&gt;remove debuginfo from rustc-demangle too&lt;/a&gt;&lt;/li&gt;
  5682. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122291&quot;&gt;stabilize &lt;code&gt;const_caller_location&lt;/code&gt; and &lt;code&gt;const_location_fields&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5683. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123431&quot;&gt;stabilize &lt;code&gt;proc_macro_byte_character&lt;/code&gt; and &lt;code&gt;proc_macro_c_str_literals&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5684. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123522&quot;&gt;stabilize const &lt;code&gt;Atomic*::into_inner&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5685. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123226&quot;&gt;de-LLVM the unchecked shifts&lt;/a&gt;&lt;/li&gt;
  5686. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122964&quot;&gt;rename &lt;code&gt;expose_addr&lt;/code&gt; to &lt;code&gt;expose_provenance&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5687. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122935&quot;&gt;rename &lt;code&gt;ptr::from_exposed_addr&lt;/code&gt; → &lt;code&gt;ptr::with_exposed_provenance&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5688. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123433&quot;&gt;remove &lt;code&gt;rt::init&lt;/code&gt; allocation for thread name&lt;/a&gt;&lt;/li&gt;
  5689. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123561&quot;&gt;use &lt;code&gt;unchecked_sub&lt;/code&gt; in str indexing&lt;/a&gt;&lt;/li&gt;
  5690. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123564&quot;&gt;don't emit divide-by-zero panic paths in &lt;code&gt;StepBy::len&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5691. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123198&quot;&gt;add fn const &lt;code&gt;BuildHasherDefault::new&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5692. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123089&quot;&gt;add invariant to &lt;code&gt;VecDeque::pop_*&lt;/code&gt; that len &lt;code&gt;&amp;lt;&lt;/code&gt; cap if pop successful&lt;/a&gt;&lt;/li&gt;
  5693. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123203&quot;&gt;add &lt;code&gt;Context::ext&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5694. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122411&quot;&gt;provide &lt;code&gt;cabi_realloc&lt;/code&gt; on wasm32-wasip2 by default&lt;/a&gt;&lt;/li&gt;
  5695. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122334&quot;&gt;vendor &lt;code&gt;rustc_codegen_gcc&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5696. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13560&quot;&gt;cargo: Build script not rerun when target rustflags change&lt;/a&gt;&lt;/li&gt;
  5697. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13608&quot;&gt;cargo add: Stabilize MSRV-aware version req selection&lt;/a&gt;&lt;/li&gt;
  5698. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13701&quot;&gt;cargo toml: Decouple target discovery from Target creation&lt;/a&gt;&lt;/li&gt;
  5699. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13693&quot;&gt;cargo toml: Split out an explicit step to resolve &lt;code&gt;Cargo.toml&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5700. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13703&quot;&gt;cargo metadata: Show behavior with TOML-specific types&lt;/a&gt;&lt;/li&gt;
  5701. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13706&quot;&gt;cargo: don't depend on &lt;code&gt;?&lt;/code&gt; affecting type inference in weird ways&lt;/a&gt;&lt;/li&gt;
  5702. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13718&quot;&gt;cargo: fix github fast path redirect&lt;/a&gt;&lt;/li&gt;
  5703. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13682&quot;&gt;cargo: maintain sorting of dependency features&lt;/a&gt;&lt;/li&gt;
  5704. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13696&quot;&gt;cargo: switch to using gitoxide by default for listing files&lt;/a&gt;&lt;/li&gt;
  5705. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122614&quot;&gt;rustdoc-search: shard the search result descriptions&lt;/a&gt;&lt;/li&gt;
  5706. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123407&quot;&gt;rustdoc: default to light theme if JS is enabled but not working&lt;/a&gt;&lt;/li&gt;
  5707. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123340&quot;&gt;rustdoc: heavily simplify the synthesis of auto trait impls&lt;/a&gt;&lt;/li&gt;
  5708. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123375&quot;&gt;rustdoc: synthetic auto trait impls: accept unresolved region vars for now&lt;/a&gt;&lt;/li&gt;
  5709. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12340&quot;&gt;clippy: &lt;code&gt;manual_swap&lt;/code&gt; auto fix&lt;/a&gt;&lt;/li&gt;
  5710. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12610&quot;&gt;clippy: &lt;code&gt;manual_unwrap_or_default&lt;/code&gt;: check for &lt;code&gt;Default&lt;/code&gt; trait implementation in initial condition when linting and use &lt;code&gt;IfLetOrMatch&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5711. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12631&quot;&gt;clippy: allow &lt;code&gt;cast&lt;/code&gt; lints in macros&lt;/a&gt;&lt;/li&gt;
  5712. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12617&quot;&gt;clippy: avoid an ICE in &lt;code&gt;ptr_as_ptr&lt;/code&gt; when getting the &lt;code&gt;def_id&lt;/code&gt; of a local&lt;/a&gt;&lt;/li&gt;
  5713. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12630&quot;&gt;clippy: correct parentheses for &lt;code&gt;needless_borrow&lt;/code&gt; suggestion&lt;/a&gt;&lt;/li&gt;
  5714. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12615&quot;&gt;clippy: do not suggest &lt;code&gt;assigning_clones&lt;/code&gt; in &lt;code&gt;Clone&lt;/code&gt; impl&lt;/a&gt;&lt;/li&gt;
  5715. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12439&quot;&gt;clippy: fix ice reporting in lintcheck&lt;/a&gt;&lt;/li&gt;
  5716. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12626&quot;&gt;clippy: fix incorrect suggestion for &lt;code&gt;!(a as type &amp;gt;= b)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5717. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12609&quot;&gt;clippy: reword &lt;code&gt;arc_with_non_send_sync&lt;/code&gt; note and help messages&lt;/a&gt;&lt;/li&gt;
  5718. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12591&quot;&gt;clippy: type certainty: clear &lt;code&gt;DefId&lt;/code&gt; when an expression's type changes to non-adt&lt;/a&gt;&lt;/li&gt;
  5719. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17016&quot;&gt;rust-analyzer: apply cargo flags in test explorer&lt;/a&gt;&lt;/li&gt;
  5720. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17003&quot;&gt;rust-analyzer: fix off-by-one error converting to LSP UTF8 offsets with multi-byte char&lt;/a&gt;&lt;/li&gt;
  5721. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17014&quot;&gt;rust-analyzer: consider &lt;code&gt;exported_name=&quot;main&quot;&lt;/code&gt; functions in test modules as tests&lt;/a&gt;&lt;/li&gt;
  5722. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/16997&quot;&gt;rust-analyzer: fix &lt;code&gt;patch_cfg_if&lt;/code&gt; not applying with stitched sysroot&lt;/a&gt;&lt;/li&gt;
  5723. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17000&quot;&gt;rust-analyzer: set the right postfix snippets competion source range&lt;/a&gt;&lt;/li&gt;
  5724. &lt;/ul&gt;
  5725. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust-compiler-performance-triage&quot;&gt;Rust Compiler Performance Triage&lt;/a&gt;&lt;/h5&gt;
  5726. &lt;p&gt;A quiet week; all the outright regressions were already triaged (the one biggish one was #122077, which is justified as an important bug fix). There was a very nice set of improvements from PR #122070, which cleverly avoids a lot of unnecessary allocator calls when building an incremental dep graph by reusing the old edges from the previous graph.&lt;/p&gt;
  5727. &lt;p&gt;Triage done by &lt;strong&gt;@pnkfelix&lt;/strong&gt;.
  5728. Revision range: &lt;a href=&quot;https://perf.rust-lang.org/?start=3d5528c287860b918e178a34f04ff903325571b3&amp;amp;end=86b603cd792b3f6172ba4f676d7b586c1af7630a&amp;amp;absolute=false&amp;amp;stat=instructions%3Au&quot;&gt;3d5528c2..86b603cd&lt;/a&gt;&lt;/p&gt;
  5729. &lt;p&gt;3 Regressions, 3 Improvements, 7 Mixed; 1 of them in rollups
  5730. 78 artifact comparisons made in total&lt;/p&gt;
  5731. &lt;p&gt;See full report &lt;a href=&quot;https://github.com/rust-lang/rustc-perf/pull/1890/files?short_path=20043ae#diff-20043aeaa0842acfd2c504cfc1b0ee53479877678534960356f244c156250849&quot;&gt;here&lt;/a&gt;&lt;/p&gt;
  5732. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://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;
  5733. &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
  5734. are the RFCs that were approved for implementation this week:&lt;/p&gt;
  5735. &lt;ul&gt;
  5736. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/commit/bc01ed83c19bd96fdd2eb7b7c83c0f1e45f877a9&quot;&gt;Merge RFC 3513: Add gen blocks&lt;/a&gt;&lt;/li&gt;
  5737. &lt;/ul&gt;
  5738. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#final-comment-period&quot;&gt;Final Comment Period&lt;/a&gt;&lt;/h5&gt;
  5739. &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
  5740. which are reaching a decision. Express your opinions now.&lt;/p&gt;
  5741. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/labels/final-comment-period&quot;&gt;RFCs&lt;/a&gt;&lt;/h6&gt;
  5742. &lt;ul&gt;
  5743. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3606&quot;&gt;RFC: Drop temporaries in tail expressions before local variables&lt;/a&gt;&lt;/li&gt;
  5744. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3593&quot;&gt;RFC: Reserve unprefixed guarded string literals in Edition 2024&lt;/a&gt;&lt;/li&gt;
  5745. &lt;/ul&gt;
  5746. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#tracking-issues-prs&quot;&gt;Tracking Issues &amp;amp; PRs&lt;/a&gt;&lt;/h6&gt;
  5747. &lt;a class=&quot;toclink&quot; href=&quot;http://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+label%3Afinal-comment-period+sort%3Aupdated-desc&quot;&gt;Rust&lt;/a&gt;
  5748. &lt;ul&gt;
  5749. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/118441&quot;&gt;Always display stability version even if it's the same as the containing item &lt;/a&gt;&lt;/li&gt;
  5750. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/114441&quot;&gt;Tracking Issue for &lt;code&gt;cstr_count_bytes&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5751. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/119912&quot;&gt;rustdoc-search: single result for items with multiple paths&lt;/a&gt;&lt;/li&gt;
  5752. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/78812&quot;&gt;Tracking Issue for &lt;code&gt;#![feature(const_io_structs)]&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5753. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/83659&quot;&gt;Tracking Issue for &lt;code&gt;alloc::collections::BinaryHeap::as_slice&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5754. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/83186&quot;&gt;Tracking Issue for fs_try_exists&lt;/a&gt;&lt;/li&gt;
  5755. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/121848&quot;&gt;stabilize &lt;code&gt;-Znext-solver=coherence&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5756. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/122201&quot;&gt;Document overrides of clone_from() in core/std&lt;/a&gt;&lt;/li&gt;
  5757. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/104087&quot;&gt;Stabilise inline_const&lt;/a&gt;&lt;/li&gt;
  5758. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/82450&quot;&gt;Tracking Issue for RFC 3013: Checking conditional compilation at compile time&lt;/a&gt;&lt;/li&gt;
  5759. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/121694&quot;&gt;sess: stabilize &lt;code&gt;-Zrelro-level&lt;/code&gt; as &lt;code&gt;-Crelro-level&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5760. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/107462&quot;&gt;Implement &lt;code&gt;FromIterator&lt;/code&gt; for &lt;code&gt;(impl Default + Extend, impl Default + Extend)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5761. &lt;li&gt;[disposition: close] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/119799&quot;&gt;Return the delimiter from slice::split_once&lt;/a&gt;&lt;/li&gt;
  5762. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/123355&quot;&gt;Support type '/' to search&lt;/a&gt;&lt;/li&gt;
  5763. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/117374&quot;&gt;Tracking Issue for &lt;code&gt;Seek::seek_relative&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5764. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/120257&quot;&gt;Tracking Issue for generic &lt;code&gt;NonZero&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5765. &lt;/ul&gt;
  5766. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://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;/h6&gt;
  5767. &lt;ul&gt;
  5768. &lt;li&gt;[new] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3607&quot;&gt;Add an expression for direct access to an enum's discriminant&lt;/a&gt;&lt;/li&gt;
  5769. &lt;li&gt;[new] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3606&quot;&gt;RFC: Drop temporaries in tail expressions before local variables&lt;/a&gt;&lt;/li&gt;
  5770. &lt;/ul&gt;
  5771. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#upcoming-events&quot;&gt;Upcoming Events&lt;/a&gt;&lt;/h4&gt;
  5772. &lt;p&gt;Rusty Events between 2024-04-10 - 2024-05-08 🦀&lt;/p&gt;
  5773. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#virtual&quot;&gt;Virtual&lt;/a&gt;&lt;/h5&gt;
  5774. &lt;ul&gt;
  5775. &lt;li&gt;2024-04-11 | Virtual + In Person (Berlin, DE) | &lt;a href=&quot;https://berline.rs/&quot;&gt;OpenTechSchool Berlin&lt;/a&gt; + &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  5776. &lt;li&gt;&lt;a href=&quot;https://meet.jit.si/RustHackAndLearnBerlin&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt; | &lt;a href=&quot;https://www.meetup.com/rust-berlin/events/298477689/&quot;&gt;&lt;strong&gt;Mirror: Rust Hack n Learn Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5777. &lt;/ul&gt;
  5778. &lt;/li&gt;
  5779. &lt;li&gt;2024-04-11 | Virtual (Nürnberg, DE) | &lt;a href=&quot;https://www.meetup.com/rust-noris/&quot;&gt;Rust Nüremberg&lt;/a&gt;&lt;ul&gt;
  5780. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-noris/events/297945256/&quot;&gt;&lt;strong&gt;Rust Nürnberg online&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5781. &lt;/ul&gt;
  5782. &lt;/li&gt;
  5783. &lt;li&gt;2024-04-11 | Virtual (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;
  5784. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/san-diego-rust/events/300307878/&quot;&gt;&lt;strong&gt;San Diego Rust April 2024 Tele-Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5785. &lt;/ul&gt;
  5786. &lt;/li&gt;
  5787. &lt;li&gt;2024-04-15 &amp;amp; 2024-04-16 | Virtual | &lt;a href=&quot;https://mainmatter.com/&quot;&gt;Mainmatter&lt;/a&gt;&lt;ul&gt;
  5788. &lt;li&gt;&lt;a href=&quot;https://ti.to/mainmatter/rust-testing-april-2024&quot;&gt;&lt;strong&gt;Remote Workshop: Testing for Rust projects – going beyond the basics&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5789. &lt;/ul&gt;
  5790. &lt;/li&gt;
  5791. &lt;li&gt;2024-04-16 | Virtual (Dublin, IE) | &lt;a href=&quot;https://www.meetup.com/rust-dublin/&quot;&gt;Rust Dublin&lt;/a&gt;&lt;ul&gt;
  5792. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-dublin/events/300144192/&quot;&gt;&lt;strong&gt;A reverse proxy with Tower and Hyperv1&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5793. &lt;/ul&gt;
  5794. &lt;/li&gt;
  5795. &lt;li&gt;2024-04-16 | Virtual (Washington, DC, US) | &lt;a href=&quot;https://www.meetup.com/rustdc/&quot;&gt;Rust DC&lt;/a&gt;&lt;ul&gt;
  5796. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rustdc/events/299346486/&quot;&gt;&lt;strong&gt;Mid-month Rustful—forensic parsing via Artemis&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5797. &lt;/ul&gt;
  5798. &lt;/li&gt;
  5799. &lt;li&gt;2024-04-17 | Virtual | &lt;a href=&quot;https://lunch.rs/&quot;&gt;Rust for Lunch&lt;/a&gt;&lt;ul&gt;
  5800. &lt;li&gt;&lt;a href=&quot;https://lecture.senfcall.de/hay-gmh-wox-mru&quot;&gt;&lt;strong&gt;April 2024 Rust for Lunch&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5801. &lt;/ul&gt;
  5802. &lt;/li&gt;
  5803. &lt;li&gt;2024-04-17 | 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;
  5804. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/300325512/&quot;&gt;&lt;strong&gt;Reflections on RustNation UK 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5805. &lt;/ul&gt;
  5806. &lt;/li&gt;
  5807. &lt;li&gt;2024-04-17 | Virtual (Vancouver, BC, CA) | &lt;a href=&quot;https://www.meetup.com/vancouver-rust/&quot;&gt;Vancouver Rust&lt;/a&gt;&lt;ul&gt;
  5808. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/vancouver-rust/events/298542323/&quot;&gt;&lt;strong&gt;Rust Study/Hack/Hang-out&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5809. &lt;/ul&gt;
  5810. &lt;/li&gt;
  5811. &lt;li&gt;2024-04-18 | 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;
  5812. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/events/298368799/&quot;&gt;&lt;strong&gt;Crafting Interpreters in Rust Collaboratively&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5813. &lt;/ul&gt;
  5814. &lt;/li&gt;
  5815. &lt;li&gt;2024-04-21 | Virtual (Israel) | &lt;a href=&quot;https://rust.org.il/&quot;&gt;Rust in Israel&lt;/a&gt; &lt;ul&gt;
  5816. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/code-mavens/events/300265648/&quot;&gt;&lt;strong&gt;Using AstroNvim for Rust development (in Hebrew)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5817. &lt;/ul&gt;
  5818. &lt;/li&gt;
  5819. &lt;li&gt;2024-04-25 | Virtual + In Person (Berlin, DE) | &lt;a href=&quot;https://berline.rs/&quot;&gt;OpenTechSchool Berlin&lt;/a&gt; + &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  5820. &lt;li&gt;&lt;a href=&quot;https://meet.jit.si/RustHackAndLearnBerlin&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt; | &lt;a href=&quot;https://www.meetup.com/rust-berlin/events/298477692/&quot;&gt;&lt;strong&gt;Mirror: Rust Hack n Learn Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5821. &lt;/ul&gt;
  5822. &lt;/li&gt;
  5823. &lt;li&gt;2024-04-30 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust/&quot;&gt;Dallas Rust&lt;/a&gt;&lt;ul&gt;
  5824. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/mvdtgtygcgbnc/&quot;&gt;&lt;strong&gt;Last Tuesday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5825. &lt;/ul&gt;
  5826. &lt;/li&gt;
  5827. &lt;li&gt;2024-05-01 | 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;
  5828. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/300325526/&quot;&gt;&lt;strong&gt;Rust for Rustaceans Book Club: Chapter 5 - Project Structure&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5829. &lt;/ul&gt;
  5830. &lt;/li&gt;
  5831. &lt;li&gt;2024-05-01 | Virtual (Indianapolis, IN, US) | &lt;a href=&quot;https://www.meetup.com/indyrs/&quot;&gt;Indy Rust&lt;/a&gt;&lt;ul&gt;
  5832. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/indyrs/events/299047895/&quot;&gt;&lt;strong&gt;Indy.rs - with Social Distancing&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5833. &lt;/ul&gt;
  5834. &lt;/li&gt;
  5835. &lt;li&gt;2024-05-02 | Virtual (Charlottesville, NC, US) | &lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/&quot;&gt;Charlottesville Rust Meetup&lt;/a&gt;&lt;ul&gt;
  5836. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/events/298368804/&quot;&gt;&lt;strong&gt;Crafting Interpreters in Rust Collaboratively&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5837. &lt;/ul&gt;
  5838. &lt;/li&gt;
  5839. &lt;li&gt;2024-05-07 | Virtual (Buffalo, NY) | &lt;a href=&quot;https://www.meetup.com/buffalo-rust-meetup/&quot;&gt;Buffalo Rust Meetup&lt;/a&gt;&lt;ul&gt;
  5840. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/buffalo-rust-meetup/events/300100279/&quot;&gt;&lt;strong&gt;Buffalo Rust User Group&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5841. &lt;/ul&gt;
  5842. &lt;/li&gt;
  5843. &lt;/ul&gt;
  5844. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#africa&quot;&gt;Africa&lt;/a&gt;&lt;/h5&gt;
  5845. &lt;ul&gt;
  5846. &lt;li&gt;2024-05-04 | Kampala, UG | &lt;a href=&quot;https://www.eventbrite.com/o/rust-circle-kampala-65249289033&quot;&gt;Rust Circle Kampala&lt;/a&gt;&lt;ul&gt;
  5847. &lt;li&gt;&lt;a href=&quot;https://www.eventbrite.com/e/rust-circle-meetup-tickets-628763176587?aff=ebdsoporgprofile&quot;&gt;&lt;strong&gt;Rust Circle Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5848. &lt;/ul&gt;
  5849. &lt;/li&gt;
  5850. &lt;/ul&gt;
  5851. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#asia&quot;&gt;Asia&lt;/a&gt;&lt;/h5&gt;
  5852. &lt;ul&gt;
  5853. &lt;li&gt;2024-04-16 | Tokyo, JP | &lt;a href=&quot;https://www.meetup.com/tokyo-rust-meetup/&quot;&gt;Tokyo Rust Meetup&lt;/a&gt;&lt;ul&gt;
  5854. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/tokyo-rust-meetup/events/300305613/&quot;&gt;&lt;strong&gt;The Good, the Bad, and the Async (RSVP by 15 Apr)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5855. &lt;/ul&gt;
  5856. &lt;/li&gt;
  5857. &lt;/ul&gt;
  5858. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#europe&quot;&gt;Europe&lt;/a&gt;&lt;/h5&gt;
  5859. &lt;ul&gt;
  5860. &lt;li&gt;2024-04-10 | Cambridge, UK | &lt;a href=&quot;https://www.meetup.com/cambridge-rust-meetup/&quot;&gt;Cambridge Rust Meetup&lt;/a&gt;&lt;ul&gt;
  5861. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/cambridge-rust-meetup/events/299730322/&quot;&gt;&lt;strong&gt;Rust Meetup Reboot 3&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5862. &lt;/ul&gt;
  5863. &lt;/li&gt;
  5864. &lt;li&gt;2024-04-10 | Cologne/Köln, DE | &lt;a href=&quot;https://www.meetup.com/rustcologne/&quot;&gt;Rust Cologne&lt;/a&gt;&lt;ul&gt;
  5865. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rustcologne/events/300191375/&quot;&gt;&lt;strong&gt;This Month in Rust, April&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5866. &lt;/ul&gt;
  5867. &lt;/li&gt;
  5868. &lt;li&gt;2024-04-10 | Manchester, UK | &lt;a href=&quot;https://www.meetup.com/rust-manchester/&quot;&gt;Rust Manchester&lt;/a&gt;&lt;ul&gt;
  5869. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-manchester/events/299887934/&quot;&gt;&lt;strong&gt;Rust Manchester April 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5870. &lt;/ul&gt;
  5871. &lt;/li&gt;
  5872. &lt;li&gt;2024-04-10 | Oslo, NO | &lt;a href=&quot;https://www.meetup.com/rust-oslo/&quot;&gt;Rust Oslo&lt;/a&gt;&lt;ul&gt;
  5873. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-oslo/events/299488225/&quot;&gt;&lt;strong&gt;Rust Hack'n'Learn at Kampen Bistro&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5874. &lt;/ul&gt;
  5875. &lt;/li&gt;
  5876. &lt;li&gt;2024-04-11 | Bordeaux, FR | &lt;a href=&quot;https://www.meetup.com/bordeaux-rust/&quot;&gt;Rust Bordeaux&lt;/a&gt;&lt;ul&gt;
  5877. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bordeaux-rust/events/299628716/&quot;&gt;&lt;strong&gt;Rust Bordeaux #2 : Présentations&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5878. &lt;/ul&gt;
  5879. &lt;/li&gt;
  5880. &lt;li&gt;2024-04-11 | Reading, UK | &lt;a href=&quot;https://www.meetup.com/reading-rust-workshop/&quot;&gt;Reading Rust Workshop&lt;/a&gt;&lt;ul&gt;
  5881. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/reading-rust-workshop/events/299694473/&quot;&gt;&lt;strong&gt;Reading Rust Meetup at Browns&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5882. &lt;/ul&gt;
  5883. &lt;/li&gt;
  5884. &lt;li&gt;2024-04-15 | Zagreb, HR | &lt;a href=&quot;https://www.meetup.com/zagreb-rust-meetup/&quot;&gt;impl Zagreb for Rust&lt;/a&gt;&lt;ul&gt;
  5885. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/zagreb-rust-meetup/events/299905015/&quot;&gt;&lt;strong&gt;Rust Meetup 2024/04: Building cargo projects with NIX&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5886. &lt;/ul&gt;
  5887. &lt;/li&gt;
  5888. &lt;li&gt;2024-04-16 | Bratislava, SK | &lt;a href=&quot;https://www.meetup.com/bratislava-rust-meetup-group/&quot;&gt;Bratislava Rust Meetup Group&lt;/a&gt;&lt;ul&gt;
  5889. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bratislava-rust-meetup-group/events/299302952/&quot;&gt;&lt;strong&gt;Rust Meetup by Sonalake #5&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5890. &lt;/ul&gt;
  5891. &lt;/li&gt;
  5892. &lt;li&gt;2024-04-16 | 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;
  5893. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-modern-systems-programming-in-leipzig/events/300024630/&quot;&gt;&lt;strong&gt;winnow/nom&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5894. &lt;/ul&gt;
  5895. &lt;/li&gt;
  5896. &lt;li&gt;2024-04-16 | Munich, DE + Virtual | &lt;a href=&quot;https://www.meetup.com/rust-munich/&quot;&gt;Rust Munich&lt;/a&gt;&lt;ul&gt;
  5897. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-munich/events/298507657/&quot;&gt;&lt;strong&gt;Rust Munich 2024 / 1 - hybrid&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5898. &lt;/ul&gt;
  5899. &lt;/li&gt;
  5900. &lt;li&gt;2024-04-17 | Bergen, NO | &lt;a href=&quot;https://www.meetup.com/bergen-html-css-meetup-group/&quot;&gt;Hubbel kodeklubb&lt;/a&gt;&lt;ul&gt;
  5901. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bergen-html-css-meetup-group/events/300031586/&quot;&gt;&lt;strong&gt;Lær Rust med Conways Game of Life&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5902. &lt;/ul&gt;
  5903. &lt;/li&gt;
  5904. &lt;li&gt;2024-04-17 | Ostrava, CZ | &lt;a href=&quot;https://www.meetup.com/techmeetupostrava/&quot;&gt;TechMeetup Ostrava&lt;/a&gt;&lt;ul&gt;
  5905. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/techmeetupostrava/events/299912212/&quot;&gt;&lt;strong&gt;TechMeetup: RUST&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5906. &lt;/ul&gt;
  5907. &lt;/li&gt;
  5908. &lt;li&gt;2024-04-20 | Augsburg, DE | &lt;a href=&quot;https://www.luga.de/static/LIT-2024/&quot;&gt;Augsburger Linux-Infotag 2024&lt;/a&gt;&lt;/li&gt;
  5909. &lt;li&gt;&lt;a href=&quot;https://www.luga.de/static/LIT-2024/talks/einstieg_in_embedded_rust_mit_dem_raspberry_pico_wh/&quot;&gt;&lt;strong&gt;Augsburger Linux-Infotag 2024: Workshop Einstieg in Embedded Rust mit dem Raspberry Pico WH&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5910. &lt;li&gt;2024-04-23 | Berlin, DE | &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  5911. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-berlin/events/300047151/&quot;&gt;&lt;strong&gt;Rust'n'Tell - Rust for the Web&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5912. &lt;/ul&gt;
  5913. &lt;/li&gt;
  5914. &lt;li&gt;2024-04-23 | Paris, FR | &lt;a href=&quot;https://mobilizon.fr/@rust_paris&quot;&gt;Rust Paris&lt;/a&gt;&lt;ul&gt;
  5915. &lt;li&gt;&lt;a href=&quot;https://mobilizon.fr/events/4ba93021-c43a-4e4a-b3e5-09c1c0d0a957&quot;&gt;&lt;strong&gt;Paris Rust Meetup #67&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5916. &lt;/ul&gt;
  5917. &lt;/li&gt;
  5918. &lt;li&gt;2024-04-25 | Aarhus, DK | &lt;a href=&quot;https://www.meetup.com/rust-aarhus/&quot;&gt;Rust Aarhus&lt;/a&gt;&lt;ul&gt;
  5919. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-aarhus/events/299564517/&quot;&gt;&lt;strong&gt;Talk Night at MFT Energy&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5920. &lt;/ul&gt;
  5921. &lt;/li&gt;
  5922. &lt;li&gt;2024-04-23 | Berlin, DE | &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  5923. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-berlin/events/300047151/&quot;&gt;&lt;strong&gt;Rust'n'Tell - Rust for the Web&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5924. &lt;/ul&gt;
  5925. &lt;/li&gt;
  5926. &lt;li&gt;2024-04-25 | Berlin, DE | &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  5927. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-berlin/events/299288960/&quot;&gt;&lt;strong&gt;Rust and Tell - TBD&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5928. &lt;/ul&gt;
  5929. &lt;/li&gt;
  5930. &lt;li&gt;2024-04-27 | Basel, CH | &lt;a href=&quot;https://www.meetup.com/rust-basel/&quot;&gt;Rust Basel&lt;/a&gt;&lt;ul&gt;
  5931. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-basel/events/299933581/&quot;&gt;&lt;strong&gt;Fullstack Rust - Workshop #2 (Register by 23 April)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5932. &lt;/ul&gt;
  5933. &lt;/li&gt;
  5934. &lt;li&gt;2024-04-30 | Budapest, HU | &lt;a href=&quot;https://www.meetup.com/budapest-rust-meetup-group/&quot;&gt;Budapest Rust Meetup Group&lt;/a&gt;&lt;ul&gt;
  5935. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/budapest-rust-meetup-group/events/300269044/&quot;&gt;&lt;strong&gt;Rust Meetup Budapest 2&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5936. &lt;/ul&gt;
  5937. &lt;/li&gt;
  5938. &lt;li&gt;2024-04-30 | Salzburg, AT | Rust Salzburg&lt;ul&gt;
  5939. &lt;li&gt;[&lt;strong&gt;Rust Salzburg meetup&lt;/strong&gt;]: 6:30pm - CCC Salzburg, 1. OG, ArgeKultur, Ulrike-Gschwandtner-Straße 5, 5020 Salzburg&lt;/li&gt;
  5940. &lt;/ul&gt;
  5941. &lt;/li&gt;
  5942. &lt;li&gt;2024-05-01 | Utrecht, NL | &lt;a href=&quot;https://nl-rse.org/events/2024-05-01-meetup&quot;&gt;NL-RSE Community&lt;/a&gt;&lt;ul&gt;
  5943. &lt;li&gt;&lt;a href=&quot;https://www.eventbrite.nl/e/nl-rse-rust-meetup-tickets-871056271757&quot;&gt;&lt;strong&gt;NL-RSE RUST meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5944. &lt;/ul&gt;
  5945. &lt;/li&gt;
  5946. &lt;li&gt;2024-05-06 | Delft, NL | &lt;a href=&quot;https://www.gosim.org/&quot;&gt;GOSIM&lt;/a&gt;&lt;ul&gt;
  5947. &lt;li&gt;&lt;a href=&quot;https://europe2024.gosim.org/&quot;&gt;&lt;strong&gt;GOSIM Europe 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5948. &lt;/ul&gt;
  5949. &lt;/li&gt;
  5950. &lt;li&gt;2024-05-07 &amp;amp; 2024-05-08 | Delft, NL | &lt;a href=&quot;https://rustnl.org/&quot;&gt;RustNL&lt;/a&gt;&lt;ul&gt;
  5951. &lt;li&gt;&lt;a href=&quot;https://2024.rustnl.org/&quot;&gt;&lt;strong&gt;RustNL 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5952. &lt;/ul&gt;
  5953. &lt;/li&gt;
  5954. &lt;/ul&gt;
  5955. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#north-america&quot;&gt;North America&lt;/a&gt;&lt;/h5&gt;
  5956. &lt;ul&gt;
  5957. &lt;li&gt;2024-04-10 | Boulder, CO, US | &lt;a href=&quot;https://www.meetup.com/boulder-rust-meetup/&quot;&gt;Boulder Rust Meetup&lt;/a&gt;&lt;ul&gt;
  5958. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/boulder-rust-meetup/events/300019409/&quot;&gt;&lt;strong&gt;Rust Meetup: Better Builds w/ Flox + Hangs&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5959. &lt;/ul&gt;
  5960. &lt;/li&gt;
  5961. &lt;li&gt;2024-04-11 | Lehi, UT, US | &lt;a href=&quot;https://www.meetup.com/utah-rust/&quot;&gt;Utah Rust&lt;/a&gt;&lt;ul&gt;
  5962. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/utah-rust/events/300264363/&quot;&gt;&lt;strong&gt;Interactive Storytelling using Yarn Spinner with Rex Magana&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5963. &lt;/ul&gt;
  5964. &lt;/li&gt;
  5965. &lt;li&gt;2024-04-11 | Seattle, WA, US | &lt;a href=&quot;https://www.meetup.com/seattle-rust-user-group/&quot;&gt;Seattle Rust User Group&lt;/a&gt;&lt;ul&gt;
  5966. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/seattle-rust-user-group/events/299509326/&quot;&gt;&lt;strong&gt;Seattle Rust User Group Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5967. &lt;/ul&gt;
  5968. &lt;/li&gt;
  5969. &lt;li&gt;2024-04-11 | Spokane, WA, US | &lt;a href=&quot;https://www.meetup.com/spokane-rust/&quot;&gt;Spohttps://www.meetup.com/minneapolis-rust-meetup/kane Rust&lt;/a&gt;&lt;ul&gt;
  5970. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/spokane-rust/events/300019993/&quot;&gt;&lt;strong&gt;Monthly Meetup: The Rust Full-Stack Experience&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5971. &lt;/ul&gt;
  5972. &lt;/li&gt;
  5973. &lt;li&gt;2024-04-15 | Minneapolis, MN, US | &lt;a href=&quot;https://www.meetup.com/minneapolis-rust-meetup/&quot;&gt;Minneapolish Rust Meetup&lt;/a&gt;&lt;ul&gt;
  5974. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/minneapolis-rust-meetup/events/300097803/&quot;&gt;&lt;strong&gt;Minneapolis Rust: Getting started with Rust! #2&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5975. &lt;/ul&gt;
  5976. &lt;/li&gt;
  5977. &lt;li&gt;2024-04-15 | Somerville, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
  5978. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/300116673/&quot;&gt;&lt;strong&gt;Davis Square Rust Lunch, Apr 15&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5979. &lt;/ul&gt;
  5980. &lt;/li&gt;
  5981. &lt;li&gt;2024-04-16 | 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;
  5982. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/san-francisco-rust-study-group/events/299186907/&quot;&gt;&lt;strong&gt;Rust Hacking in Person&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5983. &lt;/ul&gt;
  5984. &lt;/li&gt;
  5985. &lt;li&gt;2024-04-16 | Seattle, WA, US | &lt;a href=&quot;https://www.meetup.com/seattle-rust-user-group/&quot;&gt;Seattle Rust User Group&lt;/a&gt;&lt;ul&gt;
  5986. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/seattle-rust-user-group/events/299908469/&quot;&gt;&lt;strong&gt;Seattle Rust User Group: Meet Servo and Robius Open Source Projects&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5987. &lt;/ul&gt;
  5988. &lt;/li&gt;
  5989. &lt;li&gt;2024-04-18 | Chicago, IL, US | &lt;a href=&quot;https://www.meetup.com/deep-dish-rust/&quot;&gt;Deep Dish Rust&lt;/a&gt;&lt;ul&gt;
  5990. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/deep-dish-rust/events/300204763/&quot;&gt;&lt;strong&gt;Rust Talk: What Are Panics?&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5991. &lt;/ul&gt;
  5992. &lt;/li&gt;
  5993. &lt;li&gt;2024-04-18 | Mountain View, CA, US | &lt;a href=&quot;https://www.meetup.com/mv-rust-meetup/&quot;&gt;Mountain View Rust Meetup&lt;/a&gt;&lt;ul&gt;
  5994. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/mv-rust-meetup/events/299803586/&quot;&gt;&lt;strong&gt;Rust Meetup at Hacker Dojo&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5995. &lt;/ul&gt;
  5996. &lt;/li&gt;
  5997. &lt;li&gt;2024-04-24 | Austin, TX, US | &lt;a href=&quot;https://www.meetup.com/rust-atx/&quot;&gt;Rust ATX&lt;/a&gt;&lt;ul&gt;
  5998. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-atx/events/299960315/&quot;&gt;&lt;strong&gt;Rust Lunch - Fareground&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  5999. &lt;/ul&gt;
  6000. &lt;/li&gt;
  6001. &lt;li&gt;2024-04-25 | Nashville, TN, US | &lt;a href=&quot;https://www.meetup.com/music-city-rust-developers/&quot;&gt;Music City Rust Developers&lt;/a&gt;&lt;ul&gt;
  6002. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/music-city-rust-developers/events/299976876/&quot;&gt;&lt;strong&gt;Music City Rust Developers - Async Rust on Embedded&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  6003. &lt;/ul&gt;
  6004. &lt;/li&gt;
  6005. &lt;li&gt;2024-04-26 | Boston, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
  6006. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/300116689/&quot;&gt;&lt;strong&gt;North End Rust Lunch, Apr 26&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  6007. &lt;/ul&gt;
  6008. &lt;/li&gt;
  6009. &lt;/ul&gt;
  6010. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#oceania&quot;&gt;Oceania&lt;/a&gt;&lt;/h5&gt;
  6011. &lt;ul&gt;
  6012. &lt;li&gt;2024-04-15 | Melbourne, VIC, AU | &lt;a href=&quot;https://www.meetup.com/rust-melbourne/&quot;&gt;Rust Melbourne&lt;/a&gt;&lt;ul&gt;
  6013. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-melbourne/events/300280391/&quot;&gt;&lt;strong&gt;April 2024 Rust Melbourne Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  6014. &lt;/ul&gt;
  6015. &lt;/li&gt;
  6016. &lt;li&gt;2024-04-17 | Sydney, NSW, AU | &lt;a href=&quot;https://www.meetup.com/rust-sydney/&quot;&gt;Rust Sydney&lt;/a&gt;&lt;ul&gt;
  6017. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-sydney/events/299882966/&quot;&gt;&lt;strong&gt;WMaTIR 2024 Gala &amp;amp; Talks&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  6018. &lt;/ul&gt;
  6019. &lt;/li&gt;
  6020. &lt;li&gt;2024-04-30 | Auckland, NZ | &lt;a href=&quot;https://www.meetup.com/rust-akl/&quot;&gt;Rust AKL&lt;/a&gt;&lt;ul&gt;
  6021. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-akl/events/300304958/&quot;&gt;&lt;strong&gt;Rust AKL: Why Rust? Convince Me!&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  6022. &lt;/ul&gt;
  6023. &lt;/li&gt;
  6024. &lt;li&gt;2024-04-30 | Canberra, ACT, AU | &lt;a href=&quot;https://www.meetup.com/rust-canberra/&quot;&gt;Canberra Rust User Group&lt;/a&gt;&lt;ul&gt;
  6025. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-canberra/events/300023000/&quot;&gt;&lt;strong&gt;CRUG April Meetup: Generics and Traits&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  6026. &lt;/ul&gt;
  6027. &lt;/li&gt;
  6028. &lt;/ul&gt;
  6029. &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
  6030. it mentioned here. Please remember to add a link to the event too.
  6031. 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;
  6032. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#jobs&quot;&gt;Jobs&lt;/a&gt;&lt;/h4&gt;
  6033.  
  6034.  
  6035. &lt;p&gt;Please see the latest &lt;a href=&quot;https://www.reddit.com/r/rust/comments/1bpg8b8/official_rrust_whos_hiring_thread_for_jobseekers/&quot;&gt;Who's Hiring thread on r/rust&lt;/a&gt;&lt;/p&gt;
  6036. &lt;h3&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#quote-of-the-week&quot;&gt;Quote of the Week&lt;/a&gt;&lt;/h3&gt;
  6037. &lt;blockquote&gt;
  6038. &lt;p&gt;As a former JavaScript plebeian who has only been semi-recently illuminated by the suspiciously pastel pink, white and blue radiance of Rust developers, NOT having to sit in my web console debugger for hours pushing some lovingly crafted &lt;code&gt;[object Object]&lt;/code&gt; or &lt;code&gt;undefined&lt;/code&gt; is a blessing.&lt;/p&gt;
  6039. &lt;/blockquote&gt;
  6040. &lt;p&gt;– &lt;a href=&quot;https://oneirical.github.io/bevyrage&quot;&gt;Julien Robert rage-blogging against bevy&lt;/a&gt;&lt;/p&gt;
  6041. &lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/t/twir-quote-of-the-week/328/1558&quot;&gt;scottmcm&lt;/a&gt; for the suggestion!&lt;/p&gt;
  6042. &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;
  6043. &lt;p&gt;&lt;em&gt;This Week in Rust is edited by: &lt;a href=&quot;https://github.com/nellshamrell&quot;&gt;nellshamrell&lt;/a&gt;, &lt;a href=&quot;https://github.com/llogiq&quot;&gt;llogiq&lt;/a&gt;, &lt;a href=&quot;https://github.com/cdmistman&quot;&gt;cdmistman&lt;/a&gt;, &lt;a href=&quot;https://github.com/ericseppanen&quot;&gt;ericseppanen&lt;/a&gt;, &lt;a href=&quot;https://github.com/extrawurst&quot;&gt;extrawurst&lt;/a&gt;, &lt;a href=&quot;https://github.com/andrewpollack&quot;&gt;andrewpollack&lt;/a&gt;, &lt;a href=&quot;https://github.com/U007D&quot;&gt;U007D&lt;/a&gt;, &lt;a href=&quot;https://github.com/kolharsam&quot;&gt;kolharsam&lt;/a&gt;, &lt;a href=&quot;https://github.com/joelmarcey&quot;&gt;joelmarcey&lt;/a&gt;, &lt;a href=&quot;https://github.com/mariannegoldin&quot;&gt;mariannegoldin&lt;/a&gt;, &lt;a href=&quot;https://github.com/bennyvasquez&quot;&gt;bennyvasquez&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
  6044. &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;
  6045. &lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://this-week-in-rust.org/REDDIT_LINK_HERE&quot;&gt;Discuss on r/rust&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;</description>
  6046. <pubDate>Wed, 10 Apr 2024 04:00:00 +0000</pubDate>
  6047. <dc:creator>TWiR Contributors</dc:creator>
  6048. </item>
  6049. <item>
  6050. <title>Mozilla Thunderbird: Automated Testing: How We Catch Thunderbird Bugs Before You Do</title>
  6051. <guid isPermaLink="false">https://blog.thunderbird.net/?p=1620</guid>
  6052. <link>https://blog.thunderbird.net/2024/04/automated-testing-how-we-catch-thunderbird-bugs-before-you-do/</link>
  6053. <description>&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;attachment-640x360 size-640x360 wp-post-image&quot; height=&quot;321&quot; src=&quot;https://blog.thunderbird.net/files/2024/04/Automated-testing-blog5.png&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
  6054. &lt;div class=&quot;wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex&quot;&gt;
  6055. &lt;div class=&quot;wp-block-button has-custom-font-size has-small-font-size&quot;&gt;&lt;a class=&quot;wp-block-button__link has-black-color has-white-background-color has-text-color has-background wp-element-button&quot; href=&quot;https://translate.google.com/translate?js=n&amp;amp;sl=auto&amp;amp;tl=de&amp;amp;u=https://blog.thunderbird.net/2024/04/automated-testing-how-we-catch-thunderbird-bugs-before-you-do/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Auf Deutsch übersetzen&lt;/a&gt;&lt;/div&gt;
  6056.  
  6057.  
  6058.  
  6059. &lt;div class=&quot;wp-block-button has-custom-font-size has-small-font-size&quot;&gt;&lt;a class=&quot;wp-block-button__link has-black-color has-white-background-color has-text-color has-background wp-element-button&quot; href=&quot;https://translate.google.com/translate?js=n&amp;amp;sl=auto&amp;amp;tl=fr&amp;amp;u=https://blog.thunderbird.net/2024/04/automated-testing-how-we-catch-thunderbird-bugs-before-you-do/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Traduire en français&lt;/a&gt;&lt;/div&gt;
  6060.  
  6061.  
  6062.  
  6063. &lt;div class=&quot;wp-block-button has-custom-font-size has-small-font-size&quot;&gt;&lt;a class=&quot;wp-block-button__link has-black-color has-white-background-color has-text-color has-background wp-element-button&quot; href=&quot;https://translate.google.com/translate?js=n&amp;amp;sl=auto&amp;amp;tl=ja&amp;amp;u=https://blog.thunderbird.net/2024/04/automated-testing-how-we-catch-thunderbird-bugs-before-you-do/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;日本語に翻訳&lt;/a&gt;&lt;/div&gt;
  6064. &lt;/div&gt;
  6065.  
  6066.  
  6067.  
  6068. &lt;p&gt;Since the release of &lt;a href=&quot;https://blog.thunderbird.net/2023/07/our-fastest-most-beautiful-release-ever-thunderbird-115-supernova-is-here/&quot;&gt;Thunderbird 115&lt;/a&gt;, a big focus has been on improving the state of our automated testing. Automated testing increases the software quality by minimizing the number of bugs accidentally introduced by changes to the code. For each change made to Thunderbird, our testing machines run a set of tests across Windows, macOS, and Linux to detect mistakes and unintended consequences. For a single change (or a group of changes that land at the same time), 60 to 80 hours of machine time is used running tests.&lt;/p&gt;
  6069.  
  6070.  
  6071.  
  6072. &lt;p&gt;Our code is going to be under more pressure than ever before – with a bigger team making more changes, and monthly releases reducing the time code spends on testing channels before being released. &lt;/p&gt;
  6073.  
  6074.  
  6075.  
  6076. &lt;p&gt;&lt;em&gt;We want to find the bugs before our users do.&lt;/em&gt;&lt;/p&gt;
  6077.  
  6078.  
  6079.  
  6080. &lt;h3&gt;Why We’re Testing&lt;/h3&gt;
  6081.  
  6082.  
  6083.  
  6084. &lt;p&gt;We’re not writing tests merely to make ourselves feel better. Tests improve Thunderbird by:&lt;/p&gt;
  6085.  
  6086.  
  6087.  
  6088. &lt;ul&gt;
  6089. &lt;li&gt;&lt;strong&gt;Preventing mistakes&lt;/strong&gt;&lt;br /&gt;If we test that some code behaves in an expected way, we’ll find out immediately if it no longer behaves that way. This means a shorter feedback loop, and we can fix the problem before it annoys the users.&lt;/li&gt;
  6090.  
  6091.  
  6092.  
  6093. &lt;li&gt;&lt;strong&gt;Finding out when somebody upstream breaks us&lt;/strong&gt;&lt;br /&gt;Thunderbird is built from the Firefox code. The Firefox code, which we are not responsible for, is 30 to 40 times the size of the code we &lt;em&gt;are&lt;/em&gt; responsible for. When something inevitably changes in Firefox that affects us, we want to know about it immediately so that we can respond.&lt;/li&gt;
  6094.  
  6095.  
  6096.  
  6097. &lt;li&gt;&lt;strong&gt;Freeing up human testers&lt;/strong&gt;&lt;br /&gt;If we use computers to prove that the program does what it’s supposed to do, particularly if we avoid tedious repetition and difficult-to-set-up tasks, then the limited human resources we have can do more things that humans are better at.&lt;br /&gt;For example, I’ve recently added tests that check 22 ways to trigger fetching mail, and 10 circumstances fetching mail might not work. There’s no way our human testers (great though they are) are testing all of them, but our automated tests can and do, several times a day.&lt;/li&gt;
  6098.  
  6099.  
  6100.  
  6101. &lt;li&gt;&lt;strong&gt;Thinking through what the code should be doing&lt;/strong&gt;&lt;br /&gt;Testing forces an engineer to look at the code from a different point-of-view, and this is helpful to think about what the code is &lt;em&gt;supposed&lt;/em&gt; to do in more circumstances. It also makes it easier to prove that the code does work in obscure circumstances.&lt;/li&gt;
  6102.  
  6103.  
  6104.  
  6105. &lt;li&gt;&lt;strong&gt;Finding existing bugs&lt;/strong&gt;&lt;br /&gt;In software terms we’re working with some very old code, and much of it is untested. Testing it puts a fresh set of eyes on the code and reveals some of the mistakes of the past, and where the ravages of time have broken things. It also helps the person writing the tests to understand what the code does, a lot better than just reading the code does.&lt;/li&gt;
  6106. &lt;/ul&gt;
  6107.  
  6108.  
  6109.  
  6110. &lt;p&gt;We’re not trying to completely cover a feature or every edge case in tests. We are trying to create a testing framework around the feature so that when we find a bug, as well as fixing it, we can easily write a test preventing the bug from happening again without being noticed. For too much of the code, this has been impossible without a weeks-long detour into tests.&lt;/p&gt;
  6111.  
  6112.  
  6113.  
  6114. &lt;h3&gt;Breaking New Ground&lt;/h3&gt;
  6115.  
  6116.  
  6117.  
  6118. &lt;p&gt;In the past few months we’ve figured out how to make automated tests for things that were previously impossible:&lt;/p&gt;
  6119.  
  6120.  
  6121.  
  6122. &lt;ul&gt;
  6123. &lt;li&gt;Communication with mail servers using encrypted channels.&lt;/li&gt;
  6124.  
  6125.  
  6126.  
  6127. &lt;li&gt;OAuth2 authentication with mail servers.&lt;/li&gt;
  6128.  
  6129.  
  6130.  
  6131. &lt;li&gt;Communication with web servers where a specific address must be used and an unencrypted channel must not be used.&lt;/li&gt;
  6132.  
  6133.  
  6134.  
  6135. &lt;li&gt;Servers at any given host name or port. Previously, if we wanted to start a server for automated testing, it had to be on the local machine at a non-standard location. Now we can pretend that the server is anywhere, and using standard ports, which is needed for proper testing of account configuration features. (Actually, this &lt;em&gt;was &lt;/em&gt;possible before, but now it’s much easier.)&lt;/li&gt;
  6136. &lt;/ul&gt;
  6137.  
  6138.  
  6139.  
  6140. &lt;p&gt;These new abilities are being used to wrap better testing around account set-up features, ahead of the &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1789966&quot;&gt;new Account Hub development&lt;/a&gt;, so that we can be sure nothing breaks without being noticed. They’re also helping test that collecting mail works when it should, or gives the error prompts we expect when it doesn’t.&lt;/p&gt;
  6141.  
  6142.  
  6143.  
  6144. &lt;h3&gt;Code coverage&lt;/h3&gt;
  6145.  
  6146.  
  6147.  
  6148. &lt;p&gt;We record every line of code that runs during our tests. Collecting all that data tells what code doesn’t run during our tests. If a block of code doesn’t run during any of our tests, nothing will tell us when it breaks until somebody uses the code and complains.&lt;/p&gt;
  6149.  
  6150.  
  6151.  
  6152. &lt;p&gt;Our code coverage data can be viewed at&lt;a href=&quot;https://coverage.thunderbird.net/&quot;&gt; coverage.thunderbird.net&lt;/a&gt;. You can also look at Firefox’s data at&lt;a href=&quot;https://coverage.moz.tools&quot;&gt; coverage.moz.tools&lt;/a&gt;.&lt;/p&gt;
  6153.  
  6154.  
  6155.  
  6156. &lt;p&gt;Looking at the data, you might notice that our overall number is now &lt;em&gt;lower&lt;/em&gt; than it was when we started measuring. This doesn’t mean that our testing got worse, it actually shows where we added &lt;em&gt;a lot&lt;/em&gt; of code (that isn’t maintained by us) in the third_party directory. For a better reflection of the progress we’ve made, check out the individual directories, especially mail/base which contains the most important user interface code.&lt;/p&gt;
  6157.  
  6158.  
  6159.  
  6160. &lt;ul&gt;
  6161. &lt;li&gt;Just setting up the code coverage tools and looking at the results uncovered several memory leaks. (A memory leak is where memory is allocated for a task and not released when it is no longer needed.) We fixed these leaks and some more that existed in our test code. We now have very low levels of memory leaking in our test runs, so if we make a mistake it is easy to spot.&lt;/li&gt;
  6162.  
  6163.  
  6164.  
  6165. &lt;li&gt;Code coverage data can also point to code that is no longer used. We’ve removed some big chunks of this dead code, which means we’re not wasting time maintaining it.&lt;/li&gt;
  6166. &lt;/ul&gt;
  6167.  
  6168.  
  6169.  
  6170. &lt;h3&gt;Mozmill no more&lt;/h3&gt;
  6171.  
  6172.  
  6173.  
  6174. &lt;p&gt;Towards the end of last year we finally retired an old test suite known as Mozmill. Those tests were partially migrated to a different test suite (Mochitest) about four years ago, and things were mostly working fine so it wasn’t a priority to finish. These tests now do things in a more conventional way instead of relying on a bunch of clever but weird tricks.&lt;/p&gt;
  6175.  
  6176.  
  6177.  
  6178. &lt;h3&gt;How much of the code is test code?&lt;/h3&gt;
  6179.  
  6180.  
  6181.  
  6182. &lt;p&gt;About 27%. This is a very rough estimate based on the files in our code repository (minus some third-party directories) and whether they are inside a directory with “test” in the name or not. That’s risen from about 19% in the last five years.&lt;/p&gt;
  6183.  
  6184.  
  6185.  
  6186. &lt;p&gt;There is no particular goal in mind, but I can imagine a future where there is as much test code as non-test code. If we achieve that, Thunderbird will be in a very healthy place.&lt;/p&gt;
  6187.  
  6188.  
  6189.  
  6190. &lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2024/03/Screenshot-2024-03-25-at-9.14.08 AM.png&quot;&gt;&lt;img alt=&quot;A stacked area chart showing the estimated lines of test code (in red) and non-test code (in blue) over time, from January 2019 to January 2024. The chart indicates both types of code increase over this period.&quot; class=&quot;wp-image-1621&quot; height=&quot;974&quot; src=&quot;https://blog.thunderbird.net/files/2024/03/Screenshot-2024-03-25-at-9.14.08 AM.png&quot; width=&quot;1660&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  6191.  
  6192.  
  6193.  
  6194. &lt;p&gt;Looking ahead, we’ll be asking contributors to add tests to their patches more often. This obviously depends on the circumstance. But if you’re adding or fixing something, that is the best time to ensure it continues to work in the future. As always, feel free to reach out if you need help writing or running tests, either via Matrix or Topicbox mailing lists:&lt;/p&gt;
  6195.  
  6196.  
  6197.  
  6198. &lt;ul&gt;
  6199. &lt;li&gt;Matrix: You can join our development chat channel at &lt;a href=&quot;https://matrix.to/#/#maildev:mozilla.org?via=mozilla.org&amp;amp;via=matrix.org&amp;amp;via=trancart.eu&amp;amp;web-instance%5Belement.io%5D=chat.mozilla.org&quot;&gt;#maildev:mozilla.org&lt;/a&gt;&lt;/li&gt;
  6200.  
  6201.  
  6202.  
  6203. &lt;li&gt;Topicbox mailing list: The &lt;a href=&quot;https://thunderbird.topicbox.com/groups/developers&quot;&gt;Thunderbird Developers list&lt;/a&gt; a good place to raise questions about Thunderbird development.&lt;/li&gt;
  6204. &lt;/ul&gt;
  6205.  
  6206.  
  6207.  
  6208. &lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;Geoff Lankow, Staff Engineer&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
  6209. &lt;p&gt;The post &lt;a href=&quot;https://blog.thunderbird.net/2024/04/automated-testing-how-we-catch-thunderbird-bugs-before-you-do/&quot;&gt;Automated Testing: How We Catch Thunderbird Bugs Before You Do&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;</description>
  6210. <pubDate>Tue, 09 Apr 2024 17:03:36 +0000</pubDate>
  6211. <dc:creator>Geoff Lankow</dc:creator>
  6212. </item>
  6213. <item>
  6214. <title>Support.Mozilla.Org: Keeping you in the loop: What’s new in our Knowledge Base?</title>
  6215. <guid isPermaLink="false">https://blog.mozilla.org/sumo/?p=4105</guid>
  6216. <link>https://blog.mozilla.org/sumo/2024/04/09/keeping-you-in-the-loop-whats-new-in-our-knowledge-base/</link>
  6217. <description>&lt;p&gt;Hello, SUMO community!&lt;/p&gt;
  6218. &lt;p&gt;We’re setting the stage for something big: a revamp of our style guide designed to make our support content not just user-friendly, but user-delightful. To get a clearer picture of the SUMO user experience, we enlisted the help of an external agency, embarking on a research project designed to peel back the layers of how users interact with our platform. The results were quite revealing. Many users, it turns out, find themselves overwhelmed by the vast amount of information available, often feeling confused and struggling to pinpoint the exact answers they’re searching for. To address this, we’re rolling out targeted improvements focused enhancements to our style guides and contributor resources, aiming to refine how we organize, categorize, and present our support content in SUMO for a smoother, more intuitive user journey.&lt;/p&gt;
  6219. &lt;p&gt;Have questions or feedback? Drop us a message in this &lt;a href=&quot;https://support.mozilla.org/en-US/forums/contributors/716916?last=87365&quot;&gt;SUMO forum thread&lt;/a&gt;.&lt;/p&gt;
  6220. &lt;p&gt;&lt;b&gt;Refreshing the content taxonomy&lt;/b&gt;&lt;/p&gt;
  6221. &lt;p&gt;A key takeaway from the research was the users’ difficulty in navigating our content categories. This prompted us to rethink our approach to organizing support content, aiming for a better alignment with user needs and industry best practices. This project is in full swing, and we’ll be ready to share more details with you shortly.&lt;/p&gt;
  6222. &lt;p&gt;&lt;b&gt;Auditing the Firefox content&lt;/b&gt;&lt;/p&gt;
  6223. &lt;p&gt;In our effort to align our content with user needs, we’ve initiated a comprehensive audit of all Firefox support articles. This exhaustive review aims to identify areas where we can reclassify content, eliminate outdated information, and consolidate similar topics. Our goal is to ensure that every piece of information in the KB is relevant, easy to understand, and directly beneficial to our users.&lt;/p&gt;
  6224. &lt;p&gt;We’re gearing up to share how you can contribute to this exciting initiative. Mark your calendars for the &lt;a href=&quot;https://wiki.mozilla.org/Support:Community_Calls&quot;&gt;SUMO Community Meeting&lt;/a&gt; on Wednesday, April 10, 2024, where we’ll unveil more about this project.&lt;/p&gt;
  6225. &lt;p&gt;&lt;b&gt;Updating the article types&lt;/b&gt;&lt;/p&gt;
  6226. &lt;p&gt;Using consistent content types for our knowledge base articles has many benefits including ease of navigation and improved clarity and organization, in addition to helping us create content more effectively. We are transitioning to categorizing external knowledge base articles into four types, each serving a specific purpose:&lt;/p&gt;
  6227. &lt;ul&gt;
  6228. &lt;li&gt;&lt;b&gt;About&lt;/b&gt;: These articles address “What is…” questions, providing essential information to help readers understand a topic.&lt;/li&gt;
  6229. &lt;li&gt;&lt;b&gt;How-to&lt;/b&gt;: These articles focus on answering “How to…?” questions, guiding readers through the steps required to achieve a specific goal or procedure.&lt;/li&gt;
  6230. &lt;li&gt;&lt;b&gt;Troubleshooting&lt;/b&gt;: These articles assist users in identifying, diagnosing, and resolving common issues they may encounter with a product, service, or feature by addressing “How to…?” questions related to problem-solving.&lt;/li&gt;
  6231. &lt;li&gt;&lt;b&gt;FAQ&lt;/b&gt;: These articles contain concise answers to frequently asked questions on a single topic, which may not fit within other individual KB articles, providing a quick reference for common inquiries.&lt;/li&gt;
  6232. &lt;/ul&gt;
  6233. &lt;p&gt;Stay tuned for additional training and documentation on these article types!&lt;/p&gt;
  6234. &lt;p&gt;&lt;b&gt;Reducing cognitive load &lt;/b&gt;&lt;b&gt;&lt;br /&gt;
  6235. &lt;/b&gt;We believe finding information should not be akin to a mental obstacle course. Focused on minimizing cognitive load, we’ve outlined a series of strategies aimed at guiding users directly to the information they need, no fuss involved. Below are the key strategies we’re implementing:&lt;/p&gt;
  6236. &lt;ul&gt;
  6237. &lt;li&gt;&lt;b&gt;Straight to the point with inline images and icons&lt;/b&gt;: We’re transitioning from textual guidance to visual demonstrations. By embedding inline targeted UI captures and icons directly into the article flow, we aim to provide a more visual path for users, minimizing the need for mental translation of text into actions. But, hang on – we haven’t forgotten about making these changes work for everyone. For those using screen readers, we’re counting on you to help us ensure every image and icon comes with comprehensive alt text, making every visual accessible through sound. And on the localization front, your skills are more important than ever. We’re calling on you to assist in capturing and adding alt text to localized images, ensuring it’s accessible and resonant for every member of our global community. For details see &lt;a href=&quot;https://support.mozilla.org/en-US/kb/how-place-images-article#w_effective-use-of-inline-images&quot;&gt;Effective use of inline images&lt;/a&gt;.&lt;/li&gt;
  6238. &lt;li&gt;&lt;b&gt;Cleaner, more focused images with SUI (simplified user interfaces)&lt;/b&gt;: To make things even clearer, we’re simplifying our product’s UI in screenshots to just the essentials. This not only makes the images easier to follow but also means they’ll stay accurate longer, even if small UI changes happen. For more info, see &lt;a href=&quot;https://support.mozilla.org/en-US/kb/how-to-make-screenshots#w_simplifications&quot;&gt;Simplifications&lt;/a&gt;.&lt;/li&gt;
  6239. &lt;li&gt;&lt;b&gt;Streamlined steps with annotated screenshots&lt;/b&gt;: For tasks that necessitate two or more clicks or actions on a single screen, we’re shifting to a more intuitive approach: using screenshots marked with numbered annotations. This strategy will clear away the need for multiple, similar screenshots, making instructions easier to follow while minimizing scrolling.&lt;/li&gt;
  6240. &lt;/ul&gt;
  6241. &lt;p&gt;Keep an eye out for the updated style guides – they’re coming soon!&lt;/p&gt;
  6242. &lt;p&gt;&lt;b&gt;What this means for you&lt;/b&gt;&lt;/p&gt;
  6243. &lt;p&gt;Our updates will be rolling out from Q2 to Q4 2024, and we’re thrilled to have you on board as we bring these changes to life. The kickoff is just around the corner, so stay tuned for updates! Have thoughts to share or looking to contribute? We’re all ears. Engage with us directly on this &lt;a href=&quot;https://support.mozilla.org/en-US/forums/contributors/716916?last=87365&quot;&gt;SUMO forum thread&lt;/a&gt;. Your feedback and involvement are crucial as we progress together.&lt;/p&gt;
  6244. &lt;p&gt;&lt;b&gt;Thank you for making a difference!&lt;/b&gt;&lt;/p&gt;</description>
  6245. <pubDate>Tue, 09 Apr 2024 16:20:28 +0000</pubDate>
  6246. <dc:creator>Lucas Siebert</dc:creator>
  6247. </item>
  6248. <item>
  6249. <title>The Rust Programming Language Blog: Announcing Rust 1.77.2</title>
  6250. <guid isPermaLink="true">https://blog.rust-lang.org/2024/04/09/Rust-1.77.2.html</guid>
  6251. <link>https://blog.rust-lang.org/2024/04/09/Rust-1.77.2.html</link>
  6252. <description>&lt;p&gt;The Rust team has published a new point release of Rust, 1.77.2. Rust is a
  6253. programming language that is empowering everyone to build reliable and
  6254. efficient software.&lt;/p&gt;
  6255. &lt;p&gt;If you have a previous version of Rust installed via rustup, getting Rust
  6256. 1.77.2 is as easy as:&lt;/p&gt;
  6257. &lt;pre&gt;&lt;code&gt;rustup update stable
  6258. &lt;/code&gt;&lt;/pre&gt;
  6259. &lt;p&gt;If you don't have it already, you can &lt;a href=&quot;https://www.rust-lang.org/install.html&quot;&gt;get &lt;code&gt;rustup&lt;/code&gt;&lt;/a&gt; from the
  6260. appropriate page on our website.&lt;/p&gt;
  6261. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/04/09/Rust-1.77.2.html#whats-in-1772&quot; id=&quot;whats-in-1772&quot;&gt;&lt;/a&gt;What's in 1.77.2&lt;/h3&gt;
  6262. &lt;p&gt;This release includes a fix for &lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2024-24576&quot;&gt;CVE-2024-24576&lt;/a&gt;.&lt;/p&gt;
  6263. &lt;p&gt;Before this release, the Rust standard library did not properly escape
  6264. arguments when invoking batch files (with the &lt;code&gt;bat&lt;/code&gt; and &lt;code&gt;cmd&lt;/code&gt; extensions) on
  6265. Windows using the &lt;a href=&quot;https://doc.rust-lang.org/std/process/struct.Command.html&quot;&gt;&lt;code&gt;Command&lt;/code&gt;&lt;/a&gt; API. An attacker able to control the arguments
  6266. passed to the spawned process could execute arbitrary shell commands by
  6267. bypassing the escaping.&lt;/p&gt;
  6268. &lt;p&gt;This vulnerability is &lt;strong&gt;CRITICAL&lt;/strong&gt; if you are invoking batch files on Windows
  6269. with untrusted arguments. No other platform or use is affected.&lt;/p&gt;
  6270. &lt;p&gt;&lt;a href=&quot;https://blog.rust-lang.org/2024/04/09/cve-2024-24576.html&quot;&gt;You can learn more about the vulnerability in the dedicated
  6271. advisory.&lt;/a&gt;&lt;/p&gt;
  6272. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/04/09/Rust-1.77.2.html#contributors-to-1772&quot; id=&quot;contributors-to-1772&quot;&gt;&lt;/a&gt;Contributors to 1.77.2&lt;/h4&gt;
  6273. &lt;p&gt;Many people came together to create Rust 1.77.2. We couldn't have done it
  6274. without all of you. &lt;a href=&quot;https://thanks.rust-lang.org/rust/1.77.2/&quot;&gt;Thanks!&lt;/a&gt;&lt;/p&gt;</description>
  6275. <pubDate>Tue, 09 Apr 2024 00:00:02 +0000</pubDate>
  6276. <dc:creator>The Rust Security Response WG</dc:creator>
  6277. </item>
  6278. <item>
  6279. <title>The Rust Programming Language Blog: Changes to Rust's WASI targets</title>
  6280. <guid isPermaLink="true">https://blog.rust-lang.org/2024/04/09/updates-to-rusts-wasi-targets.html</guid>
  6281. <link>https://blog.rust-lang.org/2024/04/09/updates-to-rusts-wasi-targets.html</link>
  6282. <description>&lt;p&gt;&lt;a href=&quot;https://bytecodealliance.org/articles/WASI-0.2&quot;&gt;WASI 0.2 was recently
  6283. stabilized&lt;/a&gt;, and Rust has begun
  6284. implementing first-class support for it in the form of a dedicated new target.
  6285. Rust 1.78 will introduce new &lt;code&gt;wasm32-wasip1&lt;/code&gt; (tier 2) and &lt;code&gt;wasm32-wasip2&lt;/code&gt; (tier
  6286. 3) targets. &lt;code&gt;wasm32-wasip1&lt;/code&gt; is an effective rename of the existing &lt;code&gt;wasm32-wasi&lt;/code&gt;
  6287. target, freeing the target name up for an eventual WASI 1.0 release. &lt;strong&gt;Starting
  6288. Rust 1.78 (May 2nd, 2024), users of WASI 0.1 are encouraged to begin migrating
  6289. to the new &lt;code&gt;wasm32-wasip1&lt;/code&gt; target before the existing &lt;code&gt;wasm32-wasi&lt;/code&gt; target is
  6290. removed in Rust 1.84 (January 5th, 2025).&lt;/strong&gt;&lt;/p&gt;
  6291. &lt;p&gt;In this post we'll discuss the introduction of the new targets, the motivation
  6292. behind it, what that means for the existing WASI targets, and a detailed
  6293. schedule for these changes. This post is about the WASI targets only; the
  6294. existing &lt;code&gt;wasm32-unknown-unknown&lt;/code&gt; and &lt;code&gt;wasm32-unknown-emscripten&lt;/code&gt; targets are
  6295. unaffected by any changes in this post.&lt;/p&gt;
  6296. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/04/09/updates-to-rusts-wasi-targets.html#introducing-wasm32-wasip2&quot; id=&quot;introducing-wasm32-wasip2&quot;&gt;&lt;/a&gt;Introducing &lt;code&gt;wasm32-wasip2&lt;/code&gt;&lt;/h3&gt;
  6297. &lt;p&gt;After nearly five years of work the &lt;a href=&quot;https://wasi.dev&quot;&gt;WASI 0.2 specification&lt;/a&gt;
  6298. was recently stabilized. This work builds on &lt;a href=&quot;https://component-model.bytecodealliance.org&quot;&gt;WebAssembly
  6299. Components&lt;/a&gt; (think: strongly-typed
  6300. ABI for Wasm), providing standard interfaces for things like asynchronous IO,
  6301. networking, and HTTP. This will finally make it possible to write asynchronous
  6302. networked services on top of WASI, something which wasn't possible using WASI
  6303. 0.1.&lt;/p&gt;
  6304. &lt;p&gt;People interested in compiling Rust code to WASI 0.2 today are able to do so
  6305. using the &lt;a href=&quot;https://github.com/bytecodealliance/cargo-component&quot;&gt;cargo-component&lt;/a&gt;
  6306. tool. This tool is able to take WASI 0.1 binaries, and transform them to WASI 0.2
  6307. Components using a shim. It also provides native support for common cargo
  6308. commands such as &lt;code&gt;cargo build&lt;/code&gt;, &lt;code&gt;cargo test&lt;/code&gt;, and &lt;code&gt;cargo run&lt;/code&gt;. While it
  6309. introduces some inefficiencies because of the additional translation layer, in
  6310. practice this already works really well and people should be able to get
  6311. started with WASI 0.2 development.&lt;/p&gt;
  6312. &lt;p&gt;We're however keen to begin making that translation layer obsolete. And for
  6313. that reason we're happy to share that Rust has made its first steps towards
  6314. that with the introduction of the &lt;a href=&quot;https://doc.rust-lang.org/rustc/platform-support.html#tier-3&quot;&gt;tier
  6315. 3&lt;/a&gt; &lt;code&gt;wasm32-wasip2&lt;/code&gt;
  6316. target landing in Rust 1.78. &lt;strong&gt;This will initially miss a lot of expected&lt;/strong&gt;
  6317. &lt;strong&gt;features such as stdlib support, and we don't recommend people use this target&lt;/strong&gt;
  6318. &lt;strong&gt;quite yet.&lt;/strong&gt; But as we fill in those missing features over the coming months, we
  6319. aim to eventually meet the criteria to become a tier 2 target, at which
  6320. point the &lt;code&gt;wasm32-wasip2&lt;/code&gt; target would be considered ready for general use. This
  6321. work will happen through 2024, and we expect for this to land before the end of
  6322. the calendar year.&lt;/p&gt;
  6323. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/04/09/updates-to-rusts-wasi-targets.html#renaming-wasm32-wasi-to-wasm32-wasip1&quot; id=&quot;renaming-wasm32-wasi-to-wasm32-wasip1&quot;&gt;&lt;/a&gt;Renaming &lt;code&gt;wasm32-wasi&lt;/code&gt; to &lt;code&gt;wasm32-wasip1&lt;/code&gt;&lt;/h3&gt;
  6324. &lt;p&gt;The original name for what we now call WASI 0.1 was &quot;WebAssembly System
  6325. Interface, snapshot 1&quot;. Rust shipped support for this in 2019, and we did so
  6326. knowing the target would likely undergo significant changes in the future. With
  6327. the knowledge we have today though, we would not have chosen to introduce the
  6328. &quot;WASI, snapshot 1&quot; target as &lt;code&gt;wasm32-wasi&lt;/code&gt;. We should have instead chosen to add
  6329. some suffix to the initial target triple so that the eventual stable WASI 1.0
  6330. target can just be called &lt;code&gt;wasm32-wasi&lt;/code&gt;.&lt;/p&gt;
  6331. &lt;p&gt;In anticipation of both an eventual WASI 1.0 target, and to preserve consistency
  6332. between target names, we'll begin rolling out a name change to the existing WASI
  6333. 0.1 target. Starting in Rust 1.78 (May 2nd, 2024) a new &lt;code&gt;wasm32-wasip1&lt;/code&gt; target
  6334. will become available. Starting Rust 1.81 (September 5th, 2024) we will begin
  6335. warning existing users of &lt;code&gt;wasm32-wasi&lt;/code&gt; to migrate to &lt;code&gt;wasm32-wasip1&lt;/code&gt;. And
  6336. finally in Rust 1.84 (January 9th, 2025) the &lt;code&gt;wasm32-wasi&lt;/code&gt; target will no longer
  6337. be shipped on the stable release channel. This will provide an 8 month
  6338. transition period for projects to switch to the new target name when they update
  6339. their Rust toolchains.&lt;/p&gt;
  6340. &lt;p&gt;The name &lt;code&gt;wasip1&lt;/code&gt; can be read as either &quot;WASI (zero) point one&quot; or &quot;WASI preview
  6341. one&quot;. The official specification uses the &quot;preview&quot; moniker, however in most
  6342. communication the form &quot;WASI 0.1&quot; is now preferred. This target triple was
  6343. chosen because it not only maps to both terms, but also more closely resembles
  6344. the target terminology used in &lt;a href=&quot;https://go.dev/blog/wasi&quot;&gt;other programming
  6345. languages&lt;/a&gt;. This is something the WASI Preview 2
  6346. specification &lt;a href=&quot;https://github.com/WebAssembly/WASI/tree/f45e72e5294e990c23d548eea32fd35c80525fd6/preview2#introduction&quot;&gt;also makes note
  6347. of&lt;/a&gt;.&lt;/p&gt;
  6348. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/04/09/updates-to-rusts-wasi-targets.html#timeline&quot; id=&quot;timeline&quot;&gt;&lt;/a&gt;Timeline&lt;/h3&gt;
  6349. &lt;p&gt;This table provides the dates and cut-offs for the target rename from
  6350. &lt;code&gt;wasm32-wasi&lt;/code&gt; to &lt;code&gt;wasm32-wasip1&lt;/code&gt;. The dates in this table do not apply to the
  6351. newly-introduced &lt;code&gt;wasm32-wasi-preview1-threads&lt;/code&gt; target; this will be renamed to
  6352. &lt;code&gt;wasm32-wasip1-threads&lt;/code&gt; in Rust 1.78 without going through a transition period.
  6353. The tier 3 &lt;code&gt;wasm32-wasip2&lt;/code&gt; target will also be made available in Rust 1.78.&lt;/p&gt;
  6354. &lt;table&gt;
  6355. &lt;thead&gt;
  6356. &lt;tr&gt;
  6357. &lt;th&gt;date&lt;/th&gt;
  6358. &lt;th&gt;Rust Stable&lt;/th&gt;
  6359. &lt;th&gt;Rust Beta&lt;/th&gt;
  6360. &lt;th&gt;Rust Nightly&lt;/th&gt;
  6361. &lt;th&gt;Notes&lt;/th&gt;
  6362. &lt;/tr&gt;
  6363. &lt;/thead&gt;
  6364. &lt;tbody&gt;
  6365. &lt;tr&gt;
  6366. &lt;td&gt;2024-02-08&lt;/td&gt;
  6367. &lt;td&gt;1.76&lt;/td&gt;
  6368. &lt;td&gt;1.77&lt;/td&gt;
  6369. &lt;td&gt;1.78&lt;/td&gt;
  6370. &lt;td&gt;&lt;code&gt;wasm32-wasip1&lt;/code&gt; available on nightly&lt;/td&gt;
  6371. &lt;/tr&gt;
  6372. &lt;tr&gt;
  6373. &lt;td&gt;2024-03-21&lt;/td&gt;
  6374. &lt;td&gt;1.77&lt;/td&gt;
  6375. &lt;td&gt;1.78&lt;/td&gt;
  6376. &lt;td&gt;1.79&lt;/td&gt;
  6377. &lt;td&gt;&lt;code&gt;wasm32-wasip1&lt;/code&gt; available on beta&lt;/td&gt;
  6378. &lt;/tr&gt;
  6379. &lt;tr&gt;
  6380. &lt;td&gt;2024-05-02&lt;/td&gt;
  6381. &lt;td&gt;1.78&lt;/td&gt;
  6382. &lt;td&gt;1.79&lt;/td&gt;
  6383. &lt;td&gt;1.80&lt;/td&gt;
  6384. &lt;td&gt;&lt;code&gt;wasm32-wasip1&lt;/code&gt; available on stable&lt;/td&gt;
  6385. &lt;/tr&gt;
  6386. &lt;tr&gt;
  6387. &lt;td&gt;2024-06-13&lt;/td&gt;
  6388. &lt;td&gt;1.79&lt;/td&gt;
  6389. &lt;td&gt;1.80&lt;/td&gt;
  6390. &lt;td&gt;1.81&lt;/td&gt;
  6391. &lt;td&gt;warn if &lt;code&gt;wasm32-wasi&lt;/code&gt; is used on nightly&lt;/td&gt;
  6392. &lt;/tr&gt;
  6393. &lt;tr&gt;
  6394. &lt;td&gt;2024-07-25&lt;/td&gt;
  6395. &lt;td&gt;1.80&lt;/td&gt;
  6396. &lt;td&gt;1.81&lt;/td&gt;
  6397. &lt;td&gt;1.82&lt;/td&gt;
  6398. &lt;td&gt;warn if &lt;code&gt;wasm32-wasi&lt;/code&gt; is used on beta&lt;/td&gt;
  6399. &lt;/tr&gt;
  6400. &lt;tr&gt;
  6401. &lt;td&gt;2024-09-05&lt;/td&gt;
  6402. &lt;td&gt;1.81&lt;/td&gt;
  6403. &lt;td&gt;1.82&lt;/td&gt;
  6404. &lt;td&gt;1.83&lt;/td&gt;
  6405. &lt;td&gt;warn if &lt;code&gt;wasm32-wasi&lt;/code&gt; is used on stable&lt;/td&gt;
  6406. &lt;/tr&gt;
  6407. &lt;tr&gt;
  6408. &lt;td&gt;2024-10-17&lt;/td&gt;
  6409. &lt;td&gt;1.82&lt;/td&gt;
  6410. &lt;td&gt;1.83&lt;/td&gt;
  6411. &lt;td&gt;1.84&lt;/td&gt;
  6412. &lt;td&gt;&lt;code&gt;wasm32-wasi&lt;/code&gt; unavailable on nightly&lt;/td&gt;
  6413. &lt;/tr&gt;
  6414. &lt;tr&gt;
  6415. &lt;td&gt;2024-11-28&lt;/td&gt;
  6416. &lt;td&gt;1.83&lt;/td&gt;
  6417. &lt;td&gt;1.84&lt;/td&gt;
  6418. &lt;td&gt;1.85&lt;/td&gt;
  6419. &lt;td&gt;&lt;code&gt;wasm32-wasi&lt;/code&gt; unavailable on beta&lt;/td&gt;
  6420. &lt;/tr&gt;
  6421. &lt;tr&gt;
  6422. &lt;td&gt;2025-01-09&lt;/td&gt;
  6423. &lt;td&gt;1.84&lt;/td&gt;
  6424. &lt;td&gt;1.85&lt;/td&gt;
  6425. &lt;td&gt;1.86&lt;/td&gt;
  6426. &lt;td&gt;&lt;code&gt;wasm32-wasi&lt;/code&gt; unavailable on stable&lt;/td&gt;
  6427. &lt;/tr&gt;
  6428. &lt;/tbody&gt;
  6429. &lt;/table&gt;
  6430. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/04/09/updates-to-rusts-wasi-targets.html#conclusion&quot; id=&quot;conclusion&quot;&gt;&lt;/a&gt;Conclusion&lt;/h3&gt;
  6431. &lt;p&gt;In this post we've discussed the upcoming updates to Rust's WASI targets. Come
  6432. Rust 1.78 the &lt;code&gt;wasm32-wasip1&lt;/code&gt; (tier 2) and &lt;code&gt;wasm32-wasip2&lt;/code&gt; (tier 3) targets will
  6433. be added. In Rust 1.81 we will begin warning if &lt;code&gt;wasm32-wasi&lt;/code&gt; is being used. And
  6434. in Rust 1.84, the existing &lt;code&gt;wasm32-wasi&lt;/code&gt; target will be removed. This will free
  6435. up &lt;code&gt;wasm32-wasi&lt;/code&gt; to eventually be used for a WASI 1.0 target. Users will have 8
  6436. months to switch to the new target name when they update their Rust toolchains.&lt;/p&gt;
  6437. &lt;p&gt;The &lt;code&gt;wasm32-wasip2&lt;/code&gt; target marks the start of native support for WASI 0.2. In
  6438. order to target it today from Rust, people are encouraged to use
  6439. &lt;a href=&quot;https://github.com/bytecodealliance/cargo-component&quot;&gt;cargo-component&lt;/a&gt; tool
  6440. instead. The plan is to eventually graduate &lt;code&gt;wasm32-wasip2&lt;/code&gt; to a tier-2 target,
  6441. at which point &lt;code&gt;cargo-component&lt;/code&gt; will be upgraded to support it natively instead.&lt;/p&gt;
  6442. &lt;p&gt;With WASI 0.2 finally stable, it's an exciting time for WebAssembly development.
  6443. We're happy for Rust to begin implementing native support for WASI 0.2, and
  6444. we're excited about what this will enable people to build.&lt;/p&gt;</description>
  6445. <pubDate>Tue, 09 Apr 2024 00:00:01 +0000</pubDate>
  6446. <dc:creator>Yosh Wuyts</dc:creator>
  6447. </item>
  6448. <item>
  6449. <title>Tiger Oakes: ResizeObserver is a safe place to read scrollWidth/clientWidth</title>
  6450. <guid isPermaLink="true">https://tigeroakes.com/posts/resize-observer-avoid-forced-sync-layout/</guid>
  6451. <link>https://tigeroakes.com/posts/resize-observer-avoid-forced-sync-layout/</link>
  6452. <description>Avoid forced synchronous layout and safely read an element's size.</description>
  6453. <pubDate>Tue, 09 Apr 2024 00:00:00 +0000</pubDate>
  6454. </item>
  6455. <item>
  6456. <title>The Rust Programming Language Blog: Security advisory for the standard library (CVE-2024-24576)</title>
  6457. <guid isPermaLink="true">https://blog.rust-lang.org/2024/04/09/cve-2024-24576.html</guid>
  6458. <link>https://blog.rust-lang.org/2024/04/09/cve-2024-24576.html</link>
  6459. <description>&lt;p&gt;The Rust Security Response WG was notified that the Rust standard library did
  6460. not properly escape arguments when invoking batch files (with the &lt;code&gt;bat&lt;/code&gt; and
  6461. &lt;code&gt;cmd&lt;/code&gt; extensions) on Windows using the &lt;a href=&quot;https://doc.rust-lang.org/std/process/struct.Command.html&quot;&gt;&lt;code&gt;Command&lt;/code&gt;&lt;/a&gt; API. An attacker able to
  6462. control the arguments passed to the spawned process could execute arbitrary
  6463. shell commands by bypassing the escaping.&lt;/p&gt;
  6464. &lt;p&gt;The severity of this vulnerability is &lt;strong&gt;critical&lt;/strong&gt; if you are invoking batch
  6465. files on Windows with untrusted arguments. No other platform or use is
  6466. affected.&lt;/p&gt;
  6467. &lt;p&gt;This vulnerability is identified by CVE-2024-24576.&lt;/p&gt;
  6468. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/04/09/cve-2024-24576.html#overview&quot; id=&quot;overview&quot;&gt;&lt;/a&gt;Overview&lt;/h3&gt;
  6469. &lt;p&gt;The &lt;a href=&quot;https://doc.rust-lang.org/std/process/struct.Command.html#method.arg&quot;&gt;&lt;code&gt;Command::arg&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://doc.rust-lang.org/std/process/struct.Command.html#method.args&quot;&gt;&lt;code&gt;Command::args&lt;/code&gt;&lt;/a&gt; APIs state in their
  6470. documentation that the arguments will be passed to the spawned process as-is,
  6471. regardless of the content of the arguments, and will not be evaluated by a
  6472. shell. This means it should be safe to pass untrusted input as an argument.&lt;/p&gt;
  6473. &lt;p&gt;On Windows, the implementation of this is more complex than other platforms,
  6474. because the Windows API only provides a single string containing all the
  6475. arguments to the spawned process, and it's up to the spawned process to split
  6476. them. Most programs use the standard C run-time argv, which in practice results
  6477. in a mostly consistent way arguments are splitted.&lt;/p&gt;
  6478. &lt;p&gt;One exception though is &lt;code&gt;cmd.exe&lt;/code&gt; (used among other things to execute batch
  6479. files), which has its own argument splitting logic. That forces the standard
  6480. library to implement custom escaping for arguments passed to batch files.
  6481. Unfortunately it was reported that our escaping logic was not thorough enough,
  6482. and it was possible to pass malicious arguments that would result in arbitrary
  6483. shell execution.&lt;/p&gt;
  6484. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/04/09/cve-2024-24576.html#mitigations&quot; id=&quot;mitigations&quot;&gt;&lt;/a&gt;Mitigations&lt;/h3&gt;
  6485. &lt;p&gt;Due to the complexity of &lt;code&gt;cmd.exe&lt;/code&gt;, we didn't identify a solution that would
  6486. correctly escape arguments in all cases. To maintain our API guarantees, we
  6487. improved the robustness of the escaping code, and changed the &lt;code&gt;Command&lt;/code&gt; API to
  6488. return an &lt;a href=&quot;https://doc.rust-lang.org/std/io/enum.ErrorKind.html#variant.InvalidInput&quot;&gt;&lt;code&gt;InvalidInput&lt;/code&gt;&lt;/a&gt; error when it cannot safely escape an argument.
  6489. This error will be emitted when spawning the process.&lt;/p&gt;
  6490. &lt;p&gt;The fix will be included in Rust 1.77.2, to be released later today.&lt;/p&gt;
  6491. &lt;p&gt;If you implement the escaping yourself or only handle trusted inputs, on
  6492. Windows you can also use the &lt;a href=&quot;https://doc.rust-lang.org/std/os/windows/process/trait.CommandExt.html#tymethod.raw_arg&quot;&gt;&lt;code&gt;CommandExt::raw_arg&lt;/code&gt;&lt;/a&gt; method to bypass the
  6493. standard library's escaping logic.&lt;/p&gt;
  6494. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/04/09/cve-2024-24576.html#affected-versions&quot; id=&quot;affected-versions&quot;&gt;&lt;/a&gt;Affected Versions&lt;/h3&gt;
  6495. &lt;p&gt;All Rust versions before 1.77.2 on Windows are affected, if your code or one of
  6496. your dependencies executes batch files with untrusted arguments. Other
  6497. platforms or other uses on Windows are not affected.&lt;/p&gt;
  6498. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/04/09/cve-2024-24576.html#acknowledgments&quot; id=&quot;acknowledgments&quot;&gt;&lt;/a&gt;Acknowledgments&lt;/h3&gt;
  6499. &lt;p&gt;We want to thank RyotaK for responsibly disclosing this to us according to the
  6500. &lt;a href=&quot;https://www.rust-lang.org/policies/security&quot;&gt;Rust security policy&lt;/a&gt;, and Simon Sawicki (Grub4K) for identifying some of
  6501. the escaping rules we adopted in our fix.&lt;/p&gt;
  6502. &lt;p&gt;We also want to thank the members of the Rust project who helped us disclose
  6503. the vulnerability: Chris Denton for developing the fix; Mara Bos for reviewing
  6504. the fix; Pietro Albini for writing this advisory; Pietro Albini, Manish
  6505. Goregaokar and Josh Stone for coordinating this disclosure; Amanieu d'Antras
  6506. for advising during the disclosure.&lt;/p&gt;</description>
  6507. <pubDate>Tue, 09 Apr 2024 00:00:00 +0000</pubDate>
  6508. <dc:creator>The Rust Security Response WG</dc:creator>
  6509. </item>
  6510. <item>
  6511. <title>Mozilla Open Policy &amp; Advocacy Blog: Mozilla provides feedback to ACM’s DSA Guidelines</title>
  6512. <guid isPermaLink="false">https://blog.mozilla.org/netpolicy/?p=2358</guid>
  6513. <link>https://blog.mozilla.org/netpolicy/2024/04/08/mozilla-provides-feedback-to-acms-dsa-guidelines/</link>
  6514. <description>&lt;p&gt;The EU’s Digital Services Act (DSA) has taken effect, ushering in a new era of accountability, transparency, and responsibility for digital platforms. Mozilla has actively supported the DSA –  and its aim to build a safer digital ecosystem – since the legislation was first proposed, and continues to contribute to conversations about how to implement it effectively.&lt;/p&gt;
  6515. &lt;p&gt;Technology companies that offer services in the EU must “designate a sufficiently mandated legal representative in the Union and provide information relating to their legal representatives to the relevant authorities,” and each EU country must appoint a Digital Services Coordinator to interpret and enforce the DSA.&lt;/p&gt;
  6516. &lt;p&gt;In January of this year the Authority for Consumers and Markets in the Netherlands (ACM) &lt;a href=&quot;https://www.acm.nl/system/files/documents/acm-publishes-for-consultation-the-draft-guidelines-regarding-the-dsa-for-providers-of-online-services.pdf&quot;&gt;published draft guidelines&lt;/a&gt; for its interpretation and enforcement of the DSA. Mozilla recently provided &lt;a href=&quot;https://blog.mozilla.org/netpolicy/files/2024/04/Mozillas-Feedback-re-ACM-DSA-Guidelines-Consultation-Jan-2024.pdf&quot;&gt;feedback&lt;/a&gt;, focused largely on areas where further detail or clarification would be helpful, as well as discussing challenges small and mid sized platforms may face during implementation.&lt;/p&gt;
  6517. &lt;p&gt;Specifically, Mozilla recommended the following:&lt;/p&gt;
  6518. &lt;ul&gt;
  6519. &lt;li&gt;&lt;b&gt;Clarification of “ancillary services.”  &lt;/b&gt;&lt;/li&gt;
  6520. &lt;/ul&gt;
  6521. &lt;p&gt;The ACM’s draft guidelines note that Recital 13 of the DSA exempts “ancillary services” where, as with the comment section of a newspaper’s website, “the possibility of posting comments… is only an incidental characteristic of the main service.”  Mozilla recommends that this “ancillary services” exception also expressly include services for tech support and product feedback, and similar platforms that exist only to support a primary product that is not subject to DSA. Such forums are clearly ancillary to the main products, as their purpose is to help address bugs and other product-specific issues within those products.&lt;/p&gt;
  6522. &lt;ul&gt;
  6523. &lt;li&gt;&lt;b&gt;Refining the definition of “traders.” &lt;/b&gt;&lt;/li&gt;
  6524. &lt;/ul&gt;
  6525. &lt;p&gt;The DSA imposes additional requirements on platforms that host B2C online marketplaces, by requiring that the platforms track and store data about “traders” that operate on their platform.  DSA Recital 23, which presumes that traders in an online marketplace are offering goods or services for a price, highlights that this provision is intended to cover those platforms that facilitate online commerce. Mozilla recommends that the guidelines make this intent clear, by expressly stating that: (i) “traders” do not include those providing free online services, and (ii) platforms which do not incur profits or facilitate the exchange of money are not B2C online marketplaces.&lt;/p&gt;
  6526. &lt;ul&gt;
  6527. &lt;li&gt;&lt;b&gt;Allowing platforms the flexibility to address spam.&lt;/b&gt;&lt;/li&gt;
  6528. &lt;/ul&gt;
  6529. &lt;p&gt;The DSA’s obligations do not apply when platforms act to address “deceptive, high-volume commercial content.” For effective implementation of the guidelines, we believe there needs to be more clarification of how such content is defined. The ACM guidance indicates that the exception applies where someone intentionally manipulates a service through the use of bots, fake accounts, or deceptive practices. Mozilla recommends that the guidance be supplemented to ensure that platforms have the ability to address evolving threats: including clarifying that the references to bots and fake accounts are non-exhaustive examples and not intended to further constrain the spam exception, and establishing a plan to periodically update the guidance to address changing circumstances and developing technologies.&lt;/p&gt;
  6530. &lt;ul&gt;
  6531. &lt;li&gt;&lt;b&gt;Clarifying the Statement of Reasons requirement.&lt;/b&gt;&lt;/li&gt;
  6532. &lt;/ul&gt;
  6533. &lt;p&gt;Both the DSA itself and the ACM guidance require platforms to provide a statement of reasons whenever they moderate content or restrict a user account, explaining the legal or contractual provision on which their action was based. Mozilla asked that ACM provide additional details on what such statements should contain; this would provide greater clarity and standardization for platforms and ensure that moderation (particularly of illegal content) remains workable at scale.&lt;/p&gt;
  6534. &lt;ul&gt;
  6535. &lt;li&gt;&lt;b&gt;Allowing platforms flexibility on suspensions.&lt;/b&gt;&lt;/li&gt;
  6536. &lt;/ul&gt;
  6537. &lt;p&gt;The ACM guidance allows a platform to permanently suspend users for “manifestly illegal content related to serious crimes.”  However, it requires that a platform always issue a warning, before suspending a user. Mozilla recommends that the ACM expressly confirm platforms have the right to suspend users for violating their Terms of Service, even if their activity is not illegal.  Mozilla also recommends that the warning requirement be clarified, and reduced in cases where having to warn a user might prevent platforms from responding to serious offenses in a timely manner.&lt;/p&gt;
  6538. &lt;p&gt;As a longtime advocate for the DSA and for platform accountability, Mozilla is enthusiastic about the legislation’s potential to create a safer Internet ecosystem for all. Our comments to ACM, and our ongoing work on this subject, aims to further that goal, without overly burdening small and mid-size platforms.  We look forward to working with the ACM and other European regulators in the coming months, as this legislation continues to take shape.&lt;/p&gt;
  6539. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/netpolicy/2024/04/08/mozilla-provides-feedback-to-acms-dsa-guidelines/&quot;&gt;Mozilla provides feedback to ACM’s DSA Guidelines&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;</description>
  6540. <pubDate>Mon, 08 Apr 2024 13:14:00 +0000</pubDate>
  6541. <dc:creator>Ashley Roybal-Reid</dc:creator>
  6542. </item>
  6543. <item>
  6544. <title>Mozilla Thunderbird: Thunderbird Time Machine: Was Thunderbird 3.0 Worth The Wait?</title>
  6545. <guid isPermaLink="false">https://blog.thunderbird.net/?p=1626</guid>
  6546. <link>https://blog.thunderbird.net/2024/04/thunderbird-time-machine-thunderbird-3-0/</link>
  6547. <description>&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;attachment-640x360 size-640x360 wp-post-image&quot; height=&quot;321&quot; src=&quot;https://blog.thunderbird.net/files/2024/04/TB-3.0.jpg&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
  6548. &lt;div class=&quot;wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex&quot;&gt;
  6549. &lt;div class=&quot;wp-block-button has-custom-font-size has-small-font-size&quot;&gt;&lt;a class=&quot;wp-block-button__link has-black-color has-white-background-color has-text-color has-background wp-element-button&quot; href=&quot;https://translate.google.com/translate?js=n&amp;amp;sl=auto&amp;amp;tl=de&amp;amp;u=https://blog.thunderbird.net/2024/04/thunderbird-time-machine-thunderbird-3-0-title-tbd/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Auf Deutsch übersetzen&lt;/a&gt;&lt;/div&gt;
  6550.  
  6551.  
  6552.  
  6553. &lt;div class=&quot;wp-block-button has-custom-font-size has-small-font-size&quot;&gt;&lt;a class=&quot;wp-block-button__link has-black-color has-white-background-color has-text-color has-background wp-element-button&quot; href=&quot;https://translate.google.com/translate?js=n&amp;amp;sl=auto&amp;amp;tl=fr&amp;amp;u=https://blog.thunderbird.net/2024/04/thunderbird-time-machine-thunderbird-3-0-title-tbd/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Traduire en français&lt;/a&gt;&lt;/div&gt;
  6554.  
  6555.  
  6556.  
  6557. &lt;div class=&quot;wp-block-button has-custom-font-size has-small-font-size&quot;&gt;&lt;a class=&quot;wp-block-button__link has-black-color has-white-background-color has-text-color has-background wp-element-button&quot; href=&quot;https://translate.google.com/translate?js=n&amp;amp;sl=auto&amp;amp;tl=ja&amp;amp;u=https://blog.thunderbird.net/2024/04/thunderbird-time-machine-thunderbird-3-0-title-tbd/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;日本語に翻訳&lt;/a&gt;&lt;/div&gt;
  6558. &lt;/div&gt;
  6559.  
  6560.  
  6561.  
  6562. &lt;p&gt;Let’s step back into the &lt;a href=&quot;https://blog.thunderbird.net/category/thunderbird/thunderbird-time-machine/&quot;&gt;Thunderbird Time Machine&lt;/a&gt; and teleport ourselves back to December 2009. If you were on the bleeding edge, maybe you were upgrading your computer to the newly released Windows 7 (or checking out Ubuntu 9.10 “Karmic Koala”.) Perhaps you were pouring all your free time into Valve’s ridiculously fun team-based survival shooter &lt;em&gt;Left 4 Dead 2&lt;/em&gt;. And maybe, just maybe, you were eagerly anticipating installing &lt;a href=&quot;https://website-archive.mozilla.org/www.mozilla.org/thunderbird_releasenotes/en-us/thunderbird/3.0/releasenotes/&quot;&gt;Thunderbird 3.0&lt;/a&gt; — especially since it had been a lengthy two years since Thunderbird 2.0 had launched.&lt;/p&gt;
  6563.  
  6564.  
  6565.  
  6566. &lt;p&gt;What happened during those two years? The Thunderbird developer community — and Mozilla Messaging — clearly stayed busy and productive. Thunderbird 3.0 introduced several &lt;a href=&quot;https://website-archive.mozilla.org/www.mozilla.org/thunderbird_releasenotes/en-us/thunderbird/3.0/releasenotes/&quot;&gt;new feature milestones&lt;/a&gt;!&lt;/p&gt;
  6567.  
  6568.  
  6569.  
  6570. &lt;h3 class=&quot;wp-block-heading&quot;&gt;1) The Email Account Wizard&lt;/h3&gt;
  6571.  
  6572.  
  6573.  
  6574. &lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2024/03/TB-3.0-account-discovery.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1627&quot; height=&quot;464&quot; src=&quot;https://blog.thunderbird.net/files/2024/03/TB-3.0-account-discovery.png&quot; width=&quot;843&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  6575.  
  6576.  
  6577.  
  6578. &lt;p&gt;We take it for granted now, but in the 2000s, adding an account to an email client wasn’t remotely simple. Traditionally you needed to know your IMAP/POP3 and SMTP server URLs, port numbers, and authentication settings. When Thunderbird 3.0 launched, all that was required was your username and password for most mainstream email service providers like Yahoo, Hotmail, or Gmail. Thunderbird went out and detected the rest of the settings for you. Neat!&lt;/p&gt;
  6579.  
  6580.  
  6581.  
  6582. &lt;h3 class=&quot;wp-block-heading&quot;&gt;2) A New Tabbed Interface&lt;/h3&gt;
  6583.  
  6584.  
  6585.  
  6586. &lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2024/03/TB3-Main-2-1.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1636&quot; height=&quot;1462&quot; src=&quot;https://blog.thunderbird.net/files/2024/03/TB3-Main-2-1.png&quot; width=&quot;2876&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  6587.  
  6588.  
  6589.  
  6590. &lt;p&gt;With Firefox at its core, Thunderbird followed in the footsteps of most web browsers by offering a tabbed interface. Imagine! Being able to quickly tab between various searches and emails without navigating a chaotic mess of separate windows!&lt;/p&gt;
  6591.  
  6592.  
  6593.  
  6594. &lt;h3 class=&quot;wp-block-heading&quot;&gt;3) A New Add-on Manager&lt;/h3&gt;
  6595.  
  6596.  
  6597.  
  6598. &lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2024/03/image.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1629&quot; height=&quot;408&quot; src=&quot;https://blog.thunderbird.net/files/2024/03/image.png&quot; width=&quot;548&quot; /&gt;&lt;/a&gt;&amp;lt;figcaption class=&quot;wp-element-caption&quot;&amp;gt;&lt;em&gt;Screenshot from HowToGeek’s &lt;a href=&quot;https://www.howtogeek.com/7525/our-hands-on-look-at-mozilla-thunderbird-3.0/&quot;&gt;Thunderbird 3.0 review&lt;/a&gt;.&lt;/em&gt;&amp;lt;/figcaption&amp;gt;&lt;/figure&gt;
  6599.  
  6600.  
  6601.  
  6602. &lt;p&gt;Speaking of Firefox, Thunderbird quickly adopted the same kind of Add-on Manager that Firefox had recently integrated. No need to fire up a browser to search for useful extensions to Thunderbird — now you could search and install new functionality from right inside Thunderbird itself.&lt;/p&gt;
  6603.  
  6604.  
  6605.  
  6606. &lt;h3 class=&quot;wp-block-heading&quot;&gt;4) Advanced Search Options&lt;/h3&gt;
  6607.  
  6608.  
  6609.  
  6610. &lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2024/03/advanced-search-3.0-1.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1634&quot; height=&quot;1115&quot; src=&quot;https://blog.thunderbird.net/files/2024/03/advanced-search-3.0-1.png&quot; width=&quot;1501&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  6611.  
  6612.  
  6613.  
  6614. &lt;p&gt;Searching your emails got a massive boost in Thunderbird 3.0. Advanced filtering tools means you could filter your results by sender, attachments, people, folders, and more. A shiny new timeline view was also introduced, letting you jump directly to a certain date’s results.&lt;/p&gt;
  6615.  
  6616.  
  6617.  
  6618. &lt;h3 class=&quot;wp-block-heading&quot;&gt;5) The Migration Assistant&lt;/h3&gt;
  6619.  
  6620.  
  6621.  
  6622. &lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2024/03/TB-3.0-Migration-Assistant-2.gif&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1632&quot; height=&quot;954&quot; src=&quot;https://blog.thunderbird.net/files/2024/03/TB-3.0-Migration-Assistant-2.gif&quot; width=&quot;960&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  6623.  
  6624.  
  6625.  
  6626. &lt;p&gt;Tying this all together was a simple but wonderful migration assistant. It served as a way to introduce users to certain new features (like per-account IMAP synchronization), and visually toggle them on or off (useful for displaying the revised Message Toolbar and giving users a choice of where to enjoy it). To me, this particular addition felt ahead of its time. We’ve been discussing the idea of re-introducing it in a future Thunderbird release, but one of the steep hurdles to doing so now is localization. If it’s something you’d like to see, let us know in the comments.&lt;/p&gt;
  6627.  
  6628.  
  6629.  
  6630. &lt;h3 class=&quot;wp-block-heading&quot;&gt;Try It Out For Yourself&lt;/h3&gt;
  6631.  
  6632.  
  6633.  
  6634. &lt;p&gt;If you want to personally step into the Thunderbird Time Machine, every version ever released for Windows, Linux, and macOS is available &lt;a href=&quot;https://archive.mozilla.org/pub/thunderbird/releases/&quot;&gt;in this archive&lt;/a&gt;. I ran mine inside of a Windows 7 virtual machine, since my native Linux install complained about missing libraries when trying to get Thunderbird 3.0 running.&lt;/p&gt;
  6635.  
  6636.  
  6637.  
  6638. &lt;p&gt;Regardless if you’re a new Thunderbird user or a veteran who’s been with us &lt;a href=&quot;https://blog.thunderbird.net/2022/07/thunderbird-time-machine-2003-a-look-back-at-thunderbird-0-1/&quot;&gt;since 2003&lt;/a&gt;, thanks for being on the journey with us!&lt;/p&gt;
  6639.  
  6640.  
  6641.  
  6642. &lt;h3 class=&quot;wp-block-heading&quot;&gt;Previous Time Machine Destinations: &lt;/h3&gt;
  6643.  
  6644.  
  6645.  
  6646. &lt;figure class=&quot;wp-block-embed is-type-wp-embed is-provider-the-thunderbird-blog wp-block-embed-the-thunderbird-blog&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
  6647. &lt;blockquote class=&quot;wp-embedded-content&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/2022/07/thunderbird-time-machine-2003-a-look-back-at-thunderbird-0-1/&quot;&gt;Happy 20th Birthday, Thunderbird! A Look Back At Thunderbird 0.1&lt;/a&gt;&lt;/blockquote&gt;
  6648. &lt;/div&gt;&lt;/figure&gt;
  6649.  
  6650.  
  6651.  
  6652. &lt;figure class=&quot;wp-block-embed is-type-wp-embed is-provider-the-thunderbird-blog wp-block-embed-the-thunderbird-blog&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
  6653. &lt;blockquote class=&quot;wp-embedded-content&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/2022/08/thunderbird-time-machine-windows-xp-thunderbird-1-0/&quot;&gt;Thunderbird Time Machine: Windows XP + Thunderbird 1.0&lt;/a&gt;&lt;/blockquote&gt;
  6654. &lt;/div&gt;&lt;/figure&gt;
  6655. &lt;p&gt;The post &lt;a href=&quot;https://blog.thunderbird.net/2024/04/thunderbird-time-machine-thunderbird-3-0/&quot;&gt;Thunderbird Time Machine: Was Thunderbird 3.0 Worth The Wait?&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;</description>
  6656. <pubDate>Mon, 08 Apr 2024 13:00:00 +0000</pubDate>
  6657. <dc:creator>Jason Evangelho</dc:creator>
  6658. </item>
  6659. <item>
  6660. <title>William Durand: Introducing xpidump</title>
  6661. <guid isPermaLink="false">https://williamdurand.fr/2024/04/08/introducing-xpidump</guid>
  6662. <link>https://williamdurand.fr/2024/04/08/introducing-xpidump/</link>
  6663. <description>&lt;p&gt;I wrote &lt;em&gt;xpidump&lt;/em&gt; to give a human-readable summary of some information about a
  6664. &lt;a href=&quot;https://addons.mozilla.org/firefox/&quot;&gt;Firefox add-on&lt;/a&gt;. It is designed to answer these two questions: is the add-on
  6665. likely&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a class=&quot;footnote&quot; href=&quot;https://williamdurand.fr/mozilla.xml#fn:1&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; signed? And if so, how?&lt;/p&gt;
  6666.  
  6667. &lt;p&gt;This tool takes an XPI file as input. XPI files are Firefox add-ons packaged
  6668. as ZIP archives with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.xpi&lt;/code&gt; file extension. &lt;em&gt;xpidump&lt;/em&gt; currently extracts
  6669. information from up to 4 files in an XPI (depending on what is available in the
  6670. archive):&lt;/p&gt;
  6671.  
  6672. &lt;ul&gt;
  6673.  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;manifest.json&lt;/code&gt;: this JSON file defines the add-on. It is required in any
  6674. add-on (packaged or not, signed or not).&lt;/li&gt;
  6675.  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;META-INF/mozilla.rsa&lt;/code&gt;: this binary file is a &lt;a href=&quot;https://tools.ietf.org/html/rfc2315&quot;&gt;PKCS#7&lt;/a&gt; signature. Any signed
  6676. add-on should have this file (in addition to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;META-INF/mozilla.sf&lt;/code&gt; and
  6677. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;META-INF/manifest.mf&lt;/code&gt; but &lt;em&gt;xpidump&lt;/em&gt; doesn’t read them).&lt;/li&gt;
  6678.  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;META-INF/cose.sig&lt;/code&gt;: this binary file is a &lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc8152&quot;&gt;COSE&lt;/a&gt; signature&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a class=&quot;footnote&quot; href=&quot;https://williamdurand.fr/mozilla.xml#fn:2&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;. It might
  6679. not be present when the add-on isn’t signed or relatively old&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a class=&quot;footnote&quot; href=&quot;https://williamdurand.fr/mozilla.xml#fn:3&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;. There
  6680. should also be a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;META-INF/cose.manifest&lt;/code&gt; file when this file exists.&lt;/li&gt;
  6681.  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mozilla-recommendation.json&lt;/code&gt;: this JSON file is generated by Mozilla’s
  6682. signing service &lt;a href=&quot;https://github.com/mozilla-services/autograph&quot;&gt;Autograph&lt;/a&gt; when an add-on is signed with recommendation
  6683. states. This is how Firefox knows that an add-on is &lt;a href=&quot;https://support.mozilla.org/en-US/kb/recommended-extensions-program&quot;&gt;recommended&lt;/a&gt; for
  6684. instance. It might or might not be present.&lt;/li&gt;
  6685. &lt;/ul&gt;
  6686.  
  6687. &lt;p&gt;&lt;em&gt;xpidump&lt;/em&gt; is both a command-line tool and a web app since the latter is usually
  6688. more convenient (no need to install anything). It’s written in Rust, and
  6689. compiled to WebAssembly for the web app. You can try it at:
  6690. &lt;a href=&quot;https://williamdurand.fr/xpidump/&quot;&gt;williamdurand.fr/xpidump/&lt;/a&gt;.&lt;/p&gt;
  6691.  
  6692. &lt;p class=&quot;with-caption&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://williamdurand.fr/images/posts/2024/04/xpidump.webp&quot; /&gt;
  6693. &lt;em&gt;xpidump is available in the browser thanks to WebAssembly!&lt;/em&gt;&lt;/p&gt;
  6694.  
  6695. &lt;p&gt;The code is published on GitHub under the MIT license, see:
  6696. &lt;a href=&quot;https://github.com/willdurand/xpidump/&quot;&gt;willdurand/xpidump&lt;/a&gt;. I don’t have any
  6697. more plans for this weekend-ish project, it’s doing what I wanted it to be
  6698. doing… Let me know if you have ideas, though.&lt;/p&gt;
  6699.  
  6700. &lt;p&gt;One more thing while we’re here… If you want a tool to read the entire content
  6701. of any XPI file and get tons of information, you want to use &lt;a href=&quot;https://robwu.nl/crxviewer/&quot;&gt;CRX Viewer&lt;/a&gt;
  6702. created by my brilliant colleague Rob!&lt;/p&gt;
  6703.  
  6704. &lt;div class=&quot;footnotes&quot;&gt;
  6705.  &lt;ol&gt;
  6706.    &lt;li id=&quot;fn:1&quot;&gt;
  6707.      &lt;p&gt;This tool doesn’t verify the signature, so it cannot guarantee that the
  6708.  add-on is correctly signed. &lt;a class=&quot;reversefootnote&quot; href=&quot;https://williamdurand.fr/mozilla.xml#fnref:1&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
  6709.    &lt;/li&gt;
  6710.    &lt;li id=&quot;fn:2&quot;&gt;
  6711.      &lt;p&gt;Well, a COSE sign message with a signature and serialized with &lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc7049&quot;&gt;CBOR&lt;/a&gt;,
  6712.  though we should probably refer to the protocol as COSEish because of
  6713.  &lt;a href=&quot;https://github.com/franziskuskiefer/cose-rust/issues/60&quot;&gt;this issue&lt;/a&gt;. &lt;a class=&quot;reversefootnote&quot; href=&quot;https://williamdurand.fr/mozilla.xml#fnref:2&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
  6714.    &lt;/li&gt;
  6715.    &lt;li id=&quot;fn:3&quot;&gt;
  6716.      &lt;p&gt;Mozilla started to dual-sign add-ons in 2019. &lt;a class=&quot;reversefootnote&quot; href=&quot;https://williamdurand.fr/mozilla.xml#fnref:3&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
  6717.    &lt;/li&gt;
  6718.  &lt;/ol&gt;
  6719. &lt;/div&gt;</description>
  6720. <pubDate>Mon, 08 Apr 2024 00:00:00 +0000</pubDate>
  6721. </item>
  6722. <item>
  6723. <title>Niko Matsakis: Ownership in Rust</title>
  6724. <guid isPermaLink="false">https://smallcultfollowing.com/babysteps/blog/2024/04/05/ownership-in-rust/</guid>
  6725. <link>https://smallcultfollowing.com/babysteps/blog/2024/04/05/ownership-in-rust/?utm_source=atom_feed</link>
  6726. <description>&lt;p&gt;Ownership is an important concept in Rust — but I’m not talking about the type system. I’m talking about in our open source project. One of the big failure modes I’ve seen in the Rust community, especially lately, is the feeling that it’s unclear who is entitled to make decisions. Over the last six months or so, I’ve been developing a &lt;a href=&quot;https://hackmd.io/@nikomatsakis/ByFkzn_10&quot;&gt;project goals proposal&lt;/a&gt;, which is an attempt to reinvigorate Rust’s roadmap process — and a key part of this is the idea of giving each goal an &lt;strong&gt;owner&lt;/strong&gt;. I wanted to write a post just exploring this idea of being an owner: what it means and what it doesn’t.&lt;/p&gt;
  6727. &lt;h3&gt;Every goal needs an owner&lt;/h3&gt;
  6728. &lt;p&gt;Under my proposal, the project will identify its top priority goals, and every goal will have a designated &lt;strong&gt;owner&lt;/strong&gt;. This is ideally a single, concrete person, though it &lt;em&gt;can&lt;/em&gt; be a small group. Owners are the ones who, well, own the design being proposed. Just like in Rust, when they own something, they have the power to change it.&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fn:1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
  6729. &lt;p&gt;Just because owners own the design does not mean they work alone. Like any good Rustacean, they should &lt;a href=&quot;https://lang-team.rust-lang.org/decision_process.html?highlight=treasure%20dissent#prioritized-principles-of-rust-team-consensus-decision-making&quot;&gt;treasure dissent&lt;/a&gt;, making sure that when a concern is raised, the owner fully understands it and does what they can to mitigate or address it. But there always comes a point where the tradeoffs have been laid on the table, &lt;a href=&quot;https://smallcultfollowing.com/babysteps/blog/2019/04/19/aic-adventures-in-consensus/&quot;&gt;the space has been mapped&lt;/a&gt;, and somebody just has to make a call about what to do. This is where the owner comes in. Under project goals, the owner is the one we’ve chosen to do that job, and they should feel free to make decisions in order to keep things moving.&lt;/p&gt;
  6730. &lt;h3&gt;Teams make the final decision&lt;/h3&gt;
  6731. &lt;p&gt;Owners own the &lt;strong&gt;proposal&lt;/strong&gt;, but they don’t decide whether the proposal gets accepted. That is the job of the &lt;strong&gt;team&lt;/strong&gt;. So, if e.g. the goal in question requires making a change to the language, the language design team is the one that ultimately decides whether to accept the proposal.&lt;/p&gt;
  6732. &lt;p&gt;Teams can ultimately overrule an owner: they can ask the owner to come back with a modified proposal that weighs the tradeoffs differently. This is right and appropriate, because teams are the ones we recognize as having the best broad understanding of the domain they maintain.&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fn:2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; But teams should use their power judiciously, because the owner is typically the one who understands the tradeoffs for this particular goal most deeply.&lt;/p&gt;
  6733. &lt;h3&gt;Ownership is empowerment&lt;/h3&gt;
  6734. &lt;p&gt;Rust’s primary goal is &lt;em&gt;empowerment&lt;/em&gt; — and that is as true for the open-source org as it is for the language itself. Our goal should be to &lt;strong&gt;empower people to improve Rust&lt;/strong&gt;. That does not mean giving them unfettered ability to make changes — that would result in chaos, not an improved version of Rust — but when their vision is aligned with Rust’s values, we should ensure they have the capability and support they need to realize it.&lt;/p&gt;
  6735. &lt;h3&gt;Ownership requires trust&lt;/h3&gt;
  6736. &lt;p&gt;There is an interesting tension around ownership. Giving someone ownership of a goal is an act of faith — it means that we consider them to be an individual of high judgment who understands Rust and its values and will act accordingly. This implies to me that we are unlikely to take a goal if the owner is not known to the project. They don’t necessarily have to have worked on Rust, but they have to have enough of a reputation that we can evaluate whether they’re going to do a good job.’&lt;/p&gt;
  6737. &lt;p&gt;The design of project goal proposals includes steps designed to increase trust. Each goal includes a set of &lt;strong&gt;design axioms&lt;/strong&gt; identifying the key tradeoffs that are expected and how they will be weighed against one another. The goal also identifies &lt;strong&gt;milestones&lt;/strong&gt;, which shows that the author has thought about how to breakup and approach the work incrementally.&lt;/p&gt;
  6738. &lt;p&gt;It’s also worth highlighting that while the project has to trust the owner, the reverse is also true: the project hasn’t always done a good job of making good on its commitments. Sometimes we’ve asked for a proposal on a given feature and then not responded when it arrives.&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fn:3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; Or we set up &lt;a href=&quot;https://smallcultfollowing.com/babysteps/blog/2019/07/10/aic-unbounded-queues-and-lang-design/&quot;&gt;unbounded queues&lt;/a&gt; that wind up getting overfull, resulting in long delays.&lt;/p&gt;
  6739. &lt;p&gt;The project goal system has steps to build that kind of trust too: the owner identifies exactly the kind of support they expect to require from the team, and the team commits to provide it. Moreover, the general expectation is that any project goal represents an important priority, and so teams should prioritize nominated issues and the like that are related.&lt;/p&gt;
  6740. &lt;h3&gt;Trust requires accountability&lt;/h3&gt;
  6741. &lt;p&gt;Trust is something that has to be maintained over time. The primary mechanism for that in the project goal system is &lt;strong&gt;regular reporting&lt;/strong&gt;. The idea is that, once we’ve identified a goal, we will create a tracking issue. Bots will prompt owners to give regular status updates on the issue. Then, periodically, we will post a blog post that aggregates these status updates. This gives us a chance to identify goals that haven’t been moving — or at least where no status update has been provided — and take a look as to see why.&lt;/p&gt;
  6742. &lt;p&gt;In my view, it’s &lt;strong&gt;expected and normal that we will not make all our goals&lt;/strong&gt;. Things happen. Sometimes owners get busy with other things. Other times, priorities change and what was once a goal no longer seems relevant. That’s fine, but we do want to be explicit about noticing it has happened. The problem is when we let things live in the dark, so that if you want to really know what’s going on, you have to conduct an exhaustive archaeological expedition through github comments, zulip threads, emails, and sometimes random chats and minutes.&lt;/p&gt;
  6743. &lt;h3&gt;Conclusion&lt;/h3&gt;
  6744. &lt;p&gt;Rust has strong values of being an open, participatory language. This is a good thing and a key part of how Rust has gotten as good as it is. &lt;a href=&quot;https://nikomatsakis.github.io/rust-latam-2019/#98&quot;&gt;Rust’s design does not belong to any one person.&lt;/a&gt; A key part of how we enforce that is by making decisions by &lt;strong&gt;consensus&lt;/strong&gt;.&lt;/p&gt;
  6745. &lt;p&gt;But people sometimes get confused and think consensus means that everyone has to agree. This is wrong on two levels:&lt;/p&gt;
  6746. &lt;ul&gt;
  6747. &lt;li&gt;&lt;strong&gt;The team must be in consensus, not the RFC thread&lt;/strong&gt;: in Rust’s system, it’s the teams that ultimately make the decision. There have been plenty of RFCs that the team decided to accept despite strong opposition from the RFC thread (e.g., the &lt;code&gt;?&lt;/code&gt; operator comes to mind). This is right and good. The team has the most context, but the team also gets input from many other sources beyond the people that come to participate in the RFC thread.&lt;/li&gt;
  6748. &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://lang-team.rust-lang.org/decision_process.html?highlight=consensus%20doesn%27t%20mean%20unanimity#prioritized-principles-of-rust-team-consensus-decision-making&quot;&gt;Consensus doesn’t mean unanimity:&lt;/a&gt;&lt;/strong&gt; Being in consensus means that a majority agrees with the proposal and nobody thinks that it is definitely wrong. Plenty of proposals are decided where team members have significant, even grave, doubts. But ultimately tradeoffs must be made, and the team members trust one another’s judgment, so sometimes proposals go forward that aren’t made the way you would do it.&lt;/li&gt;
  6749. &lt;/ul&gt;
  6750. &lt;p&gt;The reality is that every good thing that ever got done in Rust had an owner – somebody driving the work to completion. But we’ve never named those owners explicitly or given them a formal place in our structure. I think it’s time we fixed that!&lt;/p&gt;
  6751. &lt;div class=&quot;footnotes&quot;&gt;
  6752. &lt;hr /&gt;
  6753. &lt;ol&gt;
  6754. &lt;li id=&quot;fn:1&quot;&gt;
  6755. &lt;p&gt;Hat tip to Jack Huey for this turn of phrase. Clever guy. &lt;a class=&quot;footnote-backref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fnref:1&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
  6756. &lt;/li&gt;
  6757. &lt;li id=&quot;fn:2&quot;&gt;
  6758. &lt;p&gt;There is a common misunderstanding that being on a Rust team for a project X means you are the one authoring code for X. That’s not the role of a team member. Team members hold the overall design of X in their heads. They review changes and mentor contributors who are looking to make a change. Of course, team members do sometimes write code, too, but in that case they are playing the role of a (particularly knowledgable) contributor. &lt;a class=&quot;footnote-backref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fnref:2&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
  6759. &lt;/li&gt;
  6760. &lt;li id=&quot;fn:3&quot;&gt;
  6761. &lt;p&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/2393#issuecomment-810421388&quot;&gt;I still feel bad about delegation.&lt;/a&gt; &lt;a class=&quot;footnote-backref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fnref:3&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
  6762. &lt;/li&gt;
  6763. &lt;/ol&gt;
  6764. &lt;/div&gt;</description>
  6765. <pubDate>Fri, 05 Apr 2024 16:22:59 +0000</pubDate>
  6766. </item>
  6767. <item>
  6768. <title>Mozilla Security Blog: Rapidly Leveling up Firefox Security</title>
  6769. <guid isPermaLink="false">https://blog.mozilla.org/security/?p=2871</guid>
  6770. <link>https://blog.mozilla.org/security/2024/04/04/rapidly-leveling-up-firefox-security/</link>
  6771. <description>&lt;p&gt;At Mozilla, we believe in an open web that is safe to use. To that end, we improve and maintain the security of people using Firefox around the world. This includes a solid track record of responding to security bugs in the wild, especially with bug bounty programs such as Pwn2Own. As soon as we discover a critical security issue in Firefox, we plan and ship a rapid fix. This post describes how we recently fixed an exploit discovered at Pwn2Own in less than 21 hours, a success only made possible through the collaborative and well-coordinated efforts of a global cross-functional team of release and QA engineers, security experts, and other stakeholders.&lt;/p&gt;
  6772. &lt;h3&gt;&lt;b&gt;A Bit Of Context&lt;/b&gt;&lt;/h3&gt;
  6773. &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Pwn2Own&quot;&gt;Pwn2Own&lt;/a&gt; is an annual computer hacking contest where participants aim to find security vulnerabilities in major software such as browsers. Two weeks ago, this event took place in Vancouver, Canada, where participants investigated &lt;a href=&quot;https://www.zerodayinitiative.com/blog/2024/1/16/pwn2own-vancouver-2024-bring-cloud-nativecontainer-security-to-pwn2own#browser&quot;&gt;everything from Chrome, Firefox, and Safari to MS Word and even the code currently running on your car&lt;/a&gt;. Without getting into &lt;a href=&quot;https://www.zerodayinitiative.com/blog/2024/3/21/pwn2own-vancouver-2024-day-two-results&quot;&gt;the technical details&lt;/a&gt; of the exploit here, this blog post will describe how Mozilla quickly responds to and ships updated builds for exploits found during Pwn2Own.&lt;/p&gt;
  6774. &lt;p&gt;To give you a sense of scale, Firefox is a massive piece of software: 30 million+ lines of code, six platforms (Windows 32 &amp;amp; 64bit, GNU/Linux 32 &amp;amp; 64bit, Mac OS X and Android), 90 languages, plus installers, updaters, etc. Releasing such a beast involves coordination across many cross-functional teams spanning the entire globe.&lt;/p&gt;
  6775. &lt;p&gt;The timing of the Pwn2Own event is known weeks beforehand, so Mozilla is always ready when it rolls around! The&lt;a href=&quot;https://wiki.mozilla.org/RapidRelease/Calendar&quot;&gt; Firefox train release calendar&lt;/a&gt; takes into consideration the timing of Pwn2Own. We try not to ship a new version of Firefox to end users on the release channel on the same day as Pwn2Own to hopefully avoid multiple updates close together. This also means that we are prepared to ship a patched version of Firefox as soon as we know what vulnerabilities were discovered if any at all.&lt;/p&gt;
  6776. &lt;h3&gt;&lt;b&gt;So What Happened?&lt;/b&gt;&lt;/h3&gt;
  6777. &lt;p&gt;The specific exploit disclosed at Pwn2Own consisted of &lt;a href=&quot;https://www.theregister.com/2024/03/25/mozilla_fixes_firefox_zerodays/&quot;&gt;two bugs&lt;/a&gt;, a necessity when typical web content is rendered inside of a proverbial browser sandbox: These &lt;a href=&quot;https://www.mozilla.org/en-US/security/advisories/mfsa2024-15/&quot;&gt;two sophisticated exploits&lt;/a&gt; took an admirable amount of effort to reveal and leverage. Nevertheless, as soon as it was discovered, Mozilla engineers got to work, shipping a new release within 21 hours! We certainly weren’t the only browser “pwned”, but &lt;a href=&quot;https://twitter.com/thezdi/status/1771296997787443370&quot;&gt;we were the first of all, to patch our vulnerability&lt;/a&gt;. That’s right: before you knew about this exploit, we had already protected you from it.&lt;/p&gt;
  6778. &lt;p&gt;As scary as this might sound, Sandbox Escapes, like many web browser exploits, are an issue common to all browsers, thanks to the evolving nature of the internet. Firefox developers are always eager to find and resolve these security issues as quickly as possible to ensure our users stay safe. We do this continuously by shipping new mitigations like win32k lockdown, site isolation, investing in &lt;a href=&quot;https://firefox-source-docs.mozilla.org/tools/fuzzing/index.html&quot;&gt;security fuzzing&lt;/a&gt;, and promoting &lt;a href=&quot;https://www.mozilla.org/en-US/security/client-bug-bounty/&quot;&gt;bug bounties&lt;/a&gt; for similar escapes. In the interest of openness and transparency, we also continuously invite and reward security researchers who share their newest attacks, which helps us keep our product safe even when there isn’t a Pwn2Own to participate in.&lt;/p&gt;
  6779. &lt;h3&gt;&lt;b&gt;Related Resources&lt;/b&gt;&lt;/h3&gt;
  6780. &lt;p&gt;If you’re interested in learning more about Mozilla’s security initiatives or Firefox security, here are some resources to help you get started:&lt;/p&gt;
  6781. &lt;p&gt;&lt;a href=&quot;https://www.mozilla.org/en-US/security/&quot;&gt;Mozilla Security&lt;br /&gt;
  6782. &lt;/a&gt;&lt;a href=&quot;https://blog.mozilla.org/security/&quot;&gt;Mozilla Security Blog&lt;br /&gt;
  6783. &lt;/a&gt;&lt;a href=&quot;https://www.mozilla.org/en-US/security/bug-bounty/&quot;&gt;Bug Bounty Program&lt;br /&gt;
  6784. &lt;/a&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLo3w8EB99pqIpX-NyaSResBdZqDpzv40K&quot;&gt;Mozilla Security playlist on YouTube&lt;/a&gt;&lt;/p&gt;
  6785. &lt;p&gt;Furthermore, if you want to kickstart your own security research in Firefox, we invite you to follow our deeply technical blog at &lt;a href=&quot;https://blog.mozilla.org/attack-and-defense/&quot;&gt;Attack &amp;amp; Defense – Firefox Security Internals for Engineers, Researchers, and Bounty Hunters&lt;/a&gt; .&lt;/p&gt;
  6786. &lt;p&gt;Past Pwn2Own Blog: &lt;a href=&quot;https://hacks.mozilla.org/2018/03/shipping-a-security-update-of-firefox-in-less-than-a-day/&quot;&gt;https://hacks.mozilla.org/2018/03/shipping-a-security-update-of-firefox-in-less-than-a-day/&lt;/a&gt;&lt;/p&gt;
  6787. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/security/2024/04/04/rapidly-leveling-up-firefox-security/&quot;&gt;Rapidly Leveling up Firefox Security&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;</description>
  6788. <pubDate>Thu, 04 Apr 2024 19:27:41 +0000</pubDate>
  6789. <dc:creator>Cameron Boozarjomehri</dc:creator>
  6790. </item>
  6791. <item>
  6792. <title>Mozilla Thunderbird: ThunderSnap! Why We’re Helping Maintain The Thunderbird Snap On Linux</title>
  6793. <guid isPermaLink="false">https://blog.thunderbird.net/?p=1652</guid>
  6794. <link>https://blog.thunderbird.net/2024/04/thundersnap-why-were-helping-maintain-the-thunderbird-snap-on-linux/</link>
  6795. <description>&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;attachment-640x360 size-640x360 wp-post-image&quot; height=&quot;320&quot; src=&quot;https://blog.thunderbird.net/files/2024/04/Developer-banner5.png&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
  6796. &lt;p&gt;We love our Linux users across all Linux distributions. That is why we’ve stepped up to help maintain the &lt;a href=&quot;https://snapcraft.io/thunderbird&quot;&gt;Thunderbird Snap available in the Snap Store&lt;/a&gt;.&lt;/p&gt;
  6797.  
  6798.  
  6799.  
  6800. &lt;p&gt;Last year we took ownership of the &lt;a href=&quot;https://flathub.org/apps/org.mozilla.Thunderbird&quot;&gt;Thunderbird Flatpak&lt;/a&gt;, and it has been our officially recommended package for Linux users. However, we are expanding our horizons to make sure the Thunderbird Snap experience is officially supported too. We at Thunderbird are team “free software”, independent of the packaging technology. This will mostly affect our Ubuntu users but there are plenty of other Snap users out there as well. &lt;/p&gt;
  6801.  
  6802.  
  6803.  
  6804. &lt;h3&gt;Why support both the Snap and Flatpak?&lt;/h3&gt;
  6805.  
  6806.  
  6807.  
  6808. &lt;p&gt;In the spirit of free software, we want to support as many of our users as possible without discriminating on their package preferences. We are not a large company with infinite resources, so we can’t support everything under the sun. But we &lt;em&gt;can&lt;/em&gt; make informed decisions that reach the majority of our Linux users.&lt;/p&gt;
  6809.  
  6810.  
  6811.  
  6812. &lt;p&gt;The Thunderbird Snap has been well maintained by the Ubuntu desktop team for years, and we felt it was time to step up and help out.&lt;/p&gt;
  6813.  
  6814.  
  6815.  
  6816. &lt;h3&gt;What does this mean for me?&lt;/h3&gt;
  6817.  
  6818.  
  6819.  
  6820. &lt;p&gt;If you are an Ubuntu user, then you may already be using the Thunderbird Snap. The next release of Ubuntu is 24.04 (&lt;a href=&quot;https://discourse.ubuntu.com/t/noble-numbat-release-schedule/35649&quot;&gt;available April 25&lt;/a&gt;) and will be the first Ubuntu release that &lt;a href=&quot;https://discourse.ubuntu.com/t/thunderbird-beta-snap-built-from-source-call-for-testing-and-next-steps-for-noble/42294&quot;&gt;seeds the Thunderbird Snap on the ISO&lt;/a&gt;. So if you do a fresh full install of Ubuntu, you will be using the Thunderbird Snap that you know is directly supported by the Thunderbird team.&lt;/p&gt;
  6821.  
  6822.  
  6823.  
  6824. &lt;p&gt;If you are not an Ubuntu user but Snaps are still a part of your life, then you will still benefit from the same rolling updates provided by the Snap experience.&lt;/p&gt;
  6825.  
  6826.  
  6827.  
  6828. &lt;h3&gt;What changes are expected?&lt;/h3&gt;
  6829.  
  6830.  
  6831.  
  6832. &lt;p&gt;From a user perspective, you should see no changes. Just keep using whichever Thunderbird Snap channel you are comfortable with.&lt;/p&gt;
  6833.  
  6834.  
  6835.  
  6836. &lt;p&gt;From a developer perspective, we have added the Snap build to our build infrastructure on treeherder. This means whenever a full build is triggered automatically from commits, the Snap is built as well for testing. Whenever the build is one we want to release to the public, this will trigger a general flow:&lt;/p&gt;
  6837.  
  6838.  
  6839.  
  6840. &lt;ol&gt;
  6841. &lt;li&gt;A version bump is pushed to the &lt;a href=&quot;https://github.com/ubuntu/thunderbird&quot;&gt;existing Thunderbird Snap github repository&lt;/a&gt;.&lt;/li&gt;
  6842.  
  6843.  
  6844.  
  6845. &lt;li&gt;The &lt;a href=&quot;https://code.launchpad.net/~desktop-snappers/thunderbird/+git/snap&quot;&gt;existing launchpad mirror&lt;/a&gt; will pick up this change and automatically build the Snap for x86 and arm64.&lt;/li&gt;
  6846.  
  6847.  
  6848.  
  6849. &lt;li&gt;If the launchpad Snap build succeeds, the Snap will be uploaded to the designated Snap store channel.&lt;/li&gt;
  6850. &lt;/ol&gt;
  6851.  
  6852.  
  6853.  
  6854. &lt;p&gt;So all we are changing is adding the snap build into the Thunderbird build infrastructure and plugging it into the existing automation that feeds the snap store. &lt;/p&gt;
  6855.  
  6856.  
  6857.  
  6858. &lt;h3&gt;Where do I report a bug on the Thunderbird Snap?&lt;/h3&gt;
  6859.  
  6860.  
  6861.  
  6862. &lt;p&gt;As with all supported package types of Thunderbird, we would like bugs about the Thunderbird Snap to be reported on &lt;a href=&quot;https://bugzilla.mozilla.org/enter_bug.cgi?product=Thunderbird&quot;&gt;bugzilla.mozilla.org under the Thunderbird project&lt;/a&gt;.&lt;/p&gt;
  6863. &lt;p&gt;The post &lt;a href=&quot;https://blog.thunderbird.net/2024/04/thundersnap-why-were-helping-maintain-the-thunderbird-snap-on-linux/&quot;&gt;ThunderSnap! Why We’re Helping Maintain The Thunderbird Snap On Linux&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;</description>
  6864. <pubDate>Thu, 04 Apr 2024 17:21:44 +0000</pubDate>
  6865. <dc:creator>Heather Ellsworth</dc:creator>
  6866. </item>
  6867. <item>
  6868. <title>Mozilla Addons Blog: Developer Spotlight: Control Panel for Twitter</title>
  6869. <guid isPermaLink="false">https://blog.mozilla.org/addons/?p=9157</guid>
  6870. <link>https://blog.mozilla.org/addons/2024/04/04/developer-spotlight-control-panel-for-twitter/</link>
  6871. <description>&lt;p&gt;You can’t predict how or when success will come. In the case of &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/control-panel-for-twitter/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Control Panel for Twitter&lt;/a&gt; — a Firefox extension that gives users authority over the amount of algorithmic content they’re fed — it went viral in Japan a few years ago and word spread fast. One devoted fan even jumped into the open-source code and quickly localized the extension in Japanese, further catapulting its appeal. Today, Control Panel for Twitter has more than 250,000 users from all over the world enjoying it across various browsers.&lt;/p&gt;
  6872. &lt;div class=&quot;wp-caption alignleft&quot; id=&quot;attachment_9159&quot; style=&quot;width: 250px;&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-9159&quot; height=&quot;320&quot; src=&quot;https://blog.mozilla.org/addons/files/2024/04/blog_cp4t-580x774.png&quot; width=&quot;240&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-9159&quot;&gt;A comprehensive Options page gives you easy, intuitive control over your Twitter/X experience.&lt;/p&gt;&lt;/div&gt;
  6873. &lt;p&gt;“Most of my extensions are for sites I’m a long-time user of, fixing issues which bug me, and adding missing features,” explains developer Jonny Buchannon. One of the first issues he addressed was designing a feature that moved retweets into a separate tab.&lt;/p&gt;
  6874. &lt;p&gt;“If you don’t like the algorithmic ‘For you’ timeline, it’s usually because it’s full of random tweets about topics you’re not interested in, or worse, deliberate engagement bait. If you look at all the retweets in your timeline, they tend to have a similar problem,” explains Buchannon. “By default, following someone on Twitter lets them put any tweet in your timeline with no effort — a single click or tap — without having to add their own comment, and sometimes they do that because the tweet in question made them feel strong negative emotions; sometimes people will also retweet a string of tweets about similar topics, filling up your timeline.”&lt;/p&gt;
  6875. &lt;p&gt;To fix this problem the extension swaps the “For you” timeline for the “Following” (chronological) version. Control Panel for Twitter can also hide other types of Twitter/X content like the “See new Tweets” button, “Who to follow,” “Follow some topics,” all the X Premium upsell prompts, and more.&lt;/p&gt;
  6876. &lt;p&gt;Even with gobs of current customization features, Buchannon says there’s a “huge backlog” of potential enhancements in their &lt;a href=&quot;https://github.com/insin/control-panel-for-twitter/issues&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;GitHub Issues&lt;/a&gt;. New features coming soon include the ability to control what you see in Notifications (like hiding Likes and retweets) and improvements viewing a conversation under a focused tweet.&lt;/p&gt;
  6877. &lt;h3&gt;&lt;b&gt;App-solutely atrocious experience — try Twitter/X on the mobile web!&lt;/b&gt;&lt;/h3&gt;
  6878. &lt;p&gt;Control Panel for Twitter is also available on Firefox for Android (&lt;a href=&quot;https://blog.mozilla.org/en/mozilla/new-extensions-youll-love-now-available-on-firefox-for-android/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;&lt;i&gt;addons.mozilla.org&lt;/i&gt; [AMO] recently launched an open ecosystem of extensions on Firefox for Android&lt;/a&gt;). While it may seem strange to use a mobile browser to access Twitter/X instead of the app, Buchannon says he primarily added mobile support for his own personal use. “I’m the #1 user on that front,” he says before issuing a “warning” to prospective users of his extension on Firefox for Android: “Once you get used to the changes Control Panel for Twitter makes to the experience, default Twitter is unusable — be it the app or the website.”&lt;/p&gt;
  6879. &lt;p&gt;There are also mobile-specific features, such as changes it brings to Twitter/X search functionality. In standard Twitter/X, when you tap the Search nav you’re brought to the Explore page, which is loaded with algorithmic content. Control Panel for Twitter can hide that so you’re simply presented with a streamlined search field.&lt;/p&gt;
  6880. &lt;p&gt;Apparently Buchannon isn’t alone in his preference to experience the mobile web version of Twitter/X while using his extension. He claims Control Panel for Twitter has only been available on the App Store for Safari for a little over a year, but already 78% of its Safari users are using it on the iPhone.&lt;/p&gt;
  6881. &lt;p&gt;Based on the same philosophical functionality as Control Panel for Twitter, Buchannon just released &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/control-panel-for-youtube/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Control Panel for YouTube&lt;/a&gt;.&lt;/p&gt;
  6882. &lt;p&gt;“One of the main focuses of the initial version was improving the Subscription pages by automatically hiding any content you don’t want to see in there like Shorts, live streams, ‘upcoming’ videos you can’t watch now, and hiding videos you’ve already watched, so it acts more like an inbox, where videos disappear as you watch them.”&lt;/p&gt;
  6883. &lt;p&gt;Sounds great, can’t wait to try it out. Less is often more with social media.&lt;/p&gt;
  6884. &lt;p&gt;&lt;i&gt;Do you have an intriguing extension development story? Do tell! Maybe your story should appear on this blog. Contact us at &lt;/i&gt;&lt;b&gt;&lt;i&gt;amo-featured [at] mozilla [dot] org&lt;/i&gt;&lt;/b&gt;&lt;i&gt; and let us know a bit about your extension development journey. &lt;/i&gt;&lt;/p&gt;
  6885. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/addons/2024/04/04/developer-spotlight-control-panel-for-twitter/&quot;&gt;Developer Spotlight: Control Panel for Twitter&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/addons&quot;&gt;Mozilla Add-ons Community Blog&lt;/a&gt;.&lt;/p&gt;</description>
  6886. <pubDate>Thu, 04 Apr 2024 16:52:57 +0000</pubDate>
  6887. <dc:creator>Scott DeVaney</dc:creator>
  6888. </item>
  6889. <item>
  6890. <title>The Mozilla Blog: Empowering Choice: Firefox Partners with Qwant for a Better Web</title>
  6891. <guid isPermaLink="false">https://blog.mozilla.org/?p=74599</guid>
  6892. <link>https://blog.mozilla.org/en/products/firefox-partners-with-qwant/</link>
  6893. <description>&lt;p&gt;Your tech choices matter more than ever. That’s why at Firefox, we believe in empowering users to make informed decisions that align with their values. In that spirit, we’re excited to announce our partnership with Qwant, a search engine that prioritizes user privacy and tracker blocking. &lt;/p&gt;
  6894.  
  6895.  
  6896.  
  6897. &lt;p&gt;Did you know you could choose the search engine of your choice right from your Firefox URL bar? Whether you prioritize privacy, climate protection, or simply want a search experience tailored to your preferences, &lt;a href=&quot;https://support.mozilla.org/en-US/kb/change-your-default-search-settings-firefox&quot;&gt;we’ve got you covered&lt;/a&gt;.&lt;/p&gt;
  6898.  
  6899.  
  6900.  
  6901. &lt;p&gt;Qwant is a privacy-focused search engine that puts your needs first while protecting your personal data. By blocking trackers and advertisements, Qwant helps your search results remain unbiased and comprehensive. Just like Firefox, they are committed to protecting your privacy and preserving the decentralized nature of the web, where people have control over their online experiences.&lt;/p&gt;
  6902.  
  6903.  
  6904.  
  6905. &lt;p&gt;Together, Firefox and Qwant are contributing to a more open, inclusive web, and above all — one where you can make an informed choice about what tech you use, and why. Your tech choices make a difference. &lt;/p&gt;
  6906.  
  6907.  
  6908.  
  6909. &lt;p&gt;As Firefox continues to champion user empowerment and innovation, we invite you to join us in shaping a web that works for everyone. Together, let’s make a positive impact—one search at a time.&lt;/p&gt;
  6910. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/products/firefox-partners-with-qwant/&quot;&gt;Empowering Choice: Firefox Partners with Qwant for a Better Web &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;</description>
  6911. <pubDate>Thu, 04 Apr 2024 12:40:00 +0000</pubDate>
  6912. <dc:creator>Mozilla</dc:creator>
  6913. </item>
  6914. <item>
  6915. <title>Anne van Kesteren: Contributing to WebKit</title>
  6916. <guid isPermaLink="false">tag:annevankesteren.nl,2023-05-11:/170423/webkit-committer</guid>
  6917. <link>https://annevankesteren.nl/2023/05/webkit-committer</link>
  6918. <description>&lt;p&gt;Over the last couple weeks I have looked at the WebKit code with the intent of fixing a few things in areas of the web platform I’m familiar with as a personal curiosity. The code had always appeared hackable to me, but I had never given it a go in practice. In fact, this is the first time I have written C++ in my life! Marcos had given me a quick guide to set up my environment and I was off to the races.&lt;/p&gt;
  6919. &lt;p&gt;It has been a lot of fun trying to get things to compile and making tests pass. And also have the chance to study how things are implemented in more detail. I wish web standards had some of the checks available in C++. Now I am well aware that C++ does not have the best reputation, but English is even more error-prone. Granted, the level of abstraction English sits at can also make things easier.&lt;/p&gt;
  6920. &lt;p&gt;I can heartily recommend this to anyone who has been interested in doing this, but didn’t because it seemed too intimidating. Mind that the first contribution is a bit of a hurdle and can be humbling. Definitely was for me! I recommend tackling something that seems doable. And remember that as with a lot of things it will get easier over time.&lt;/p&gt;</description>
  6921. <pubDate>Thu, 04 Apr 2024 10:13:37 +0000</pubDate>
  6922. </item>
  6923. <item>
  6924. <title>The Mozilla Blog: The cost of cutting-edge: Scaling compute and limiting access</title>
  6925. <guid isPermaLink="false">https://blog.mozilla.org/?p=74596</guid>
  6926. <link>https://blog.mozilla.org/en/mozilla/ai/ai-advancements-scaling-computational-power/</link>
  6927. <description>&lt;p&gt;&lt;em&gt;(To read the complete Mozilla.ai publication on LLM evaluation, please visit the &lt;/em&gt;&lt;a href=&quot;https://blog.mozilla.ai/the-cost-of-cutting-edge-scaling-compute-and-limiting-access/&quot;&gt;&lt;em&gt;Mozilla.ai blog&lt;/em&gt;&lt;/a&gt;&lt;em&gt;)&lt;/em&gt;&lt;/p&gt;
  6928.  
  6929.  
  6930.  
  6931. &lt;p&gt;In a year marked by extraordinary advancements in artificial intelligence, largely driven by the evolution of large language models (LLMs), one factor stands out as a universal accelerator: the exponential growth in computational power.&lt;/p&gt;
  6932.  
  6933.  
  6934.  
  6935. &lt;p&gt;Over the last few years, researchers have continuously pushed the boundaries of what a ‘large’ language model means, increasing both the size of these models and the volume of data they were trained on. This exploration has revealed a consistent trend: as the models have grown, so have their capabilities.&lt;/p&gt;
  6936.  
  6937.  
  6938.  
  6939. &lt;p&gt;Fast forward to today, and the landscape has radically transformed. Training state-of-the-art LLMs like ChatGPT has become an immensely costly endeavor. The bulk of this expense stems from the staggering amount of computational resources required. To train an LLM, researchers process enormous datasets using the latest, most advanced GPUs (graphics processing units). The cost of acquiring just one of these GPUs, such as the H100, can reach upwards of $30,000. Moreover, these units are power-hungry, contributing to significant electricity usage. &lt;/p&gt;
  6940.  
  6941.  
  6942.  
  6943. &lt;p&gt;While there have been substantial efforts by researchers and organizations towards openness in the development of large language models, in addition to the compute challenges, three major hurdles have also hampered efforts to level the playing field:&lt;/p&gt;
  6944.  
  6945.  
  6946.  
  6947. &lt;ul&gt;
  6948. &lt;li&gt;Limited Transparency: The specifics of model architecture, data sources, and tuning parameters are often closely guarded.&lt;/li&gt;
  6949.  
  6950.  
  6951.  
  6952. &lt;li&gt;Challenging Reproducibility: Due to the swift pace of innovation, independently replicating these models on your own infrastructure can be very difficult.&lt;/li&gt;
  6953.  
  6954.  
  6955.  
  6956. &lt;li&gt;Disjointed Evaluation: The absence of a universally accepted benchmark for LLM evaluation complicates direct comparisons. The multitude of available tasks and frameworks, each assessing different capabilities, means comparisons are often inconclusive.&lt;/li&gt;
  6957. &lt;/ul&gt;
  6958.  
  6959.  
  6960.  
  6961. &lt;p&gt;The high compute requirements, coupled with the opaqueness and the complexities of developing and evaluating LLMs, are hampering progress for researchers and smaller organizations striving for openness in the field. This not only threatens to reduce the diversity of innovation but also risks centralizing control of powerful models in the hands of a few large entities. The critical question arises: are these entities prepared to shoulder the ethical and moral responsibilities this control entails? Moreover, what steps can we take to bridge the divide between open innovators and those who hold the keys to the leading LLM technology?&lt;/p&gt;
  6962.  
  6963.  
  6964.  
  6965. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Why LLMs make model evaluation harder than ever&lt;/strong&gt;&lt;/h3&gt;
  6966.  
  6967.  
  6968.  
  6969. &lt;p&gt;Evaluation of LLMs involves assessing their performance and capabilities across various tasks and benchmarks and provides a measure of progress and highlights areas where models excel or need improvement. &lt;/p&gt;
  6970.  
  6971.  
  6972.  
  6973. &lt;p&gt;‘Traditional’ machine learning evaluation is quite straightforward: if we develop a model to predict lung cancer from X-ray images, we can test its accuracy by using a collection of X-rays that doctors have already diagnosed as either having cancer (YES) or not (NO). By comparing the model’s predictions with the doctor-diagnosed cases, we can assess how well it matches the expert classifications.&lt;/p&gt;
  6974.  
  6975.  
  6976.  
  6977. &lt;p&gt;In contrast, LLMs can complete an almost endless number of tasks: summarization, autocompletion, reasoning, generating recommendations for movies and recipes, writing essays, telling stories, generating good code, and so on. Evaluation of performance therefore becomes much, much harder.&lt;/p&gt;
  6978.  
  6979.  
  6980.  
  6981. &lt;p&gt;At &lt;a href=&quot;https://www.mozilla.ai/?ref=blog.mozilla.ai&quot;&gt;Mozilla.ai&lt;/a&gt;, we believe that making open-source model fine-tuning and evaluation as accessible as possible is an important step to helping people own and &lt;a href=&quot;https://blog.mozilla.org/en/mozilla/ai/next-steps-for-mozilla-and-trustworthy-ai/?ref=blog.mozilla.ai&quot;&gt;trust the technology they use&lt;/a&gt;. Currently, this still requires expertise and the ability to navigate a rapidly evolving ecosystem of techniques, frameworks, and infrastructure requirements. We want to make this less overwhelming for organizations and developers, which is why we’re building tools that:&lt;/p&gt;
  6982.  
  6983.  
  6984.  
  6985. &lt;ul&gt;
  6986. &lt;li&gt;Help them find the right open-source LLM for their needs&lt;/li&gt;
  6987.  
  6988.  
  6989.  
  6990. &lt;li&gt;Make it simple to fine-tune an open-source LLM on their own data&lt;/li&gt;
  6991.  
  6992.  
  6993.  
  6994. &lt;li&gt;Make language model evaluation and validation more accessible&lt;/li&gt;
  6995. &lt;/ul&gt;
  6996.  
  6997.  
  6998.  
  6999. &lt;p&gt;We think there will be a significant opportunity for many organizations to use these tools to develop their own small and specialized language models that address a range of meaningful use cases in a cost-effective way. We strive to empower developers and organizations to engage with and &lt;em&gt;trust&lt;/em&gt; the open-source ecosystem and minimize their dependence on using closed-source models over which they have no ownership or control.&lt;/p&gt;
  7000.  
  7001.  
  7002.  
  7003. &lt;p&gt;Read the whole publication and subscribe to future ones in the &lt;a href=&quot;https://blog.mozilla.ai/&quot;&gt;Mozilla.ai blog&lt;/a&gt;.&lt;/p&gt;
  7004. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/mozilla/ai/ai-advancements-scaling-computational-power/&quot;&gt;The cost of cutting-edge: Scaling compute and limiting access&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;</description>
  7005. <pubDate>Wed, 03 Apr 2024 16:45:00 +0000</pubDate>
  7006. <dc:creator>Mozilla</dc:creator>
  7007. </item>
  7008. <item>
  7009. <title>The Mozilla Blog: Google’s Protected Audience Protects Advertisers (and Google) More Than It Protects You</title>
  7010. <guid isPermaLink="false">https://blog.mozilla.org/?p=74583</guid>
  7011. <link>https://blog.mozilla.org/en/privacy-security/googles-protected-audience-protects-advertisers/</link>
  7012. <description>&lt;p&gt;The announcement that Google would remove the ability to track people using cookies in its Chrome browser was met with some consternation from advertisers. After all, when your business relies so heavily on tracking, as is common in the advertising industry, removing the key means of performing that tracking is a bit of a big deal.&lt;/p&gt;
  7013.  
  7014.  
  7015.  
  7016. &lt;p&gt;Google relies on tracking too, but this change has the potential to skew the advertising market in Google’s favor.  For online advertisers looking to perform individualized ad targeting, tracking is a significant important source of visitor information. Smaller ad networks and websites depend on being able to source information about what people do on other sites in order to be competitive in the ruthless online advertising marketplace. Without that, these smaller players might be less able to connect visitors with the — often shady — trade in personal data.  &lt;/p&gt;
  7017.  
  7018.  
  7019.  
  7020. &lt;p&gt;On the other hand, entities like Google who operate large sites, might rely less on information from other sites.  Losing the information that comes from tracking people might affect them far less when they can use information they gather from their many services.&lt;/p&gt;
  7021.  
  7022.  
  7023.  
  7024. &lt;p&gt;So, while the privacy gains are clear — reducing tracking means a reduction in the collection and trade of information about what people do online — the competition situation is awkward. Here we have a company that dominates both the advertising and browser markets, proposing a change that comes with clear privacy benefits, but it will also further entrench its own dominance in the massively profitable online advertising market.&lt;/p&gt;
  7025.  
  7026.  
  7027.  
  7028. &lt;p&gt;Protected Audience is a cornerstone of Google’s response to pressure from competition regulators, in particular the UK Competition and Markets Authority, with whom Google entered into a voluntary agreement in 2022. Protected Audience seeks to provide some counterbalance to the effects of better privacy in the advertising market.&lt;/p&gt;
  7029.  
  7030.  
  7031.  
  7032. &lt;p&gt;We find Google’s claims about the effect of Protected Audience on advertising competition credible. The proposal could make targeted advertising better for sites that heavily relied on tracking in the past. That comes with a small caveat: complexity might cause a larger share of advertising profits to go to ad tech intermediaries.&lt;/p&gt;
  7033.  
  7034.  
  7035.  
  7036. &lt;p&gt;However, the proposal fails to meet its own privacy goals. The technical privacy measures in Protected Audience fail to prevent sites from abusing the API to learn about what you did on other sites.&lt;/p&gt;
  7037.  
  7038.  
  7039.  
  7040. &lt;p&gt;To say that the details are a bit complicated would be something of an understatement.  Protected Audience is big and involved, with lots of moving parts, but it can be explained with a simple analogy.&lt;/p&gt;
  7041.  
  7042.  
  7043.  
  7044. &lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-74584&quot; height=&quot;768&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2024/04/diagram-1024x768.png&quot; style=&quot;width: 853px; height: auto;&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;
  7045.  
  7046.  
  7047.  
  7048. &lt;p&gt;The idea behind Protected Audience is that it creates something like an alternative information dimension inside of your (Chrome) browser. In this alternative dimension, tracking what you saw and did online is possible. Any website can push information into that dimension. While we normally avoid mixing data from multiple sites, those rules are changed to allow that. Sites can then process that data in order to select advertisements. However, no one can see into this dimension, except you. Sites can only open a window for you to peek into that dimension, but only to see the ads they chose.&lt;/p&gt;
  7049.  
  7050.  
  7051.  
  7052. &lt;p&gt;Leaving the details aside for the moment, the idea that personal data might be made available for specific uses like this, is quite appealing. A few years ago, something like Protected Audience might have been the stuff of science fiction. Protected Audience might be flawed, but it demonstrates real potential. If this is possible, that might give people more of a say in how their data is used. Rather than just have someone spy on your every action then use that information as they like, you might be able to specify what they can and cannot do. The technology could guarantee that your choice is respected.&lt;/p&gt;
  7053.  
  7054.  
  7055.  
  7056. &lt;p&gt;Maybe advertising is not the first thing you would do with this newfound power, but maybe if the advertising industry is willing to fund investments in new technology that others could eventually use, that could be a good thing.&lt;/p&gt;
  7057.  
  7058.  
  7059.  
  7060. &lt;p&gt;Sadly, Protected Audience fails in two ways. To be successful, it must process data without leaks.  In a complex design like this, it is almost expected that there will be a few holes in the design.  However, the biggest problem is that the browser needs to stop websites from seeing the information that they process.&lt;/p&gt;
  7061.  
  7062.  
  7063.  
  7064. &lt;p&gt;Preventing advertising companies from looking at the information they process makes it extremely difficult to use Protected Audience. In response to concerns from these companies, Google loosened privacy protections in a number of places to make it easier to use. Of course, by weakening protections, the current proposal provides no privacy.  In other words, to help make Protected Audience easier to use, they made the design even leakier.&lt;/p&gt;
  7065.  
  7066.  
  7067.  
  7068. &lt;p&gt;A lot of these leaks are temporary. Google has a plan and even a timeline for closing most of the holes that were added to make Protected Audience easier to use for advertisers. The problem is that there is no credible fix for some of the information leaks embedded in Protected Audience’s architecture. &lt;/p&gt;
  7069.  
  7070.  
  7071.  
  7072. &lt;p&gt;A stronger Protected Audience might lead us to ask some fairly challenging questions. We might ask whether objections to targeted advertising arise solely from the privacy problems with current technology? Or, is it the case that targeted manipulation itself is the problem? Targeted advertising is more effective because it uses greater information about its audience — you — to better influence your decisions. So would a system that prevented information collection, but still allowed advertisers to exercise that influence, be acceptable?&lt;/p&gt;
  7073.  
  7074.  
  7075.  
  7076. &lt;p&gt;We would also need to decide to what extent a browser — a user agent — can justifiably act in ways that are not directly in the interests of its user. Protected Audience exists for the benefit of the advertising industry. A system that makes it easier to make websites supported by advertising has benefits. After all, advertising does have the potential to make content more widely accessible to people of different means, with richer people effectively subsidizing content for those of lesser means. A stronger Protected Audience might then provide people with a real, if indirect, benefit. Does that benefit outweigh the costs of giving advertisers greater influence over our decision-making?&lt;/p&gt;
  7077.  
  7078.  
  7079.  
  7080. &lt;p&gt;With Protected Audience as it is today, we can simply set those questions aside. In failing to achieve its own privacy goals, Protected Audience is not now — and maybe not ever — a good addition to the Web.&lt;/p&gt;
  7081.  
  7082.  
  7083.  
  7084. &lt;p&gt;Read our &lt;a href=&quot;https://mozilla.github.io/ppa-docs/protected-audience.pdf&quot;&gt;much longer analysis of Protected Audience&lt;/a&gt; for more details.&lt;/p&gt;
  7085.  
  7086.  
  7087.  
  7088. &lt;p&gt;&lt;/p&gt;
  7089. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/privacy-security/googles-protected-audience-protects-advertisers/&quot;&gt;Google’s Protected Audience Protects Advertisers (and Google) More Than It Protects You&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;</description>
  7090. <pubDate>Wed, 03 Apr 2024 14:01:49 +0000</pubDate>
  7091. <dc:creator>Martin Thomson</dc:creator>
  7092. </item>
  7093. <item>
  7094. <title>Don Marti: GPC all the things!</title>
  7095. <guid isPermaLink="true">https://blog.zgp.org/gpc-all-the-things/</guid>
  7096. <link>https://blog.zgp.org/gpc-all-the-things/</link>
  7097. <description>&lt;p&gt;&lt;em&gt;(this post is subject to change as I come up with more places. Get in touch if you want to suggest one.)&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Now that we have &lt;a href=&quot;https://globalprivacycontrol.org/&quot;&gt;Global Privacy Control&lt;/a&gt; for the web, can we do better? Where else do we need it? Not everything is on the web.&lt;/p&gt; &lt;p&gt;The big risk of having GPC for web but not for other systems is that surveillance companies will start forcing or nudging you to interact with them in other ways—if the surveillance options are too easy to use elsewhere, then more companies will use &lt;a href=&quot;https://www.forbes.com/sites/jennmcmillen/2024/03/27/who-uses-dark-patterns-a-breakdown-of-e-commerce-bad-practices/?sh=4b9f8633dfe4&quot;&gt;deceptive practices&lt;/a&gt; to drive us to all use communications technologies where browser privacy features can’t protect us. From my point of view, as someone who would rather use the web, that would be bad. (&lt;strong&gt;Install our app for full product info or to schedule a demo! Press the button on your printer or Internet refrigerator to order!&lt;/strong&gt; Yikes.)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Smart TVs:&lt;/strong&gt; As far as I know, these support HTTP, so the existing &lt;a href=&quot;https://privacycg.github.io/gpc-spec/#the-sec-gpc-header-field-for-http-requests&quot;&gt;Sec-GPC&lt;/a&gt; header should work fine. Finding the right option in the TV menus is left as an exercise for the reader.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;mobile apps:&lt;/strong&gt; Same, apps also use HTTP so the same header should work. Set one preference per device or account and have it work across all apps.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;other devices with an order button:&lt;/strong&gt; I don’t know about these, will have to look it up.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;email part 1:&lt;/strong&gt; Email also has headers, so standardizing a GPC header would also work, but needs to grind through the RFC process.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;email part 2:&lt;/strong&gt; add &lt;code&gt;+sec-gpc&lt;/code&gt; to your address when you mail a company. CRM systems and related software can already handle &lt;a href=&quot;https://www.rfc-editor.org/info/rfc5233&quot;&gt;RFC 5233&lt;/a&gt;-style plus addresses, so could treat incoming email from &lt;code&gt;bob+sec-gpc@dobbs.example&lt;/code&gt; as an opt out for &lt;code&gt;bob@dobbs.example&lt;/code&gt;. (GPC in email could be &lt;a href=&quot;https://www.rfc-editor.org/info/rfc6376&quot;&gt;DKIM&lt;/a&gt;-signed, too.)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Instant messaging:&lt;/strong&gt; So many options, should be doable but a pain because all the big companies want to have their own special protocol. The mobile device GPC should cover it from the sender side, but a recipient company still needs to get the GPC passed through on a message from a customer, somehow.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;ActivityPub:&lt;/strong&gt; Normal GPC in a header works if you connect to an instance directly, but the &lt;a href=&quot;https://github.com/w3c/activitypub/issues/403&quot;&gt;standard would need to be extended to let user opt outs and/or preferences travel with their content&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;NFC:&lt;/strong&gt; &lt;a href=&quot;https://nfc-forum.org/&quot;&gt;The standard behind tap-to-pay&lt;/a&gt; and similar features could be extended to support GPC. This one would take more coding and have a longer deployment cycle, though.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;vehicle license plates:&lt;/strong&gt; It’s time for a crossover event between the &lt;a href=&quot;https://cppa.ca.gov/&quot;&gt;California Privacy Protection Agency (CPPA)&lt;/a&gt; and &lt;a href=&quot;https://www.dmv.ca.gov/portal/vehicle-registration/license-plates-decals-and-placards/california-license-plates/order-special-interest-and-personalized-license-plates/&quot;&gt;Special Interest License Plates at the DMV&lt;/a&gt;. Add a special symbol to license plates to require companies using ALPR systems to treat the plate, and related database records, as opted out. But wait a minute, custom and special-interest plates cost extra! Wouldn’t that be asking people to pay for privacy? (I’d get one, but really just to fly my privacy nerd flag so I don’t count.) Not necessarily—most of these could end up being free to the vehicle owner. In practice, GPC plates would be a way to help resolve privacy class action lawsuits. Instead of getting yet another free credit monitoring service when a company settles a case (and you probably had free credit monitoring from the last class you were in) a company could settle for buying everyone in the class their choice of credit monitoring or a GPC plate. An interesting piece of graphic design work for somebody would be coming up with an easily recognizable symbol that an ALPR system would not get mixed up with any of the other symbols that are allowed on a license plate.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;face recognition:&lt;/strong&gt; Once we have a GPC symbol for license plates, require companies that process images for the purposes of identifying people to also check for the symbol. Then you could wear it on a T-shirt, on a piece of flair, or on the front of a hat.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;tire pressure monitors:&lt;/strong&gt; These devices &lt;a href=&quot;https://www.schneier.com/blog/archives/2008/04/tracking_vehicl.html&quot;&gt;have a unique ID&lt;/a&gt; and can be used for surveillance. This probably also apples to a bunch of other little radios that follow you around, but maybe the easier method here is to ban commercial surveillance using little radios that follow people around, since there’s not really a legit use case.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;postal addresses:&lt;/strong&gt; There should be a way to pack a GPC into an apartment number. Maybe treat an address from apartment “GPC” as an opt-out for the same address without “GPC” if you have it, and an address from apartment “3AGPC” as an opt-out for apartment 3A?&lt;/p&gt; &lt;h3&gt;more GPC for web&lt;/h3&gt; &lt;p&gt;&lt;strong&gt;Sec-GPC as a response header:&lt;/strong&gt; The big use case for this would be a server that hosts a directory, blog, services booking tool, or other resource containing personal information. The &lt;code&gt;Sec-GPC&lt;/code&gt; response header would look just like the &lt;a href=&quot;https://privacycg.github.io/gpc-spec/#the-sec-gpc-header-field-for-http-requests&quot;&gt;existing header&lt;/a&gt; except on the HTTP response, not the request. The meaning would be to apply a &lt;a href=&quot;https://privacycg.github.io/gpc-spec/#dfn-preference&quot;&gt;do-not-sell-or-share preference&lt;/a&gt; to any personal information collected by web crawlers.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;GPC meta tag:&lt;/strong&gt; This could be something like &lt;code&gt;&amp;lt;meta http-equiv=&quot;Sec-GPC&quot; content=&quot;1&quot; /&amp;gt;&lt;/code&gt;. Would be useful for people making personal sites on hosting plans where they can edit HTML but not configure HTTP headers.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;GPC in robots.txt:&lt;/strong&gt; Another possible place to put GPC as a server-to-crawler OOPS. FIXME: how to handle this to convey permissions—you might want a crawler to check for something like an RSS update, but not harvest your contact info for &lt;q&gt;sale&lt;/q&gt;/&lt;q&gt;sharing&lt;/q&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;GPC in links:&lt;/strong&gt; Sort of like a &lt;q&gt;nofollow&lt;/q&gt; link, you could tag a link containing personal info as opted out: &lt;code&gt;&amp;lt;a class=&quot;secGPC&quot; href=&quot;mailto:user@example.com&quot;&amp;gt;mail me (but don't sell/share my info)&amp;lt;/a&amp;gt;&lt;/code&gt;. That would send an OOPS for the email address but not any other info collected from the page.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;GPC for RSS:&lt;/strong&gt; It might be possible to handle this with the HTTP response header, and not have to put GPC in too many places.&lt;/p&gt; &lt;p&gt;Scraping can already be actionable as a violation of site ToS, but being able to tag a page by or about a person as opted out is another level of protection that imho will help encourage more people to make more useful sites. As a site operator, you want to be able to put up something like a blog, company directory, or event speaker profiles without feeding your site’s people to who knows what.&lt;/p&gt; &lt;h3&gt;Related&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/30-40-30/&quot;&gt;the 30-40-30 rule&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/effective-privacy-tips/&quot;&gt;effective privacy tips&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/ccpa-escalation/&quot;&gt;figuring out the CCPA escalation path&lt;/a&gt;&lt;/p&gt;</description>
  7098. <pubDate>Wed, 03 Apr 2024 00:00:00 +0000</pubDate>
  7099. </item>
  7100. <item>
  7101. <title>Firefox Nightly: Switch to Container Tabs – These Weeks in Firefox: Issue 157</title>
  7102. <guid isPermaLink="false">https://blog.nightly.mozilla.org/?p=1590</guid>
  7103. <link>https://blog.nightly.mozilla.org/2024/04/02/switch-to-container-tabs-these-weeks-in-firefox-issue-157/</link>
  7104. <description>&lt;h3&gt;Highlights&lt;/h3&gt;
  7105. &lt;ul&gt;
  7106. &lt;li&gt;After fixing some bugs discovered in Nightly, Marco has &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1882815&quot;&gt;enabled cross-container tab search&lt;/a&gt; on beta and release. This should go out with Firefox 125!
  7107. &lt;ul&gt;
  7108. &lt;li&gt;
  7109. &lt;p&gt;&lt;/p&gt;&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1585&quot; style=&quot;width: 1079px;&quot;&gt;&lt;a href=&quot;https://blog.nightly.mozilla.org/files/2024/03/image2-1.png&quot;&gt;&lt;img alt=&quot;The Firefox URL bar is open with the characters &amp;quot;stea&amp;quot; entered. One of the suggestions is for an Amazon page for the Steam Deck console, which is opened in a Shopping container tab. A &amp;quot;Switch to Tab - Shopping&amp;quot; item is displayed next to the search result.&quot; class=&quot;size-full wp-image-1585&quot; height=&quot;544&quot; src=&quot;https://blog.nightly.mozilla.org/files/2024/03/image2-1.png&quot; width=&quot;1069&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1585&quot;&gt;Container tab users, rejoice!&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;
  7110. &lt;/ul&gt;
  7111. &lt;/li&gt;
  7112. &lt;li&gt;Daisuke fixed a 22-year old bug and we now &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=130327&quot;&gt;prevent passwords in URLs from being saved in history&lt;/a&gt;!&lt;/li&gt;
  7113. &lt;li&gt;DevTools are getting faster! Nicolas Chevobbe &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1884072&quot;&gt;improved Style Editor opening by 15%-20%&lt;/a&gt;&lt;/li&gt;
  7114. &lt;li&gt;The first version of the Speedometer 3 benchmark was released last week. &lt;a href=&quot;https://hacks.mozilla.org/2024/03/improving-performance-in-firefox-and-across-the-web-with-speedometer-3/&quot;&gt;Read bgrins’ blog post about the benchmark&lt;/a&gt;, and how we’re collaborating with other browser vendors to develop a meaningful benchmark that has actually resulted in felt improvements to web performance.&lt;/li&gt;
  7115. &lt;/ul&gt;
  7116. &lt;h3&gt;Friends of the Firefox team&lt;/h3&gt;
  7117. &lt;h3&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/buglist.cgi?title=Resolved%20bugs%20%28excluding%20employees%29&amp;amp;quicksearch=1826095%2C1884135%2C1763961%2C1885037&amp;amp;list_id=16945646&quot;&gt;Resolved bugs (excluding employees)&lt;/a&gt;&lt;/h3&gt;
  7118. &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;
  7119. &lt;h4&gt;Volunteers that fixed more than one bug&lt;/h4&gt;
  7120. &lt;ul&gt;
  7121. &lt;li&gt;Javi Rueda :javirid&lt;/li&gt;
  7122. &lt;/ul&gt;
  7123. &lt;h4&gt;New contributors (🌟 = first patch)&lt;/h4&gt;
  7124. &lt;ul&gt;
  7125. &lt;li&gt;Artem Manushenkov made unchecking “Pick an element from the page” in “Available Toolbox Buttons” &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1763961&quot;&gt;disable hotkey for opening element picker/inspector&lt;/a&gt;&lt;/li&gt;
  7126. &lt;/ul&gt;
  7127. &lt;h3&gt;Project Updates&lt;/h3&gt;
  7128. &lt;h4&gt;Add-ons / Web Extensions&lt;/h4&gt;
  7129. &lt;h5&gt;WebExtension APIs&lt;/h5&gt;
  7130. &lt;ul&gt;
  7131. &lt;li&gt;Starting in Firefox 125 proxy.onRequest allows proxyAuthorizationHeader to be used also on HTTP intercepted requests – &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1794464&quot;&gt;Bug 1794464&lt;/a&gt;&lt;/li&gt;
  7132. &lt;/ul&gt;
  7133. &lt;h4&gt;Developer Tools&lt;/h4&gt;
  7134. &lt;h5&gt;DevTools&lt;/h5&gt;
  7135. &lt;ul&gt;
  7136. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=750915&quot;&gt;Artem Manushenkov&lt;/a&gt; updated the Watch Expressions input field placeholder value (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1619201&quot;&gt;#1619201&lt;/a&gt;)&lt;/li&gt;
  7137. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=750915&quot;&gt;Artem Manushenkov&lt;/a&gt; made sure that the “Pick an element from the page” keyboard shortcut is disabled when the feature itself is disabled. (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1763961&quot;&gt;#1763961&lt;/a&gt;)&lt;/li&gt;
  7138. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=283262&quot;&gt;Alexandre Poirot&lt;/a&gt; fixed the Network panel in the Browser Toolbox so it can actually show network requests (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1883947&quot;&gt;#1883947&lt;/a&gt;)&lt;/li&gt;
  7139. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=283262&quot;&gt;Alexandre Poirot&lt;/a&gt; added &lt;a href=&quot;https://firefox-source-docs.mozilla.org/devtools-user/javascript_tracer/index.html&quot;&gt;documentation&lt;/a&gt; for the JS tracer (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1884194&quot;&gt;#1884194&lt;/a&gt;)&lt;/li&gt;
  7140. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=557153&quot;&gt;Nicolas Chevobbe&lt;/a&gt; added support for CustomStateSet objects, used for &lt;a href=&quot;https://wicg.github.io/custom-state-pseudo-class/&quot;&gt;Custom State pseudo classes&lt;/a&gt; (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1862896&quot;&gt;#1862896&lt;/a&gt;)
  7141. &lt;ul&gt;
  7142. &lt;li&gt;&lt;a href=&quot;https://blog.nightly.mozilla.org/files/2024/03/image3-1.png&quot;&gt;&lt;img alt=&quot;A CustomStateSet object is being inspected in the Firefox DevTools console. The example contains two entries: &amp;quot;initialized&amp;quot; and &amp;quot;custom-state&amp;quot;.&quot; class=&quot;aligncenter size-full wp-image-1586&quot; height=&quot;210&quot; src=&quot;https://blog.nightly.mozilla.org/files/2024/03/image3-1.png&quot; width=&quot;984&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
  7143. &lt;li&gt;behind &lt;code&gt;dom.element.customstateset.enabled&lt;/code&gt;&lt;/li&gt;
  7144. &lt;/ul&gt;
  7145. &lt;/li&gt;
  7146. &lt;/ul&gt;
  7147. &lt;h5&gt;WebDriver BiDi&lt;/h5&gt;
  7148. &lt;ul&gt;
  7149. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=76551&quot;&gt;Henrik Skupin&lt;/a&gt; vendored the new Puppeteer v22.4.0 release into mozilla-central (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1878632&quot;&gt;#1878632&lt;/a&gt;)&lt;/li&gt;
  7150. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=76551&quot;&gt;Henrik Skupin&lt;/a&gt; fixed mach puppeteer-test command to enable running the tests with Chrome, including the ability to specify a custom binary (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1877629&quot;&gt;#1877629&lt;/a&gt;)&lt;/li&gt;
  7151. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=76551&quot;&gt;Henrik Skupin&lt;/a&gt; fixed the behavior when running with only WebDriver BiDi enabled (without CDP), no recommended automation preferences were being set for Firefox (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1882748&quot;&gt;#1882748&lt;/a&gt;)&lt;/li&gt;
  7152. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=76551&quot;&gt;Henrik Skupin&lt;/a&gt; resolved a race condition in WebDriver BiDi when creating or switching between tabs within the same OS window. This fix ensures that the document.visibilityState value is correctly set to hidden when the corresponding commands are executed (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1877469&quot;&gt;#1877469&lt;/a&gt;)&lt;/li&gt;
  7153. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=704132&quot;&gt;Alexandra Borovova&lt;/a&gt; implemented the input.setFiles command, which allows clients to set the files property of a given input element with type file to a list of file paths (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1855040&quot;&gt;#1855040&lt;/a&gt;)&lt;/li&gt;
  7154. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=559949&quot;&gt;Julian Descottes&lt;/a&gt; added a new capability userAgent for WebDriver Classic and BiDi, which returns the default user agent (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885495&quot;&gt;#1885495&lt;/a&gt;)&lt;/li&gt;
  7155. &lt;/ul&gt;
  7156. &lt;h4&gt;ESMification status&lt;/h4&gt;
  7157. &lt;ul&gt;
  7158. &lt;li&gt;
  7159. &lt;ul&gt;
  7160. &lt;li&gt;Standard8 has been cleaning up some &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1884623&quot;&gt;obsolete JSM&lt;/a&gt; &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885723&quot;&gt;references&lt;/a&gt; in code.&lt;/li&gt;
  7161. &lt;li&gt;ESMified status:
  7162. &lt;ul&gt;
  7163. &lt;li&gt;devtools: 89.29%
  7164. &lt;ul&gt;
  7165. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1817259&quot;&gt;Bug 1817259&lt;/a&gt;&lt;/li&gt;
  7166. &lt;/ul&gt;
  7167. &lt;/li&gt;
  7168. &lt;li&gt;mobile: 98.37%&lt;/li&gt;
  7169. &lt;/ul&gt;
  7170. &lt;/li&gt;
  7171. &lt;/ul&gt;
  7172. &lt;/li&gt;
  7173. &lt;/ul&gt;
  7174. &lt;ul&gt;
  7175. &lt;li&gt;Everywhere else: 100%&lt;/li&gt;
  7176. &lt;/ul&gt;
  7177. &lt;ul&gt;
  7178. &lt;li&gt;&lt;b&gt;Only 7 JSMs left in the tree!&lt;/b&gt;&lt;/li&gt;
  7179. &lt;/ul&gt;
  7180. &lt;ul&gt;
  7181. &lt;li&gt;
  7182. &lt;ul&gt;
  7183. &lt;li&gt;Total:  99.54% (+0.19% from last time)&lt;/li&gt;
  7184. &lt;/ul&gt;
  7185. &lt;/li&gt;
  7186. &lt;li&gt;#esmification on Matrix&lt;/li&gt;
  7187. &lt;/ul&gt;
  7188. &lt;h4&gt;Lint, Docs and Workflow&lt;/h4&gt;
  7189. &lt;ul&gt;
  7190. &lt;li&gt;Gijs has enabled a new rule to &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1880899&quot;&gt;block adding more globals to browser.js&lt;/a&gt;.
  7191. &lt;ul&gt;
  7192. &lt;li&gt;Please &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1880897&quot;&gt;see the metabug&lt;/a&gt; for details about splitting up browser.js.&lt;/li&gt;
  7193. &lt;/ul&gt;
  7194. &lt;/li&gt;
  7195. &lt;li&gt;Greg enabled the valid-jsdoc ruleset on the &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1814289&quot;&gt;toolkit/components/translations/ component&lt;/a&gt;.&lt;/li&gt;
  7196. &lt;li&gt;Standard8 enabled the &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1883371&quot;&gt;ESLint no-console rule on production code&lt;/a&gt;.
  7197. &lt;ul&gt;
  7198. &lt;li&gt;See the &lt;a href=&quot;https://groups.google.com/a/mozilla.org/g/firefox-dev/c/L5tkkdxlkLI/m/KCgsMwApAQAJ&quot;&gt;announcement for more details&lt;/a&gt;.&lt;/li&gt;
  7199. &lt;/ul&gt;
  7200. &lt;/li&gt;
  7201. &lt;/ul&gt;
  7202. &lt;h4&gt;Migration Improvements&lt;/h4&gt;
  7203. &lt;ul&gt;
  7204. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1883052&quot;&gt;Backup up a profile to a file project&lt;/a&gt;
  7205. &lt;ul&gt;
  7206. &lt;li&gt;This project is still in its early infancy, and we’re &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1883503&quot;&gt;starting with measurement&lt;/a&gt;.&lt;/li&gt;
  7207. &lt;li&gt;We’ve landed &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1884407&quot;&gt;some&lt;/a&gt; &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1883642&quot;&gt;probes&lt;/a&gt; and &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1884995&quot;&gt;infrastructure&lt;/a&gt; over the past few days. We expect to have the initial probe landings done this week or early next. Then we can begin the next phase, which is to &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885369&quot;&gt;implement the “staging” of a backup in the background&lt;/a&gt;.&lt;/li&gt;
  7208. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1883514&quot;&gt;We’ve landed a patch to allow creating backups of the user preference state&lt;/a&gt;, off of the main thread.&lt;/li&gt;
  7209. &lt;li&gt;Working with PM and UX, we think we’ve settled on a format for the single-file backup archive that ticks all of the boxes. We’ll hopefully have more details on that soon after we finish writing documentation for it.&lt;/li&gt;
  7210. &lt;li&gt;&lt;a href=&quot;https://firefox-source-docs.mozilla.org/browser/components/backup/docs/index.html&quot;&gt;Check out our sweet JSDoc/Sphinx-JS powered source docs!&lt;/a&gt;&lt;/li&gt;
  7211. &lt;/ul&gt;
  7212. &lt;/li&gt;
  7213. &lt;/ul&gt;
  7214. &lt;h4&gt;Performance&lt;/h4&gt;
  7215. &lt;ul&gt;
  7216. &lt;li&gt;The &lt;a href=&quot;https://www.mozilla.org/en-US/firefox/124.0/releasenotes/&quot;&gt;off-main-thread Jump List backend for Windows shipped today&lt;/a&gt; in Firefox 124!&lt;/li&gt;
  7217. &lt;/ul&gt;
  7218. &lt;h4&gt;Screenshots (enabled by default in Nightly)&lt;/h4&gt;
  7219. &lt;ul&gt;
  7220. &lt;li&gt;This was mentioned in the meeting but I wanted to shout out again that the screenshots component is now enabled in Nightly (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1789727&quot;&gt;bug 1789727&lt;/a&gt;)! This allows screenshots on about: pages, has better performance, keyboard accessibility, and much more!&lt;/li&gt;
  7221. &lt;li&gt;niklas fixed a bug where &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1884172&quot;&gt;pasting into slack&lt;/a&gt; wasn’t working&lt;/li&gt;
  7222. &lt;li&gt;niklas fixed a bug where &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1882925&quot;&gt;black lines could appear&lt;/a&gt; in screenshots on &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1884936&quot;&gt;certain zoom levels&lt;/a&gt;&lt;/li&gt;
  7223. &lt;li&gt;Niklas is a new owner of the Screenshots module&lt;/li&gt;
  7224. &lt;/ul&gt;
  7225. &lt;h4&gt;Search and Navigation&lt;/h4&gt;
  7226. &lt;ul&gt;
  7227. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1833829&quot;&gt;Search Consolidation&lt;/a&gt;
  7228. &lt;ul&gt;
  7229. &lt;li&gt;The search configuration defines the search engines which are displayed to the user by default, according to their region, locale and other settings.&lt;/li&gt;
  7230. &lt;li&gt;Standard8 and mcheang have enabled the new search configuration on nightly, due to ship in FF 126&lt;/li&gt;
  7231. &lt;li&gt;This replaces the previous WebExtension + remote settings collection with a single remote settings collection for the configuration, and a separate one for icons.
  7232. &lt;ul&gt;
  7233. &lt;li&gt;&lt;a href=&quot;https://blog.nightly.mozilla.org/files/2024/03/image1-1.png&quot;&gt;&lt;img alt=&quot;Two technical diagrams of various components that communicate with the Firefox Search Service are displayed. In the first diagram, a &amp;quot;System add-ons shipped with Firefox&amp;quot; component feeds into the Search Service. In the second diagram, this item has been removed, since all configuration is now consolidated, coming from Remote Settings.&quot; class=&quot;aligncenter size-full wp-image-1584&quot; height=&quot;918&quot; src=&quot;https://blog.nightly.mozilla.org/files/2024/03/image1-1.png&quot; width=&quot;996&quot; /&gt;&lt;/a&gt;It also addresses complexities and other issues that were in the old configuration.&lt;/li&gt;
  7234. &lt;/ul&gt;
  7235. &lt;/li&gt;
  7236. &lt;/ul&gt;
  7237. &lt;/li&gt;
  7238. &lt;/ul&gt;
  7239. &lt;ul&gt;
  7240. &lt;li&gt;
  7241. &lt;ul&gt;
  7242. &lt;li&gt;The same collection will also be picked up later this year by our mobile platforms, allowing easier updates to our search engine configuration across products.&lt;/li&gt;
  7243. &lt;/ul&gt;
  7244. &lt;/li&gt;
  7245. &lt;/ul&gt;
  7246. &lt;ul&gt;
  7247. &lt;li&gt;Marco fixed a bug where &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1884308&quot;&gt;bookmarks could not be imported for very large sets of bookmarks&lt;/a&gt;.&lt;/li&gt;
  7248. &lt;li&gt;jteow, karendeep and scunnane continued work on improving our SERP (Search Engine Result Page) telemetry.&lt;/li&gt;
  7249. &lt;li&gt;adw and dharvey continued work on improving cross-platform suggestions&lt;/li&gt;
  7250. &lt;/ul&gt;
  7251. &lt;p&gt; &lt;/p&gt;</description>
  7252. <pubDate>Tue, 02 Apr 2024 15:50:15 +0000</pubDate>
  7253. <dc:creator>Mike Conley</dc:creator>
  7254. </item>
  7255. <item>
  7256. <title>Mozilla Thunderbird: Thunderbird Monthly Development Digest: March 2024</title>
  7257. <guid isPermaLink="false">https://blog.thunderbird.net/?p=1639</guid>
  7258. <link>https://blog.thunderbird.net/2024/04/thunderbird-monthly-development-digest-march-24/</link>
  7259. <description>&lt;p&gt;&lt;img alt=&quot;Graphic with text &amp;quot;Thunderbird Dev Digest April 2024,&amp;quot; featuring abstract ASCII art on a dark Thunderbird logo background.&quot; class=&quot;attachment-640x360 size-640x360 wp-post-image&quot; height=&quot;360&quot; src=&quot;https://blog.thunderbird.net/files/2024/04/dev-digest-march-2024-768x432.jpg&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
  7260. &lt;div class=&quot;wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex&quot;&gt;
  7261. &lt;div class=&quot;wp-block-button has-custom-font-size has-small-font-size&quot;&gt;&lt;a class=&quot;wp-block-button__link has-black-color has-white-background-color has-text-color has-background wp-element-button&quot; href=&quot;https://translate.google.com/translate?js=n&amp;amp;sl=auto&amp;amp;tl=de&amp;amp;u=https://blog.thunderbird.net/2024/04/thunderbird-monthly-development-digest-march-24/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Auf Deutsch übersetzen&lt;/a&gt;&lt;/div&gt;
  7262.  
  7263.  
  7264.  
  7265. &lt;div class=&quot;wp-block-button has-custom-font-size has-small-font-size&quot;&gt;&lt;a class=&quot;wp-block-button__link has-black-color has-white-background-color has-text-color has-background wp-element-button&quot; href=&quot;https://translate.google.com/translate?js=n&amp;amp;sl=auto&amp;amp;tl=fr&amp;amp;u=https://blog.thunderbird.net/2024/04/thunderbird-monthly-development-digest-march-24/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Traduire en français&lt;/a&gt;&lt;/div&gt;
  7266.  
  7267.  
  7268.  
  7269. &lt;div class=&quot;wp-block-button has-custom-font-size has-small-font-size&quot;&gt;&lt;a class=&quot;wp-block-button__link has-black-color has-white-background-color has-text-color has-background wp-element-button&quot; href=&quot;https://translate.google.com/translate?js=n&amp;amp;sl=auto&amp;amp;tl=ja&amp;amp;u=https://blog.thunderbird.net/2024/04/thunderbird-monthly-development-digest-march-24/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;日本語に翻訳&lt;/a&gt;&lt;/div&gt;
  7270. &lt;/div&gt;
  7271.  
  7272.  
  7273.  
  7274. &lt;p&gt;Hello Thunderbird Community! March is over, which means it’s time for another Development Digest to  share the current progress and product direction of Thunderbird development.&lt;/p&gt;
  7275.  
  7276.  
  7277.  
  7278. &lt;p&gt;Is this your first time reading the Development Digest? Find them all using the &lt;a href=&quot;https://blog.thunderbird.net/tag/dev-digest/&quot;&gt;Dev Digest tag&lt;/a&gt;!&lt;/p&gt;
  7279.  
  7280.  
  7281.  
  7282. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Rust and Exchange&lt;/strong&gt;&lt;/h3&gt;
  7283.  
  7284.  
  7285.  
  7286. &lt;p&gt;It seems that this section is part of every Development Digest! But that’s the reality of these large efforts, spanning across multiple months with slow but steady progress.&lt;/p&gt;
  7287.  
  7288.  
  7289.  
  7290. &lt;p&gt;This month we completed initial Exchange Autodiscovery and compatibility with OAuth in our account setup flow, as well as fetching and rendering of all folders. Some areas still need polish and clean up. But work continues towards having things behind a pref in the next beta release. You can follow the progress in &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1859656&quot;&gt;this bug&lt;/a&gt;.&lt;/p&gt;
  7291.  
  7292.  
  7293.  
  7294. &lt;p&gt;Meanwhile, here are some goodies to try if you need to parse the Microsoft Exchange Web Services data set and the current crates for serializing and deserializing XML don’t serve you well. &lt;a href=&quot;https://github.com/thunderbird/xml_struct&quot;&gt;https://github.com/thunderbird/xml_struct&lt;/a&gt;&lt;/p&gt;
  7295.  
  7296.  
  7297.  
  7298. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;List management&lt;/strong&gt;&lt;/h3&gt;
  7299.  
  7300.  
  7301.  
  7302. &lt;p&gt;Shout out to Magnus for implementing the first step towards a more manageable mailing list subscription flow. An initial implementation of the List Management feature just landed on daily and beta, and it was recently &lt;a href=&quot;https://thunderbird.topicbox.com/groups/beta/T7103372a2c45b3b0/mailing-list-management-now-supported&quot;&gt;announced in the tb-beta mailing list&lt;/a&gt; with a screenshot to show it in action.&lt;/p&gt;
  7303.  
  7304.  
  7305.  
  7306. &lt;p&gt;It’s currently accessible via a context menu on the List ID. But we’re planning to do some UX and UI explorations to find the best way to expose it without making it annoying.&lt;/p&gt;
  7307.  
  7308.  
  7309.  
  7310. &lt;p&gt;You can follow the work from &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885324&quot;&gt;this bug&lt;/a&gt;.&lt;/p&gt;
  7311.  
  7312.  
  7313.  
  7314. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Esmification completed!&lt;/strong&gt;&lt;/h3&gt;
  7315.  
  7316.  
  7317.  
  7318. &lt;p&gt;Another big shout out to Magnus for finishing the ESMification effort! As users, you won’t see or notice any difference, but for developers this substantial architectural change saw the removal of all .jsm files in favor of standard JavaScript modules. &lt;/p&gt;
  7319.  
  7320.  
  7321.  
  7322. &lt;p&gt;A huge win for a more standardized code base! This allows us to leverage all the nice features of modern JavaScript in Thunderbird development. &lt;/p&gt;
  7323.  
  7324.  
  7325.  
  7326. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Tiny changes and improvements in Thunderbird development&lt;/strong&gt;&lt;/h3&gt;
  7327.  
  7328.  
  7329.  
  7330. &lt;p&gt;A lot of nice quality of life improvements tend to happen in small chunks that are not easy to see or spot right away.&lt;/p&gt;
  7331.  
  7332.  
  7333.  
  7334. &lt;p&gt;Here’s a list of the projects we’re actively working on and will be focusing on for the next month:&lt;/p&gt;
  7335.  
  7336.  
  7337.  
  7338. &lt;ul&gt;
  7339. &lt;li&gt;Cards view UI completion.&lt;/li&gt;
  7340.  
  7341.  
  7342.  
  7343. &lt;li&gt;Fixed missing FindBar in multimessage and browser view.&lt;/li&gt;
  7344.  
  7345.  
  7346.  
  7347. &lt;li&gt;Implementation of a new visual selection paradigm.&lt;/li&gt;
  7348.  
  7349.  
  7350.  
  7351. &lt;li&gt;Improvements to usability and accessibility of the Quick Filter bar.&lt;/li&gt;
  7352.  
  7353.  
  7354.  
  7355. &lt;li&gt;Completion of the email setup in the new Account Hub.&lt;/li&gt;
  7356.  
  7357.  
  7358.  
  7359. &lt;li&gt;Many add-ons API improvements and additions (big shout out to John).&lt;/li&gt;
  7360.  
  7361.  
  7362.  
  7363. &lt;li&gt;Support for viewing nested signed messages and other OpenPGP improvements.&lt;/li&gt;
  7364. &lt;/ul&gt;
  7365.  
  7366.  
  7367.  
  7368. &lt;p&gt;Stay tuned and make sure to sign up to our mailing lists to get detailed updates on all the items in this list, and a lot more.&lt;/p&gt;
  7369.  
  7370.  
  7371.  
  7372. &lt;p&gt;As usual, if you want to see things as they land you can always check the &lt;a href=&quot;https://hg.mozilla.org/comm-central/pushloghtml&quot;&gt;pushlog &lt;/a&gt;and &lt;a href=&quot;https://ftp.mozilla.org/pub/thunderbird/nightly/2024/&quot;&gt;try running daily&lt;/a&gt;, which would be immensely helpful for catching bugs early.&lt;/p&gt;
  7373.  
  7374.  
  7375.  
  7376. &lt;p&gt;See ya next time in our April Development Digest.&lt;/p&gt;
  7377.  
  7378.  
  7379.  
  7380. &lt;p&gt;&lt;strong&gt;Alessandro Castellani&lt;/strong&gt; &lt;em&gt;(he, him)&lt;br /&gt;&lt;/em&gt;&lt;strong&gt;Director of Product Engineering&lt;/strong&gt;&lt;/p&gt;
  7381.  
  7382.  
  7383.  
  7384. &lt;figure class=&quot;wp-block-pullquote&quot; style=&quot;border-width: 2px; border-radius: 10px; font-style: normal; font-weight: 400;&quot;&gt;&lt;blockquote&gt;&lt;p&gt;If you’re interested in joining the technical discussion around Thunderbird development, consider joining one or several of our &lt;a href=&quot;https://thunderbird.topicbox.com&quot;&gt;mailing list groups here&lt;/a&gt;. &lt;/p&gt;&lt;/blockquote&gt;&lt;/figure&gt;
  7385. &lt;p&gt;The post &lt;a href=&quot;https://blog.thunderbird.net/2024/04/thunderbird-monthly-development-digest-march-24/&quot;&gt;Thunderbird Monthly Development Digest: March 2024&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;</description>
  7386. <pubDate>Tue, 02 Apr 2024 15:20:13 +0000</pubDate>
  7387. <dc:creator>Alessandro Castellani</dc:creator>
  7388. </item>
  7389. <item>
  7390. <title>Don Marti: trying to think about European tech policy in context</title>
  7391. <guid isPermaLink="true">https://blog.zgp.org/trying-to-think-about-european-tech-policy-in-context/</guid>
  7392. <link>https://blog.zgp.org/trying-to-think-about-european-tech-policy-in-context/</link>
  7393. <description>&lt;p&gt;Good post on &lt;a href=&quot;https://ianbetteridge.com/2024/04/01/antitrust-meta-apple-and-more/&quot;&gt;Antitrust, Meta, Apple and more by Ian Betteridge&lt;/a&gt;.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;The EU isn’t just concerned with today. It’s really taking Steve Jobs’ advice and listening to the Wayne Gretzky quote: it’s skating to where the puck is going, not where it’s been. Its aim is to ensure that two very large companies don’t own the market for smartphones to such a degree they can determine everything that happens in those markets, to their advantage. The EU is a capitalist body: its obsession is keeping markets open, and it will do anything it needs to do to make sure that happens.&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;From here in the USA, it looks to me like we need to put our understanding of European privacy and competition policy into context. We seem to spend a lot of time in the weeds trying to figure out what will be allowed by specific laws and regulations, and maybe we’re missing the big picture. From here, it looks like the EU has two really big problems.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;p&gt;&lt;strong&gt;The EU’s most important problem&lt;/strong&gt; is climate change, including the problem of climate refugees. Worst case is that Europe has to rebuild their infrastructure and agriculture while somehow dealing with 1.2 billion people who need to move there because their old home is unlivable now. None of the ways that the EU can address this problem are going to make everybody happy, and the EU somehow has to do them in a decentralized democratic system.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;&lt;strong&gt;The EU’s most urgent problem&lt;/strong&gt; is that Europe is being invaded by Russia—regular Russian forces in several eastern European countries, and economic, information, and network warfare clearing the way for them further west. Also a hard problem, partly because of &lt;a href=&quot;https://www.dw.com/en/hybrid-warfare-germany-braces-for-russian-influence-operations/a-68670972&quot;&gt;the Putin regime’s ability to work the political system&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Big Tech isn’t in trouble in Europe because companies are failing to comply with whatever the EU laws are today. They’re in trouble because they’re more of a part of the problem than a part of the solution on the big issues. The EU says that they want social media companies to &lt;a href=&quot;https://www.theguardian.com/media/2024/mar/26/tech-firms-poised-to-mass-hire-factcheckers-before-eu-elections&quot;&gt;hire factcheckers to fight election fake news&lt;/a&gt;, they &lt;a href=&quot;https://techcrunch.com/2024/03/25/dma-first-formal-probes/&quot;&gt;opened up a bunch of competition cases on platform companies&lt;/a&gt;, and, of course, they’re going to shut down &lt;a href=&quot;https://noyb.eu/en/28-ngos-urge-eu-dpas-reject-pay-or-okay-meta&quot;&gt;Meta’s bogus pay or consent policy&lt;/a&gt;. &lt;span class=&quot;aside&quot;&gt;if the pay or consent model actually worked it would turn the whole GDPR into a no-op. Every vending machine would have &lt;q&gt;pay €2 and consent&lt;/q&gt; and &lt;q&gt;pay €1002, no consent&lt;/q&gt; buttons. Pay or consent is not going to hold up in court but the Meta team that deployed it have already collected their bonuses and moved on.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;But it’s not about the individual cases. If the EU throws the book at a Big Tech company, and the company successfully dodges it, what happens is that the EU makes a heavier book and throws harder. As long as a company is working for the Russians, for the fossil-fuel industry, and for divisive right-wing groups (yes, they overlap) then they’re going to have a problem in the EU. Someone in the EU is probably also reading the history of &lt;a href=&quot;https://www.benjirolsky.com/ruminations/2019/12/12/7ukdpo0erbmz6tb442el2ykr6uf9yb&quot;&gt;the US Republican party and direct mail&lt;/a&gt;—a party that had been a coalition of defense, free-market, and social conservative factions rapidly pivoted in the post-Goldwater years based on what works as direct mail (and now email and social media) copy. In the USA, it looks like direct mail, personalized, and surveillance advertising give advantages to fear-based and racially divisive messsages that would work less well in other media. If that applies in Europe too, a crackdown on the surveillance industry makes sense even outside the context of the coming &lt;a href=&quot;https://blog.zgp.org/privacy-economic-boom/&quot;&gt;post-surveillance economic boom&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;And yes, there’s an &lt;a href=&quot;https://hypatia.ca/2017/07/18/the-al-capone-theory-of-sexual-harassment/&quot;&gt;Al Capone effect&lt;/a&gt; going on here. The same Big Tech management teams that &lt;a href=&quot;https://www.theguardian.com/technology/2018/nov/01/google-walkout-global-protests-employees-sexual-harassment-scandals&quot;&gt;reward sexual harassment with big checks&lt;/a&gt; are also willing to monetize scams hosted in adversary countries and &lt;a href=&quot;https://blog.zgp.org/ad-supported-piracy/&quot;&gt;copyright-infringing sites run from adversary countries&lt;/a&gt;. I still don’t understand the appeal of Vladimir Putin fandom among tech thought leaders, but it’s there—and as long it persists, climate change and European security are the underlying problems for Big Tech in Europe, not any specific policies.&lt;/p&gt; &lt;h3&gt;Related&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/predictions-opt-out/&quot;&gt;Opting out of doing 2024 predictions&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/privacy-econ-sources/&quot;&gt;privacy economics sources&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/banning-surveillance-advertising/&quot;&gt;banning surveillance advertising&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/deception-design/&quot;&gt;some ways that Facebook ads are optimized for deceptive advertising&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://blog.zgp.org/shitlordery/&quot;&gt;Some questions on a screenshot&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Bonus links&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://www.politico.eu/article/amazon-loses-eu-court-bid-to-delay-digital-rules-on-online-ads/&quot;&gt;Amazon loses EU court bid to delay digital rules on online ads&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://theconversation.com/no-the-west-is-not-to-blame-for-russias-war-in-ukraine-why-this-myth-and-others-are-so-difficult-to-dispel-226306&quot;&gt;No, the West is not to blame for Russia’s war in Ukraine. Why this myth – and others – are so difficult to dispel&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://techcrunch.com/2024/03/20/meta-privacy-fee-eu-assessment/&quot;&gt;EU signals doubts over legality of Meta’s privacy fee&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.theguardian.com/technology/2024/mar/20/google-fined-250m-euros-in-france-for-breaching-intellectual-property-rules&quot;&gt;Google fined €250m in France for breaching intellectual property deal&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://techcrunch.com/2024/03/07/iab-tcf-cjeu/&quot;&gt;Tracking ads industry faces another body blow in the EU&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://businessukraine.ua/for-the-first-time-ever-ukraine-has-passed-the-winter-heating-season-relying-exclusively-on-domestic-gas/&quot;&gt;For the first time ever, Ukraine has passed the winter heating season relying exclusively on domestic gas&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://techcrunch.com/2024/03/01/meta-rfi-dsa-ad-free-subscription/&quot;&gt;Now the EU is asking questions about Meta’s ‘pay or be tracked’ consent model&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.politico.eu/article/32-european-media-groups-claim-e2-1-billion-from-google/&quot;&gt;Google hit with €2.1B lawsuit from more than 30 European media companies&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://go.theregister.com/feed/www.theregister.com/2024/02/29/meta_gdpr_complaints/&quot;&gt;Meta’s pay-or-consent model hides ‘massive illegal data processing ops’: lawsuit&lt;/a&gt;&lt;/p&gt;</description>
  7394. <pubDate>Mon, 01 Apr 2024 00:00:00 +0000</pubDate>
  7395. </item>
  7396. <item>
  7397. <title>The Servo Blog: This month in Servo: tables, WOFF2, Outreachy, and more!</title>
  7398. <guid isPermaLink="true">https://servo.org/blog/2024/03/30/tables-woff2-outreachy/</guid>
  7399. <link>https://servo.org/blog/2024/03/30/tables-woff2-outreachy/</link>
  7400. <description>&lt;figure class=&quot;_figr&quot;&gt;&lt;a href=&quot;https://servo.org/img/blog/new-in-march-2024.png&quot;&gt;&lt;img alt=&quot;Servo nightly showing a table with ‘box-shadow’ and WOFF2 web fonts, containing demos of several other new features&quot; src=&quot;https://servo.org/img/blog/new-in-march-2024.png&quot; /&gt;&lt;/a&gt;
  7401. &amp;lt;figcaption&amp;gt;Servo now supports tables, box and text shadows, setting fonts on 2D canvases, synthetic small caps, conic and repeating conic gradients, and WOFF2 web fonts.&amp;lt;/figcaption&amp;gt;&lt;/figure&gt;
  7402. &lt;p&gt;&lt;span class=&quot;_floatmin&quot;&gt;&lt;/span&gt;This month, after surpassing our legacy layout engine in the CSS test suites, we’re proud to share that Servo has &lt;strong&gt;surpassed legacy in the whole suite of Web Platform Tests&lt;/strong&gt; as well!&lt;/p&gt;
  7403. &lt;p&gt;Servo now supports &lt;strong&gt;WOFF2 web fonts&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/31879&quot;&gt;#31879&lt;/a&gt;), &lt;strong&gt;‘box-shadow’&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/31453&quot;&gt;#31453&lt;/a&gt;), &lt;strong&gt;‘text-shadow’&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/31734&quot;&gt;#31734&lt;/a&gt;), &lt;strong&gt;‘conic-gradient()’&lt;/strong&gt; and &lt;strong&gt;‘repeating-conic-gradient()’&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/31597&quot;&gt;#31597&lt;/a&gt;), and &lt;strong&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/font-synthesis-small-caps&quot;&gt;synthetic&lt;/a&gt; small caps&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/31435&quot;&gt;#31435&lt;/a&gt;).
  7404. &lt;strong&gt;‘text-decoration: line-through’&lt;/strong&gt; is also supported on macOS now (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31756&quot;&gt;#31756&lt;/a&gt;).&lt;/p&gt;
  7405. &lt;p&gt;In other layout news, &lt;strong&gt;tables are now enabled by default&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/31470&quot;&gt;#31470&lt;/a&gt;), you can now &lt;strong&gt;transform &amp;lt;iframe&amp;gt; and &amp;lt;img&amp;gt;&lt;/strong&gt; (and other inline replaced elements) without wrapping them in a container (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31833&quot;&gt;#31833&lt;/a&gt;), we now have full support for &lt;strong&gt;&amp;lt;div align&amp;gt; and &amp;lt;center&amp;gt;&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/31423&quot;&gt;#31423&lt;/a&gt;), and &lt;strong&gt;‘text-align: justify’&lt;/strong&gt; now takes &lt;strong&gt;‘text-indent’&lt;/strong&gt; into account (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31777&quot;&gt;#31777&lt;/a&gt;).&lt;/p&gt;
  7406. &lt;p&gt;You can now &lt;strong&gt;set the &lt;code&gt;font&lt;/code&gt; on 2D canvases&lt;/strong&gt; (&lt;a href=&quot;https://github.com/syvb&quot;&gt;@syvb&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31436&quot;&gt;#31436&lt;/a&gt;), and use several other APIs:&lt;/p&gt;
  7407. &lt;ul&gt;
  7408. &lt;li&gt;as of 2024-03-02, &lt;strong&gt;&amp;lt;meta http-equiv=&quot;Refresh&quot;&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/syvb&quot;&gt;@syvb&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31468&quot;&gt;#31468&lt;/a&gt;)&lt;/li&gt;
  7409. &lt;li&gt;as of 2024-03-15, &lt;strong&gt;&amp;lt;style disabled&amp;gt;&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/31682&quot;&gt;#31682&lt;/a&gt;)&lt;/li&gt;
  7410. &lt;li&gt;as of 2024-03-16, basic support for &lt;strong&gt;getClientRects()&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/31696&quot;&gt;#31696&lt;/a&gt;)&lt;/li&gt;
  7411. &lt;li&gt;as of 2024-03-18, &lt;strong&gt;console.count()&lt;/strong&gt; and &lt;strong&gt;console.countReset()&lt;/strong&gt; (&lt;a href=&quot;https://github.com/syvb&quot;&gt;@syvb&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31635&quot;&gt;#31635&lt;/a&gt;)&lt;/li&gt;
  7412. &lt;li&gt;as of 2024-03-20, &lt;strong&gt;createComputePipelineAsync()&lt;/strong&gt; and &lt;strong&gt;createRenderPipelineAsync()&lt;/strong&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/31695&quot;&gt;#31695&lt;/a&gt;)&lt;/li&gt;
  7413. &lt;li&gt;as of 2024-03-23, &lt;strong&gt;StaticRange&lt;/strong&gt; and &lt;strong&gt;AbstractRange&lt;/strong&gt; (&lt;a href=&quot;https://github.com/nipunG314&quot;&gt;@nipunG314&lt;/a&gt;, &lt;a href=&quot;https://github.com/cathiechen&quot;&gt;@cathiechen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/25466&quot;&gt;#25466&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31809&quot;&gt;#31809&lt;/a&gt;)&lt;/li&gt;
  7414. &lt;li&gt;as of 2024-03-27, the obsolete &lt;strong&gt;&amp;lt;pre width&amp;gt;&lt;/strong&gt; attribute (&lt;a href=&quot;https://github.com/bplaat&quot;&gt;@bplaat&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31792&quot;&gt;#31792&lt;/a&gt;)&lt;/li&gt;
  7415. &lt;/ul&gt;
  7416. &lt;p&gt;Our dependency upgrades have also surged forward:&lt;/p&gt;
  7417. &lt;ul&gt;
  7418. &lt;li&gt;&lt;a href=&quot;https://github.com/servo/webrender&quot;&gt;&lt;strong&gt;WebRender&lt;/strong&gt;&lt;/a&gt; is now fully caught up with upstream (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&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/31486&quot;&gt;#31486&lt;/a&gt;)&lt;/li&gt;
  7419. &lt;li&gt;&lt;a href=&quot;https://github.com/servo/stylo&quot;&gt;&lt;strong&gt;Stylo&lt;/strong&gt;&lt;/a&gt; has been updated to September 2023 (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31437&quot;&gt;#31437&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31609&quot;&gt;#31609&lt;/a&gt;)&lt;/li&gt;
  7420. &lt;li&gt;&lt;a href=&quot;https://github.com/servo/mozjs&quot;&gt;&lt;strong&gt;SpiderMonkey&lt;/strong&gt;&lt;/a&gt; has been bumped to 115.9 (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31757&quot;&gt;#31757&lt;/a&gt;)&lt;/li&gt;
  7421. &lt;li&gt;&lt;strong&gt;GStreamer&lt;/strong&gt; is now at 0.22 (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31465&quot;&gt;#31465&lt;/a&gt;)&lt;/li&gt;
  7422. &lt;/ul&gt;
  7423. &lt;p&gt;Servo now stops loading videos and other media after encountering decode errors (&lt;a href=&quot;https://github.com/frereit&quot;&gt;@frereit&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31748&quot;&gt;#31748&lt;/a&gt;), and our docs and dev tooling have been updated to ensure &lt;strong&gt;support for WebM and AV1&lt;/strong&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/31687&quot;&gt;#31687&lt;/a&gt;).&lt;/p&gt;
  7424. &lt;p&gt;Servo no longer crashes when &lt;strong&gt;&amp;lt;video poster&amp;gt; fails to load&lt;/strong&gt; (&lt;a href=&quot;https://github.com/sebsebmc&quot;&gt;@sebsebmc&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31447&quot;&gt;#31447&lt;/a&gt;), when interacting with &lt;strong&gt;CSS layers&lt;/strong&gt; in the CSSOM (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31481&quot;&gt;#31481&lt;/a&gt;).&lt;/p&gt;
  7425. &lt;p&gt;We’ve also landed improvements to style invalidation (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31857&quot;&gt;#31857&lt;/a&gt;), inline layout (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&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/31519&quot;&gt;#31519&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31636&quot;&gt;#31636&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31641&quot;&gt;#31641&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31681&quot;&gt;#31681&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31660&quot;&gt;#31660&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31896&quot;&gt;#31896&lt;/a&gt;), and table layout (&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/31430&quot;&gt;#31430&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31421&quot;&gt;#31421&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31455&quot;&gt;#31455&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31487&quot;&gt;#31487&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31480&quot;&gt;#31480&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31484&quot;&gt;#31484&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31506&quot;&gt;#31506&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31535&quot;&gt;#31535&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31536&quot;&gt;#31536&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31578&quot;&gt;#31578&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31596&quot;&gt;#31596&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31586&quot;&gt;#31586&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31613&quot;&gt;#31613&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31606&quot;&gt;#31606&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31661&quot;&gt;#31661&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31619&quot;&gt;#31619&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31650&quot;&gt;#31650&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31704&quot;&gt;#31704&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31803&quot;&gt;#31803&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31862&quot;&gt;#31862&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31705&quot;&gt;#31705&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31831&quot;&gt;#31831&lt;/a&gt;).&lt;/p&gt;
  7426. &lt;p&gt;As a result of the work done on Servo this month, we’ve made some big strides in &lt;a href=&quot;https://wpt.servo.org/&quot;&gt;our pass rates&lt;/a&gt; for &lt;strong&gt;CSS tables&lt;/strong&gt; (+30.4pp to 62.9%), &lt;strong&gt;CSS2 margin-padding-clear&lt;/strong&gt; (+13.2pp to 93.6%), and &lt;strong&gt;CSS2 box-display&lt;/strong&gt; (+10.0pp to 84.4%).&lt;/p&gt;
  7427. &lt;h3&gt;servoshell and debug logging &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2024/03/30/tables-woff2-outreachy/#servoshell-and-debug-logging&quot;&gt;
  7428.        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
  7429.      &lt;/a&gt;&lt;/h3&gt;
  7430. &lt;p&gt;servoshell has had a good amount of love this month, with a new &lt;strong&gt;loading spinner&lt;/strong&gt; (&lt;a href=&quot;https://github.com/frereit&quot;&gt;@frereit&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31713&quot;&gt;#31713&lt;/a&gt;) and a &lt;strong&gt;rendering glitch under the location bar now fixed&lt;/strong&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/31774&quot;&gt;#31774&lt;/a&gt;).
  7431. &lt;strong&gt;Logging in servoshell is no longer mixed with libservo&lt;/strong&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/31439&quot;&gt;#31439&lt;/a&gt;), with the RUST_LOG prefix now being &lt;code&gt;servoshell::&lt;/code&gt; instead of &lt;code&gt;servo::&lt;/code&gt;.&lt;/p&gt;
  7432. &lt;p&gt;Speaking of RUST_LOG, you can now &lt;strong&gt;filter event logging in servoshell and the constellation at runtime&lt;/strong&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/31657&quot;&gt;#31657&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31659&quot;&gt;#31659&lt;/a&gt;), with the new RUST_LOG prefixes &lt;code&gt;servoshell&amp;lt;winit@&lt;/code&gt;, &lt;code&gt;servoshell&amp;lt;servo@&lt;/code&gt;, &lt;code&gt;servoshell&amp;gt;servo@&lt;/code&gt;, &lt;code&gt;constellation&amp;lt;compositor@&lt;/code&gt;, &lt;code&gt;constellation&amp;lt;script@&lt;/code&gt;, and &lt;code&gt;constellation&amp;lt;layout@&lt;/code&gt;.
  7433. For example:&lt;/p&gt;
  7434. &lt;ul&gt;
  7435. &lt;li&gt;to trace all events in the constellation from layout, plus all events from the compositor other than ReadyToPresent:&lt;br /&gt;
  7436. &lt;code&gt;RUST_LOG=‘constellation&amp;lt;layout@,constellation&amp;lt;compositor@,constellation&amp;lt;compositor@ReadyToPresent=off’&lt;/code&gt;&lt;/li&gt;
  7437. &lt;li&gt;to trace only winit window moved events in servoshell, plus all ordinary servoshell logs at trace level:&lt;br /&gt;
  7438. &lt;code&gt;RUST_LOG=‘servoshell,servoshell&amp;lt;=off,servoshell&amp;gt;=off,servoshell&amp;lt;winit@WindowEvent(Moved)’&lt;/code&gt;&lt;/li&gt;
  7439. &lt;/ul&gt;
  7440. &lt;p&gt;To learn more about the RUST_LOG syntax, see the &lt;a href=&quot;https://docs.rs/env_logger/0.10.2/env_logger/#enabling-logging&quot;&gt;env_logger docs&lt;/a&gt;, and for the full list of event log targets, see &lt;a href=&quot;https://github.com/servo/servo/blob/2d5a1cd02ee0c3196875dc52ca55a150a63cc29f/ports/servoshell/tracing.rs&quot;&gt;ports/servoshell/tracing.rs&lt;/a&gt; and &lt;a href=&quot;https://github.com/servo/servo/blob/2d5a1cd02ee0c3196875dc52ca55a150a63cc29f/components/constellation/tracing.rs&quot;&gt;components/constellation/tracing.rs&lt;/a&gt;.&lt;/p&gt;
  7441. &lt;p&gt;To keep things from getting too noisy, &lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&lt;/a&gt; likes to use the event logging config below:&lt;/p&gt;
  7442. &lt;p&gt;&lt;code&gt;RUST_LOG=‘warn,servoshell&amp;lt;,servoshell&amp;gt;,constellation&amp;lt;,servoshell&amp;lt;winit@DeviceEvent=off,servoshell&amp;lt;winit@MainEventsCleared=off,servoshell&amp;lt;winit@NewEvents(Poll)=off,servoshell&amp;lt;winit@NewEvents(WaitCancelled)=off,servoshell&amp;lt;winit@RedrawEventsCleared=off,servoshell&amp;lt;winit@RedrawRequested=off,servoshell&amp;lt;winit@UserEvent=off,servoshell&amp;lt;winit@WindowEvent(CursorMoved)=off,servoshell&amp;lt;winit@WindowEvent(AxisMotion)=off,servoshell&amp;lt;servo@EventDelivered=off,servoshell&amp;lt;servo@ReadyToPresent=off,servoshell&amp;gt;servo@Idle=off,servoshell&amp;gt;servo@MouseWindowMoveEventClass=off,constellation&amp;lt;compositor@LogEntry=off,constellation&amp;lt;compositor@ForwardEvent(MouseMoveEvent)=off,constellation&amp;lt;compositor@ReadyToPresent=off,constellation&amp;lt;compositor@TickAnimation=off,constellation&amp;lt;script@LogEntry=off,servoshell&amp;lt;winit@WindowEvent(Moved)=off’&lt;/code&gt;&lt;/p&gt;
  7443. &lt;figure class=&quot;_fig&quot; style=&quot;width: 100%;&quot;&gt;&lt;div style=&quot;display: flex;&quot;&gt;
  7444.    &lt;video loop=&quot;&quot; src=&quot;https://servo.org/img/blog/runtime-event-tracing-before.webm&quot;&gt;&lt;/video&gt;
  7445.    &lt;video loop=&quot;&quot; src=&quot;https://servo.org/img/blog/runtime-event-tracing-after.webm&quot;&gt;&lt;/video&gt;
  7446. &lt;/div&gt;&amp;lt;figcaption&amp;gt;Comparison of event tracing without (left) and with (right) runtime filtering.&amp;lt;/figcaption&amp;gt;&lt;/figure&gt;
  7447. &lt;h3&gt;Embedding and dev changes &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2024/03/30/tables-woff2-outreachy/#embedding-and-dev-changes&quot;&gt;
  7448.        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
  7449.      &lt;/a&gt;&lt;/h3&gt;
  7450. &lt;p&gt;We’ve now defined a simple policy for reporting security vulnerabilities (&lt;a href=&quot;https://github.com/mrego&quot;&gt;@mrego&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31622&quot;&gt;#31622&lt;/a&gt;), though this is subject to change once Servo is no longer purely experimental.&lt;/p&gt;
  7451. &lt;p&gt;Servo had a pervasive but confusing concept of webviews or pipelines being “visible”, which actually controls whether script runs timers at a heavily limited rate and the compositor pauses animations.
  7452. We’ve replaced this with the more concrete (but inverted) concept of a webview being “throttled” (&lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31816&quot;&gt;#31816&lt;/a&gt;), including in our embedding API, where &lt;code&gt;WebViewVisibilityChanged&lt;/code&gt; has been replaced with &lt;code&gt;SetWebViewThrottled&lt;/code&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/31815&quot;&gt;#31815&lt;/a&gt;).&lt;/p&gt;
  7453. &lt;p&gt;We’ve fixed broken rendering when running Servo in &lt;strong&gt;Android emulators&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/31727&quot;&gt;#31727&lt;/a&gt;), fixed linking problems with fontsan on Linux (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31810&quot;&gt;#31810&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31821&quot;&gt;#31821&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/fontsan/pull/33&quot;&gt;fontsan#33&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/fontsan/pull/34&quot;&gt;fontsan#34&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/fontsan/pull/35&quot;&gt;fontsan#35&lt;/a&gt;), and fixed a mozjs build issue (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31889&quot;&gt;#31889&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/mozjs/pull/460&quot;&gt;mozjs#460&lt;/a&gt;).&lt;/p&gt;
  7454. &lt;p&gt;&lt;strong&gt;mach fmt&lt;/strong&gt; now uses &lt;strong&gt;stable Rust&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/31441&quot;&gt;#31441&lt;/a&gt;) and should now be &lt;strong&gt;much faster on macOS&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/31440&quot;&gt;#31440&lt;/a&gt;).
  7455. &lt;strong&gt;mach doc&lt;/strong&gt; is now working again, and the spurious &lt;strong&gt;“crown” warnings have been fixed&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/31804&quot;&gt;#31804&lt;/a&gt;).&lt;/p&gt;
  7456. &lt;p&gt;As for &lt;strong&gt;try jobs on CI&lt;/strong&gt;, builds now &lt;strong&gt;immediately fail when Cargo.lock is out of date&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/31720&quot;&gt;#31720&lt;/a&gt;), the &lt;strong&gt;test result comments no longer ping random users&lt;/strong&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/31691&quot;&gt;#31691&lt;/a&gt;), and build artifacts now include the more compact &lt;strong&gt;“wptreport” logs&lt;/strong&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/31616&quot;&gt;#31616&lt;/a&gt;).&lt;/p&gt;
  7457. &lt;p&gt;We’ve also landed changes to reduce &lt;strong&gt;test flakiness in requestAnimationFrame()&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/31561&quot;&gt;#31561&lt;/a&gt;), as well as when the compositor waits for frames (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31523&quot;&gt;#31523&lt;/a&gt;), when the compositor is shutting down (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31733&quot;&gt;#31733&lt;/a&gt;), and when loading fonts on macOS (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31658&quot;&gt;#31658&lt;/a&gt;).&lt;/p&gt;
  7458. &lt;p&gt;Last but not least, NixOS users can rejoice, as &lt;strong&gt;nix-shell will no longer break when Cargo.lock changes&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/31825&quot;&gt;#31825&lt;/a&gt;).&lt;/p&gt;
  7459. &lt;h3&gt;Outreachy &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2024/03/30/tables-woff2-outreachy/#outreachy&quot;&gt;
  7460.        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
  7461.      &lt;/a&gt;&lt;/h3&gt;
  7462. &lt;p&gt;Servo is also &lt;strong&gt;participating in Outreachy&lt;/strong&gt; this year!
  7463. &lt;a href=&quot;https://www.outreachy.org/&quot;&gt;Outreachy&lt;/a&gt; is a three-month paid (7000 USD) remote internship program that runs twice a year, with a special focus on open source software.
  7464. To select interns for Outreachy, there was a &lt;em&gt;contribution period&lt;/em&gt; that is now coming to a close, during which contributors have landed a wide range of improvements.&lt;/p&gt;
  7465. &lt;p&gt;The biggest area of improvement was in code health (&lt;a href=&quot;https://github.com/eerii&quot;&gt;@eerii&lt;/a&gt;, &lt;a href=&quot;https://github.com/MunishMummadi&quot;&gt;@MunishMummadi&lt;/a&gt;, &lt;a href=&quot;https://github.com/sandeepB3&quot;&gt;@sandeepB3&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31521&quot;&gt;#31521&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31537&quot;&gt;#31537&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31608&quot;&gt;#31608&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31685&quot;&gt;#31685&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31670&quot;&gt;#31670&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31822&quot;&gt;#31822&lt;/a&gt;), where we have now fixed almost all of our rustdoc (&lt;a href=&quot;https://github.com/Aaryakhandelwal&quot;&gt;@Aaryakhandelwal&lt;/a&gt;, &lt;a href=&quot;https://github.com/sandeepB3&quot;&gt;@sandeepB3&lt;/a&gt;, &lt;a href=&quot;https://github.com/maureenblack&quot;&gt;@maureenblack&lt;/a&gt;, &lt;a href=&quot;https://github.com/mnaibei&quot;&gt;@mnaibei&lt;/a&gt;, &lt;a href=&quot;https://github.com/oluwatobiss&quot;&gt;@oluwatobiss&lt;/a&gt;, &lt;a href=&quot;https://github.com/azharcodeit&quot;&gt;@azharcodeit&lt;/a&gt;, &lt;a href=&quot;https://github.com/jahielkomu&quot;&gt;@jahielkomu&lt;/a&gt;, &lt;a href=&quot;https://github.com/Rhea-Eve&quot;&gt;@Rhea-Eve&lt;/a&gt;, &lt;a href=&quot;https://github.com/ektuu&quot;&gt;@ektuu&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31582&quot;&gt;#31582&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31587&quot;&gt;#31587&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31592&quot;&gt;#31592&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31617&quot;&gt;#31617&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31625&quot;&gt;#31625&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31632&quot;&gt;#31632&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31640&quot;&gt;#31640&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31643&quot;&gt;#31643&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31647&quot;&gt;#31647&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31654&quot;&gt;#31654&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31712&quot;&gt;#31712&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31644&quot;&gt;#31644&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31708&quot;&gt;#31708&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31755&quot;&gt;#31755&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31745&quot;&gt;#31745&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31738&quot;&gt;#31738&lt;/a&gt;) and clippy errors (&lt;a href=&quot;https://github.com/mnaibei&quot;&gt;@mnaibei&lt;/a&gt;, &lt;a href=&quot;https://github.com/sandeepB3&quot;&gt;@sandeepB3&lt;/a&gt;, &lt;a href=&quot;https://github.com/eerii&quot;&gt;@eerii&lt;/a&gt;, &lt;a href=&quot;https://github.com/zawwz&quot;&gt;@zawwz&lt;/a&gt;, &lt;a href=&quot;https://github.com/richarddushime&quot;&gt;@richarddushime&lt;/a&gt;, &lt;a href=&quot;https://github.com/RustAndMetal&quot;&gt;@RustAndMetal&lt;/a&gt;, &lt;a href=&quot;https://github.com/six-shot&quot;&gt;@six-shot&lt;/a&gt;, &lt;a href=&quot;https://github.com/oluwatobiss&quot;&gt;@oluwatobiss&lt;/a&gt;, &lt;a href=&quot;https://github.com/jahielkomu&quot;&gt;@jahielkomu&lt;/a&gt;, &lt;a href=&quot;https://github.com/Aaryakhandelwal&quot;&gt;@Aaryakhandelwal&lt;/a&gt;, &lt;a href=&quot;https://github.com/ektuu&quot;&gt;@ektuu&lt;/a&gt;, &lt;a href=&quot;https://github.com/azharcodeit&quot;&gt;@azharcodeit&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31508&quot;&gt;#31508&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31512&quot;&gt;#31512&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31549&quot;&gt;#31549&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31566&quot;&gt;#31566&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31567&quot;&gt;#31567&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31560&quot;&gt;#31560&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31562&quot;&gt;#31562&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31563&quot;&gt;#31563&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31551&quot;&gt;#31551&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31568&quot;&gt;#31568&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31565&quot;&gt;#31565&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31564&quot;&gt;#31564&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31548&quot;&gt;#31548&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31612&quot;&gt;#31612&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31610&quot;&gt;#31610&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31611&quot;&gt;#31611&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31627&quot;&gt;#31627&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31623&quot;&gt;#31623&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31628&quot;&gt;#31628&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31626&quot;&gt;#31626&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31700&quot;&gt;#31700&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31710&quot;&gt;#31710&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31719&quot;&gt;#31719&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31735&quot;&gt;#31735&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31758&quot;&gt;#31758&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31717&quot;&gt;#31717&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31759&quot;&gt;#31759&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31769&quot;&gt;#31769&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31770&quot;&gt;#31770&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31776&quot;&gt;#31776&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31778&quot;&gt;#31778&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31793&quot;&gt;#31793&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31801&quot;&gt;#31801&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31800&quot;&gt;#31800&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31799&quot;&gt;#31799&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31791&quot;&gt;#31791&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31811&quot;&gt;#31811&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31813&quot;&gt;#31813&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31819&quot;&gt;#31819&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31784&quot;&gt;#31784&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31823&quot;&gt;#31823&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31837&quot;&gt;#31837&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31818&quot;&gt;#31818&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31842&quot;&gt;#31842&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31827&quot;&gt;#31827&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31849&quot;&gt;#31849&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31850&quot;&gt;#31850&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31843&quot;&gt;#31843&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31852&quot;&gt;#31852&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31864&quot;&gt;#31864&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31863&quot;&gt;#31863&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31853&quot;&gt;#31853&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31865&quot;&gt;#31865&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31834&quot;&gt;#31834&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31876&quot;&gt;#31876&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31877&quot;&gt;#31877&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31888&quot;&gt;#31888&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31878&quot;&gt;#31878&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31890&quot;&gt;#31890&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31867&quot;&gt;#31867&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31893&quot;&gt;#31893&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31898&quot;&gt;#31898&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31900&quot;&gt;#31900&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31891&quot;&gt;#31891&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31906&quot;&gt;#31906&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31908&quot;&gt;#31908&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31907&quot;&gt;#31907&lt;/a&gt;).&lt;/p&gt;
  7466. &lt;p&gt;One contributor went further, &lt;strong&gt;cleaning up the codegen for our DOM bindings&lt;/strong&gt; (&lt;a href=&quot;https://github.com/eerii&quot;&gt;@eerii&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31721&quot;&gt;#31721&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31711&quot;&gt;#31711&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31844&quot;&gt;#31844&lt;/a&gt;), improving our dev tooling (&lt;a href=&quot;https://github.com/eerii&quot;&gt;@eerii&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31694&quot;&gt;#31694&lt;/a&gt;), and improving our image decoding by &lt;strong&gt;replacing per-image threads with a thread pool&lt;/strong&gt; (&lt;a href=&quot;https://github.com/eerii&quot;&gt;@eerii&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31517&quot;&gt;#31517&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31585&quot;&gt;#31585&lt;/a&gt;)!&lt;/p&gt;
  7467. &lt;p&gt;Two contributors worked together to pave the way for language-specific behaviour in ‘text-transform’ (&lt;a href=&quot;https://github.com/MunishMummadi&quot;&gt;@MunishMummadi&lt;/a&gt;, &lt;a href=&quot;https://github.com/Rhea-Eve&quot;&gt;@Rhea-Eve&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/stylo/pull/24&quot;&gt;stylo#24&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31737&quot;&gt;#31737&lt;/a&gt;), and other contributors also landed improvements to our docs (&lt;a href=&quot;https://github.com/six-shot&quot;&gt;@six-shot&lt;/a&gt;, &lt;a href=&quot;https://github.com/jahielkomu&quot;&gt;@jahielkomu&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31583&quot;&gt;#31583&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31718&quot;&gt;#31718&lt;/a&gt;), &lt;strong&gt;CJK font fallback&lt;/strong&gt; (&lt;a href=&quot;https://github.com/richarddushime&quot;&gt;@richarddushime&lt;/a&gt;, &lt;a href=&quot;https://github.com/sandeepB3&quot;&gt;@sandeepB3&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31668&quot;&gt;#31668&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31670&quot;&gt;#31670&lt;/a&gt;), and the Web Platform Tests (&lt;a href=&quot;https://github.com/azharcodeit&quot;&gt;@azharcodeit&lt;/a&gt;, &lt;a href=&quot;https://github.com/richarddushime&quot;&gt;@richarddushime&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31534&quot;&gt;#31534&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31802&quot;&gt;#31802&lt;/a&gt;).&lt;/p&gt;
  7468. &lt;p&gt;If you are interested in an Outreachy internship, applications for the next round &lt;a href=&quot;https://www.outreachy.org/docs/community/#outreachy-schedule&quot;&gt;open in August 2024&lt;/a&gt;, so be sure to put that in your calendar!&lt;/p&gt;
  7469. &lt;h3&gt;Conferences and events &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2024/03/30/tables-woff2-outreachy/#conferences-and-events&quot;&gt;
  7470.        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
  7471.      &lt;/a&gt;&lt;/h3&gt;
  7472. &lt;p&gt;Rakhi Sharma will be in Seattle on &lt;strong&gt;16 April 2024&lt;/strong&gt;, &lt;a href=&quot;https://ossna2024.sched.com/event/1aBNF/a-year-of-servo-reboot-where-are-we-now-rakhi-sharma-igalia&quot;&gt;speaking about Servo’s achievements&lt;/a&gt; at &lt;a href=&quot;https://events.linuxfoundation.org/open-source-summit-north-america/&quot;&gt;Open Source Summit North America&lt;/a&gt; at &lt;strong&gt;14:15 local time&lt;/strong&gt; (21:15 UTC), then meeting up at the &lt;a href=&quot;https://www.meetup.com/seattle-rust-user-group/events/299908469/&quot;&gt;Seattle Rust User Group&lt;/a&gt; at &lt;strong&gt;18:00 local time&lt;/strong&gt; (01:00 UTC).
  7473. See you there!&lt;/p&gt;</description>
  7474. <pubDate>Sat, 30 Mar 2024 00:00:00 +0000</pubDate>
  7475. </item>
  7476. <item>
  7477. <title>Don Marti: LLMs and reputation management</title>
  7478. <guid isPermaLink="true">https://blog.zgp.org/llms-and-reputation-management/</guid>
  7479. <link>https://blog.zgp.org/llms-and-reputation-management/</link>
  7480. <description>&lt;p&gt;One of the big problems with widespread use of large language models (LLMs) is going to be that &lt;q&gt;reputation management&lt;/q&gt; firms will be able to put up a lot of content to try to &lt;q&gt;clean up&lt;/q&gt; mentions of their own clients. Other players will also, in a totally deniable way, be able to put up their own text to train LLMs to say bad stuff about people who are opposed to their clients in some way. What is seen as important material about a person from the point of view of, say, a reporter or Wikipedia editor, is not necessarily going to be what gets pulled out a big pile of crawled text by an LLM.&lt;/p&gt; &lt;p&gt;You can kind of see what’s possible by looking at 20th century history. Many Axis officers from World War II have a lot of content about them on the Internet somewhere.&lt;/p&gt; &lt;ol type=&quot;1&quot;&gt; &lt;li&gt;&lt;p&gt;contemporary propaganda&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;post-war content such as the “&lt;a href=&quot;https://en.wikipedia.org/wiki/Myth_of_the_clean_Wehrmacht&quot;&gt;clean Wehrmacht&lt;/a&gt;” campaign&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;online forums discussing 1 and 2 above&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;gaming-related content&lt;/p&gt;&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;For example, let’s take a look at the 14 defendants in the &lt;a href=&quot;https://en.wikipedia.org/wiki/High_Command_Trial&quot;&gt;High Command Trial&lt;/a&gt; at Nuremberg. To a human editor, the Nuremberg trials were a significant historic event, so the fact that an officer was a defendant is going to be a key fact about him that makes it into any reasonable length bio.&lt;/p&gt; &lt;p&gt;For ChatGPT, not so much. Asking ChatGPT: “what is &lt;em&gt;officer_name&lt;/em&gt; known for” gives different results. I tried it.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;p&gt;All 14 are correctly identified by country and historical period&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;In 5 cases, the ChatGPT answer has no mention of the trial, of any of the conduct for which the officer was tried, or any mention of war crimes at all.&lt;/p&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Answers often end with something like, &lt;q&gt;After the war, &lt;em&gt;officer_name&lt;/em&gt; was captured by Allied forces and held as a prisoner of war. He was later released and returned to civilian life.&lt;/q&gt;&lt;/p&gt; &lt;p&gt;The Nuremberg trials were extremely well covered at the time, a lot has been written about them, and they’re still studied today. Old-school propaganda operations, keyboard warriors, and random &lt;a href=&quot;https://knowyourmeme.com/memes/wehraboo&quot;&gt;wehraboos&lt;/a&gt; were able to scrub this major event, and the crimes for which the defendants were tried, without really trying. So the same kind of thing is going to be practical for lots of people, companies, and organizations. Reputation management firms typically don’t have to obscure something as big as the Nuremberg trials, and they can use LLMs to produce far more text, faster, than even an online army of gamers can. Expect the defendants in run-of-the-mill corporate trials to effectively disappear their crimes, too.&lt;/p&gt; &lt;p&gt;It’s possible that the big “AI” companies could deal with the reputation management problem by licensing a set of known neutral point of view (NPOV) content and either avoiding material that looks conflicting, or filtering out responses that look inconsistent with it. But that’s a big task, and will get bigger the more that “reputation management” is seen to work.&lt;/p&gt; &lt;p&gt;&lt;em&gt;(This is an edited version of a &lt;a href=&quot;https://federate.social/@dmarti/111993109178733856&quot;&gt;thread&lt;/a&gt;).&lt;/em&gt;&lt;/p&gt; &lt;h3&gt;Related&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/ad-supported-piracy/&quot;&gt;notes on ad-supported piracy&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/llms-web-ads/&quot;&gt;LLMs and the web advertising business&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/tide-pods/&quot;&gt;use a Large Language Model, or eat Tide Pods?&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Bonus links&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://arstechnica.com/?p=2007717&quot;&gt;The Ars Technica guide to keyboards: Mechanical, membrane, and buckling springs&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://knowingmachines.org/models-all-the-way&quot;&gt;Models All The Way Down&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.theatlantic.com/ideas/archive/2024/03/austin-texas-rents-falling-housing/677819/&quot;&gt;There’s No Such Thing as Good Housing News&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.honest-broker.com/p/they-praised-ai-at-sxswand-the-audience&quot;&gt;They Praised AI at SXSW—and the Audience Started Booing&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.mcsweeneys.net/articles/ai-is-threatening-my-tech-and-lifestyle-content-mill&quot;&gt;AI Is Threatening My Tech and Lifestyle Content Mill&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.technologyreview.com/2024/03/13/1089729/lets-not-make-the-same-mistakes-with-ai-that-we-made-with-social-media/&quot;&gt;Let’s not make the same mistakes with AI that we made with social media&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.macstories.net/reviews/logitechs-casa-pop-up-desk-elevates-your-macbook-for-more-comfortable-computing/&quot;&gt;Logitech’s Casa Pop-Up Desk Elevates Your MacBook for More Comfortable Computing&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.theatlantic.com/technology/archive/2024/02/kitchenaid-stand-mixer-durability/677524/&quot;&gt;KitchenAid Did It Right 87 Years Ago&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://garymarcus.substack.com/p/death-of-a-chatbot-body-blow-to-an&quot;&gt;Death of a Chatbot, body blow to an industry&lt;/a&gt;&lt;/p&gt;</description>
  7481. <pubDate>Sat, 30 Mar 2024 00:00:00 +0000</pubDate>
  7482. </item>
  7483. <item>
  7484. <title>The Rust Programming Language Blog: Changes to `u128`/`i128` layout in 1.77 and 1.78</title>
  7485. <guid isPermaLink="true">https://blog.rust-lang.org/2024/03/30/i128-layout-update.html</guid>
  7486. <link>https://blog.rust-lang.org/2024/03/30/i128-layout-update.html</link>
  7487. <description>&lt;p&gt;Rust has long had an inconsistency with C regarding the alignment of 128-bit integers
  7488. on the x86-32 and x86-64 architectures. This problem has recently been resolved, but
  7489. the fix comes with some effects that are worth being aware of.&lt;/p&gt;
  7490. &lt;p&gt;As a user, you most likely do not need to worry about these changes unless you are:&lt;/p&gt;
  7491. &lt;ol&gt;
  7492. &lt;li&gt;Assuming the alignment of &lt;code&gt;i128&lt;/code&gt;/&lt;code&gt;u128&lt;/code&gt; rather than using &lt;code&gt;align_of&lt;/code&gt;&lt;/li&gt;
  7493. &lt;li&gt;Ignoring the &lt;code&gt;improper_ctypes*&lt;/code&gt; lints and using these types in FFI&lt;/li&gt;
  7494. &lt;/ol&gt;
  7495. &lt;p&gt;There are also no changes to architectures other than x86-32 and x86-64. If your
  7496. code makes heavy use of 128-bit integers, you may notice runtime performance increases
  7497. at a possible cost of additional memory use.&lt;/p&gt;
  7498. &lt;p&gt;This post documents what the problem was, what changed to fix it, and what to expect
  7499. with the changes. If you are already familiar with the problem and only looking for a
  7500. compatibility matrix, jump to the &lt;a href=&quot;https://blog.rust-lang.org/2024/03/30/i128-layout-update.html#compatibility&quot;&gt;Compatibility&lt;/a&gt; section.&lt;/p&gt;
  7501. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/03/30/i128-layout-update.html#background&quot; id=&quot;background&quot;&gt;&lt;/a&gt;Background&lt;/h3&gt;
  7502. &lt;p&gt;Data types have two intrinsic values that relate to how they can be arranged in memory;
  7503. size and alignment. A type's size is the amount of space it takes up in memory, and its
  7504. alignment specifies which addresses it is allowed to be placed at.&lt;/p&gt;
  7505. &lt;p&gt;The size of simple types like primitives is usually unambiguous, being the exact size of
  7506. the data they represent with no padding (unused space). For example, an &lt;code&gt;i64&lt;/code&gt; always has
  7507. a size of 64 bits or 8 bytes.&lt;/p&gt;
  7508. &lt;p&gt;Alignment, however, can vary. An 8-byte integer &lt;em&gt;could&lt;/em&gt; be stored at any memory address
  7509. (1-byte aligned), but most 64-bit computers will get the best performance if it is
  7510. instead stored at a multiple of 8 (8-byte aligned). So, like in other languages,
  7511. primitives in Rust have this most efficient alignment by default. The effects of this
  7512. can be seen when creating composite types (&lt;a href=&quot;https://play.rust-lang.org/?version=beta&amp;amp;mode=debug&amp;amp;edition=2021&amp;amp;gist=52f349bdea92bf724bc453f37dbd32ea&quot;&gt;playground link&lt;/a&gt;):&lt;/p&gt;
  7513. &lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;use core::mem::{align_of, offset_of};
  7514.  
  7515. #[repr(C)]
  7516. struct Foo {
  7517.    a: u8,  // 1-byte aligned
  7518.    b: u16, // 2-byte aligned
  7519. }
  7520.  
  7521. #[repr(C)]
  7522. struct Bar {
  7523.    a: u8,  // 1-byte aligned
  7524.    b: u64, // 8-byte aligned
  7525. }
  7526.  
  7527. println!(&quot;Offset of b (u16) in Foo: {}&quot;, offset_of!(Foo, b));
  7528. println!(&quot;Alignment of Foo: {}&quot;, align_of::&amp;lt;Foo&amp;gt;());
  7529. println!(&quot;Offset of b (u64) in Bar: {}&quot;, offset_of!(Bar, b));
  7530. println!(&quot;Alignment of Bar: {}&quot;, align_of::&amp;lt;Bar&amp;gt;());
  7531. &lt;/code&gt;&lt;/pre&gt;
  7532. &lt;p&gt;Output:&lt;/p&gt;
  7533. &lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Offset of b (u16) in Foo: 2
  7534. Alignment of Foo: 2
  7535. Offset of b (u64) in Bar: 8
  7536. Alignment of Bar: 8
  7537. &lt;/code&gt;&lt;/pre&gt;
  7538. &lt;p&gt;We see that within a struct, a type will always be placed such that its offset is a
  7539. multiple of its alignment - even if this means unused space (Rust minimizes this by
  7540. default when &lt;code&gt;repr(C)&lt;/code&gt; is not used).&lt;/p&gt;
  7541. &lt;p&gt;These numbers are not arbitrary; the application binary interface (ABI) says what they
  7542. should be. In the x86-64 &lt;a href=&quot;https://www.uclibc.org/docs/psABI-x86_64.pdf&quot;&gt;psABI&lt;/a&gt; (processor-specific ABI) for System V (Unix &amp;amp; Linux),
  7543. &lt;em&gt;Figure 3.1: Scalar Types&lt;/em&gt; tells us exactly how primitives should be represented:&lt;/p&gt;
  7544. &lt;table&gt;
  7545. &lt;thead&gt;
  7546. &lt;tr&gt;
  7547. &lt;th&gt;C type&lt;/th&gt;
  7548. &lt;th&gt;Rust equivalent&lt;/th&gt;
  7549. &lt;th&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;/th&gt;
  7550. &lt;th&gt;Alignment (bytes)&lt;/th&gt;
  7551. &lt;/tr&gt;
  7552. &lt;/thead&gt;
  7553. &lt;tbody&gt;
  7554. &lt;tr&gt;
  7555. &lt;td&gt;&lt;code&gt;char&lt;/code&gt;&lt;/td&gt;
  7556. &lt;td&gt;&lt;code&gt;i8&lt;/code&gt;&lt;/td&gt;
  7557. &lt;td&gt;1&lt;/td&gt;
  7558. &lt;td&gt;1&lt;/td&gt;
  7559. &lt;/tr&gt;
  7560. &lt;tr&gt;
  7561. &lt;td&gt;&lt;code&gt;unsigned char&lt;/code&gt;&lt;/td&gt;
  7562. &lt;td&gt;&lt;code&gt;u8&lt;/code&gt;&lt;/td&gt;
  7563. &lt;td&gt;1&lt;/td&gt;
  7564. &lt;td&gt;1&lt;/td&gt;
  7565. &lt;/tr&gt;
  7566. &lt;tr&gt;
  7567. &lt;td&gt;&lt;code&gt;short&lt;/code&gt;&lt;/td&gt;
  7568. &lt;td&gt;&lt;code&gt;i16&lt;/code&gt;&lt;/td&gt;
  7569. &lt;td&gt;2&lt;/td&gt;
  7570. &lt;td&gt;2&lt;/td&gt;
  7571. &lt;/tr&gt;
  7572. &lt;tr&gt;
  7573. &lt;td&gt;&lt;strong&gt;&lt;code&gt;unsigned short&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
  7574. &lt;td&gt;&lt;strong&gt;&lt;code&gt;u16&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
  7575. &lt;td&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/td&gt;
  7576. &lt;td&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/td&gt;
  7577. &lt;/tr&gt;
  7578. &lt;tr&gt;
  7579. &lt;td&gt;&lt;code&gt;long&lt;/code&gt;&lt;/td&gt;
  7580. &lt;td&gt;&lt;code&gt;i64&lt;/code&gt;&lt;/td&gt;
  7581. &lt;td&gt;8&lt;/td&gt;
  7582. &lt;td&gt;8&lt;/td&gt;
  7583. &lt;/tr&gt;
  7584. &lt;tr&gt;
  7585. &lt;td&gt;&lt;strong&gt;&lt;code&gt;unsigned long&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
  7586. &lt;td&gt;&lt;strong&gt;&lt;code&gt;u64&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
  7587. &lt;td&gt;&lt;strong&gt;8&lt;/strong&gt;&lt;/td&gt;
  7588. &lt;td&gt;&lt;strong&gt;8&lt;/strong&gt;&lt;/td&gt;
  7589. &lt;/tr&gt;
  7590. &lt;/tbody&gt;
  7591. &lt;/table&gt;
  7592. &lt;p&gt;The ABI only specifies C types, but Rust follows the same definitions both for
  7593. compatibility and for the performance benefits.&lt;/p&gt;
  7594. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/03/30/i128-layout-update.html#the-incorrect-alignment-problem&quot; id=&quot;the-incorrect-alignment-problem&quot;&gt;&lt;/a&gt;The Incorrect Alignment Problem&lt;/h3&gt;
  7595. &lt;p&gt;If two implementations disagree on the alignment of a data type, they cannot reliably
  7596. share data containing that type. Rust had inconsistent alignment for 128-bit types:&lt;/p&gt;
  7597. &lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;println!(&quot;alignment of i128: {}&quot;, align_of::&amp;lt;i128&amp;gt;());
  7598. &lt;/code&gt;&lt;/pre&gt;
  7599. &lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;// rustc 1.76.0
  7600. alignment of i128: 8
  7601. &lt;/code&gt;&lt;/pre&gt;
  7602. &lt;pre&gt;&lt;code class=&quot;language-c&quot;&gt;printf(&quot;alignment of __int128: %zu\n&quot;, _Alignof(__int128));
  7603. &lt;/code&gt;&lt;/pre&gt;
  7604. &lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;// gcc 13.2
  7605. alignment of __int128: 16
  7606.  
  7607. // clang 17.0.1
  7608. alignment of __int128: 16
  7609. &lt;/code&gt;&lt;/pre&gt;
  7610. &lt;p&gt;(&lt;a href=&quot;https://godbolt.org/z/h94Ge1vMW&quot;&gt;Godbolt link&lt;/a&gt;) Looking back at the &lt;a href=&quot;https://www.uclibc.org/docs/psABI-x86_64.pdf&quot;&gt;psABI&lt;/a&gt;, we can see that Rust has
  7611. the wrong alignment here:&lt;/p&gt;
  7612. &lt;table&gt;
  7613. &lt;thead&gt;
  7614. &lt;tr&gt;
  7615. &lt;th&gt;C type&lt;/th&gt;
  7616. &lt;th&gt;Rust equivalent&lt;/th&gt;
  7617. &lt;th&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;/th&gt;
  7618. &lt;th&gt;Alignment (bytes)&lt;/th&gt;
  7619. &lt;/tr&gt;
  7620. &lt;/thead&gt;
  7621. &lt;tbody&gt;
  7622. &lt;tr&gt;
  7623. &lt;td&gt;&lt;code&gt;__int128&lt;/code&gt;&lt;/td&gt;
  7624. &lt;td&gt;&lt;code&gt;i128&lt;/code&gt;&lt;/td&gt;
  7625. &lt;td&gt;16&lt;/td&gt;
  7626. &lt;td&gt;16&lt;/td&gt;
  7627. &lt;/tr&gt;
  7628. &lt;tr&gt;
  7629. &lt;td&gt;&lt;code&gt;unsigned __int128&lt;/code&gt;&lt;/td&gt;
  7630. &lt;td&gt;&lt;code&gt;u128&lt;/code&gt;&lt;/td&gt;
  7631. &lt;td&gt;16&lt;/td&gt;
  7632. &lt;td&gt;16&lt;/td&gt;
  7633. &lt;/tr&gt;
  7634. &lt;/tbody&gt;
  7635. &lt;/table&gt;
  7636. &lt;p&gt;It turns out this isn't because of something that Rust is actively doing incorrectly:
  7637. layout of primitives comes from the LLVM codegen backend used by both Rust and Clang,
  7638. among other languages, and it has the alignment for &lt;code&gt;i128&lt;/code&gt; hardcoded to 8 bytes.&lt;/p&gt;
  7639. &lt;p&gt;Clang uses the correct alignment only because of a workaround, where the alignment is
  7640. manually set to 16 bytes before handing the type to LLVM. This fixes the layout issue
  7641. but has been the source of some other minor problems.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://blog.rust-lang.org/2024/03/30/i128-layout-update.html#fn-f128-segfault&quot; id=&quot;fnref-f128-segfault&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://blog.rust-lang.org/2024/03/30/i128-layout-update.html#fn-va-segfault&quot; id=&quot;fnref-va-segfault&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
  7642. Rust does no such manual adjustement, hence the issue reported at
  7643. &lt;a href=&quot;https://github.com/rust-lang/rust/issues/54341&quot;&gt;https://github.com/rust-lang/rust/issues/54341&lt;/a&gt;.&lt;/p&gt;
  7644. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/03/30/i128-layout-update.html#the-calling-convention-problem&quot; id=&quot;the-calling-convention-problem&quot;&gt;&lt;/a&gt;The Calling Convention Problem&lt;/h3&gt;
  7645. &lt;p&gt;There is an additional problem: LLVM does not always do the correct thing when passing
  7646. 128-bit integers as function arguments. This was a &lt;a href=&quot;https://github.com/llvm/llvm-project/issues/41784&quot;&gt;known issue in LLVM&lt;/a&gt;, before its
  7647. &lt;a href=&quot;https://github.com/rust-lang/rust/issues/54341#issuecomment-1064729606&quot;&gt;relevance to Rust was discovered&lt;/a&gt;.&lt;/p&gt;
  7648. &lt;p&gt;When calling a function, the arguments get passed in registers (special storage
  7649. locations within the CPU) until there are no more slots, then they get &quot;spilled&quot; to
  7650. the stack (the program's memory). The ABI tells us what to do here as well, in the
  7651. section &lt;em&gt;3.2.3 Parameter Passing&lt;/em&gt;:&lt;/p&gt;
  7652. &lt;blockquote&gt;
  7653. &lt;p&gt;Arguments of type &lt;code&gt;__int128&lt;/code&gt; offer the same operations as INTEGERs, yet they do not
  7654. fit into one general purpose register but require two registers. For classification
  7655. purposes &lt;code&gt;__int128&lt;/code&gt; is treated as if it were implemented as:&lt;/p&gt;
  7656. &lt;pre&gt;&lt;code class=&quot;language-c&quot;&gt;typedef struct {
  7657.    long low, high;
  7658. } __int128;
  7659. &lt;/code&gt;&lt;/pre&gt;
  7660. &lt;p&gt;with the exception that arguments of type &lt;code&gt;__int128&lt;/code&gt; that are stored in memory must be
  7661. aligned on a 16-byte boundary.&lt;/p&gt;
  7662. &lt;/blockquote&gt;
  7663. &lt;p&gt;We can try this out by implementing the calling convention manually. In the below C
  7664. example, inline assembly is used to call &lt;code&gt;foo(0xaf, val, val, val)&lt;/code&gt; with &lt;code&gt;val&lt;/code&gt; as
  7665. &lt;code&gt;0x11223344556677889900aabbccddeeff&lt;/code&gt;.&lt;/p&gt;
  7666. &lt;p&gt;x86-64 uses the registers &lt;code&gt;rdi&lt;/code&gt;, &lt;code&gt;rsi&lt;/code&gt;, &lt;code&gt;rdx&lt;/code&gt;, &lt;code&gt;rcx&lt;/code&gt;, &lt;code&gt;r8&lt;/code&gt;, and &lt;code&gt;r9&lt;/code&gt; to pass function
  7667. arguments, in that order (you guessed it, this is also in the ABI). Each register
  7668. fits a word (64 bits), and anything that doesn't fit gets &lt;code&gt;push&lt;/code&gt;ed to the stack.&lt;/p&gt;
  7669. &lt;pre&gt;&lt;code class=&quot;language-c&quot;&gt;/* full example at &amp;lt;https://godbolt.org/z/5c8cb5cxs&amp;gt; */
  7670.  
  7671. /* to see the issue, we need a padding value to &quot;mess up&quot; argument alignment */
  7672. void foo(char pad, __int128 a, __int128 b, __int128 c) {
  7673.    printf(&quot;%#x\n&quot;, pad &amp;amp; 0xff);
  7674.    print_i128(a);
  7675.    print_i128(b);
  7676.    print_i128(c);
  7677. }
  7678.  
  7679. int main() {
  7680.    asm(
  7681.        /* load arguments that fit in registers */
  7682.        &quot;movl    $0xaf, %edi \n\t&quot;                /* 1st slot (edi): padding char (`edi` is the
  7683.                                                   * same as `rdi`, just a smaller access size) */
  7684.        &quot;movq    $0x9900aabbccddeeff, %rsi \n\t&quot;  /* 2rd slot (rsi): lower half of `a` */
  7685.        &quot;movq    $0x1122334455667788, %rdx \n\t&quot;  /* 3nd slot (rdx): upper half of `a` */
  7686.        &quot;movq    $0x9900aabbccddeeff, %rcx \n\t&quot;  /* 4th slot (rcx): lower half of `b` */
  7687.        &quot;movq    $0x1122334455667788, %r8  \n\t&quot;  /* 5th slot (r8):  upper half of `b` */
  7688.        &quot;movq    $0xdeadbeef4c0ffee0, %r9  \n\t&quot;  /* 6th slot (r9):  should be unused, but
  7689.                                                   * let's trick clang! */
  7690.  
  7691.        /* reuse our stored registers to load the stack */
  7692.        &quot;pushq   %rdx \n\t&quot;                       /* upper half of `c` gets passed on the stack */
  7693.        &quot;pushq   %rsi \n\t&quot;                       /* lower half of `c` gets passed on the stack */
  7694.  
  7695.        &quot;call    foo \n\t&quot;                        /* call the function */
  7696.        &quot;addq    $16, %rsp \n\t&quot;                  /* reset the stack */
  7697.    );
  7698. }
  7699. &lt;/code&gt;&lt;/pre&gt;
  7700. &lt;p&gt;Running the above with GCC prints the following expected output:&lt;/p&gt;
  7701. &lt;pre&gt;&lt;code&gt;0xaf
  7702. 0x11223344556677889900aabbccddeeff
  7703. 0x11223344556677889900aabbccddeeff
  7704. 0x11223344556677889900aabbccddeeff
  7705. &lt;/code&gt;&lt;/pre&gt;
  7706. &lt;p&gt;But running with Clang 17 prints:&lt;/p&gt;
  7707. &lt;pre&gt;&lt;code&gt;0xaf
  7708. 0x11223344556677889900aabbccddeeff
  7709. 0x11223344556677889900aabbccddeeff
  7710. 0x9900aabbccddeeffdeadbeef4c0ffee0
  7711. //^^^^^^^^^^^^^^^^ this should be the lower half
  7712. //                ^^^^^^^^^^^^^^^^ look familiar?
  7713. &lt;/code&gt;&lt;/pre&gt;
  7714. &lt;p&gt;Surprise!&lt;/p&gt;
  7715. &lt;p&gt;This illustrates the second problem: LLVM expects an &lt;code&gt;i128&lt;/code&gt; to be passed half in a
  7716. register and half on the stack when possible, but this is not allowed by the ABI.&lt;/p&gt;
  7717. &lt;p&gt;Since the behavior comes from LLVM and has no reasonable workaround, this is a
  7718. problem in both Clang and Rust.&lt;/p&gt;
  7719. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/03/30/i128-layout-update.html#solutions&quot; id=&quot;solutions&quot;&gt;&lt;/a&gt;Solutions&lt;/h3&gt;
  7720. &lt;p&gt;Getting these problems resolved was a lengthy effort by many people, starting with a
  7721. patch by compiler team member Simonas Kazlauskas in 2017: &lt;a href=&quot;https://reviews.llvm.org/D28990&quot;&gt;D28990&lt;/a&gt;. Unfortunately,
  7722. this wound up reverted. It was later attempted again in &lt;a href=&quot;https://reviews.llvm.org/D86310&quot;&gt;D86310&lt;/a&gt; by LLVM contributor
  7723. Harald van Dijk, which is the version that finally landed in October 2023.&lt;/p&gt;
  7724. &lt;p&gt;Around the same time, Nikita Popov fixed the calling convention issue with &lt;a href=&quot;https://reviews.llvm.org/D158169&quot;&gt;D158169&lt;/a&gt;.
  7725. Both of these changes made it into LLVM 18, meaning all relevant ABI issues will be
  7726. resolved in both Clang and Rust that use this version (Clang 18 and Rust 1.78 when using
  7727. the bundled LLVM).&lt;/p&gt;
  7728. &lt;p&gt;However, &lt;code&gt;rustc&lt;/code&gt; can also use the version of LLVM installed on the system rather than a
  7729. bundled version, which may be older. To mitigate the chance of problems from differing
  7730. alignment with the same &lt;code&gt;rustc&lt;/code&gt; version, &lt;a href=&quot;https://github.com/rust-lang/compiler-team/issues/683&quot;&gt;a proposal&lt;/a&gt; was introduced to manually
  7731. correct the alignment like Clang has been doing. This was implemented by Matthew Maurer
  7732. in &lt;a href=&quot;https://github.com/rust-lang/rust/pull/116672/&quot;&gt;#116672&lt;/a&gt;.&lt;/p&gt;
  7733. &lt;p&gt;Since these changes, Rust now produces the correct alignment:&lt;/p&gt;
  7734. &lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;println!(&quot;alignment of i128: {}&quot;, align_of::&amp;lt;i128&amp;gt;());
  7735. &lt;/code&gt;&lt;/pre&gt;
  7736. &lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;// rustc 1.77.0
  7737. alignment of i128: 16
  7738. &lt;/code&gt;&lt;/pre&gt;
  7739. &lt;p&gt;As mentioned above, part of the reason for an ABI to specify the alignment of a datatype
  7740. is because it is more efficient on that architecture. We actually got to see that
  7741. firsthand: the &lt;a href=&quot;https://github.com/rust-lang/rust/pull/116672/#issuecomment-1858600381&quot;&gt;initial performance run&lt;/a&gt; with the manual alignment change showed
  7742. nontrivial improvements to compiler performance (which relies heavily on 128-bit
  7743. integers to work with integer literals). The downside of increasing alignment is that
  7744. composite types do not always fit together as nicely in memory, leading to an increase
  7745. in usage. Unfortunately this meant some of the performance wins needed to be sacrificed
  7746. to avoid an increased memory footprint.&lt;/p&gt;
  7747. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/03/30/i128-layout-update.html#compatibility&quot; id=&quot;compatibility&quot;&gt;&lt;/a&gt;Compatibility&lt;/h3&gt;
  7748. &lt;p&gt;The most imporant question is how compatibility changed as a result of these fixes. In
  7749. short, &lt;code&gt;i128&lt;/code&gt; and &lt;code&gt;u128&lt;/code&gt; with Rust using LLVM 18 (the default version starting with
  7750. 1.78) will be completely compatible with any version of GCC, as well as Clang 18 and
  7751. above (released March 2024). All other combinations have some incompatible cases, which
  7752. are summarized in the table below:&lt;/p&gt;
  7753. &lt;table&gt;
  7754. &lt;thead&gt;
  7755. &lt;tr&gt;
  7756. &lt;th&gt;Compiler 1&lt;/th&gt;
  7757. &lt;th&gt;Compiler 2&lt;/th&gt;
  7758. &lt;th&gt;status&lt;/th&gt;
  7759. &lt;/tr&gt;
  7760. &lt;/thead&gt;
  7761. &lt;tbody&gt;
  7762. &lt;tr&gt;
  7763. &lt;td&gt;Rust ≥ 1.78 with bundled LLVM (18)&lt;/td&gt;
  7764. &lt;td&gt;GCC (any version)&lt;/td&gt;
  7765. &lt;td&gt;Fully compatible&lt;/td&gt;
  7766. &lt;/tr&gt;
  7767. &lt;tr&gt;
  7768. &lt;td&gt;Rust ≥ 1.78 with bundled LLVM (18)&lt;/td&gt;
  7769. &lt;td&gt;Clang ≥ 18&lt;/td&gt;
  7770. &lt;td&gt;Fully compatible&lt;/td&gt;
  7771. &lt;/tr&gt;
  7772. &lt;tr&gt;
  7773. &lt;td&gt;Rust ≥ 1.77 with LLVM ≥ 18&lt;/td&gt;
  7774. &lt;td&gt;GCC (any version)&lt;/td&gt;
  7775. &lt;td&gt;Fully compatible&lt;/td&gt;
  7776. &lt;/tr&gt;
  7777. &lt;tr&gt;
  7778. &lt;td&gt;Rust ≥ 1.77 with LLVM ≥ 18&lt;/td&gt;
  7779. &lt;td&gt;Clang ≥ 18&lt;/td&gt;
  7780. &lt;td&gt;Fully compatible&lt;/td&gt;
  7781. &lt;/tr&gt;
  7782. &lt;tr&gt;
  7783. &lt;td&gt;Rust ≥ 1.77 with LLVM ≥ 18&lt;/td&gt;
  7784. &lt;td&gt;Clang &amp;lt; 18&lt;/td&gt;
  7785. &lt;td&gt;Storage compatible, has calling bug&lt;/td&gt;
  7786. &lt;/tr&gt;
  7787. &lt;tr&gt;
  7788. &lt;td&gt;Rust ≥ 1.77 with LLVM &amp;lt; 18&lt;/td&gt;
  7789. &lt;td&gt;GCC (any version)&lt;/td&gt;
  7790. &lt;td&gt;Storage compatible, has calling bug&lt;/td&gt;
  7791. &lt;/tr&gt;
  7792. &lt;tr&gt;
  7793. &lt;td&gt;Rust ≥ 1.77 with LLVM &amp;lt; 18&lt;/td&gt;
  7794. &lt;td&gt;Clang (any version)&lt;/td&gt;
  7795. &lt;td&gt;Storage compatible, has calling bug&lt;/td&gt;
  7796. &lt;/tr&gt;
  7797. &lt;tr&gt;
  7798. &lt;td&gt;Rust &amp;lt; 1.77&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://blog.rust-lang.org/2024/03/30/i128-layout-update.html#fn-l&quot; id=&quot;fnref-l&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;
  7799. &lt;td&gt;GCC (any version)&lt;/td&gt;
  7800. &lt;td&gt;Incompatible&lt;/td&gt;
  7801. &lt;/tr&gt;
  7802. &lt;tr&gt;
  7803. &lt;td&gt;Rust &amp;lt; 1.77&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://blog.rust-lang.org/2024/03/30/i128-layout-update.html#fn-l&quot; id=&quot;fnref-l-2&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;
  7804. &lt;td&gt;Clang (any version)&lt;/td&gt;
  7805. &lt;td&gt;Incompatible&lt;/td&gt;
  7806. &lt;/tr&gt;
  7807. &lt;tr&gt;
  7808. &lt;td&gt;GCC (any version)&lt;/td&gt;
  7809. &lt;td&gt;Clang ≥ 18&lt;/td&gt;
  7810. &lt;td&gt;Fully compatible&lt;/td&gt;
  7811. &lt;/tr&gt;
  7812. &lt;tr&gt;
  7813. &lt;td&gt;GCC (any version)&lt;/td&gt;
  7814. &lt;td&gt;Clang &amp;lt; 18&lt;/td&gt;
  7815. &lt;td&gt;Storage compatible with calling bug&lt;/td&gt;
  7816. &lt;/tr&gt;
  7817. &lt;/tbody&gt;
  7818. &lt;/table&gt;
  7819. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/03/30/i128-layout-update.html#effects--future-steps&quot; id=&quot;effects--future-steps&quot;&gt;&lt;/a&gt;Effects &amp;amp; Future Steps&lt;/h3&gt;
  7820. &lt;p&gt;As mentioned in the introduction, most users will notice no effects of this change
  7821. unless you are already doing something questionable with these types.&lt;/p&gt;
  7822. &lt;p&gt;Starting with Rust 1.77, it will be reasonably safe to start experimenting with
  7823. 128-bit integers in FFI, with some more certainty coming with the LLVM update
  7824. in 1.78. There is &lt;a href=&quot;https://github.com/rust-lang/lang-team/issues/255&quot;&gt;ongoing discussion&lt;/a&gt; about lifting the lint in an upcoming
  7825. version, but we want to be cautious and avoid introducing silent breakage for users
  7826. whose Rust compiler may be built with an older LLVM.&lt;/p&gt;
  7827. &lt;section class=&quot;footnotes&quot;&gt;
  7828. &lt;ol&gt;
  7829. &lt;li id=&quot;fn-f128-segfault&quot;&gt;
  7830. &lt;p&gt;https://bugs.llvm.org/show_bug.cgi?id=50198 &lt;a class=&quot;footnote-backref&quot; href=&quot;https://blog.rust-lang.org/2024/03/30/i128-layout-update.html#fnref-f128-segfault&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
  7831. &lt;/li&gt;
  7832. &lt;li id=&quot;fn-va-segfault&quot;&gt;
  7833. &lt;p&gt;https://github.com/llvm/llvm-project/issues/20283 &lt;a class=&quot;footnote-backref&quot; href=&quot;https://blog.rust-lang.org/2024/03/30/i128-layout-update.html#fnref-va-segfault&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
  7834. &lt;/li&gt;
  7835. &lt;li id=&quot;fn-l&quot;&gt;
  7836. &lt;p&gt;Rust &amp;lt; 1.77 with LLVM 18 will have some degree of compatibility, this is just
  7837. an uncommon combination. &lt;a class=&quot;footnote-backref&quot; href=&quot;https://blog.rust-lang.org/2024/03/30/i128-layout-update.html#fnref-l&quot;&gt;↩&lt;/a&gt; &lt;a class=&quot;footnote-backref&quot; href=&quot;https://blog.rust-lang.org/2024/03/30/i128-layout-update.html#fnref-l-2&quot;&gt;↩&lt;sup class=&quot;footnote-ref&quot;&gt;2&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
  7838. &lt;/li&gt;
  7839. &lt;/ol&gt;
  7840. &lt;/section&gt;</description>
  7841. <pubDate>Sat, 30 Mar 2024 00:00:00 +0000</pubDate>
  7842. <dc:creator>Trevor Gross</dc:creator>
  7843. </item>
  7844. <item>
  7845. <title>The Mozilla Blog: Mozilla Announces Call for Entries for the 2nd Annual Rise25 Awards in Dublin, Ireland</title>
  7846. <guid isPermaLink="false">https://blog.mozilla.org/?p=74266</guid>
  7847. <link>https://blog.mozilla.org/en/mozilla/mozilla-rise25-ai-nominations/</link>
  7848. <description>&lt;p&gt;&lt;/p&gt;
  7849.  
  7850.  
  7851.  
  7852. &lt;p&gt;Haven’t filled out the nomination form yet? You’re in luck. We are &lt;strong&gt;extending the deadline for nominations for 2024’s Rise25 cohort until 5PM PT Friday, April 12th&lt;/strong&gt;. You can nominate someone you know who is making an impact with AI (or yourself) below:&lt;/p&gt;
  7853.  
  7854.  
  7855.  
  7856. &lt;p class=&quot;has-text-align-center&quot;&gt;&lt;a href=&quot;https://www.mozilla.org/rise25/nominate/&quot;&gt;www.mozilla.org/rise25/nominate/&lt;/a&gt;&lt;/p&gt;
  7857.  
  7858.  
  7859.  
  7860. &lt;p&gt;On the heels of Mozilla’s &lt;em&gt;Rise25 Awards&lt;/em&gt; in Berlin last year, we’re excited to announce that we’ll be returning once again with a special celebration that will take place in Dublin, Ireland later this year.&lt;/p&gt;
  7861.  
  7862.  
  7863.  
  7864. &lt;p&gt;The &lt;em&gt;2nd Annual Rise25 Awards &lt;/em&gt;will feature familiar categories, but with an emphasis on trustworthy AI. We will be honoring 25 people who are leading that next wave of AI — who are using philanthropy, collective power, and the principles of open source to make sure the future of AI is responsible, trustworthy, inclusive and centered around human dignity. &lt;/p&gt;
  7865.  
  7866.  
  7867.  
  7868. &lt;p&gt;&lt;a href=&quot;https://blog.mozilla.org/en/mozilla/ai/ai-2023s-most-celebrated-influencer/&quot;&gt;2023 was indeed the year of AI&lt;/a&gt;, and as more people adopt it, we know it is a technology that will continue to impact our culture and society, act as a catalyst for innovation and creation, and be a medium to engage people from all walks of life in conversations thanks to its growing ubiquity in our everyday lives.&lt;/p&gt;
  7869.  
  7870.  
  7871.  
  7872. &lt;p&gt;We know we cannot do this alone: At Mozilla, we believe the most groundbreaking innovations emerge when people from diverse backgrounds unite to collaborate and openly trade ideas. &lt;/p&gt;
  7873.  
  7874.  
  7875.  
  7876. &lt;p&gt;So if you know someone who you think should be celebrated, &lt;a href=&quot;https://www.mozilla.org/rise25/nominate/&quot;&gt;we want to hear from you&lt;/a&gt;! &lt;/p&gt;
  7877.  
  7878.  
  7879.  
  7880. &lt;p&gt;Five winners from each of the five categories below will be selected to make up our 2024 Rise25 cohort: &lt;/p&gt;
  7881.  
  7882.  
  7883.  
  7884. &lt;p&gt;&lt;strong&gt;Advocates &lt;/strong&gt;–&lt;strong&gt; &lt;/strong&gt;&lt;em&gt;Guiding AI towards a responsible future&lt;/em&gt;&lt;/p&gt;
  7885.  
  7886.  
  7887.  
  7888. &lt;p&gt;These are the policymakers, activists, and thinkers ensuring AI is developed ethically, inclusively, and transparently. This category also includes those who are adept at translating complex AI concepts for the broader public — including journalists, content creators, and cultural commentators. They champion digital rights and accessible AI, striving to make AI a force for societal good.&lt;/p&gt;
  7889.  
  7890.  
  7891.  
  7892. &lt;p&gt;&lt;strong&gt;Builders &lt;/strong&gt;– &lt;em&gt;Developing AI through ethical innovation&lt;/em&gt;&lt;/p&gt;
  7893.  
  7894.  
  7895.  
  7896. &lt;p&gt;They are the architects of trustworthy AI, including engineers and data scientists dedicated to developing AI’s open-source language infrastructure. They focus on technical proficiency and responsible and ethical construction. Their work ensures AI is secure, accessible, and reliable, aiming to create tools that empower and advance society. &lt;/p&gt;
  7897.  
  7898.  
  7899.  
  7900. &lt;p&gt;&lt;strong&gt;Artists &lt;/strong&gt;– &lt;em&gt;Reimagining AI’s creative potential&lt;/em&gt;&lt;/p&gt;
  7901.  
  7902.  
  7903.  
  7904. &lt;p&gt;They transcend traditional AI applications, like synthesizing visuals or using large language models. Their projects, whether interactive websites, films, or digital media, challenge our perceptions and demonstrate how AI can amplify and empower human creativity. Their work provokes thought and offers fresh perspectives on the intersection of AI and art.&lt;/p&gt;
  7905.  
  7906.  
  7907.  
  7908. &lt;p&gt;&lt;strong&gt;Entrepreneurs &lt;/strong&gt;– &lt;em&gt;Fueling AI’s evolution with visionary ventures&lt;/em&gt;&lt;/p&gt;
  7909.  
  7910.  
  7911.  
  7912. &lt;p&gt;These daring individuals are transforming imaginative ideas into reality. They’re crafting businesses and solutions with AI to meet societal needs, improve everyday life and forge new technological paths. They embody innovation, steering startups and projects with a commitment to ethical standards, inclusiveness and enhancing human welfare through technology.&lt;/p&gt;
  7913.  
  7914.  
  7915.  
  7916. &lt;p&gt;&lt;strong&gt;Change Agents &lt;/strong&gt;– &lt;em&gt;Cultivating inclusive AI&lt;/em&gt;&lt;/p&gt;
  7917.  
  7918.  
  7919.  
  7920. &lt;p&gt;They are challengers that lead the way in diversifying AI, bringing varied community voices into tech. They focus on inclusivity in AI development, ensuring technology serves and represents everyone, especially those historically excluded from the tech narrative. They are community leaders, corporate leaders, activists and outside-the-box thinkers finding ways to amplify the impacts of AI for marginalized communities. Their work fosters an AI environment of equality and empowerment.&lt;/p&gt;
  7921.  
  7922.  
  7923.  
  7924. &lt;p&gt;This year’s awards build upon the success of last year’s programming and community event in Berlin, which brought to life what a future trustworthy Internet could look like. Last year’s event &lt;a href=&quot;https://rise25.mozilla.org/&quot;&gt;crowned&lt;/a&gt; trailblazers and visionaries across five distinct categories: Builders, Activists, Artists, Creators, and Advocates. (Psst! Stay tuned as we unveil their inspiring stories in a &lt;a href=&quot;https://blog.mozilla.org/en/internet-culture/trisha-prabhu-rise25-rethink-cyberbullying/&quot;&gt;video series&lt;/a&gt; airing across Mozilla channels throughout the year, leading up to the &lt;em&gt;2nd Annual Rise25 Awards&lt;/em&gt;.)&lt;/p&gt;
  7925.  
  7926.  
  7927.  
  7928. &lt;p&gt;So join us as we honor the innovators, advocates, entrepreneurs, and communities who are working to build a happier, healthier web. &lt;a href=&quot;https://www.mozilla.org/rise25/nominate/&quot;&gt;Click here to submit your nomination today.&lt;/a&gt;&lt;/p&gt;
  7929.  
  7930.  
  7931.  
  7932. &lt;p&gt;&lt;/p&gt;
  7933. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/mozilla/mozilla-rise25-ai-nominations/&quot;&gt;Mozilla Announces Call for Entries for the 2nd Annual Rise25 Awards in Dublin, Ireland&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;</description>
  7934. <pubDate>Fri, 29 Mar 2024 16:02:35 +0000</pubDate>
  7935. <dc:creator>Damiano</dc:creator>
  7936. </item>
  7937. <item>
  7938. <title>Mozilla Open Policy &amp; Advocacy Blog: How the U.S. Government is leading by example on artificial intelligence</title>
  7939. <guid isPermaLink="false">https://blog.mozilla.org/netpolicy/?p=2346</guid>
  7940. <link>https://blog.mozilla.org/netpolicy/2024/03/28/us-government-use-of-ai/</link>
  7941. <description>&lt;p&gt;For years, the U.S. government has seen the challenges and opportunities of leveraging AI to advance its mission. Federal agencies have tried to use facial recognition to identify suspects and taxpayers, raising serious concerns about bias and privacy. Some agencies have tried to use AI to identify veterans at higher risk of suicide, where incorrect predictions in either direction can harm veterans’ health and well-being.
 On the flip side, federal agencies are already harnessing AI in promising ways — from making it easier to forecast the weather, to predicting failures of air navigation equipment, to simply automating paperwork. If harnessed well, AI promises to improve the many federal services that Americans rely upon every day.&lt;/p&gt;
  7942. &lt;p&gt;That’s why we’re thrilled that, today, the White House established a &lt;a href=&quot;https://www.whitehouse.gov/briefing-room/statements-releases/2024/03/28/fact-sheet-vice-president-harris-announces-omb-policy-to-advance-governance-innovation-and-risk-management-in-federal-agencies-use-of-artificial-intelligence/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;strong policy&lt;/a&gt; to empower federal agencies to responsibly harness the power of AI for public benefit. The policy carefully identifies riskier uses of AI and sets up strong guardrails to ensure those applications are responsible. And, the policy simultaneously creates leadership and incentives for agencies to fully leverage the potential of AI.&lt;/p&gt;
  7943. &lt;p&gt;The policy is rooted in a simple observation: not all applications of AI are equally risky or equally beneficial. For example, it’s far less risky to use AI for digitizing paper documents than to use AI for determining who receives asylum. The former doesn’t need more scrutiny beyond existing rules, but the latter introduces risks to human rights and should be held to a much higher bar.&lt;/p&gt;
  7944. &lt;div class=&quot;wp-caption alignnone&quot; id=&quot;attachment_2351&quot; style=&quot;width: 6010px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/netpolicy/files/2024/03/M-memo-flowchart-1.png&quot;&gt;&lt;img alt=&quot;Diagram explaining how this policy mitigates AI risks.&quot; class=&quot;size-full wp-image-2351&quot; height=&quot;3375&quot; src=&quot;https://blog.mozilla.org/netpolicy/files/2024/03/M-memo-flowchart-1.png&quot; width=&quot;6000&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-2351&quot;&gt;Diagram explaining how this policy mitigates AI risks.&lt;/p&gt;&lt;/div&gt;
  7945. &lt;p&gt;Hence, the policy takes a risk-based approach to prioritize resources for AI accountability. This approach largely ignores AI applications that are low risk or appropriately managed by other policies, and focuses on AI applications that could meaningfully impact people’s safety or rights. For example, to use AI in electrical grids or autonomous vehicles, it needs to have an impact assessment, real-world testing, independent evaluation, ongoing monitoring, and appropriate public notice and human override. And, to use AI to filter resumes and approve loans, it needs to include the aforementioned protections for safety, mitigate against bias, incorporate public input, conduct ongoing monitoring, and provide reasonable opt-outs. These protections are based on common sense: AI that’s integral to domains like critical infrastructure, public safety, and government benefits should be tested, monitored, and include human overrides. The specifics of these protections are aligned with years of rigorous research and incorporate public comment so that the interventions are more likely to be both effective and feasible.&lt;/p&gt;
  7946. &lt;p&gt;The policy applies a similar approach to AI innovation. It calls for agencies to create AI strategies with a focus on prioritizing top AI use cases, reducing barriers to AI adoption, setting goals around AI maturity, and building the capacity needed to harness AI in the long run. This, paired with actions in the AI Executive Order that surge AI talent to high-priority locations across the federal government, sets agencies up to better deploy AI where it can be most impactful.&lt;/p&gt;
  7947. &lt;p&gt;These rules are also coupled with oversight and transparency. Agencies are required to appoint senior Chief AI Officers who oversee both the accountability and innovation mandates in the policy, and agencies also have to publish their plans to comply with these rules and stop using AI that doesn’t. In general, federal agencies also have to report their AI applications in annual AI use case inventories, and provide additional information about how they are managing risks from safety- and rights-impacting AI. The Office of Management and Budget (OMB) will oversee compliance, and that office is required to have sufficient visibility into any exemptions sought by agencies to the AI risk mitigation practices outlined in the policy. &lt;/p&gt;
  7948. &lt;p&gt;These practices are slated to be highly impactful. Federal law enforcement agencies — including immigration and border enforcement — should now have many of their uses of facial recognition and predictive analytics subject to strong risk mitigation practices. Millions of people work for the U.S. Government, and now these federal workers will have the protections outlined in this policy if their employers try to surveil and manage their movements and behaviors via AI. And, when federal agencies try to use AI to identify fraud in programs such as food stamps and financial aid, those agencies will now have to make sure that the AI actually works and doesn’t discriminate. &lt;/p&gt;
  7949. &lt;p&gt;These rules also apply regardless of whether a federal agency builds the AI themselves or purchases it from a vendor. That will have a large market-shaping impact, as the U.S. government is the largest purchaser of goods and services in the world, and agencies will now be incentivized to only purchase AI services that comply with the policy. The policy further directs agencies to share their AI code, models, and data — promoting open-source approaches that are &lt;a href=&quot;https://foundation.mozilla.org/en/research/library/accelerating-progress-toward-trustworthy-ai/whitepaper/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;vital&lt;/a&gt; for the AI ecosystem broadly. Additionally, when procuring AI services, the policy recommends that agencies promote market competition and interoperability among AI vendors, and avoid self-preferential treatment and vendor lock-in. This all helps advance good government, making sure taxpayer dollars are spent on safe and effective AI solutions, not on risky and over-hyped snake oil from contractors.&lt;/p&gt;
  7950. &lt;p&gt;Now, federal agencies will work to comply with this policy in the coming months. They will also develop follow-up guidance to support the implementation of this policy, advance better procurement of AI, and govern the use of AI in national security applications. The hard work is not over; there are still outstanding questions to tackle as part of this future work, such as figuring out how to embed open source requirements more explicitly as part of the AI procurement process, helping to reduce agencies’ dependencies on specific AI vendors. &lt;/p&gt;
  7951. &lt;p&gt;Amidst a flurry of government activity on AI, it’s worth stepping back and reflecting: today is a big day for AI policy. The U.S. government is leading by example with its own rules for AI, and Mozilla stands ready to help make the implementation of this policy a success.&lt;/p&gt;
  7952. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/netpolicy/2024/03/28/us-government-use-of-ai/&quot;&gt;How the U.S. Government is leading by example on artificial intelligence&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;</description>
  7953. <pubDate>Thu, 28 Mar 2024 09:24:31 +0000</pubDate>
  7954. <dc:creator>Nik Marda</dc:creator>
  7955. </item>
  7956. <item>
  7957. <title>The Rust Programming Language Blog: Announcing Rust 1.77.1</title>
  7958. <guid isPermaLink="true">https://blog.rust-lang.org/2024/03/28/Rust-1.77.1.html</guid>
  7959. <link>https://blog.rust-lang.org/2024/03/28/Rust-1.77.1.html</link>
  7960. <description>&lt;p&gt;The Rust team has published a new point release of Rust, 1.77.1. Rust is a
  7961. programming language that is empowering everyone to build reliable and
  7962. efficient software.&lt;/p&gt;
  7963. &lt;p&gt;If you have a previous version of Rust installed via rustup, getting Rust
  7964. 1.77.1 is as easy as:&lt;/p&gt;
  7965. &lt;pre&gt;&lt;code&gt;rustup update stable
  7966. &lt;/code&gt;&lt;/pre&gt;
  7967. &lt;p&gt;If you don't have it already, you can &lt;a href=&quot;https://www.rust-lang.org/install.html&quot;&gt;get &lt;code&gt;rustup&lt;/code&gt;&lt;/a&gt; from the
  7968. appropriate page on our website.&lt;/p&gt;
  7969. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/03/28/Rust-1.77.1.html#whats-in-1771&quot; id=&quot;whats-in-1771&quot;&gt;&lt;/a&gt;What's in 1.77.1&lt;/h3&gt;
  7970. &lt;p&gt;Cargo enabled &lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13257&quot;&gt;stripping of debuginfo in release builds by default&lt;/a&gt;
  7971. in Rust 1.77.0. However, due to a pre-existing issue, debuginfo stripping does not &lt;a href=&quot;https://github.com/rust-lang/rust/issues/122857&quot;&gt;behave&lt;/a&gt; in the expected way on Windows with the MSVC toolchain.&lt;/p&gt;
  7972. &lt;p&gt;Rust 1.77.1 therefore &lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13630&quot;&gt;disables&lt;/a&gt; the new Cargo behavior on Windows for
  7973. targets that use MSVC. There are no changes for other targets. We plan to eventually re-enable debuginfo stripping in
  7974. release mode in a later Rust release.&lt;/p&gt;
  7975. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/03/28/Rust-1.77.1.html#contributors-to-1771&quot; id=&quot;contributors-to-1771&quot;&gt;&lt;/a&gt;Contributors to 1.77.1&lt;/h4&gt;
  7976. &lt;p&gt;Many people came together to create Rust 1.77.1. We couldn't have done it
  7977. without all of you. &lt;a href=&quot;https://thanks.rust-lang.org/rust/1.77.1/&quot;&gt;Thanks!&lt;/a&gt;&lt;/p&gt;</description>
  7978. <pubDate>Thu, 28 Mar 2024 00:00:00 +0000</pubDate>
  7979. <dc:creator>The Rust Release Team</dc:creator>
  7980. </item>
  7981.  
  7982. </channel>
  7983. </rss>
  7984.  

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid RSS" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=http%3A//planet.mozilla.org/rss20.xml

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda