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.ubuntu.com/rss20.xml

  1. <?xml version="1.0"?>
  2. <rss version="2.0">
  3.  
  4. <channel>
  5. <title>Planet Ubuntu</title>
  6. <link>http://planet.ubuntu.com/</link>
  7. <language>en</language>
  8. <description>Planet Ubuntu - http://planet.ubuntu.com/</description>
  9.  
  10. <item>
  11. <title>Ubuntu Blog: Web Engineering: Celebrating Our Third Annual Hack Week</title>
  12. <guid isPermaLink="true">https://ubuntu.com//blog/web-engineering-celebrating-our-third-annual-hack-week</guid>
  13. <link>https://ubuntu.com//blog/web-engineering-celebrating-our-third-annual-hack-week</link>
  14. <description>&lt;p&gt;The Web Engineering team is thrilled to announce the successful conclusion of our third annual Hack Week! Over the past three years, this initiative has become a cornerstone of our collaborative spirit and commitment to innovation. With 126 significant contributions to date, Hack Week provides a dedicated space for our engineers to tackle challenging problems, refine existing systems, and push the boundaries of what’s possible.&lt;/p&gt;
  15. &lt;p&gt;The key goals of these events is allowing us to talk with confidence about the true open source nature of our work. We get the opportunity to addressing issues we’ve identified upstream in projects that we use to benefit ourselves and others. By dedicating time to these fixes, we not only improve the stability and performance of our foundational technologies but also empower our team to gain a deeper understanding of complex systems and our dependency tree. The direct engagement with these challenges allows us to truly experience the difficulties firsthand, fostering a unique learning environment. These invaluable learnings are then taken back to our daily projects, where we reflect on the insights gained and implement improvements that benefit all our ongoing work. We are proud of the dedication displayed by everyone involved, and we look forward to continuing this initiative into the future with impactful contributions.&lt;/p&gt;
  16. &lt;p&gt;This year we focused on providing accessibility contributions to our internal corporate message application called &lt;a href=&quot;https://mattermost.com/&quot;&gt;Mattermost&lt;/a&gt;. All contributions are listed below:&lt;/p&gt;
  17. &lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/Murtaza-Ax/Color-Converter/pull/1&quot;&gt;Murtaza-Ax/Color-Converter&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/mattermost/mattermost/pull/34132&quot;&gt;Mattermost #34132&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/mattermost/mattermost/issues/34128&quot;&gt;Mattermost ##34128&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/biomejs/biome/pull/7749&quot;&gt;Biome #7749&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/mattermost/mattermost/issues/26961&quot;&gt;Mattermost #26961&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/mattermost/mattermost/pull/34141&quot;&gt;Mattermost #34141&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/mattermost/mattermost/pull/34142&quot;&gt;Mattermost #34142&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/psycopg/psycopg/pull/1184&quot;&gt;Psycopg #1184&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/upptime/uptime-monitor/pull/269&quot;&gt;Upptime#269&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/heroui-inc/heroui/issues/5810&quot;&gt;HeroUI #5810&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/heroui-inc/heroui/pull/5811&quot;&gt;HeroUI #5811&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/mattermost/mattermost/issues/34153&quot;&gt;Mattermost #34153&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/mattermost/mattermost/pull/34154&quot;&gt;Mattermost #34154&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/TheAlgorithms/JavaScript/pull/1842&quot;&gt;TheAlgorithms/JavaScript #1842&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/google/adk-web/pull/161&quot;&gt;adk-web #161&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/heroui-inc/heroui/issues/5814&quot;&gt;HeroUI #5814&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/heroui-inc/heroui/pull/5813&quot;&gt;HeroUI #5813&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/TryGhost/Ghost/pull/25183&quot;&gt;Ghost #25183&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/heroui-inc/heroui/issues/5818&quot;&gt;HeroUI #5818&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/heroui-inc/heroui/pull/5819&quot;&gt;HeroUI #5819&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/TryGhost/Ghost/pull/25195&quot;&gt;Ghost #25195&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/upptime/uptime-monitor/pull/271&quot;&gt;Upptime#271&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/edlerd/scrabble/pull/3&quot;&gt;Scrabble #3&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/mattermost/mattermost/pull/34196&quot;&gt;Mattermost #34196&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/RDjarbeng/countdown/pull/155&quot;&gt;Countdown #155&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/TryGhost/Ghost/pull/25197&quot;&gt;Ghost #25197&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;
  18. &lt;p&gt;Open source encourages compatibility with standards, making locking users in more difficult. This is why we love the freedom open source offers. Open source software allows for sharing knowledge, gaining knowledge, and practising. It promotes transparency in data collection and software systems. Freedom, therefore, is the gift that keeps on giving.&lt;/p&gt;
  19. &lt;p&gt;Please have a look at &lt;a href=&quot;https://github.com/canonical/&quot;&gt;our open-source projects&lt;/a&gt; and reach out to us via the issues if anything is unclear.&lt;/p&gt;</description>
  20. <pubDate>Thu, 06 Nov 2025 11:22:28 +0000</pubDate>
  21. </item>
  22. <item>
  23. <title>Ubuntu Blog: Azure VM utils now included in Ubuntu: boosting cloud workloads</title>
  24. <guid isPermaLink="true">https://ubuntu.com//blog/ubuntu-azure-vm-utils-included</guid>
  25. <link>https://ubuntu.com//blog/ubuntu-azure-vm-utils-included</link>
  26. <description>&lt;p&gt;Ubuntu images on Microsoft Azure have recently started shipping with the open source package &lt;a href=&quot;https://learn.microsoft.com/en-us/azure/virtual-machines/linux/azure-virtual-machine-utilities&quot;&gt;&lt;strong&gt;azure-vm-utils&lt;/strong&gt;&lt;/a&gt; included by default. Azure VM utils is a package that provides essential utilities and udev rules to optimize the Linux experience on Azure. This change results in more reliable disks, smoother networking on accelerated setups, and fewer tweaks to get things running. Here’s what you need to know:&lt;/p&gt;
  27. &lt;h2 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;What’s changing&lt;/strong&gt;&lt;/h2&gt;
  28. &lt;ul&gt;
  29. &lt;li&gt;&lt;strong&gt;Smoother storage on modern Azure VMs&lt;/strong&gt;: Ubuntu now provides consistent device naming across SCSI and NVMe, reducing post-reboot surprises and easing automation.&lt;/li&gt;
  30. &lt;li&gt;&lt;strong&gt;Better handling of accelerated networking&lt;/strong&gt;: environments using MANA or Mellanox benefit from safer defaults that avoid double-managing passthrough interfaces.&lt;/li&gt;
  31. &lt;li&gt;&lt;strong&gt;Less image customization&lt;/strong&gt;: the utility and rules that many platform teams previously added now ship in the image, removing one more custom step from your pipelines.&lt;/li&gt;
  32. &lt;/ul&gt;
  33. &lt;h2 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Why it matters&lt;/strong&gt;&lt;/h2&gt;
  34. &lt;ul&gt;
  35. &lt;li&gt;&lt;strong&gt;Fewer post-boot surprises&lt;/strong&gt;: predictable device names keep fstab, cloud-init and provisioning scripts stable across VM families and reboots.&lt;/li&gt;
  36. &lt;li&gt;&lt;strong&gt;Smoother NVMe adoption&lt;/strong&gt;: newer VM families lean NVMe-first for performance; built-in rules make that transition painless while keeping SCSI setups working.&lt;/li&gt;
  37. &lt;li&gt;&lt;strong&gt;Less to maintain: &lt;/strong&gt;the stock image now handles Azure disk naming and accelerated NICs (MANA/Mellanox), so teams can drop custom udev/Netplan snippets and avoid fstab surprises after reboots.&lt;/li&gt;
  38. &lt;/ul&gt;
  39. &lt;h2 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;How to Get It&lt;/strong&gt;&lt;/h2&gt;
  40. &lt;ul&gt;
  41. &lt;li&gt;&lt;strong&gt;For New VMs&lt;/strong&gt;: No action is needed. The package is included by default in new Ubuntu images.&lt;/li&gt;
  42. &lt;li&gt;&lt;strong&gt;For Existing VMs&lt;/strong&gt;: You can install the package directly from the Ubuntu archive, where it’s available for all current LTS and interim releases: sudo apt update &amp;amp;&amp;amp; sudo apt install azure-vm-utils&lt;br /&gt;&lt;/li&gt;
  43. &lt;/ul&gt;
  44. &lt;h2 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Quick ways to verify&lt;/strong&gt;&lt;/h2&gt;
  45. &lt;p&gt;&lt;code&gt;azure-nvme-id --version           # tool present&lt;br /&gt;find /dev/disk/azure -type l      # predictable Azure disk links&lt;/code&gt;&lt;/p&gt;</description>
  46. <pubDate>Wed, 05 Nov 2025 15:02:15 +0000</pubDate>
  47. </item>
  48. <item>
  49. <title>The Fridge: Ubuntu Weekly Newsletter Issue 916</title>
  50. <guid isPermaLink="false">https://fridge.ubuntu.com/?p=10676</guid>
  51. <link>https://fridge.ubuntu.com/2025/11/03/ubuntu-weekly-newsletter-issue-916/</link>
  52. <description>&lt;figure class=&quot;wp-block-image&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://fridge.ubuntu.com/wp-content/uploads/2020/02/c9d7/header.png&quot; /&gt;&lt;/figure&gt;
  53.  
  54.  
  55.  
  56. &lt;p&gt;Welcome to the Ubuntu Weekly Newsletter, &lt;strong&gt;Issue 916 for the week of October 26 – November 1, 2025&lt;/strong&gt;. The full version of this issue is available &lt;a href=&quot;https://discourse.ubuntu.com/t/ubuntu-weekly-newsletter-issue-916/71163&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  57.  
  58.  
  59.  
  60. &lt;p&gt;In this issue we cover:&lt;/p&gt;
  61.  
  62.  
  63.  
  64. &lt;ul&gt;&lt;li&gt;Upgrades to 25.10 (Questing Quokka) are now live!&lt;/li&gt;&lt;li&gt;Ubuntu Stats&lt;/li&gt;&lt;li&gt;Hot in Support&lt;/li&gt;&lt;li&gt;Other Meeting Reports&lt;/li&gt;&lt;li&gt;Upcoming Meetings and Events&lt;/li&gt;&lt;li&gt;LoCo Events&lt;/li&gt;&lt;li&gt;Ubuntu Project docs: That’s a wrap!&lt;/li&gt;&lt;li&gt;Introducing architecture variants: amd64v3 now available in Ubuntu 25.10&lt;/li&gt;&lt;li&gt;[Ubuntu Studio] Upgrading from 25.04 to 25.10&lt;/li&gt;&lt;li&gt;Other Community News&lt;/li&gt;&lt;li&gt;What Say You&lt;/li&gt;&lt;li&gt;Ubuntu Cloud News&lt;/li&gt;&lt;li&gt;Canonical News&lt;/li&gt;&lt;li&gt;In the Press&lt;/li&gt;&lt;li&gt;In the Blogosphere&lt;/li&gt;&lt;li&gt;In Other News&lt;/li&gt;&lt;li&gt;Featured Audio and Video&lt;/li&gt;&lt;li&gt;Updates and Security for Ubuntu 22.04, 24.04, 25.04 and 25.10&lt;/li&gt;&lt;li&gt;And much more!&lt;/li&gt;&lt;/ul&gt;
  65.  
  66.  
  67.  
  68. &lt;p&gt;&lt;strong&gt;The Ubuntu Weekly Newsletter is brought to you by:&lt;/strong&gt;&lt;/p&gt;
  69.  
  70.  
  71.  
  72. &lt;ul&gt;&lt;li&gt;Krytarik Raido&lt;/li&gt;&lt;li&gt;Bashing-om&lt;/li&gt;&lt;li&gt;Chris Guiver&lt;/li&gt;&lt;li&gt;Wild Man&lt;/li&gt;&lt;li&gt;irihapeti&lt;/li&gt;&lt;li&gt;And many others&lt;/li&gt;&lt;/ul&gt;
  73.  
  74.  
  75.  
  76. &lt;p&gt;If you have a story idea for the Weekly Newsletter, join the &lt;a href=&quot;https://lists.ubuntu.com/mailman/listinfo/Ubuntu-news-team&quot;&gt;Ubuntu News Team mailing list&lt;/a&gt; and submit it. Ideas can also be added to the &lt;a href=&quot;https://discourse.ubuntu.com/t/ubuntu-weekly-newsletter-ideas/40053&quot;&gt;wiki&lt;/a&gt;!&lt;/p&gt;
  77.  
  78.  
  79.  
  80. &lt;div class=&quot;wp-block-image&quot;&gt;&lt;figure class=&quot;alignleft&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://fridge.ubuntu.com/wp-content/uploads/2015/05/ab28/CCL.png&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  81.  
  82.  
  83.  
  84. &lt;p&gt;&lt;a href=&quot;https://fridge.ubuntu.com/2025/11/03/ubuntu-weekly-newsletter-issue-916/&quot;&gt;&lt;/a&gt;.&lt;/p&gt;</description>
  85. <pubDate>Mon, 03 Nov 2025 23:53:15 +0000</pubDate>
  86. </item>
  87. <item>
  88. <title>St&amp;eacute;phane Graber: Announcing Incus 6.18</title>
  89. <guid isPermaLink="false">https://stgraber.org/?p=1804</guid>
  90. <link>https://stgraber.org/2025/11/03/announcing-incus-6-18/</link>
  91. <description>&lt;p&gt;The Incus team is pleased to announce the release of Incus 6.18!&lt;/p&gt;
  92.  
  93.  
  94.  
  95. &lt;p&gt;This is a reasonably busy release with quite a few smaller releases in every corner of Incus so there should be something for everyone!&lt;/p&gt;
  96.  
  97.  
  98.  
  99. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://linuxcontainers.org/incus/try-it/&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1805&quot; height=&quot;385&quot; src=&quot;https://stgraber.org/wp-content/uploads/2025/11/image-1024x385.png&quot; width=&quot;1024&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  100.  
  101.  
  102.  
  103. &lt;p&gt;The highlights for this release are:&lt;/p&gt;
  104.  
  105.  
  106.  
  107. &lt;ul class=&quot;wp-block-list&quot;&gt;
  108. &lt;li&gt;Systemd credentials support&lt;/li&gt;
  109.  
  110.  
  111.  
  112. &lt;li&gt;File operations on storage volumes&lt;/li&gt;
  113.  
  114.  
  115.  
  116. &lt;li&gt;Exporting of ISO volumes&lt;/li&gt;
  117.  
  118.  
  119.  
  120. &lt;li&gt;BFP token delegation&lt;/li&gt;
  121.  
  122.  
  123.  
  124. &lt;li&gt;MacOS support in the Incus VM agent&lt;/li&gt;
  125.  
  126.  
  127.  
  128. &lt;li&gt;VirtIO sound cards for VMs&lt;/li&gt;
  129.  
  130.  
  131.  
  132. &lt;li&gt;Support for temporarily detaching USB devices&lt;/li&gt;
  133.  
  134.  
  135.  
  136. &lt;li&gt;Configurable DNS mode for OVN networks&lt;/li&gt;
  137.  
  138.  
  139.  
  140. &lt;li&gt;Configurable MAC address patterns for networks and instances&lt;/li&gt;
  141.  
  142.  
  143.  
  144. &lt;li&gt;Extended IncusOS management CLI&lt;/li&gt;
  145. &lt;/ul&gt;
  146.  
  147.  
  148.  
  149. &lt;p&gt;The full announcement and changelog can be &lt;a href=&quot;https://discuss.linuxcontainers.org/t/incus-6-18-has-been-released/25091&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;found here&lt;/a&gt;.&lt;br /&gt;And for those who prefer videos, here’s the release &lt;a href=&quot;https://www.youtube.com/watch?v=FoM6S52I9wY&quot;&gt;overview video&lt;/a&gt;:&lt;/p&gt;
  150.  
  151.  
  152.  
  153. &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;
  154.  
  155. &lt;/div&gt;&lt;/figure&gt;
  156.  
  157.  
  158.  
  159. &lt;p&gt;You can take the latest release of Incus up for a spin through our online demo service at: &lt;a href=&quot;https://linuxcontainers.org/incus/try-it/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;https://linuxcontainers.org/incus/try-it/&lt;/a&gt;&lt;/p&gt;
  160.  
  161.  
  162.  
  163. &lt;p&gt;And as always, my company is offering commercial support on Incus, ranging from by-the-hour support contracts to one-off services on things like initial migration from LXD, review of your deployment to squeeze the most out of Incus or even feature sponsorship. You’ll find all details of that here: &lt;a href=&quot;https://zabbly.com/incus&quot;&gt;https://zabbly.com/incus&lt;/a&gt;&lt;/p&gt;
  164.  
  165.  
  166.  
  167. &lt;p&gt;Donations towards my work on this and other open source projects is also always appreciated, you can  find me on &lt;a href=&quot;https://github.com/sponsors/stgraber&quot;&gt;Github Sponsors&lt;/a&gt;, &lt;a href=&quot;https://patreon.com/stgraber&quot;&gt;Patreon&lt;/a&gt; and &lt;a href=&quot;https://ko-fi.com/stgraber&quot;&gt;Ko-fi&lt;/a&gt;.&lt;/p&gt;
  168.  
  169.  
  170.  
  171. &lt;p&gt;Enjoy!&lt;/p&gt;
  172.  
  173.  
  174. &lt;p&gt;&lt;/p&gt;</description>
  175. <pubDate>Mon, 03 Nov 2025 19:21:13 +0000</pubDate>
  176. </item>
  177. <item>
  178. <title>Scarlett Gately Moore: A New Chapter: Career Transition Update</title>
  179. <guid isPermaLink="false">https://www.scarlettgatelymoore.dev/?p=2141</guid>
  180. <link>https://www.scarlettgatelymoore.dev/a-new-chapter-career-transition-update/</link>
  181. <description>&lt;p&gt;I’m pleased to share that my career transition has been successful! I’ve joined our local county assessor’s office, beginning a new path in property assessment for taxation and valuation. While the compensation is modest, it offers the stability I was looking for.&lt;/p&gt;
  182.  
  183.  
  184.  
  185. &lt;p&gt;My new schedule consists of four 10-hour days with an hour commute each way, which means Monday through Thursday will be largely devoted to work and travel. However, I’ll have Fridays available for open source contributions once I’ve completed my existing website maintenance commitments.&lt;/p&gt;
  186.  
  187.  
  188.  
  189. &lt;h2 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Open Source Priorities&lt;/strong&gt;&lt;/h2&gt;
  190.  
  191.  
  192.  
  193. &lt;p&gt;Going forward, my contribution focus will be:&lt;/p&gt;
  194.  
  195.  
  196.  
  197. &lt;ol class=&quot;wp-block-list&quot;&gt;
  198. &lt;li&gt;Ubuntu Community Council&lt;/li&gt;
  199.  
  200.  
  201.  
  202. &lt;li&gt;Kubuntu/Debian&lt;/li&gt;
  203.  
  204.  
  205.  
  206. &lt;li&gt;Snap packages (as time permits)&lt;/li&gt;
  207. &lt;/ol&gt;
  208.  
  209.  
  210.  
  211. &lt;p&gt;Regarding the snap packages: my earlier hope of transitioning them to Carl hasn’t worked out as planned. He’s taken on maintaining KDE Neon single-handedly, and understandably, adding snap maintenance on top of that proved unfeasible. I’ll do what I can to help when time allows.&lt;/p&gt;
  212.  
  213.  
  214.  
  215. &lt;h2 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Looking for Contributors&lt;/strong&gt;&lt;/h2&gt;
  216.  
  217.  
  218.  
  219. &lt;p&gt;If you’re interested in contributing to Kubuntu or helping with snap packages, I’d love to hear from you! Feel free to reach out—community involvement is what makes these projects thrive.&lt;/p&gt;
  220.  
  221.  
  222.  
  223. &lt;p&gt;Thanks for your patience and understanding as I navigate this transition.&lt;/p&gt;</description>
  224. <pubDate>Fri, 31 Oct 2025 15:38:55 +0000</pubDate>
  225. </item>
  226. <item>
  227. <title>Podcast Ubuntu Portugal: E365 Encontrões Cimeiros</title>
  228. <guid isPermaLink="false">https://hub.podcastubuntuportugal.org/s/jeKAi5f3pfSgcPy/download/e365.mp3</guid>
  229. <link>https://podcastubuntuportugal.org/e365/</link>
  230. <description>&lt;p&gt;Há demasiadas coisas a acontecer, todas ao mesmo tempo, é o caos! De regresso da Ubuntu Summit em Londres, Lisboa e Porto, o Diogo sublinha os momentos mais importantes e entope o Internet Archive; o Miguel continua na missão de libertar pessoas do Windows; problemas técnicos caem-nos em cima em plena emissão; a Canonical tem uma nova Academia para certificações; revimos as novidades da mais moderna versão do Ubuntu Touch; apelamos a voluntários para fazerem respiração boca-a-boca ao Unity; alguém inventou um Recall para Linux e qual Oppenheimer, vemos ao longe a Framework pegar fogo à tenda do circo com Omarchy e Hyprland. E o mais importante: há um novo Super Tux Kart.&lt;/p&gt;
  231. &lt;p&gt;Já sabem: oiçam, subscrevam e partilhem!&lt;/p&gt;
  232. &lt;ul&gt;
  233. &lt;li&gt;Ubuntu Summit 2025, Londres, 23-24 de Outubro: &lt;a href=&quot;https://ubuntu.com/blog/ubuntu-summit-25-10-is-coming-to-your-circle-of-friends-from-london&quot;&gt;https://ubuntu.com/blog/ubuntu-summit-25-10-is-coming-to-your-circle-of-friends-from-london&lt;/a&gt;&lt;/li&gt;
  234. &lt;li&gt;Festão Lisboa-Porto 25 de Outubro (Watch Party simultânea): &lt;a href=&quot;https://ubuntusummit2510.centrolinux.pt&quot;&gt;https://ubuntusummit2510.centrolinux.pt&lt;/a&gt;
  235. &lt;ul&gt;
  236. &lt;li&gt;&lt;a href=&quot;https://lcdporto.org&quot;&gt;https://lcdporto.org&lt;/a&gt;&lt;/li&gt;
  237. &lt;li&gt;&lt;a href=&quot;https://ectl.pt&quot;&gt;https://ectl.pt&lt;/a&gt;&lt;/li&gt;
  238. &lt;/ul&gt;
  239. &lt;/li&gt;
  240. &lt;li&gt;Internet Archive: &lt;a href=&quot;https://archive.org/&quot;&gt;https://archive.org/&lt;/a&gt;&lt;/li&gt;
  241. &lt;li&gt;Encontro em Sintra: &lt;a href=&quot;https://discourse.ubuntu.com/t/2025-10-25-encontro-ubuntu-pt-de-outubro-sintra/70318&quot;&gt;https://discourse.ubuntu.com/t/2025-10-25-encontro-ubuntu-pt-de-outubro-sintra/70318&lt;/a&gt;&lt;/li&gt;
  242. &lt;li&gt;Winboat: &lt;a href=&quot;https://www.winboat.app/&quot;&gt;https://www.winboat.app/&lt;/a&gt;&lt;/li&gt;
  243. &lt;li&gt;Virt-Manager: &lt;a href=&quot;https://virt-manager.org/&quot;&gt;https://virt-manager.org/&lt;/a&gt;&lt;/li&gt;
  244. &lt;li&gt;VirtualBox: &lt;a href=&quot;https://www.virtualbox.org/&quot;&gt;https://www.virtualbox.org/&lt;/a&gt;&lt;/li&gt;
  245. &lt;li&gt;Wine: &lt;a href=&quot;https://www.winehq.org/&quot;&gt;https://www.winehq.org/&lt;/a&gt;&lt;/li&gt;
  246. &lt;li&gt;Winetricks: &lt;a href=&quot;https://github.com/Winetricks/winetricks&quot;&gt;https://github.com/Winetricks/winetricks&lt;/a&gt;&lt;/li&gt;
  247. &lt;li&gt;Playonlinux: &lt;a href=&quot;https://www.playonlinux.com/&quot;&gt;https://www.playonlinux.com/&lt;/a&gt;&lt;/li&gt;
  248. &lt;li&gt;Krita: &lt;a href=&quot;https://krita.org/pt-pt/&quot;&gt;https://krita.org/pt-pt/&lt;/a&gt;&lt;/li&gt;
  249. &lt;li&gt;FreeCad: &lt;a href=&quot;https://www.freecad.org/index.php?lang=pt&quot;&gt;https://www.freecad.org/index.php?lang=pt&lt;/a&gt;&lt;/li&gt;
  250. &lt;li&gt;Blender: &lt;a href=&quot;https://www.blender.org/&quot;&gt;https://www.blender.org/&lt;/a&gt;&lt;/li&gt;
  251. &lt;li&gt;Ubuntu Touch: &lt;a href=&quot;https://www.ubuntu-touch.io/&quot;&gt;https://www.ubuntu-touch.io/&lt;/a&gt;&lt;/li&gt;
  252. &lt;li&gt;Podcat (Joan Cybersheep): &lt;a href=&quot;https://open-store.io/app/podcat.cibersheep&quot;&gt;https://open-store.io/app/podcat.cibersheep&lt;/a&gt;&lt;/li&gt;
  253. &lt;li&gt;Ubuntu Unity precisa de ti: &lt;a href=&quot;https://www.phoronix.com/news/Ubuntu-Unity-25.10-Troubles&quot;&gt;https://www.phoronix.com/news/Ubuntu-Unity-25.10-Troubles&lt;/a&gt;&lt;/li&gt;
  254. &lt;li&gt;Canonical Academy:
  255. &lt;ul&gt;
  256. &lt;li&gt;&lt;a href=&quot;https://ubuntu.com/blog/introducing-canonical-academy&quot;&gt;https://ubuntu.com/blog/introducing-canonical-academy&lt;/a&gt;&lt;/li&gt;
  257. &lt;li&gt;&lt;a href=&quot;https://www.phoronix.com/news/Canonical-Academy&quot;&gt;https://www.phoronix.com/news/Canonical-Academy&lt;/a&gt;&lt;/li&gt;
  258. &lt;/ul&gt;
  259. &lt;/li&gt;
  260. &lt;li&gt;Usar Raspberry Pi 500+ durante 7 dias (Christopher Barnatt): &lt;a href=&quot;https://youtu.be/7U6KI7qBk40&quot;&gt;https://youtu.be/7U6KI7qBk40&lt;/a&gt;&lt;/li&gt;
  261. &lt;li&gt;Computadores Framework: &lt;a href=&quot;https://frame.work/pt/en&quot;&gt;https://frame.work/pt/en&lt;/a&gt;&lt;/li&gt;
  262. &lt;li&gt;Framework, Omarchy e Hyprland…a tenda do circo a arder: &lt;a href=&quot;https://community.frame.work/t/framework-supporting-far-right-racists/75986&quot;&gt;https://community.frame.work/t/framework-supporting-far-right-racists/75986&lt;/a&gt;&lt;/li&gt;
  263. &lt;li&gt;Reflexões sobre o blogue do DHH:
  264. &lt;ul&gt;
  265. &lt;li&gt;&lt;a href=&quot;https://web.archive.org/web/20251011121102/https://jakelazaroff.com/words/dhh-is-way-worse-than-i-thought/&quot;&gt;https://web.archive.org/web/20251011121102/https://jakelazaroff.com/words/dhh-is-way-worse-than-i-thought/&lt;/a&gt;&lt;/li&gt;
  266. &lt;li&gt;&lt;a href=&quot;https://web.archive.org/web/20250925050230/https://world.hey.com/dhh&quot;&gt;https://web.archive.org/web/20250925050230/https://world.hey.com/dhh&lt;/a&gt;&lt;/li&gt;
  267. &lt;/ul&gt;
  268. &lt;/li&gt;
  269. &lt;li&gt;Críticas ao Omarchy: &lt;a href=&quot;https://xn--gckvb8fzb.com/a-word-on-omarchy/&quot;&gt;https://xn--gckvb8fzb.com/a-word-on-omarchy/&lt;/a&gt;&lt;/li&gt;
  270. &lt;li&gt;Uma boa gargalhada - Recall for Linux: &lt;a href=&quot;https://github.com/rolflobker/recall-for-linux&quot;&gt;https://github.com/rolflobker/recall-for-linux&lt;/a&gt;&lt;/li&gt;
  271. &lt;li&gt;Supertux Kart 1.5:
  272. &lt;ul&gt;
  273. &lt;li&gt;&lt;a href=&quot;https://www.omgubuntu.co.uk/2025/10/supertuxkart-1-5-released&quot;&gt;https://www.omgubuntu.co.uk/2025/10/supertuxkart-1-5-released&lt;/a&gt;&lt;/li&gt;
  274. &lt;li&gt;&lt;a href=&quot;https://9to5linux.com/supertuxkart-1-5-open-source-kart-racing-game-released-with-major-changes&quot;&gt;https://9to5linux.com/supertuxkart-1-5-open-source-kart-racing-game-released-with-major-changes&lt;/a&gt;&lt;/li&gt;
  275. &lt;/ul&gt;
  276. &lt;/li&gt;
  277. &lt;li&gt;Ubports 20.04 e 24.04.0.1:
  278. &lt;ul&gt;
  279. &lt;li&gt;&lt;a href=&quot;https://ubports.com/blog/ubports-news-1/ubuntu-touch-20-04-ota-10-release-3972&quot;&gt;https://ubports.com/blog/ubports-news-1/ubuntu-touch-20-04-ota-10-release-3972&lt;/a&gt;&lt;/li&gt;
  280. &lt;li&gt;&lt;a href=&quot;https://ubports.com/blog/ubports-news-1/ubuntu-touch-24-04-1-0-release-3973&quot;&gt;https://ubports.com/blog/ubports-news-1/ubuntu-touch-24-04-1-0-release-3973&lt;/a&gt;&lt;/li&gt;
  281. &lt;li&gt;&lt;a href=&quot;https://open-store.io/?type=app&amp;amp;category=Games&quot;&gt;https://open-store.io/?type=app&amp;amp;category=Games&lt;/a&gt;&lt;/li&gt;
  282. &lt;/ul&gt;
  283. &lt;/li&gt;
  284. &lt;li&gt;LoCo PT: &lt;a href=&quot;https://loco.ubuntu.com/teams/ubuntu-pt/&quot;&gt;https://loco.ubuntu.com/teams/ubuntu-pt/&lt;/a&gt;&lt;/li&gt;
  285. &lt;li&gt;Mastodon: &lt;a href=&quot;https://masto.pt/@pup&quot;&gt;https://masto.pt/@pup&lt;/a&gt;&lt;/li&gt;
  286. &lt;li&gt;Youtube: &lt;a href=&quot;https://youtube.com/PodcastUbuntuPortugal&quot;&gt;https://youtube.com/PodcastUbuntuPortugal&lt;/a&gt;&lt;/li&gt;
  287. &lt;/ul&gt;
  288. &lt;h3 id=&quot;atribuição-e-licenças&quot;&gt;Atribuição e licenças&lt;/h3&gt;
  289. &lt;p&gt;Este episódio foi produzido por Diogo Constantino, Miguel e Tiago Carrondo e editado pelo &lt;a href=&quot;https://senhorpodcast.pt/&quot;&gt;Senhor Podcast&lt;/a&gt;.
  290. O website é produzido por Tiago Carrondo e o &lt;a href=&quot;https://gitlab.com/podcastubuntuportugal/website&quot;&gt;código aberto&lt;/a&gt; está licenciado nos termos da &lt;a href=&quot;https://gitlab.com/podcastubuntuportugal/website/main/LICENSE&quot;&gt;Licença MIT&lt;/a&gt;. (&lt;a href=&quot;https://creativecommons.org/licenses/by/4.0/)&quot;&gt;https://creativecommons.org/licenses/by/4.0/)&lt;/a&gt;. A música do genérico é: “Won’t see it comin’ (Feat Aequality &amp;amp; N’sorte d’autruche)”, por Alpha Hydrae e está licenciada nos termos da &lt;a href=&quot;https://creativecommons.org/publicdomain/zero/1.0/&quot;&gt;CC0 1.0 Universal License&lt;/a&gt;.
  291. Os separadores de péssima qualidade foram tocados ao vivo e sem rede pelo Miguel, pelo que pedimos desculpa pelos incómodos causados. Os efeitos sonoros têm os seguintes créditos: [Short Elevator Music Loop by BlondPanda] (&lt;a href=&quot;https://freesound.org/s/659889/)&quot;&gt;https://freesound.org/s/659889/)&lt;/a&gt;. License: Creative Commons 0.
  292. Este episódio e a imagem utilizada estão licenciados nos termos da licença: &lt;a href=&quot;https://creativecommons.org/licenses/by-nc-nd/4.0/&quot;&gt;Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)&lt;/a&gt;, &lt;a href=&quot;https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode&quot;&gt;cujo texto integral pode ser lido aqui&lt;/a&gt;. Estamos abertos a licenciar para permitir outros tipos de utilização, &lt;a href=&quot;https://podcastubuntuportugal.org/contactos&quot;&gt;contactem-nos&lt;/a&gt; para validação e autorização.
  293. A arte de episódio foi criada por encomenda pela Shizamura - artista, ilustradora e autora de BD. Podem ficar a conhecer melhor a &lt;a href=&quot;https://ciberlandia.pt/@shizamura&quot;&gt;Shizamura na Ciberlândia&lt;/a&gt; e no &lt;a href=&quot;https://sarilho.net/&quot;&gt;seu sítio web&lt;/a&gt;.&lt;/p&gt;</description>
  294. <pubDate>Fri, 31 Oct 2025 00:00:00 +0000</pubDate>
  295.        <enclosure url="https://hub.podcastubuntuportugal.org/s/jeKAi5f3pfSgcPy/download/e365.mp3" length="45583881" type="audio/mpeg"/>
  296. </item>
  297. <item>
  298. <title>Ubuntu Studio: Upgrading from 25.04 to 25.10</title>
  299. <guid isPermaLink="false">https://ubuntustudio.org/?p=3045</guid>
  300. <link>https://ubuntustudio.org/2025/10/upgrading-from-25-04-to-25-10/</link>
  301. <description>&lt;div class=&quot;wp-block-image&quot;&gt;&lt;figure class=&quot;alignright size-full&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-2953&quot; height=&quot;128&quot; src=&quot;https://ubuntustudio.org/wp-content/uploads/2025/02/2be9/system-software-update.png&quot; width=&quot;126&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  302.  
  303.  
  304.  
  305. &lt;h2&gt;An issue has been identified&lt;/h2&gt;
  306.  
  307.  
  308.  
  309. &lt;p&gt;The Ubuntu Release team has now enabled upgrades from 25.04 to 25.10! This is great news! In fact, you may have noticed this icon on your toolbar and a notification to upgrade.&lt;/p&gt;
  310.  
  311.  
  312.  
  313. &lt;p&gt;However, upon doing so, you may have noticed something a little more unfortunate:&lt;/p&gt;
  314.  
  315.  
  316.  
  317. &lt;div class=&quot;wp-block-image&quot;&gt;&lt;figure class=&quot;aligncenter size-full is-resized&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-3046&quot; height=&quot;305&quot; src=&quot;https://ubuntustudio.org/wp-content/uploads/2025/10/df61/Screenshot_20251029_110851.png&quot; width=&quot;680&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  318.  
  319.  
  320.  
  321. &lt;p&gt;Yep, we know. This tells you nothing about what is wrong. What is wrong is &lt;em&gt;slightly&lt;/em&gt; more technical. As it turns out, the backend application that actually performs the upgrade removed an argument from its command line unannounced during the Plucky Puffin release cycle, approximately a year ago.&lt;/p&gt;
  322.  
  323.  
  324.  
  325. &lt;p&gt;As our project leader, Erich Eickmeyer, maintains the upgrade notifier widget for both Ubuntu Studio and Kubuntu, he woke up and immediately got to work identifying what’s wrong and how to patch the Plasma widget in question to correctly execute the upgrade process. He has uploaded the fix, and it was accepted by a member of the Ubuntu Stable Release Updates team.&lt;/p&gt;
  326.  
  327.  
  328.  
  329. &lt;p&gt;At the moment, the fix needs to be tested and verified. In order to test it, one must install the fix from the &lt;code&gt;plucky-proposed&lt;/code&gt; repository. In order for it to be available, it must build for all architectures and, as of this writing, is awaiting building on &lt;code&gt;riscv64&lt;/code&gt; which has a 40-hour backlog.&lt;/p&gt;
  330.  
  331.  
  332.  
  333. &lt;h2&gt;The Workaround&lt;/h2&gt;
  334.  
  335.  
  336.  
  337. &lt;p&gt;If you wish to begin the upgrade process manually rather than waiting on the upgrade notifier fix to be implemented, feel free to make sure you are fully updated, type &lt;code&gt;alt-space&lt;/code&gt; to execute Krunner, and paste this:&lt;/p&gt;
  338.  
  339.  
  340.  
  341. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;do-release-upgrade -f DistUpgradeViewKDE&lt;/code&gt;&lt;/pre&gt;
  342.  
  343.  
  344.  
  345. &lt;p&gt;This is the exact command that will be executed by the notifier widget as soon as it is updated.&lt;/p&gt;
  346.  
  347.  
  348.  
  349. &lt;p&gt;Of course, if you’re in no hurry, feel free to wait until the notifier is updated and use that method. Do bear in mind, though, that as of this writing, &lt;strong&gt;you have exactly 90 days to perform the upgrade to 25.10&lt;/strong&gt; before your system will no longer be supported. At that time, you’ll risk being unable to upgrade at all unless certain procedures for End-Of-Life Upgrades are done, which can be tedious for those uncomfortable in a command line as it will require modifying system files.&lt;/p&gt;
  350.  
  351.  
  352.  
  353. &lt;h2&gt;Mea Culpa&lt;/h2&gt;
  354.  
  355.  
  356.  
  357. &lt;p&gt;We do apologize for the inconvenience. Testing upgrade paths like this are hard to do and things go missed, especially when teams don’t communicate with each other. We’re try to identify things before they happen but, unfortunately, certain items cannot be foreseen.&lt;br /&gt;&lt;br /&gt;This issue has now been added to the Ubuntu Studio 25.10 Release Notes.&lt;/p&gt;</description>
  358. <pubDate>Wed, 29 Oct 2025 20:08:52 +0000</pubDate>
  359. </item>
  360. <item>
  361. <title>Launchpad News: Make fetch service opt-in</title>
  362. <guid isPermaLink="false">https://blog.launchpad.net/?p=4492</guid>
  363. <link>https://blog.launchpad.net/general/make-fetch-service-opt-in</link>
  364. <description>&lt;p&gt;Launchpad Builders do not have direct access to the Internet. To reach external resources, they must acquire an authentication token that allows access to a restricted set of URLs via a proxy. This can either be a custom authenticated builder proxy or the fetch service.&lt;/p&gt;
  365.  
  366.  
  367.  
  368. &lt;p&gt;The fetch service is a custom sophisticated context-aware forward proxy. Whereas the builder proxy allows requests to allowlisted URLs, the fetch service also keeps track of requests and dependencies for a build.&lt;/p&gt;
  369.  
  370.  
  371.  
  372. &lt;p&gt;Users can now opt-in to use the fetch service while building snaps, charms, rocks and sourcecraft packages. You can read more about the fetch service &lt;a href=&quot;https://documentation.ubuntu.com/launchpad/developer/reference/services/fetch-service/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  373.  
  374.  
  375.  
  376. &lt;p&gt;&lt;strong&gt;Why is the fetch service important?&lt;/strong&gt;&lt;/p&gt;
  377.  
  378.  
  379.  
  380. &lt;p&gt;To achieve traceability and reproducibility, artifact dependencies retrieved during a build must be identified. The fetch service mediates network access between the build host and the outside world, examining the request protocol, creating a manifest of the downloaded artifacts, and keeping a copy of the artifacts for archival and metadata extraction for each package build.&lt;/p&gt;
  381.  
  382.  
  383.  
  384. &lt;p&gt;&lt;strong&gt;How to use the fetch service?&lt;/strong&gt;&lt;/p&gt;
  385.  
  386.  
  387.  
  388. &lt;p&gt;To be able to use the fetch service, users must opt-in. For snaps, charms, rocks and sourcecraft packages, the &lt;code&gt;use_fetch_service&lt;/code&gt; flag should be set to &lt;code&gt;true&lt;/code&gt; in the API. For snaps and charms, this setting is also available in the &lt;em&gt;Edit Recipe&lt;/em&gt; UI page. &lt;/p&gt;
  389.  
  390.  
  391.  
  392. &lt;p&gt;The fetch service can be run in two modes, “strict” and “permissive”, where it defaults to the former. Both modes only allow certain resources and formats, as defined by inspectors which are responsible for inspecting the requests and the various downloads that are made during the build, ensuring that the requests are permitted. &lt;/p&gt;
  393.  
  394.  
  395.  
  396. &lt;p&gt;The “strict” mode errors out if any restrictions are violated. The “permissive” mode works similarly, but only logs a warning when encountering any violations. The mode can be configured using the &lt;code&gt;fetch_service_policy&lt;/code&gt; option via the API. For snaps and charms, the mode can also be selected from a dropdown on the &lt;em&gt;Edit Recipe&lt;/em&gt; UI page.&lt;/p&gt;
  397.  
  398.  
  399.  
  400. &lt;p&gt;&lt;strong&gt;When to use the fetch service?&lt;/strong&gt;&lt;/p&gt;
  401.  
  402.  
  403.  
  404. &lt;p&gt;Use the fetch service when you need to keep track of requests and dependencies for a build, e.g., when you need to verify that the artifacts belong to secure, trusted sources.&lt;/p&gt;</description>
  405. <pubDate>Tue, 28 Oct 2025 11:31:12 +0000</pubDate>
  406. </item>
  407. <item>
  408. <title>The Fridge: Ubuntu Weekly Newsletter Issue 915</title>
  409. <guid isPermaLink="false">https://fridge.ubuntu.com/?p=10671</guid>
  410. <link>https://fridge.ubuntu.com/2025/10/27/ubuntu-weekly-newsletter-issue-915/</link>
  411. <description>&lt;figure class=&quot;wp-block-image&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://fridge.ubuntu.com/wp-content/uploads/2020/02/c9d7/header.png&quot; /&gt;&lt;/figure&gt;
  412.  
  413.  
  414.  
  415. &lt;p&gt;Welcome to the Ubuntu Weekly Newsletter, &lt;strong&gt;Issue 915 for the week of October 19 – 25, 2025&lt;/strong&gt;. The full version of this issue is available &lt;a href=&quot;https://discourse.ubuntu.com/t/ubuntu-weekly-newsletter-issue-915/70261&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  416.  
  417.  
  418.  
  419. &lt;p&gt;In this issue we cover:&lt;/p&gt;
  420.  
  421.  
  422.  
  423. &lt;ul&gt;&lt;li&gt;Enabling updates on Ubuntu 25.10 systems&lt;/li&gt;&lt;li&gt;[Updated] Questing Quokka Release Notes&lt;/li&gt;&lt;li&gt;Resolute Raccoon is now open for development&lt;/li&gt;&lt;li&gt;Ubuntu Stats&lt;/li&gt;&lt;li&gt;Hot in Support&lt;/li&gt;&lt;li&gt;Rocks Public Journal; 2025-21-10&lt;/li&gt;&lt;li&gt;Other Meeting Reports&lt;/li&gt;&lt;li&gt;Upcoming Meetings and Events&lt;/li&gt;&lt;li&gt;Vote result: LoCo rebranding and rescoping resolution&lt;/li&gt;&lt;li&gt;Discover your fully open source robotics observability at ROSCon 2025&lt;/li&gt;&lt;li&gt;Ubuntu 25.10 Release Party @ Taipei&lt;/li&gt;&lt;li&gt;LoCo Events&lt;/li&gt;&lt;li&gt;TPM-backed FDE: Take 2 minutes to help widen Ubuntu compatibility with your TPM configuration!&lt;/li&gt;&lt;li&gt;Canonical’s new design system : towards a design system ontology&lt;/li&gt;&lt;li&gt;Other Community News&lt;/li&gt;&lt;li&gt;Canonical News&lt;/li&gt;&lt;li&gt;In the Press&lt;/li&gt;&lt;li&gt;In the Blogosphere&lt;/li&gt;&lt;li&gt;Other Articles of Interest&lt;/li&gt;&lt;li&gt;Featured Audio and Video&lt;/li&gt;&lt;li&gt;Updates and Security for Ubuntu 22.04, 24.04, 25.04 and 25.10&lt;/li&gt;&lt;li&gt;And much more!&lt;/li&gt;&lt;/ul&gt;
  424.  
  425.  
  426.  
  427. &lt;p&gt;&lt;strong&gt;The Ubuntu Weekly Newsletter is brought to you by:&lt;/strong&gt;&lt;/p&gt;
  428.  
  429.  
  430.  
  431. &lt;ul&gt;&lt;li&gt;Krytarik Raido&lt;/li&gt;&lt;li&gt;Bashing-om&lt;/li&gt;&lt;li&gt;Chris Guiver&lt;/li&gt;&lt;li&gt;Wild Man&lt;/li&gt;&lt;li&gt;Cristovao Cordeiro (cjdc) – Rocks&lt;/li&gt;&lt;li&gt;irihapeti&lt;/li&gt;&lt;li&gt;And many others&lt;/li&gt;&lt;/ul&gt;
  432.  
  433.  
  434.  
  435. &lt;p&gt;If you have a story idea for the Weekly Newsletter, join the &lt;a href=&quot;https://lists.ubuntu.com/mailman/listinfo/Ubuntu-news-team&quot;&gt;Ubuntu News Team mailing list&lt;/a&gt; and submit it. Ideas can also be added to the &lt;a href=&quot;https://discourse.ubuntu.com/t/ubuntu-weekly-newsletter-ideas/40053&quot;&gt;wiki&lt;/a&gt;!&lt;/p&gt;
  436.  
  437.  
  438.  
  439. &lt;div class=&quot;wp-block-image&quot;&gt;&lt;figure class=&quot;alignleft&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://fridge.ubuntu.com/wp-content/uploads/2015/05/ab28/CCL.png&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  440.  
  441.  
  442.  
  443. &lt;p&gt;&lt;a href=&quot;https://fridge.ubuntu.com/2025/10/27/ubuntu-weekly-newsletter-issue-915/&quot;&gt;&lt;/a&gt;.&lt;/p&gt;</description>
  444. <pubDate>Mon, 27 Oct 2025 21:51:36 +0000</pubDate>
  445. </item>
  446. <item>
  447. <title>Paul Tagliamonte: It's NOT always DNS.</title>
  448. <guid isPermaLink="true">https://notes.pault.ag/its-not-always-dns/</guid>
  449. <link>https://notes.pault.ag/its-not-always-dns/</link>
  450. <description>&lt;p&gt;I’ve written down a new rule (no name, sorry) that I’ll be repeating to myself
  451. and those around me. &lt;strong&gt;“If you can replace ‘DNS’ with ‘key value store mapping
  452. a name to an ip’ and it still makes sense, it was not, in fact, DNS.”&lt;/strong&gt; Feel
  453. free to repeat it along with me.&lt;/p&gt;
  454. &lt;p&gt;Sure, the “It’s always DNS” meme is funny the first few hundred times you see
  455. it – but what’s less funny is when critical thinking ends because a DNS query
  456. is involved. DNS failures are often the first observable problem &lt;em&gt;because&lt;/em&gt;
  457. it’s one of the first things that needs to be done. DNS is fairly complicated,
  458. implementation-dependent, and at times – frustrating to debug – but it is not
  459. the operational hazard it’s made out to be. It’s at best a shallow take, and at
  460. worst actively holding teams back from understanding their true operational
  461. risks.&lt;/p&gt;
  462. &lt;p&gt;IP connectivity failures between a host and the rest of the network is &lt;em&gt;not&lt;/em&gt; a
  463. reason to blame DNS. This would happen no matter how you distribute the updated
  464. name to IP mappings. Wiping out
  465. &lt;a href=&quot;https://aws.amazon.com/message/101925/&quot;&gt;all the records during the course of operations due to an automation bug&lt;/a&gt;
  466. is &lt;em&gt;not&lt;/em&gt; a reason to blame DNS. This, too, would happen no matter how you
  467. distribute the name to IP mappings. Something made the choice to delete all the
  468. mappings, and &lt;a href=&quot;https://web.archive.org/web/20251005205731/http://www.team.net/mjb/hawg.html&quot;&gt;it did what you asked it to do&lt;/a&gt;&lt;/p&gt;
  469. &lt;p&gt;There’s plenty of annoying DNS specific sharp edges to blame when things &lt;em&gt;do&lt;/em&gt;
  470. go wrong (like &lt;code&gt;8.8.8.8&lt;/code&gt; and &lt;code&gt;1.1.1.1&lt;/code&gt; disagreeing about resolving a domain
  471. because of DNSSEC, or since we’re on the topic, a
  472. &lt;a href=&quot;https://slack.engineering/what-happened-during-slacks-dnssec-rollout/&quot;&gt;DNSSEC rollout bricking prod for hours&lt;/a&gt;)
  473. for us to be cracking jokes anytime a program makes a DNS request.&lt;/p&gt;
  474. &lt;p&gt;We can do better.&lt;/p&gt;</description>
  475. <pubDate>Mon, 27 Oct 2025 17:15:00 +0000</pubDate>
  476. </item>
  477. <item>
  478. <title>Launchpad News: Support for FIDO2 SSH Keys</title>
  479. <guid isPermaLink="false">https://blog.launchpad.net/?p=4501</guid>
  480. <link>https://blog.launchpad.net/general/support-for-fido2-ssh-keys</link>
  481. <description>&lt;p&gt;Launchpad now supports the FIDO2 hardware-backed SSH key types ed25519-sk and ecdsa-sk. These keys use a hardware device, such as a YubiKey or Nitrokey, to perform cryptographic operations and keep your private keys safely off your computer. They can be used anywhere Launchpad accepts SSH authentication, including git+ssh and SFTP PPA uploads.&lt;/p&gt;
  482.  
  483.  
  484.  
  485. &lt;p&gt;To generate a new key, run&lt;/p&gt;
  486.  
  487.  
  488.  
  489. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;ssh-keygen -t ed25519-sk -C &quot;your@email.com&quot;&lt;/code&gt;&lt;/pre&gt;
  490.  
  491.  
  492.  
  493. &lt;p&gt;or use ecdsa-sk for backwards compatibility. You will be asked to touch your security key during the key creation, and OpenSSH will store the resulting files in ~/.ssh/. If you want to make your key resident, meaning it can be stored on the hardware device and later retrieved even if the original files are lost, use the -O resident option:&lt;/p&gt;
  494.  
  495.  
  496.  
  497. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;ssh-keygen -t ed25519-sk -O resident -C &quot;your@email.com&quot;&lt;/code&gt;&lt;/pre&gt;
  498.  
  499.  
  500.  
  501. &lt;p&gt;Resident keys are useful if you use multiple machines or if you want a portable login method tied directly to your hardware key. To register a new key on your Launchpad account, visit https://launchpad.net/~username/+editsshkeys.&lt;/p&gt;
  502.  
  503.  
  504.  
  505. &lt;p&gt;These new key types offer strong protection against key theft and phishing, but require a physical device each time you connect. It is recommended you keep a separate backup key if you use them regularly.&lt;/p&gt;
  506.  
  507.  
  508.  
  509. &lt;p&gt;The introduction of security key backed SSH key types is the next step on making Launchpad even more secure. Let us know if you have any feedback!&lt;/p&gt;</description>
  510. <pubDate>Mon, 27 Oct 2025 15:29:34 +0000</pubDate>
  511. </item>
  512. <item>
  513. <title>St&amp;eacute;phane Graber: The FuturFusion Cloud stack</title>
  514. <guid isPermaLink="false">https://stgraber.org/?p=1789</guid>
  515. <link>https://stgraber.org/2025/10/21/the-futurfusion-cloud-stack/</link>
  516. <description>&lt;p&gt;Besides my regular open source contributions and running my own consulting business (&lt;a href=&quot;https://zabbly.com&quot;&gt;Zabbly&lt;/a&gt;), I’m also the CTO and co-founder of an Open Source company called &lt;a href=&quot;https://futurfusion.io&quot;&gt;FuturFusion&lt;/a&gt; where I’ve been running Engineering for well over a year now.&lt;/p&gt;
  517.  
  518.  
  519.  
  520. &lt;p&gt;My main focus over there has been building the FuturFusion Cloud stack, a completely open-source private cloud solution built around Incus. As part of that, our engineering team has been hard at work over the past year or so, improving Incus itself but also building a number of other projects from the ground up to make it easy to build and operate large scale Incus deployments.&lt;/p&gt;
  521.  
  522.  
  523.  
  524. &lt;p&gt;Our stack is made of 4 core components:&lt;/p&gt;
  525.  
  526.  
  527.  
  528. &lt;ul class=&quot;wp-block-list&quot;&gt;
  529. &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://linuxcontainers.org/incus/&quot;&gt;Incus&lt;/a&gt;&lt;/strong&gt; itself as the private cloud platform that runs virtual machines, system containers and application containers, with full clustering and multi-tenancy as well as support for a variety of storage and networking options to fit most environments.&lt;/li&gt;
  530.  
  531.  
  532.  
  533. &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/lxc/incus-os&quot;&gt;IncusOS&lt;/a&gt;&lt;/strong&gt; (shipping as HypervisorOS to our customers) that acts as our base layer Operating System image running on all physical servers as well as in the virtual machines that run our other components. It’s an immutable OS image based on Debian 13 and using systemd’s tooling to provide a safe boot experience and full disk encryption through the use of UEFI Secure Boot and TPM 2.0 modules. It uses an A/B update scheme, guaranteeing no variance in software between servers and an easy rollback mechanism should something go wrong. It’s completely locked down with API-only access and optional central management through Operations Center.&lt;/li&gt;
  534.  
  535.  
  536.  
  537. &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/futurfusion/operations-center&quot;&gt;Operations Center&lt;/a&gt; &lt;/strong&gt;provides an overview of an entire deployment, keeping track of all individual servers (running HypervisorOS), centrally managing all updates, handling Incus cluster creation and then acting as a global inventory of every Incus resource across all clusters.&lt;/li&gt;
  538.  
  539.  
  540.  
  541. &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/futurfusion/migration-manager&quot;&gt;Migration Manager&lt;/a&gt; &lt;/strong&gt;is our migration tool which currently focuses on migrating from VMware (vCenter or standalone ESXi) over to Incus. It can connect to a large number of source VMware environments as well as target Incus clusters. It can easily keep track of hundreds of thousands of VMs that need to be migrated, making it easy to create migration batches and schedule those over weeks or months, running regular data pre-migration and finally completing the migration during scheduled downtime windows.&lt;/li&gt;
  542. &lt;/ul&gt;
  543.  
  544.  
  545.  
  546. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://stgraber.org/wp-content/uploads/2025/10/image.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1791&quot; height=&quot;512&quot; src=&quot;https://stgraber.org/wp-content/uploads/2025/10/image-1024x512.png&quot; width=&quot;1024&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  547.  
  548.  
  549.  
  550. &lt;p&gt;I recently took a bit of time away from customer deployments to &lt;a href=&quot;https://www.youtube.com/watch?v=TzH2L5Bzlh8&quot;&gt;record a video&lt;/a&gt; of how everything fits together, including an end to end lab deployment, starting from a pre-existing VMware environment and going all the way to having two Incus clusters running and the VMware VMs fully converted to Incus VMs.&lt;/p&gt;
  551.  
  552.  
  553.  
  554. &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;
  555.  
  556. &lt;/div&gt;&lt;/figure&gt;
  557.  
  558.  
  559.  
  560. &lt;p&gt;In addition, for those interested in the security aspect of things, I gave a talk a few months back about IncusOS’ security story at the Linux Security Summit in Denver, Colorado. The &lt;a href=&quot;https://www.youtube.com/watch?v=d4Wx08pKNBo&quot;&gt;recording of which&lt;/a&gt; has since been made publicly available.&lt;/p&gt;
  561.  
  562.  
  563.  
  564. &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;
  565.  
  566. &lt;/div&gt;&lt;/figure&gt;
  567.  
  568.  
  569.  
  570. &lt;p&gt;Now our focus on the engineering front is primarily in fixing some filling a few remaining gaps as well as putting together up to date comprehensive documentation on IncusOS, Migration Manager and Operations Center. This will then make it easy for anyone to get started with those as well as hopefully attract more contributors to those projects.&lt;/p&gt;
  571.  
  572.  
  573.  
  574. &lt;p&gt;On the topic of contributors, none of this would have been possible without the 112 individuals who contributed to the Incus project in the past year, thank you!&lt;/p&gt;</description>
  575. <pubDate>Tue, 21 Oct 2025 19:57:20 +0000</pubDate>
  576. </item>
  577. <item>
  578. <title>Julian Andres Klode: Sound Removals</title>
  579. <guid isPermaLink="true">https://blog.jak-linux.org/2025/10/18/sound-removals/</guid>
  580. <link>https://blog.jak-linux.org/2025/10/18/sound-removals/</link>
  581. <description>&lt;h2 id=&quot;problem-statement&quot;&gt;Problem statement&lt;/h2&gt;
  582. &lt;p&gt;Currently if you have an automatically installed package A (= 1) where&lt;/p&gt;
  583. &lt;ul&gt;
  584. &lt;li&gt;A (= 1) Depends B (= 1)&lt;/li&gt;
  585. &lt;li&gt;A (= 2) Depends B (= 2)&lt;/li&gt;
  586. &lt;/ul&gt;
  587. &lt;p&gt;and you upgrade B from 1 to 2; then  you can:&lt;/p&gt;
  588. &lt;ol&gt;
  589. &lt;li&gt;Remove A (= 1)&lt;/li&gt;
  590. &lt;li&gt;Upgrade A to version 2&lt;/li&gt;
  591. &lt;/ol&gt;
  592. &lt;p&gt;If A was installed by a chain initiated by Recommends (say X Rec Y, Y Depends A), the solver sometimes preferred removing A (and anything depending on it until it got).&lt;/p&gt;
  593. &lt;p&gt;I have a fix pending to introduce eager Recommends which fixes the practical case, but
  594. this is still not &lt;em&gt;sound&lt;/em&gt;.&lt;/p&gt;
  595. &lt;p&gt;In fact we can show that the solver produces the wrong result for small
  596. minimal test cases, as well as the right result for some others without the
  597. fix (hooray?).&lt;/p&gt;
  598. &lt;p&gt;Ensuring sound removals is more complex, and first of all it begs the question: When
  599. is a removal sound? This, of course, is on us to define.&lt;/p&gt;
  600. &lt;p&gt;An easy case can be found in the &lt;a href=&quot;https://www.debian.org/doc/debian-policy/ch-relationships.html#replacing-whole-packages-forcing-their-removal&quot;&gt;Debian policy, 7.6.2 “Replacing whole packages, forcing their removal”&lt;/a&gt;:&lt;/p&gt;
  601. &lt;p&gt;If &lt;code&gt;B (= 2)&lt;/code&gt; declares a &lt;code&gt;Conflicts: A (= 1)&lt;/code&gt; and &lt;code&gt;Replaces: A (= 1)&lt;/code&gt;, then the removal
  602. is valid. However this is incomplete as well, consider it declares &lt;code&gt;Conflicts: A (&amp;lt; 1)&lt;/code&gt;
  603. and &lt;code&gt;Replaces: A (&amp;lt; 1)&lt;/code&gt;; the solution to remove A rather than upgrade it would still
  604. be wrong.&lt;/p&gt;
  605. &lt;p&gt;This indicates that we should only allow removing &lt;code&gt;A&lt;/code&gt; if the conflicts could not be solved
  606. by upgrading it.&lt;/p&gt;
  607. &lt;p&gt;The other case to explore is package removals. If B is removed, A should be removed as well;
  608. however it there is another package X that &lt;code&gt;Provides: B (= 1)&lt;/code&gt; and it is marked for install,
  609. A should not be removed. That said, the solver is not allowed to install X to satisfy the
  610. depends &lt;code&gt;B (= 1)&lt;/code&gt; - only to satisfy other dependencies [we do not want to get into endless
  611. loops where we switch between alternatives to keep reverse dependencies installed].&lt;/p&gt;
  612. &lt;h2 id=&quot;proposed-solution&quot;&gt;Proposed solution&lt;/h2&gt;
  613. &lt;p&gt;To solve this, I propose the following definition:&lt;/p&gt;
  614. &lt;p&gt;&lt;strong&gt;Definition (sound removal)&lt;/strong&gt;: A removal of package &lt;code&gt;P&lt;/code&gt; is sound if either:&lt;/p&gt;
  615. &lt;ol&gt;
  616. &lt;li&gt;A version &lt;code&gt;v&lt;/code&gt; is installed that &lt;em&gt;package-conflicts&lt;/em&gt; with B.&lt;/li&gt;
  617. &lt;li&gt;A package &lt;code&gt;Q&lt;/code&gt; is removed and the installable versions of P &lt;em&gt;package-depends&lt;/em&gt; on Q.&lt;/li&gt;
  618. &lt;/ol&gt;
  619. &lt;p&gt;where the other definitions are:&lt;/p&gt;
  620. &lt;p&gt;&lt;strong&gt;Definition (installable version)&lt;/strong&gt;: A version &lt;code&gt;v&lt;/code&gt; is installable if either it is installed,
  621. or it is newer than an installed version of the same package (you may wish to change this to
  622. accomodate downgrades, or require strict pinning, but here be dragons).&lt;/p&gt;
  623. &lt;p&gt;&lt;strong&gt;Definition (package-depends):&lt;/strong&gt; A version &lt;code&gt;v&lt;/code&gt; &lt;em&gt;package-depends&lt;/em&gt; on a package B if either:&lt;/p&gt;
  624. &lt;ol&gt;
  625. &lt;li&gt;there exists a dependency in &lt;code&gt;v&lt;/code&gt; that can be solved by any version of &lt;code&gt;B&lt;/code&gt;, or&lt;/li&gt;
  626. &lt;li&gt;there exists a package &lt;code&gt;C&lt;/code&gt; where &lt;code&gt;v package-depends C&lt;/code&gt; and &lt;code&gt;any (c in C) package-depends B&lt;/code&gt; (transitivity)&lt;/li&gt;
  627. &lt;/ol&gt;
  628. &lt;p&gt;&lt;strong&gt;Definition (package-conflicts):&lt;/strong&gt; A version &lt;code&gt;v&lt;/code&gt; &lt;em&gt;package-conflicts&lt;/em&gt; with an installed package &lt;code&gt;B&lt;/code&gt; if either:&lt;/p&gt;
  629. &lt;ol&gt;
  630. &lt;li&gt;it declares a conflicts against an installable version of B; or&lt;/li&gt;
  631. &lt;li&gt;there exists a package &lt;code&gt;C&lt;/code&gt; where &lt;code&gt;v package-conflicts C&lt;/code&gt;,
  632. and &lt;code&gt;b package-depends C&lt;/code&gt; for installable versions b.&lt;/li&gt;
  633. &lt;/ol&gt;
  634. &lt;h2 id=&quot;translating-this-into-a-modified-sat-solver&quot;&gt;Translating this into a (modified) SAT solver&lt;/h2&gt;
  635. &lt;p&gt;One approach may be to implement the logic in the conflict analysis that drives backtracking, i.e.
  636. we assume a package &lt;code&gt;A&lt;/code&gt; and when we reach &lt;code&gt;not A&lt;/code&gt;, we analyse if the implication graph for &lt;code&gt;not A&lt;/code&gt;
  637. constitutes a sound removal, and then replace the assumption &lt;code&gt;A&lt;/code&gt; with the assumption
  638. &lt;code&gt;A or &quot;learned reason&lt;/code&gt;.&lt;/p&gt;
  639. &lt;p&gt;However, while this seems a plausible mechanism for a DPLL solver, for a modern CDCL solver,  it’s
  640. not immediately evident how to analyse whether &lt;code&gt;not A&lt;/code&gt; is sound if the reason for it is a learned
  641. clause, rather than a problem clause.&lt;/p&gt;
  642. &lt;p&gt;Instead we propose a static encoding of the rules into a slightly modified SAT solver:&lt;/p&gt;
  643. &lt;p&gt;Given c1, …, cn that transitive-conflicts A and D1, …, Dn that A package-depends on,
  644. introduce the rule:&lt;/p&gt;
  645. &lt;p&gt;&lt;code&gt;A unless c1 or c2 or  ... cn ... or not D1 or not D2 ... or not Dn&lt;/code&gt;&lt;/p&gt;
  646. &lt;p&gt;Rules of the form &lt;code&gt;A... unless B...&lt;/code&gt; - where &lt;code&gt;A...&lt;/code&gt; and &lt;code&gt;B...&lt;/code&gt; are CNF - are
  647. intuitively the same as &lt;code&gt;A... or B...&lt;/code&gt;, however the semantic here is different:
  648. We are not allowed to select &lt;code&gt;B...&lt;/code&gt; to satisfy this clause.&lt;/p&gt;
  649. &lt;p&gt;This requires a SAT solver that tracks a reason for each literal being assigned,
  650. such as solver3, rather than a SAT solver like MiniSAT that only tracks reasons across
  651. propagation (solver3 may track &lt;code&gt;A depends B or C&lt;/code&gt; as the reason for &lt;code&gt;B&lt;/code&gt; without evaluating
  652. &lt;code&gt;C&lt;/code&gt;, whereas MiniSAT would only track it as the reason given &lt;code&gt;not C&lt;/code&gt;).&lt;/p&gt;
  653. &lt;h2 id=&quot;is-it-actually-sound&quot;&gt;Is it actually sound?&lt;/h2&gt;
  654. &lt;p&gt;The proposed definition of a sound removal may still proof unsound as I either missed
  655. something in the conclusion of the proposed definition that violates my goal I set out
  656. to achieve, or I missed some of the goals.&lt;/p&gt;
  657. &lt;p&gt;I challenge you to find cases that cause removals that look wrong :D&lt;/p&gt;</description>
  658. <pubDate>Sat, 18 Oct 2025 19:37:17 +0000</pubDate>
  659. </item>
  660. <item>
  661. <title>Podcast Ubuntu Portugal: E364 Guaxinim Resoluto E Outras Festas</title>
  662. <guid isPermaLink="false">https://hub.podcastubuntuportugal.org/s/wTAR9mfwrbB62z8/download/e364.mp3</guid>
  663. <link>https://podcastubuntuportugal.org/e364/</link>
  664. <description>&lt;p&gt;O Diogo ficou afectado da garganta? O Miguel perdeu o comboio? A culpa é da IA! De regresso da Festa do Software Livre, comentámos alguns momentos altos do magnífico certame, fizemos pouco de economistas, da CP e de pessoas e comunidades de Software Livre que enviarão cartas iradas ao Provedor do Podcast. Babámo-nos com o novo Raspberry Pi 500+; revimos as últimas novidades do Firefox 144; as últimas versões 20.04 e 24.04 do Ubuntu Touch; o grande festão Intercidades que vai acontecer a 25 de Outubro em Lisboa e Porto e ainda discutimos DRAMA à volta da Canonical e Flatpaks, para pegar fogo à tenda do circo.&lt;/p&gt;
  665. &lt;p&gt;Já sabem: oiçam, subscrevam e partilhem!&lt;/p&gt;
  666. &lt;ul&gt;
  667. &lt;li&gt;Festa do Software Livre 2025, Porto, 3 a 5 de Outubro: &lt;a href=&quot;https://festa2025.softwarelivre.eu/pt/&quot;&gt;https://festa2025.softwarelivre.eu/pt/&lt;/a&gt;&lt;/li&gt;
  668. &lt;li&gt;Vídeos da FSL 2025: &lt;a href=&quot;https://youtube.com/playlist?list=PL9yk9tkJGhrNZnvcXXqkJRlTXaln-n6dv&quot;&gt;https://youtube.com/playlist?list=PL9yk9tkJGhrNZnvcXXqkJRlTXaln-n6dv&lt;/a&gt;&lt;/li&gt;
  669. &lt;li&gt;Ubuntu Summit 2025, Londres, 23-24 de Outubro: &lt;a href=&quot;https://ubuntu.com/blog/ubuntu-summit-25-10-is-coming-to-your-circle-of-friends-from-london&quot;&gt;https://ubuntu.com/blog/ubuntu-summit-25-10-is-coming-to-your-circle-of-friends-from-london&lt;/a&gt;&lt;/li&gt;
  670. &lt;li&gt;Festão Lisboa-Porto 25 de Outubro (Watch Party simultânea): &lt;a href=&quot;https://ubuntusummit2510.centrolinux.pt&quot;&gt;https://ubuntusummit2510.centrolinux.pt&lt;/a&gt;
  671. &lt;ul&gt;
  672. &lt;li&gt;&lt;a href=&quot;https://lcdporto.org&quot;&gt;https://lcdporto.org&lt;/a&gt;&lt;/li&gt;
  673. &lt;li&gt;&lt;a href=&quot;https://ectl.pt&quot;&gt;https://ectl.pt&lt;/a&gt;&lt;/li&gt;
  674. &lt;/ul&gt;
  675. &lt;/li&gt;
  676. &lt;li&gt;Firefox 144:
  677. &lt;ul&gt;
  678. &lt;li&gt;&lt;a href=&quot;https://9to5linux.com/firefox-144-is-now-available-for-download-this-is-whats-new&quot;&gt;https://9to5linux.com/firefox-144-is-now-available-for-download-this-is-whats-new&lt;/a&gt;&lt;/li&gt;
  679. &lt;li&gt;&lt;a href=&quot;https://www.omgubuntu.co.uk/2025/10/firefox-144-released-new-features&quot;&gt;https://www.omgubuntu.co.uk/2025/10/firefox-144-released-new-features&lt;/a&gt;&lt;/li&gt;
  680. &lt;/ul&gt;
  681. &lt;/li&gt;
  682. &lt;li&gt;Ubuntu 25.10:
  683. &lt;ul&gt;
  684. &lt;li&gt;&lt;a href=&quot;https://discourse.ubuntu.com/t/ubuntu-25-10-foundations-edition-what-s-coming-and-what-s-next/68147&quot;&gt;https://discourse.ubuntu.com/t/ubuntu-25-10-foundations-edition-what-s-coming-and-what-s-next/68147&lt;/a&gt;&lt;/li&gt;
  685. &lt;li&gt;&lt;a href=&quot;https://canonical.com/blog/canonical-releases-ubuntu-25-10-questing-quokka&quot;&gt;https://canonical.com/blog/canonical-releases-ubuntu-25-10-questing-quokka&lt;/a&gt;&lt;/li&gt;
  686. &lt;li&gt;&lt;a href=&quot;https://discourse.ubuntu.com/t/questing-quokka-release-notes/59220&quot;&gt;https://discourse.ubuntu.com/t/questing-quokka-release-notes/59220&lt;/a&gt;&lt;/li&gt;
  687. &lt;/ul&gt;
  688. &lt;/li&gt;
  689. &lt;li&gt;Drama com Flatpaks:
  690. &lt;ul&gt;
  691. &lt;li&gt;&lt;a href=&quot;https://www.phoronix.com/news/Ubuntu-25.10-Broken-Flatpaks&quot;&gt;https://www.phoronix.com/news/Ubuntu-25.10-Broken-Flatpaks&lt;/a&gt;&lt;/li&gt;
  692. &lt;/ul&gt;
  693. &lt;/li&gt;
  694. &lt;li&gt;26.04 Resolute Racoon:
  695. &lt;ul&gt;
  696. &lt;li&gt;&lt;a href=&quot;https://x.com/ubuntu/status/1975147272577929456&quot;&gt;https://x.com/ubuntu/status/1975147272577929456&lt;/a&gt;&lt;/li&gt;
  697. &lt;li&gt;&lt;a href=&quot;https://www.phoronix.com/news/Ubuntu-Retire-ISO-Tracker&quot;&gt;https://www.phoronix.com/news/Ubuntu-Retire-ISO-Tracker&lt;/a&gt;&lt;/li&gt;
  698. &lt;li&gt;&lt;a href=&quot;https://discourse.ubuntu.com/t/release-26-04-lts-without-the-iso-tracker/69577&quot;&gt;https://discourse.ubuntu.com/t/release-26-04-lts-without-the-iso-tracker/69577&lt;/a&gt;&lt;/li&gt;
  699. &lt;/ul&gt;
  700. &lt;/li&gt;
  701. &lt;li&gt;Ubports 20.04 e 24.04.0.1:
  702. &lt;ul&gt;
  703. &lt;li&gt;&lt;a href=&quot;https://ubports.com/blog/ubports-news-1/ubuntu-touch-20-04-ota-10-release-3972&quot;&gt;https://ubports.com/blog/ubports-news-1/ubuntu-touch-20-04-ota-10-release-3972&lt;/a&gt;&lt;/li&gt;
  704. &lt;li&gt;&lt;a href=&quot;https://ubports.com/blog/ubports-news-1/ubuntu-touch-24-04-1-0-release-3973&quot;&gt;https://ubports.com/blog/ubports-news-1/ubuntu-touch-24-04-1-0-release-3973&lt;/a&gt;&lt;/li&gt;
  705. &lt;li&gt;&lt;a href=&quot;https://open-store.io/?type=app&amp;amp;category=Games&quot;&gt;https://open-store.io/?type=app&amp;amp;category=Games&lt;/a&gt;&lt;/li&gt;
  706. &lt;/ul&gt;
  707. &lt;/li&gt;
  708. &lt;li&gt;Raspberry Pi 500+:
  709. &lt;ul&gt;
  710. &lt;li&gt;&lt;a href=&quot;https://youtu.be/Dv3RRAx7G6E&quot;&gt;https://youtu.be/Dv3RRAx7G6E&lt;/a&gt;&lt;/li&gt;
  711. &lt;li&gt;&lt;a href=&quot;https://youtu.be/_LYU-I1LzcI&quot;&gt;https://youtu.be/_LYU-I1LzcI&lt;/a&gt;&lt;/li&gt;
  712. &lt;li&gt;&lt;a href=&quot;https://youtu.be/j8LRs3a-wv4&quot;&gt;https://youtu.be/j8LRs3a-wv4&lt;/a&gt;&lt;/li&gt;
  713. &lt;/ul&gt;
  714. &lt;/li&gt;
  715. &lt;li&gt;Chapéu NVME M.2 compacto para Rpi: &lt;a href=&quot;https://www.raspberrypi.com/news/m-2-hat-compact-on-sale-now-at-15/&quot;&gt;https://www.raspberrypi.com/news/m-2-hat-compact-on-sale-now-at-15/&lt;/a&gt;&lt;/li&gt;
  716. &lt;li&gt;LoCo PT: &lt;a href=&quot;https://loco.ubuntu.com/teams/ubuntu-pt/&quot;&gt;https://loco.ubuntu.com/teams/ubuntu-pt/&lt;/a&gt;&lt;/li&gt;
  717. &lt;li&gt;Mastodon: &lt;a href=&quot;https://masto.pt/@pup&quot;&gt;https://masto.pt/@pup&lt;/a&gt;&lt;/li&gt;
  718. &lt;li&gt;Youtube: &lt;a href=&quot;https://youtube.com/PodcastUbuntuPortugal&quot;&gt;https://youtube.com/PodcastUbuntuPortugal&lt;/a&gt;&lt;/li&gt;
  719. &lt;/ul&gt;
  720. &lt;h3 id=&quot;atribuição-e-licenças&quot;&gt;Atribuição e licenças&lt;/h3&gt;
  721. &lt;p&gt;Este episódio foi produzido por Diogo Constantino, Miguel e Tiago Carrondo e editado pelo &lt;a href=&quot;https://senhorpodcast.pt/&quot;&gt;Senhor Podcast&lt;/a&gt;.
  722. O website é produzido por Tiago Carrondo e o &lt;a href=&quot;https://gitlab.com/podcastubuntuportugal/website&quot;&gt;código aberto&lt;/a&gt; está licenciado nos termos da &lt;a href=&quot;https://gitlab.com/podcastubuntuportugal/website/main/LICENSE&quot;&gt;Licença MIT&lt;/a&gt;. (&lt;a href=&quot;https://creativecommons.org/licenses/by/4.0/)&quot;&gt;https://creativecommons.org/licenses/by/4.0/)&lt;/a&gt;. A música do genérico é: “Won’t see it comin’ (Feat Aequality &amp;amp; N’sorte d’autruche)”, por Alpha Hydrae e está licenciada nos termos da &lt;a href=&quot;https://creativecommons.org/publicdomain/zero/1.0/&quot;&gt;CC0 1.0 Universal License&lt;/a&gt;.
  723. Os separadores de péssima qualidade foram tocados ao vivo e sem rede pelo Miguel, pelo que pedimos desculpa pelos incómodos causados.
  724. Este episódio e a imagem utilizada estão licenciados nos termos da licença: &lt;a href=&quot;https://creativecommons.org/licenses/by-nc-nd/4.0/&quot;&gt;Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)&lt;/a&gt;, &lt;a href=&quot;https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode&quot;&gt;cujo texto integral pode ser lido aqui&lt;/a&gt;. Estamos abertos a licenciar para permitir outros tipos de utilização, &lt;a href=&quot;https://podcastubuntuportugal.org/contactos&quot;&gt;contactem-nos&lt;/a&gt; para validação e autorização.
  725. A arte de episódio foi criada por encomenda pela Shizamura - artista, ilustradora e autora de BD. Podem ficar a conhecer melhor a &lt;a href=&quot;https://ciberlandia.pt/@shizamura&quot;&gt;Shizamura na Ciberlândia&lt;/a&gt; e no &lt;a href=&quot;https://sarilho.net/&quot;&gt;seu sítio web&lt;/a&gt;.&lt;/p&gt;</description>
  726. <pubDate>Thu, 16 Oct 2025 00:00:00 +0000</pubDate>
  727.        <enclosure url="https://hub.podcastubuntuportugal.org/s/wTAR9mfwrbB62z8/download/e364.mp3" length="50994914" type="audio/mpeg"/>
  728. </item>
  729. <item>
  730. <title>Kubuntu General News: Kubuntu 25.10 “Questing Quokka” Released:</title>
  731. <guid isPermaLink="false">https://kubuntu.org/?p=5351</guid>
  732. <link>https://kubuntu.org/news/kubuntu-25-10-questing-quokka-released/</link>
  733. <description>&lt;p&gt;October 9, 2025 – The Kubuntu team is thrilled to announce the release of Kubuntu 25.10, codenamed “Questing Quokka”!&lt;/p&gt;
  734.  
  735.  
  736.  
  737. &lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-5354&quot; height=&quot;473&quot; src=&quot;https://kubuntu.org/wp-content/uploads/2025/10/b709/Kubuntu_Questing.png&quot; width=&quot;840&quot; /&gt;&lt;/figure&gt;
  738.  
  739.  
  740.  
  741. &lt;p&gt;As a community-driven flavor of Ubuntu, Kubuntu continues its mission to deliver the cutting-edge KDE software ecosystem on top of Ubuntu’s rock-solid foundation. This interim release, aligned with Ubuntu’s six-month cycle, packs in the freshest updates to Plasma, Frameworks, and applications, ensuring a smooth, performant desktop experience for millions of users worldwide.&lt;/p&gt;
  742.  
  743.  
  744.  
  745. &lt;p&gt;Building on the Ubuntu 25.10 base released today by Canonical, Kubuntu 25.10 introduces Plasma 6.4 as the flagship update, alongside Qt 6.9, KDE Frameworks 6.17.0, and the latest KDE Gear 25.08 suite.&lt;/p&gt;
  746.  
  747.  
  748.  
  749. &lt;p&gt;We’ve also upgraded to Linux kernel 6.17 for enhanced hardware support and efficiency. Whether you’re a developer, creator, or everyday user, this release emphasizes Wayland adoption, modern security, and seamless integration with the open source world.&lt;/p&gt;
  750.  
  751.  
  752.  
  753. &lt;p&gt;Kubuntu remains completely free to download, use, and share—empowering our global community to innovate without barriers. Download it now from &lt;a href=&quot;https://kubuntu.org/getkubuntu&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;kubuntu.org/getkubuntu&lt;/a&gt; and join the conversation in our forums or IRC channels.&lt;/p&gt;
  754.  
  755.  
  756.  
  757. &lt;h2&gt;Three Exciting New Features for Kubuntu Users&lt;/h2&gt;
  758.  
  759.  
  760.  
  761. &lt;p&gt;Here are three standout enhancements that Kubuntu 25.10 brings to your desktop, designed to make your workflow faster, more secure, and visually stunning:&lt;/p&gt;
  762.  
  763.  
  764.  
  765. &lt;ul&gt;&lt;li&gt;&lt;strong&gt;KDE Plasma 6.4: A Refined and Responsive Desktop&lt;/strong&gt; Dive into the fifth feature release of Plasma 6, complete with Qt 6.8 and Frameworks 6.17.0. This update refines the desktop with smoother animations, improved widget customization, and better multi-monitor handling. It’s a big win for productivity, letting you tailor your environment like never before while enjoying the stability of Ubuntu’s core.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Plasma Wayland as Default Session&lt;/strong&gt; Say goodbye to legacy X11 limitations—Wayland is now the go-to session for superior graphics rendering, reduced latency, and enhanced security. With hardware-accelerated compositing baked in, you’ll notice snappier video playback and app responsiveness. (X11 fans, no worries: it’s still available via a simple package install.) This shift future-proofs your setup for the next era of Linux desktops.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Rust-Powered sudo-rs for Safer System Management&lt;/strong&gt; Leveraging Ubuntu’s new memory-safe implementations, Kubuntu defaults to sudo-rs—a Rust-based reimplementation of sudo. It slashes vulnerabilities common in traditional tools, making privilege escalation quicker and more secure without compromising usability. Paired with NTS-enabled NTP for tamper-proof time syncing, your system stays locked down while you focus on what matters.&lt;/li&gt;&lt;/ul&gt;
  766.  
  767.  
  768.  
  769. &lt;h2&gt;What’s New Under the Hood&lt;/h2&gt;
  770.  
  771.  
  772.  
  773. &lt;p&gt;Beyond these highlights, Kubuntu 25.10 inherits Ubuntu’s robust platform upgrades:&lt;/p&gt;
  774.  
  775.  
  776.  
  777. &lt;ul&gt;&lt;li&gt;&lt;strong&gt;Linux Kernel 6.17&lt;/strong&gt;: Better Arm and RISC-V support, nested virtualization, and Intel TDX for confidential computing—ideal for developers and edge deployments.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Updated Developer Tools&lt;/strong&gt;: OpenJDK 25, Python 3.14 RC3, Golang 1.25, GCC 15, and Rust 1.85 (with 1.88 available) to supercharge your coding sessions.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Enhanced Security and Accessibility&lt;/strong&gt;: Experimental TPM-backed full disk encryption with recovery options, improved Bluetooth audio (AAC codecs via restricted extras), and broader accessibility features to meet global standards.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;KDE Applications Galore&lt;/strong&gt;: Everything from Dolphin file manager to Konsole terminal refreshed to 25.08 versions, plus legacy Qt5/KF5 support for your favorite older apps.&lt;/li&gt;&lt;/ul&gt;
  778.  
  779.  
  780.  
  781. &lt;p&gt;This release underscores Kubuntu’s commitment to being at the heart of the open source ecosystem—pushing boundaries with KDE while riding Ubuntu’s reliable waves. A huge thank you to our volunteer contributors, testers, and the upstream KDE team for making this possible.&lt;/p&gt;
  782.  
  783.  
  784.  
  785. &lt;p&gt;Ready to quokka-hop into the future? Upgrade today or install fresh. Questions? Head to  &lt;a href=&quot;https://discourse.ubuntu.com/c/flavors/kubuntu/187&quot;&gt;https://discourse.ubuntu.com/c/flavors/kubuntu/187&lt;/a&gt; or ping us on Matrix at &lt;a href=&quot;https://matrix.to/#/#kubuntu:matrix.org&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;#kubuntu:matrix.org&lt;/a&gt;.&lt;/p&gt;
  786.  
  787.  
  788.  
  789. &lt;p&gt;Stay tuned for the Ubuntu Summit on October 23-24, where we’ll showcase more on Kubuntu’s role in open source innovation&lt;/p&gt;
  790.  
  791.  
  792.  
  793. &lt;p&gt;P.S New updated website coming soon…. keep an eye on kubuntu.org for when we switch&lt;/p&gt;</description>
  794. <pubDate>Fri, 10 Oct 2025 13:48:07 +0000</pubDate>
  795. </item>
  796. <item>
  797. <title>Erich Eickmeyer: Why I Won’t Be Attending or Speaking at Ubuntu Summit 25.10</title>
  798. <guid isPermaLink="false">http://ericheickmeyer.com/?p=6134</guid>
  799. <link>https://ericheickmeyer.com/2025/10/09/why-i-wont-be-attending-or-speaking-at-ubuntu-summit-25-10/</link>
  800. <description>&lt;p&gt;Ubuntu Summit’s decision to go exclusively online, with the exception of those speaking at the Summit in London, UK, is anti-collaborative and turns its back on the very people who make Ubuntu what it is: its community of volunteers and developers. Ubuntu Summit was created from the dust of the Ubuntu Developer Summit in 2022 to recognize the community. It no longer serves that purpose.&lt;/p&gt;
  801.  
  802.  
  803.  
  804. &lt;p&gt;As many know, I have been the lead of Ubuntu Studio for more than 7 years. I’m the longest-tenured Ubuntu Studio lead. I owe much of the foundation that was built to my predecessors: Luke Yelavich (founder), Scott Lavender, Kaj Ailomaa, and Set Halstrom. It is a true labor of love for me, and is the foundation for much of what I do.&lt;/p&gt;
  805.  
  806.  
  807.  
  808. &lt;p&gt;I have worked myself through the ranks of Ubuntu, becoming a small-time packager for a small set of Ubuntu packages, then the Ubuntu Studio packageset, moving up to MOTU (Master of the Universe). I also served on the Ubuntu Community Council and am a current Discourse moderator.&lt;/p&gt;
  809.  
  810.  
  811.  
  812. &lt;p&gt;Community and the love of people is a huge motivation for me. Granted, for those first four years, I hadn’t ever met the people I was collaborating with to make Ubuntu Studio what it is.&lt;/p&gt;
  813.  
  814.  
  815.  
  816. &lt;p&gt;Then in August 2022, I was invited to attend the first ever Ubuntu Summit 2022 in Prague, Czechia. Having never travelled abroad before and never having even been off the continent of North America, itself a challenge as getting a U.S. passport is neither cheap nor easy, I was reluctant at first. Then I managed to get my passport, as well as the funds and passports to bring my wife and son to Ubuntu Summit.&lt;/p&gt;
  817.  
  818.  
  819.  
  820. &lt;p&gt;That experience changed my life and the life of my entire family. My son, 10 at the time, was the youngest registered attendee. My wife was inspired to bring back Edubuntu, which had been defunct for nine long years by the time it was revived that following spring.&lt;/p&gt;
  821.  
  822.  
  823.  
  824. &lt;p&gt;These are the things that happen when you have personal connections with people. If you’ve never read the book before, I encourage you to read &lt;em&gt;&lt;a href=&quot;https://www.nurturingparenting.com/images/cmsfiles/hardwired_to_connect.pdf&quot;&gt;Hardwired to Connect&lt;/a&gt;&lt;/em&gt;, which is a research paper published by a bunch of scientists. In essence, it says that people’s brains are wired, from birth, to engage in communities in for personal, in-person connections. It’s a scientific study that took years and is an excellent introduction to why we are the way we are.&lt;/p&gt;
  825.  
  826.  
  827.  
  828. &lt;p&gt;Much of my education revolves around the very idea of building personal communities, which is one reason I was appalled when Ubuntu Summit, starting with 25.10, while it would be twice a year, it would be online-only except for the speakers. Having spoken at the past three, I was planning to take a year off from speaking, while still being there to represent as an Ubuntu Flavor Lead with my wife, also a now Flavor Lead.&lt;/p&gt;
  829.  
  830.  
  831.  
  832. &lt;p&gt;If it weren’t for that initial Ubuntu Summit, in person, my wife and son would not have been as interested or as involved as they are today. The subsequent years only strengthened that involvement. &lt;/p&gt;
  833.  
  834.  
  835.  
  836. &lt;p&gt;Now, it’s going to be an online-focused approach. I get it. It’s cheaper and easier. Also, those attending online were just watching a livestream anyhow. The Local Communities (LoCos) can get together on their own if they want to do a big event. It’s easier to reach more people if you do everything online.&lt;/p&gt;
  837.  
  838.  
  839.  
  840. &lt;p&gt;&lt;strong&gt;&lt;em&gt;Except it’s not.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
  841.  
  842.  
  843.  
  844. &lt;p&gt;For instance, the nearest active LoCo to me, in the Seattle-Tacoma area, is the Southern California LoCo. Meetups with them are logistically impossible. Same if I were to go to the Arizona LoCo; it’s just not possible. Most of the states in the United States are huge, so if there were one LoCo per state, it wouldn’t be correct. To be honest, I have no desire, time, or energy left to start and lead a LoCo in my area. Besides that, there used to be one for my state, but it’s long gone.&lt;/p&gt;
  845.  
  846.  
  847.  
  848. &lt;p&gt;Furthermore, with the exception of me and my wife, us flavor leads are scattered to the globe. It used to be that we would meet online throughout the year every other month and then meet together once a year at Ubuntu Summit. That’s gone now.&lt;/p&gt;
  849.  
  850.  
  851.  
  852. &lt;p&gt;Again, I get it. Canonical is a company that is and always has been majority remote work. Except for one thing: they get together &lt;strong&gt;twice a year&lt;/strong&gt; in-person, and are even given T-Shirts to celebrate the immediately-prior release &lt;em&gt;which was partially built by volunteers&lt;/em&gt;. Those of us who give our time, energy, and effort to the Ubuntu community aren’t given that in-person experience, let alone a T-Shirt. The very lifeblood of what makes Ubuntu so great isn’t given the ability to meet in-person. That’s been stripped from us, and it came as a complete surprise.&lt;/p&gt;
  853.  
  854.  
  855.  
  856. &lt;p&gt;I’m not without ideas for solutions to problems, though. Rather than be completely destructive in this post, I can be constructive. My solution to this would be a compromise:&lt;/p&gt;
  857.  
  858.  
  859.  
  860. &lt;ul class=&quot;wp-block-list&quot;&gt;
  861. &lt;li&gt;Have the Summit be in-person once a year following the &lt;code&gt;yy.04&lt;/code&gt; release
  862. &lt;ul class=&quot;wp-block-list&quot;&gt;
  863. &lt;li&gt;Have that one go back to being what it was. It can either have booths like 2024 did or go back to being talk/workshop-focused like years prior. It doesn’t matter, &lt;strong&gt;it just needs to be in-person&lt;/strong&gt;.&lt;/li&gt;
  864. &lt;/ul&gt;
  865. &lt;/li&gt;
  866.  
  867.  
  868.  
  869. &lt;li&gt;Have the Summit be online once a year following the &lt;code&gt;yy.10&lt;/code&gt; release&lt;/li&gt;
  870. &lt;/ul&gt;
  871.  
  872.  
  873.  
  874. &lt;p&gt;I don’t think this is too much to ask. The reward of personal connections when doing something remote for most of the year is a small price to pay, no matter the cost. Personal connections are tantamount to a healthy community.&lt;/p&gt;
  875.  
  876.  
  877.  
  878. &lt;p&gt;I think my compromise would prevent the Summit from dying just like the Ubuntu Developer Summit did once it went online-only. The way I see it is with the current status-quo, history is repeating itself.&lt;/p&gt;
  879.  
  880.  
  881.  
  882. &lt;p&gt;I’m sure people at Canonical don’t see it this way because they meet with the people they work with the most twice a year. Those of us from the Ubuntu community that are developers aren’t given that luxury. We’re not even given that luxury once a year now. We’re not even given a T-Shirt!&lt;/p&gt;
  883.  
  884.  
  885.  
  886. &lt;p&gt;Am I angry? A little. Do I feel betrayed by the very community I have given so much to over the years? Absolutely. Either way, I believe an online-only Summit is anti-collaborative in that it removes personal connections from the equation, which goes against the very fiber of my being.&lt;/p&gt;
  887.  
  888.  
  889.  
  890. &lt;p&gt;Thank you for reading this, and I hope this reaches the people I’m trying to reach and have it speak for those who either won’t speak-up or don’t think they can make a difference.&lt;/p&gt;</description>
  891. <pubDate>Thu, 09 Oct 2025 22:01:09 +0000</pubDate>
  892. </item>
  893. <item>
  894. <title>Ubuntu Studio: Ubuntu Studio 25.10 Released</title>
  895. <guid isPermaLink="false">https://ubuntustudio.org/?p=3029</guid>
  896. <link>https://ubuntustudio.org/2025/10/ubuntu-studio-25-10-released/</link>
  897. <description>&lt;div class=&quot;wp-block-image&quot;&gt;&lt;figure class=&quot;aligncenter size-full is-resized&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-3031&quot; height=&quot;223&quot; src=&quot;https://ubuntustudio.org/wp-content/uploads/2025/10/b9e8/finalbanner.png&quot; width=&quot;600&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  898.  
  899.  
  900.  
  901. &lt;p id=&quot;block-08eb94aa-8521-4ed2-adb1-72f6f4094411&quot;&gt;The Ubuntu Studio team is pleased to announce the release of Ubuntu Studio 25.10 code-named “Questing Quokka”. This marks Ubuntu Studio’s 37th release. This release is a Regular release and as such, it is supported for 9 months, until July 2026.&lt;/p&gt;
  902.  
  903.  
  904.  
  905. &lt;p id=&quot;block-895e2f57-e719-450c-a4c8-9405017a7e75&quot;&gt;Since it’s just out, you may experience some issues, so you might want to wait a bit before upgrading. Please see the &lt;a href=&quot;https://discourse.ubuntu.com/t/ubuntu-studio-25-10-release-notes/&quot;&gt;release notes&lt;/a&gt; for a more complete list of changes and known issues. Listed here are some of the major highlights.&lt;/p&gt;
  906.  
  907.  
  908.  
  909. &lt;div class=&quot;wp-block-image&quot;&gt;&lt;figure class=&quot;aligncenter size-full is-resized&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-3032&quot; height=&quot;270&quot; src=&quot;https://ubuntustudio.org/wp-content/uploads/2025/10/0619/desktop_screenshot.png&quot; width=&quot;480&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  910.  
  911.  
  912.  
  913. &lt;p id=&quot;block-aef9a406-e305-4f97-a130-f522c2f1ce7e&quot;&gt;You can download Ubuntu Studio 25.10 from our &lt;a href=&quot;https://ubuntustudio.org/download&quot;&gt;download page&lt;/a&gt;.&lt;/p&gt;
  914.  
  915.  
  916.  
  917. &lt;h2 id=&quot;block-6ca66e3a-8d42-42a8-a0cf-a8ed86e6025f&quot;&gt;Special Notes&lt;/h2&gt;
  918.  
  919.  
  920.  
  921. &lt;p id=&quot;block-708043b1-523e-4fb9-92ca-720e3316371a&quot;&gt;The Ubuntu Studio 25.10 disk image (ISO) exceeds 4 GB and cannot be downloaded to some file systems such as FAT32 and may not be readable when burned to a standard DVD. For this reason, we recommend downloading to a compatible file system. When creating a boot medium, we recommend &lt;a href=&quot;https://ubuntu.com/tutorials/create-a-usb-stick-on-ubuntu#1-overview&quot;&gt;creating a bootable USB stick&lt;/a&gt; with the ISO image or burning to a Dual-Layer DVD.&lt;/p&gt;
  922.  
  923.  
  924.  
  925. &lt;p&gt;Minimum installation media requirements: Dual-Layer DVD or 8GB USB drive.&lt;/p&gt;
  926.  
  927.  
  928.  
  929. &lt;p id=&quot;block-fa4be379-b904-4919-9502-c73469ca31ef&quot;&gt;Images can be obtained from this link: &lt;a href=&quot;https://cdimage.ubuntu.com/ubuntustudio/releases/25.10/release/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;https://cdimage.ubuntu.com/ubuntustudio/releases/25.1&lt;/a&gt;&lt;a href=&quot;https://cdimage.ubuntu.com/ubuntustudio/releases/25.10/release/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;0&lt;/a&gt;&lt;a href=&quot;https://cdimage.ubuntu.com/ubuntustudio/releases/25.10/release/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;/release/&lt;/a&gt;&lt;/p&gt;
  930.  
  931.  
  932.  
  933. &lt;p id=&quot;block-bf39c734-e080-4549-9621-044e9241d48c&quot;&gt;Full updated information, including &lt;strong&gt;Upgrade Instructions,&lt;/strong&gt; are available in the &lt;strong&gt;&lt;a href=&quot;https://discourse.ubuntu.com/t/ubuntu-studio-25-10-release-notes/&quot;&gt;Release Notes&lt;/a&gt;&lt;/strong&gt;&lt;a href=&quot;https://wiki.ubuntu.com/GroovyGorilla/Beta/UbuntuStudio&quot;&gt;.&lt;/a&gt;&lt;/p&gt;
  934.  
  935.  
  936.  
  937. &lt;p&gt;Upgrades from 25.04 should be enabled within a month after release, so we appreciate your patience. Upgrades from 24.04 LTS will be enabled after 25.04 reaches End-Of-Life in January 2026.&lt;/p&gt;
  938.  
  939.  
  940.  
  941. &lt;h2&gt;New This Release&lt;/h2&gt;
  942.  
  943.  
  944.  
  945. &lt;div class=&quot;wp-block-image&quot;&gt;&lt;figure class=&quot;alignright size-full is-resized&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-3033&quot; height=&quot;106&quot; src=&quot;https://ubuntustudio.org/wp-content/uploads/2025/10/3402/site-logo.webp&quot; width=&quot;74&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  946.  
  947.  
  948.  
  949. &lt;h3&gt;The Return of Internet DJ Console (IDJC)!&lt;/h3&gt;
  950.  
  951.  
  952.  
  953. &lt;p&gt;After a long hiatus, Internet DJ Console (IDJC) has returned. This package for creating and running Internet-based radio stations had been removed from Debian, but has returned, and therefore, returned to Ubuntu Studio!&lt;/p&gt;
  954.  
  955.  
  956.  
  957. &lt;div class=&quot;wp-block-image&quot;&gt;&lt;figure class=&quot;alignright size-full is-resized&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-3034&quot; height=&quot;96&quot; src=&quot;https://ubuntustudio.org/wp-content/uploads/2025/10/9f6a/UbyLIWcj_400x400.jpg&quot; width=&quot;96&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  958.  
  959.  
  960.  
  961. &lt;h3&gt;JackTrip&lt;/h3&gt;
  962.  
  963.  
  964.  
  965. &lt;p&gt;Ubuntu Studio now includes &lt;strong&gt;&lt;a data-id=&quot;pencil2d.org&quot; data-type=&quot;URL&quot; href=&quot;http://pencil2d.org&quot;&gt;JackTrip&lt;/a&gt;&lt;/strong&gt;! JackTrip serves two purposes: low-latency networked JACK audio within your network, and low-latency Internet audio collaboration. Bands are even known to jam remotely using JackTrip’s services!&lt;/p&gt;
  966.  
  967.  
  968.  
  969. &lt;p&gt;It supports any number of channels (as many as the computer/network can handle) of bidirectional, high quality, uncompressed audio signal streaming.&lt;br /&gt;&lt;/p&gt;
  970.  
  971.  
  972.  
  973. &lt;h3&gt;More Musical Plugins&lt;/h3&gt;
  974.  
  975.  
  976.  
  977. &lt;p&gt;We came to the realization that we needed to support musicians a little better, so we added a few instrument and musical plugins to assist with that:&lt;/p&gt;
  978.  
  979.  
  980.  
  981. &lt;ul&gt;&lt;li&gt;din&lt;/li&gt;&lt;li&gt;drumkv1&lt;/li&gt;&lt;li&gt;freewheeling&lt;/li&gt;&lt;li&gt;gxtuner&lt;/li&gt;&lt;li&gt;Hydrogen Drumkit Effects&lt;/li&gt;&lt;li&gt;kmetronome&lt;/li&gt;&lt;li&gt;padthv1&lt;/li&gt;&lt;li&gt;polyphone&lt;/li&gt;&lt;li&gt;samplv1&lt;/li&gt;&lt;li&gt;synthv1&lt;/li&gt;&lt;/ul&gt;
  982.  
  983.  
  984.  
  985. &lt;h3&gt;More Photography Tools&lt;/h3&gt;
  986.  
  987.  
  988.  
  989. &lt;ul&gt;&lt;li&gt;PhotoCollage – allows you to create photo collage phosters&lt;/li&gt;&lt;li&gt;PicPlanner – Calculates and displays the positions of the Sun, Moon, and Milky Way for any time and location on earth, to help you get those perfect astronomical photos or for taking pictures during the Golden or Blue hours.&lt;/li&gt;&lt;/ul&gt;
  990.  
  991.  
  992.  
  993. &lt;h3&gt;PipeWire 1.4.7&lt;/h3&gt;
  994.  
  995.  
  996.  
  997. &lt;div class=&quot;wp-block-image&quot;&gt;&lt;figure class=&quot;alignright size-full is-resized&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-2766&quot; height=&quot;70&quot; src=&quot;https://ubuntustudio.org/wp-content/uploads/2024/04/be34/Pipewire_logo.svg_.png&quot; width=&quot;324&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  998.  
  999.  
  1000.  
  1001. &lt;p&gt;This release contains &lt;strong&gt;PipeWire 1.4.7&lt;/strong&gt;. &lt;/p&gt;
  1002.  
  1003.  
  1004.  
  1005. &lt;p&gt;PipeWire’s JACK compatibility is configured to use out-of-the-box and is zero-latency internally. System latency is configurable via &lt;a data-id=&quot;2797&quot; data-type=&quot;page&quot; href=&quot;https://ubuntustudio.org/audio-configuration/&quot;&gt;Ubuntu Studio Audio Configuration&lt;/a&gt; and can now be configured on a per-user basis instead of globally.&lt;/p&gt;
  1006.  
  1007.  
  1008.  
  1009. &lt;h3&gt;Ubuntu Studio Audio Configuration&lt;/h3&gt;
  1010.  
  1011.  
  1012.  
  1013. &lt;p&gt;Speaking of Audio Configuration, we have added a number of options for configuring the PipeWire JACK compatibility, as can be seen in the image below. Additionally, buffer size can now be configured from within any JACK application that supports it, such as Patchance, Carla, Ardour, and more!&lt;/p&gt;
  1014.  
  1015.  
  1016.  
  1017. &lt;div class=&quot;wp-block-image&quot;&gt;&lt;figure class=&quot;aligncenter size-full is-resized&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-3035&quot; height=&quot;239&quot; src=&quot;https://ubuntustudio.org/wp-content/uploads/2025/10/73c8/image.png&quot; width=&quot;622&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  1018.  
  1019.  
  1020.  
  1021. &lt;h3&gt;Ardour 8.12&lt;/h3&gt;
  1022.  
  1023.  
  1024.  
  1025. &lt;div class=&quot;wp-block-image&quot;&gt;&lt;figure class=&quot;alignright size-full is-resized&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1977&quot; height=&quot;73&quot; src=&quot;https://ubuntustudio.org/wp-content/uploads/2020/06/2a76/ardour.png&quot; width=&quot;84&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  1026.  
  1027.  
  1028.  
  1029. &lt;p&gt;This is, as of this writing, the latest release of Ardour, packed with the latest bugfixes.&lt;/p&gt;
  1030.  
  1031.  
  1032.  
  1033. &lt;p&gt;To help support Ardour’s funding, you may obtain later versions directly from ardour.org. To do so, please &lt;a data-id=&quot;https://ardour.org&quot; data-type=&quot;URL&quot; href=&quot;https://ardour.org&quot;&gt;one-time purchase or subscribe to Ardour from their website.&lt;/a&gt; If you wish to get later versions of Ardour from us, you will have to wait until the next release of Ubuntu Studio, due in April 2026.&lt;/p&gt;
  1034.  
  1035.  
  1036.  
  1037. &lt;h2 id=&quot;block-c7a21be7-9349-421e-a098-c0d2919f320a&quot;&gt;Frequently Asked Questions&lt;/h2&gt;
  1038.  
  1039.  
  1040.  
  1041. &lt;p id=&quot;block-163f794a-f451-40b0-bbbd-6f26c6cbe8e8&quot;&gt;&lt;strong&gt;Q:&lt;/strong&gt; Does Ubuntu Studio contain snaps?&lt;br /&gt;&lt;strong&gt;A:&lt;/strong&gt; Yes. Mozilla’s distribution agreement with Canonical changed, and Ubuntu was forced to no longer distribute Firefox in a native .deb package. We have found that, after numerous improvements, Firefox now performs just as well as the native .deb package did.&lt;/p&gt;
  1042.  
  1043.  
  1044.  
  1045. &lt;p&gt;Thunderbird also became a snap so that the maintainers can get security patches delivered faster.&lt;/p&gt;
  1046.  
  1047.  
  1048.  
  1049. &lt;p id=&quot;block-342134d3-a024-4b7b-b768-76c758b20acd&quot;&gt;Additionally, Freeshow is an Electron-based application. Electron-based applications cannot be packaged in the Ubuntu repositories in that they cannot be packaged in a traditional Debian source package. While such apps do have a build system to create a .deb binary package, it circumvents the source package build system in Launchpad, which is required when packaging for Ubuntu. However, Electron apps also have a facility for creating snaps, which can be uploaded and included. Therefore, for Freeshow to be included in Ubuntu Studio, it had to be packaged as a snap.&lt;/p&gt;
  1050.  
  1051.  
  1052.  
  1053. &lt;p&gt;We have additional snaps that are Ubuntu-specific, such as the Firmware Updater and the Security Center. Contrary to popular myth, Ubuntu does not have any plans to switch all packages to snaps, nor do we.&lt;/p&gt;
  1054.  
  1055.  
  1056.  
  1057. &lt;p id=&quot;block-2266cee7-0ea1-49cf-8340-594da42a09d7&quot;&gt;&lt;strong&gt;Q&lt;/strong&gt;: Will you make an ISO with {my favorite desktop environment}?&lt;br /&gt;&lt;strong&gt;A:&lt;/strong&gt; To do so would require creating an entirely new flavor of Ubuntu, which would require going through the Official Ubuntu Flavor application process. Since we’re completely volunteer-run, we don’t have the time or resources to do this. Instead, we recommend you download the &lt;a href=&quot;https://ubuntu.com/download/flavours&quot;&gt;official flavor for the desktop environment of your choice&lt;/a&gt; and use &lt;a href=&quot;https://ubuntustudio.org/ubuntu-studio-installer&quot;&gt;Ubuntu Studio Installer&lt;/a&gt; to get Ubuntu Studio – which does *not* convert that flavor to Ubuntu Studio but adds its benefits.&lt;/p&gt;
  1058.  
  1059.  
  1060.  
  1061. &lt;p id=&quot;block-48669a69-39bc-4971-b46b-c7da87133d24&quot;&gt;&lt;strong&gt;Q: &lt;/strong&gt;What if I don’t want all these packages installed on my machine?&lt;br /&gt;&lt;strong&gt;A: &lt;/strong&gt;Simply use the &lt;strong&gt;Ubuntu Studio Installer&lt;/strong&gt; to remove the features of Ubuntu Studio you don’t want or need! Additionally, we include a Minimal Install option that, when used with Ubuntu Studio Installer, will give you the Ubuntu Studio experience for whatever your desktop studio needs!&lt;/p&gt;
  1062.  
  1063.  
  1064.  
  1065. &lt;h2&gt;Get Involved!&lt;/h2&gt;
  1066.  
  1067.  
  1068.  
  1069. &lt;p&gt;A wonderful way to contribute is to get involved with the project directly! We’re always looking for new volunteers to help with packaging, documentation, tutorials, user support, and MORE! &lt;a href=&quot;https://ubuntustudio.org/contribute/&quot;&gt;Check out all the ways you can contribute!&lt;/a&gt;&lt;/p&gt;
  1070.  
  1071.  
  1072.  
  1073. &lt;p&gt;&lt;strong&gt;Our project leader, Erich Eickmeyer, is now working on Ubuntu Studio at least part-time, and is hoping that the users of Ubuntu Studio can give enough to generate a monthly part-time income. We’re not there, but if every Ubuntu Studio user donated monthly, we’d be there! Your donations are appreciated! If other distributions can do it, surely we can! See the sidebar for ways to give&lt;/strong&gt;!&lt;/p&gt;
  1074.  
  1075.  
  1076.  
  1077. &lt;h2&gt;Contact the Team&lt;/h2&gt;
  1078.  
  1079.  
  1080.  
  1081. &lt;p&gt;The best way to contact the Ubuntu Studio team is via the &lt;a href=&quot;https://discourse.ubuntu.com/c/flavors/ubuntustudio/&quot;&gt;Ubuntu Discourse&lt;/a&gt;.&lt;/p&gt;
  1082.  
  1083.  
  1084.  
  1085. &lt;h2&gt;Special Thanks&lt;/h2&gt;
  1086.  
  1087.  
  1088.  
  1089. &lt;p&gt;Huge special thanks for this release go to:&lt;/p&gt;
  1090.  
  1091.  
  1092.  
  1093. &lt;ul&gt;&lt;li&gt;&lt;strong&gt;Eylul Dogruel&lt;/strong&gt;: Artwork, Graphics Design&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Ross Gammon&lt;/strong&gt;: Upstream Debian Developer, Testing&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Sebastien Ramacher&lt;/strong&gt;:&lt;strong&gt; &lt;/strong&gt;Upstream Debian Developer&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Dennis Braun&lt;/strong&gt;: Upstream Debian Developer&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Rik Mills&lt;/strong&gt;: Kubuntu Council Member, help with Plasma desktop&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Scarlett Moore: &lt;/strong&gt;Kubuntu Project Lead, help with Plasma desktop&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Len Ovens:&lt;/strong&gt; Testing, insight&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Mauro Gaspari&lt;/strong&gt;: Tutorials, Promotion, and Documentation, Testing, keeping Erich sane&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Erich Eickmeyer&lt;/strong&gt;: Project Leader, Packaging, Development, Direction, Treasurer&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Steve Langasek: &lt;/strong&gt;You are missed.&lt;/li&gt;&lt;/ul&gt;</description>
  1094. <pubDate>Thu, 09 Oct 2025 17:11:02 +0000</pubDate>
  1095. </item>
  1096. <item>
  1097. <title>Lubuntu Blog: Lubuntu 25.10 (Questing Quokka) Released!</title>
  1098. <guid isPermaLink="false">https://lubuntu.me/?p=4159</guid>
  1099. <link>https://lubuntu.me/lubuntu-25-10-questing-quokka-released/</link>
  1100. <description>The Lubuntu Team is proud to announce Lubuntu 25.10, codenamed Questing Quokka. Lubuntu 25.10 is the 29th release of Lubuntu, the 15th release of Lubuntu with LXQt as the default desktop environment. Download and Support Lifespan With 25.10 being an interim release, it will follow the standard non-LTS support period of nine months; this means […]</description>
  1101. <pubDate>Thu, 09 Oct 2025 14:05:30 +0000</pubDate>
  1102. </item>
  1103. <item>
  1104. <title>Sean Davis: Xubuntu 25.10 &quot;Questing Quokka&quot;</title>
  1105. <guid isPermaLink="false">https://seand.xyz/tag/xubuntu/rss/68e73e02fa4f1216ce0f75bd</guid>
  1106. <link>https://seand.xyz/blog/2025/10/09/xubuntu-25-10-questing-quokka/</link>
  1107. <description>&lt;img alt=&quot;Xubuntu 25.10 &amp;quot;Questing Quokka&amp;quot;&quot; src=&quot;https://seand.xyz/content/images/2025/10/xubuntu-2510-featured.png&quot; /&gt;&lt;p&gt;&lt;em&gt;A Critical Moment and a Glimpse of the Future&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://wiki.xubuntu.org/releases/25.10/release-notes?ref=seand.xyz&quot; rel=&quot;noreferrer&quot;&gt;Xubuntu 25.10&lt;/a&gt;, codenamed &quot;Questing Quokka,&quot; is the fortieth release of the Xfce-powered Ubuntu flavor. Built on the 6.17 Linux kernel, Xfce 4.20, MATE 1.26, and GNOME 49, this release continues to deliver the fast, tightly-integrated, and user-friendly experience that Xubuntu users expect, even on modest hardware.&lt;/p&gt;&lt;p&gt;Today, I&amp;amp;aposll explore where Xubuntu stands as it approaches its twentieth anniversary and share what&amp;amp;aposs new (and what&amp;amp;aposs still rough around the edges) in this release.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img alt=&quot;Xubuntu 25.10 &amp;quot;Questing Quokka&amp;quot;&quot; class=&quot;kg-image&quot; height=&quot;900&quot; src=&quot;https://seand.xyz/content/images/2025/10/xubuntu-2510-desktop.png&quot; width=&quot;1440&quot; /&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;Xubuntu 25.10 &quot;Questing Quokka&quot;: A screenshot of the desktop.&lt;/span&gt;&lt;/figure&gt;&lt;h2 id=&quot;a-critical-juncture&quot;&gt;A Critical Juncture&lt;/h2&gt;&lt;p&gt;The &quot;Questing Quokka&quot; arrives at a pivotal time in Xubuntu&amp;amp;aposs history. In just six months, we&amp;amp;aposll celebrate Xubuntu&amp;amp;aposs twentieth anniversary (technically eight months: 6.06 marks the only time Ubuntu was released in June).&lt;/p&gt;&lt;p&gt;In recent years, our small development team has faced the same challenges as many open-source projects: contributors stepping back, real-world responsibilities growing, and less time to dedicate to day-to-day development.&lt;/p&gt;&lt;p&gt;Beyond that, our involvement with the upstream Xfce project has slowed. Many of us, myself included, once played major roles in shaping Xfce’s direction, contributing countless hours to its design, code, and outreach. Those efforts helped establish the strong foundation Xfce enjoys today.&lt;/p&gt;&lt;p&gt;While we remain proud supporters and collaborators, Xubuntu’s continued growth depends on fresh energy and new contributors. If you’ve ever wanted to make a tangible impact on an open-source desktop environment, this is your moment. Visit the &lt;a href=&quot;https://xubuntu.org/contribute/?ref=seand.xyz&quot; rel=&quot;noreferrer&quot;&gt;Get Involved&lt;/a&gt; page to learn how to help with artwork, development, documentation, QA, marketing, and more.&lt;/p&gt;&lt;p&gt;Now, let’s look at what’s new (and what still needs work) in 25.10.&lt;/p&gt;&lt;h2 id=&quot;xubuntu-2510-a-snapshot-of-the-future&quot;&gt;Xubuntu 25.10: A Snapshot of the Future&lt;/h2&gt;&lt;p&gt;As mentioned, Xubuntu 25.10 ships with Xfce 4.20, GNOME 49, and MATE 1.26. Like other Ubuntu flavors, it also introduces the new Rust-based &lt;code&gt;sudo-rs&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;If you’re upgrading from Xubuntu 25.04, you’ll find the experience familiar. Most applications have received incremental updates, theming remains consistent, and there are few new user-facing features. The most noticeable changes this cycle? The bugs. 🐞&lt;/p&gt;&lt;h3 id=&quot;known-issues-and-what-to-expect&quot;&gt;Known Issues (and What to Expect)&lt;/h3&gt;&lt;h4 id=&quot;libadwaita-apps-and-the-case-of-the-missing-close-button&quot;&gt;libadwaita Apps and the Case of the Missing Close Button&lt;/h4&gt;&lt;p&gt;Late in the cycle, &lt;a href=&quot;https://bugs.launchpad.net/ubuntu/+source/elementary-xfce/+bug/2125025?ref=seand.xyz&quot; rel=&quot;noreferrer&quot;&gt;we discovered&lt;/a&gt; that several GNOME and libadwaita-based apps have empty window close buttons when using the &lt;em&gt;elementary-xfce&lt;/em&gt; icon theme. This affects Disk Usage Analyzer (&lt;code&gt;baobab&lt;/code&gt;), Document Scanner (&lt;code&gt;simple-scan&lt;/code&gt;), Fonts (&lt;code&gt;gnome-font-viewer&lt;/code&gt;), Mines (&lt;code&gt;gnome-mines&lt;/code&gt;), and Sudoku (&lt;code&gt;gnome-sudoku&lt;/code&gt;).&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img alt=&quot;Xubuntu 25.10 &amp;quot;Questing Quokka&amp;quot;&quot; class=&quot;kg-image&quot; height=&quot;800&quot; src=&quot;https://seand.xyz/content/images/2025/10/xubuntu-2510-missing-libadwaita-close-icon.png&quot; width=&quot;1280&quot; /&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;Modern GNOME applications are missing the close window icon. Can&amp;amp;apost see it? Neither can I.&lt;/span&gt;&lt;/figure&gt;&lt;h4 id=&quot;missing-icon-for-document-scanners-scan-options&quot;&gt;Missing Icon for Document Scanner&amp;amp;aposs Scan Options&lt;/h4&gt;&lt;p&gt;The Scan Options menu icon in Document Scanner is &lt;a href=&quot;https://bugs.launchpad.net/ubuntu/+source/elementary-xfce/+bug/2127071?ref=seand.xyz&quot; rel=&quot;noreferrer&quot;&gt;currently invisible&lt;/a&gt;. This issue has been reported upstream to the &lt;em&gt;elementary-xfce&lt;/em&gt; GitHub tracker.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img alt=&quot;Xubuntu 25.10 &amp;quot;Questing Quokka&amp;quot;&quot; class=&quot;kg-image&quot; height=&quot;800&quot; src=&quot;https://seand.xyz/content/images/2025/10/xubuntu-2510-missing-scan-options-icon.png&quot; width=&quot;1280&quot; /&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;To the right of the Scan button is a menu button for the Scan Options. Invisible unless you hover it.&lt;/span&gt;&lt;/figure&gt;&lt;h4 id=&quot;flatpak-packages-cannot-be-installed&quot;&gt;Flatpak Packages Cannot Be Installed&lt;/h4&gt;&lt;p&gt;Due to a Fuse/AppArmor conflict in Ubuntu 25.10, installing Flatpak packages &lt;a href=&quot;https://bugs.launchpad.net/ubuntu/+source/flatpak/+bug/2122161?ref=seand.xyz&quot; rel=&quot;noreferrer&quot;&gt;currently fails&lt;/a&gt;. Work is underway to resolve this, and Flatpak support should return soon.&lt;/p&gt;&lt;h4 id=&quot;graphical-ssh-agent-unavailable&quot;&gt;Graphical SSH Agent Unavailable&lt;/h4&gt;&lt;p&gt;Xubuntu 25.10’s graphical SSH agent isn’t functioning as expected. Without it, SSH key passphrases must be entered each time. &lt;a href=&quot;https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/2125549?ref=seand.xyz&quot; rel=&quot;noreferrer&quot;&gt;Investigation continues&lt;/a&gt;, and a fix may land before the next release.&lt;/p&gt;&lt;h4 id=&quot;double-network-icons-sometimes&quot;&gt;Double Network Icons (Sometimes)&lt;/h4&gt;&lt;p&gt;Some users may see &lt;a href=&quot;https://bugs.launchpad.net/ubuntu/+source/xfce4-panel/+bug/2059045?ref=seand.xyz&quot; rel=&quot;noreferrer&quot;&gt;duplicate network icons&lt;/a&gt;, especially in virtual machines. One appears via the Xfce Indicator Plugin and the other via the Systray Plugin. Removing the Indicator Plugin resolves this... something we’re considering doing by default for 26.04.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img alt=&quot;Xubuntu 25.10 &amp;quot;Questing Quokka&amp;quot;&quot; class=&quot;kg-image&quot; height=&quot;800&quot; src=&quot;https://seand.xyz/content/images/2025/10/xubuntu-2510-double-network-icons.png&quot; width=&quot;1280&quot; /&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;Some users may be confused to see two network icons that look nearly identical and function the same.&lt;/span&gt;&lt;/figure&gt;&lt;h4 id=&quot;screensaver-wallpaper-discrepancy&quot;&gt;Screensaver Wallpaper Discrepancy&lt;/h4&gt;&lt;p&gt;When first locking your screen, you &lt;a href=&quot;https://bugs.launchpad.net/ubuntu/+source/xfce4-screensaver/+bug/2107239?ref=seand.xyz&quot; rel=&quot;noreferrer&quot;&gt;might notice&lt;/a&gt; that the lock screen wallpaper defaults to Xfce’s background instead of Xubuntu’s. Changing (and reapplying) your wallpaper fixes the mismatch.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img alt=&quot;Xubuntu 25.10 &amp;quot;Questing Quokka&amp;quot;&quot; class=&quot;kg-image&quot; height=&quot;800&quot; src=&quot;https://seand.xyz/content/images/2025/10/xubuntu-2510-wrong-screensaver-wallpaper.png&quot; width=&quot;1280&quot; /&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;If you lock your screen before changing your wallpaper, you&amp;amp;aposll be greeted by Xfce&amp;amp;aposs wallpaper.&lt;/span&gt;&lt;/figure&gt;&lt;h2 id=&quot;looking-ahead&quot;&gt;Looking Ahead&lt;/h2&gt;&lt;p&gt;At first glance, Xubuntu 25.10 might seem rough around the edges: more bugs than usual, fewer active contributors, and an LTS release on the horizon. But known issues are solvable issues. With six months until 26.04, we have time to address these challenges, polish the experience, and deliver a release worthy of Xubuntu’s twentieth anniversary.&lt;/p&gt;&lt;p&gt;If you want to help shape that milestone release—whether through code, documentation, design, or outreach—please reach out. Together, we can ensure Xubuntu continues to thrive for another twenty years.&lt;/p&gt;&lt;div class=&quot;kg-card kg-cta-card kg-cta-bg-grey kg-cta-minimal    &quot; data-layout=&quot;minimal&quot;&gt;
  1108.            
  1109.                &lt;div class=&quot;kg-cta-sponsor-label-wrapper&quot;&gt;
  1110.                    &lt;div class=&quot;kg-cta-sponsor-label&quot;&gt;
  1111.                        &lt;span style=&quot;white-space: pre-wrap;&quot;&gt;Join the Xubuntu Community&lt;/span&gt;
  1112.                    &lt;/div&gt;
  1113.                &lt;/div&gt;
  1114.            
  1115.            &lt;div class=&quot;kg-cta-content&quot;&gt;
  1116.                
  1117.                
  1118.                    &lt;div class=&quot;kg-cta-content-inner&quot;&gt;
  1119.                    
  1120.                        &lt;div class=&quot;kg-cta-text&quot;&gt;
  1121.                            &lt;p dir=&quot;ltr&quot;&gt;&lt;b&gt;&lt;strong style=&quot;white-space: pre-wrap;&quot;&gt;Everyone can participate&lt;/strong&gt;&lt;/b&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt; in the Xubuntu community on many levels, from simply giving advice to fellow Xubuntu users to becoming a maintainer of core packages. Any contribution, even the smallest, is valued.&lt;/span&gt;&lt;/p&gt;
  1122.                        &lt;/div&gt;
  1123.                    
  1124.                    
  1125.                        &lt;a class=&quot;kg-cta-button &quot; href=&quot;https://xubuntu.org/contribute/?ref=seand.xyz&quot; style=&quot;background-color: #000000; color: #ffffff;&quot;&gt;
  1126.                            Get Involved
  1127.                        &lt;/a&gt;
  1128.                        
  1129.                    &lt;/div&gt;
  1130.                
  1131.            &lt;/div&gt;
  1132.        &lt;/div&gt;</description>
  1133. <pubDate>Thu, 09 Oct 2025 06:58:43 +0000</pubDate>
  1134. </item>
  1135. <item>
  1136. <title>Xubuntu: Xubuntu 25.10 released!</title>
  1137. <guid isPermaLink="false">https://xubuntu.org/?p=5725</guid>
  1138. <link>https://xubuntu.org/news/xubuntu-25-10-released/</link>
  1139. <description>&lt;p&gt;The Xubuntu team is happy to announce the immediate release of Xubuntu 25.10.&lt;/p&gt;
  1140.  
  1141.  
  1142.  
  1143. &lt;p&gt;Xubuntu 25.10, codenamed &lt;strong&gt;Questing Quokka&lt;/strong&gt;, is a regular release and will be supported for 9 months, until July 2026.&lt;/p&gt;
  1144.  
  1145.  
  1146.  
  1147. &lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-5726&quot; height=&quot;900&quot; src=&quot;https://xubuntu.org/wp-content/uploads/2025/10/ade5/xubuntu-2510-desktop.png&quot; width=&quot;1440&quot; /&gt;Xubuntu 25.10, featuring the latest updates from Xfce 4.20 and GNOME 49.&lt;/figure&gt;
  1148.  
  1149.  
  1150.  
  1151. &lt;p&gt;Xubuntu 25.10 features the latest Xfce 4.20 and GNOME 49 updates. &lt;strong&gt;Xfce 4.20&lt;/strong&gt; updates feature stability improvements and enhanced Wayland support, for those adventurous enough to use it. &lt;strong&gt;GNOME 49&lt;/strong&gt; apps have received further polish and are well-suited for Xubuntu. &lt;strong&gt;MATE 1.26&lt;/strong&gt; apps are still included to round out Xubuntu’s office suite.&lt;/p&gt;
  1152.  
  1153.  
  1154.  
  1155. &lt;p&gt;The &lt;strong&gt;final release images&lt;/strong&gt; for &lt;strong&gt;Xubuntu Desktop&lt;/strong&gt; and &lt;strong&gt;Xubuntu Minimal&lt;/strong&gt; are available as torrents and direct downloads from &lt;a href=&quot;https://xubuntu.org/download/&quot;&gt;xubuntu.org/download/&lt;/a&gt;.&lt;/p&gt;
  1156.  
  1157.  
  1158.  
  1159. &lt;p&gt;As the main server might be busy the first few days after the release, we recommend using the torrents if possible.&lt;/p&gt;
  1160.  
  1161.  
  1162.  
  1163. &lt;p&gt;We want to thank everybody who contributed to this release of Xubuntu!&lt;/p&gt;
  1164.  
  1165.  
  1166.  
  1167. &lt;h2&gt;Highlights and Known Issues&lt;/h2&gt;
  1168.  
  1169.  
  1170.  
  1171. &lt;h3&gt;Highlights&lt;/h3&gt;
  1172.  
  1173.  
  1174.  
  1175. &lt;ul&gt;&lt;li&gt;&lt;strong&gt;Xfce 4.20&lt;/strong&gt; components have received several stability improvements. Minor integration issues persist in Xubuntu 25.10 and will be addressed for 26.04, scheduled for release in April.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;GNOME 49&lt;/strong&gt; apps are further refined with new features and usability improvements.&lt;/li&gt;&lt;/ul&gt;
  1176.  
  1177.  
  1178.  
  1179. &lt;h3&gt;Known Issues&lt;/h3&gt;
  1180.  
  1181.  
  1182.  
  1183. &lt;ul&gt;&lt;li&gt;Some missing icons mean that &lt;strong&gt;libadwaita apps&lt;/strong&gt; (modern GNOME style) have graphical glitches. Notably, the window &lt;em&gt;close&lt;/em&gt; icons are blank (LP: &lt;a href=&quot;https://bugs.launchpad.net/ubuntu/+source/elementary-xfce/+bug/2125025&quot;&gt;#2125025&lt;/a&gt;), and &lt;strong&gt;Document Scanner&lt;/strong&gt; is missing an icon for the scanner options (LP: &lt;a href=&quot;https://bugs.launchpad.net/ubuntu/+source/elementary-xfce/+bug/2127071&quot;&gt;#2127071&lt;/a&gt;).&lt;/li&gt;&lt;li&gt;The graphical &lt;strong&gt;SSH agent&lt;/strong&gt; is unavailable due to a change in the &lt;strong&gt;GNOME Keyring Daemon&lt;/strong&gt; (LP: &lt;a href=&quot;https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/2125549&quot;&gt;#2125549&lt;/a&gt;).&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Flatpak&lt;/strong&gt; packages will refuse to install due to a conflict between AppArmor and libfuse (LP: &lt;a href=&quot;https://bugs.launchpad.net/ubuntu/+source/flatpak/+bug/2122161&quot;&gt;#2122161&lt;/a&gt;). A fix is in progress.&lt;/li&gt;&lt;/ul&gt;
  1184.  
  1185.  
  1186.  
  1187. &lt;p&gt;Please refer to the &lt;a href=&quot;https://wiki.xubuntu.org/releases/25.10/release-notes&quot;&gt;Xubuntu Release Notes&lt;/a&gt; for more obscure known issues, information on affecting bugs, bug fixes, and a list of new package versions.&lt;/p&gt;
  1188.  
  1189.  
  1190.  
  1191. &lt;p&gt;The main &lt;a href=&quot;https://discourse.ubuntu.com/t/questing-quokka-release-notes/59220&quot;&gt;Ubuntu Release Notes&lt;/a&gt; cover many other packages we carry and more generic issues.&lt;/p&gt;
  1192.  
  1193.  
  1194.  
  1195. &lt;h2&gt;Support&lt;/h2&gt;
  1196.  
  1197.  
  1198.  
  1199. &lt;p&gt;&lt;strong&gt;For support&lt;/strong&gt; with the release, navigate to &lt;a href=&quot;https://xubuntu.org/help/&quot;&gt;Help &amp;amp; Support&lt;/a&gt; for a complete list of methods to get help.&lt;/p&gt;</description>
  1200. <pubDate>Thu, 09 Oct 2025 01:06:35 +0000</pubDate>
  1201. </item>
  1202. <item>
  1203. <title>Colin Watson: Free software activity in September 2025</title>
  1204. <guid isPermaLink="false">tag:www.chiark.greenend.org.uk,2025-10-08:/~cjwatson/blog/activity-2025-09.html</guid>
  1205. <link>https://www.chiark.greenend.org.uk/~cjwatson/blog/activity-2025-09.html</link>
  1206. <description>&lt;p&gt;About 90% of my Debian contributions this month were
  1207. &lt;a href=&quot;https://www.freexian.com/about/debian-contributions/&quot;&gt;sponsored&lt;/a&gt; by Freexian.&lt;/p&gt;
  1208. &lt;p&gt;You can also support my work directly via
  1209. &lt;a href=&quot;https://liberapay.com/cjwatson&quot;&gt;Liberapay&lt;/a&gt; or &lt;a href=&quot;https://github.com/sponsors/cjwatson&quot;&gt;GitHub
  1210. Sponsors&lt;/a&gt;.&lt;/p&gt;
  1211. &lt;p&gt;Some months I feel like I’m pedalling furiously just to keep everything in a
  1212. roughly working state.  This was one of those months.&lt;/p&gt;
  1213. &lt;h2&gt;Python team&lt;/h2&gt;
  1214. &lt;p&gt;I upgraded these packages to new upstream versions:&lt;/p&gt;
  1215. &lt;ul&gt;
  1216. &lt;li&gt;aiosmtplib&lt;/li&gt;
  1217. &lt;li&gt;billiard&lt;/li&gt;
  1218. &lt;li&gt;dbus-fast&lt;/li&gt;
  1219. &lt;li&gt;django-modeltranslation&lt;/li&gt;
  1220. &lt;li&gt;django-sass-processor&lt;/li&gt;
  1221. &lt;li&gt;feedparser&lt;/li&gt;
  1222. &lt;li&gt;flask-security&lt;/li&gt;
  1223. &lt;li&gt;jaraco.itertools&lt;/li&gt;
  1224. &lt;li&gt;mariadb-connector-python&lt;/li&gt;
  1225. &lt;li&gt;mistune&lt;/li&gt;
  1226. &lt;li&gt;more-itertools&lt;/li&gt;
  1227. &lt;li&gt;pydantic-settings&lt;/li&gt;
  1228. &lt;li&gt;pyina&lt;/li&gt;
  1229. &lt;li&gt;pytest-mock&lt;/li&gt;
  1230. &lt;li&gt;python-asyncssh&lt;/li&gt;
  1231. &lt;li&gt;python-bytecode&lt;/li&gt;
  1232. &lt;li&gt;python-ciso8601&lt;/li&gt;
  1233. &lt;li&gt;python-django-pgbulk&lt;/li&gt;
  1234. &lt;li&gt;python-ewokscore&lt;/li&gt;
  1235. &lt;li&gt;python-ewoksdask&lt;/li&gt;
  1236. &lt;li&gt;python-ewoksutils&lt;/li&gt;
  1237. &lt;li&gt;python-expandvars&lt;/li&gt;
  1238. &lt;li&gt;python-git&lt;/li&gt;
  1239. &lt;li&gt;python-gssapi&lt;/li&gt;
  1240. &lt;li&gt;python-holidays&lt;/li&gt;
  1241. &lt;li&gt;python-jira&lt;/li&gt;
  1242. &lt;li&gt;python-jpype&lt;/li&gt;
  1243. &lt;li&gt;python-mastodon&lt;/li&gt;
  1244. &lt;li&gt;python-orjson (fixing a &lt;a href=&quot;https://bugs.debian.org/1114315&quot;&gt;build failure&lt;/a&gt;)&lt;/li&gt;
  1245. &lt;li&gt;python-pyftpdlib&lt;/li&gt;
  1246. &lt;li&gt;python-pytest-asyncio (fixing a &lt;a href=&quot;https://bugs.debian.org/1114323&quot;&gt;build
  1247.  failure&lt;/a&gt;)&lt;/li&gt;
  1248. &lt;li&gt;python-pytest-run-parallel&lt;/li&gt;
  1249. &lt;li&gt;python-recurring-ical-events&lt;/li&gt;
  1250. &lt;li&gt;python-redis&lt;/li&gt;
  1251. &lt;li&gt;python-watchfiles (fixing a &lt;a href=&quot;https://bugs.debian.org/1114338&quot;&gt;build
  1252.  failure&lt;/a&gt;)&lt;/li&gt;
  1253. &lt;li&gt;python-x-wr-timezone&lt;/li&gt;
  1254. &lt;li&gt;python-zipp&lt;/li&gt;
  1255. &lt;li&gt;pyzmq&lt;/li&gt;
  1256. &lt;li&gt;readability&lt;/li&gt;
  1257. &lt;li&gt;scalene (fixing test failures with pydantic 2.12.0~a1)&lt;/li&gt;
  1258. &lt;li&gt;sen (&lt;a href=&quot;https://github.com/TomasTomecek/sen/pull/190&quot;&gt;contributed supporting fix
  1259.  upstream&lt;/a&gt;)&lt;/li&gt;
  1260. &lt;li&gt;sqlfluff&lt;/li&gt;
  1261. &lt;li&gt;trove-classifiers&lt;/li&gt;
  1262. &lt;li&gt;ttconv&lt;/li&gt;
  1263. &lt;li&gt;vdirsyncer&lt;/li&gt;
  1264. &lt;li&gt;zope.component&lt;/li&gt;
  1265. &lt;li&gt;zope.configuration&lt;/li&gt;
  1266. &lt;li&gt;zope.deferredimport&lt;/li&gt;
  1267. &lt;li&gt;zope.deprecation&lt;/li&gt;
  1268. &lt;li&gt;zope.exceptions&lt;/li&gt;
  1269. &lt;li&gt;zope.i18nmessageid&lt;/li&gt;
  1270. &lt;li&gt;zope.interface&lt;/li&gt;
  1271. &lt;li&gt;zope.proxy&lt;/li&gt;
  1272. &lt;li&gt;zope.schema&lt;/li&gt;
  1273. &lt;li&gt;zope.security (&lt;a href=&quot;https://github.com/zopefoundation/zope.security/pull/121&quot;&gt;contributed supporting fix
  1274.  upstream&lt;/a&gt;)&lt;/li&gt;
  1275. &lt;li&gt;zope.testing&lt;/li&gt;
  1276. &lt;li&gt;zope.testrunner&lt;/li&gt;
  1277. &lt;/ul&gt;
  1278. &lt;p&gt;I had to spend a fair bit of time this month chasing down build/test
  1279. regressions in various packages due to some other upgrades, particularly to
  1280. pydantic, python-pytest-asyncio, and rust-pyo3:&lt;/p&gt;
  1281. &lt;ul&gt;
  1282. &lt;li&gt;&lt;a href=&quot;https://salsa.debian.org/python-team/packages/aiohappyeyeballs/-/commit/b637c131c4860c33140012bdc55ed4cb2ce006ec&quot;&gt;aiohappyeyeballs&lt;/a&gt;&lt;/li&gt;
  1283. &lt;li&gt;aiohttp-sse (&lt;a href=&quot;https://bugs.debian.org/1115561&quot;&gt;filed bug&lt;/a&gt; and &lt;a href=&quot;https://github.com/aio-libs/aiohttp-sse/pull/597&quot;&gt;contributed
  1284.  fix upstream&lt;/a&gt;)&lt;/li&gt;
  1285. &lt;li&gt;aioimaplib (&lt;a href=&quot;https://github.com/iroco-co/aioimaplib/issues/124#issuecomment-3305911017&quot;&gt;tried to fix upstream but failed to get tests working&lt;/a&gt;&lt;/li&gt;
  1286. &lt;li&gt;&lt;a href=&quot;https://salsa.debian.org/python-team/packages/aiosmtplib/-/commit/6da2d47e5090d814e53319f77be4e93a47ae54b2&quot;&gt;aiosmtplib&lt;/a&gt;
  1287.  (&lt;a href=&quot;https://github.com/cole/aiosmtplib/pull/328&quot;&gt;contributed upstream&lt;/a&gt;)&lt;/li&gt;
  1288. &lt;li&gt;&lt;a href=&quot;https://salsa.debian.org/python-team/packages/app-model/-/commit/32619704f8c254d1ee2df8642835ea9bf88b4d0e&quot;&gt;app-model&lt;/a&gt;&lt;/li&gt;
  1289. &lt;li&gt;&lt;a href=&quot;https://salsa.debian.org/python-team/packages/aresponses/-/commit/bfc135122501ccdceabbcb8324be1c478fbe55d1&quot;&gt;aresponses&lt;/a&gt;
  1290.  (&lt;a href=&quot;https://github.com/aresponses/aresponses/pull/85&quot;&gt;contributed upstream&lt;/a&gt;)&lt;/li&gt;
  1291. &lt;li&gt;fastapi (&lt;a href=&quot;https://bugs.debian.org/1113771&quot;&gt;filed bug&lt;/a&gt; and &lt;a href=&quot;https://github.com/fastapi/fastapi/pull/14036&quot;&gt;contributed fix
  1292.  upstream&lt;/a&gt;)&lt;/li&gt;
  1293. &lt;li&gt;&lt;a href=&quot;https://salsa.debian.org/python-team/packages/ipython/-/commit/2bd12280052e5f80e9464506da4e4ebe1259c072&quot;&gt;ipython&lt;/a&gt;&lt;/li&gt;
  1294. &lt;li&gt;opendrop (&lt;a href=&quot;https://bugs.debian.org/1115562&quot;&gt;filed bug&lt;/a&gt; and &lt;a href=&quot;https://github.com/jdber1/opendrop/pull/74&quot;&gt;contributed
  1295.  fix upstream&lt;/a&gt;)&lt;/li&gt;
  1296. &lt;li&gt;&lt;a href=&quot;https://salsa.debian.org/python-team/packages/pydantic-extra-types/-/compare/debian%2F2.10.5-1...debian%2F2.10.5-2?from_project_id=98689&quot;&gt;pydantic-extra-types&lt;/a&gt;&lt;/li&gt;
  1297. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1114286&quot;&gt;pytest-relaxed&lt;/a&gt; (&lt;a href=&quot;https://github.com/bitprophet/pytest-relaxed/pull/34&quot;&gt;contributed
  1298.  upstream&lt;/a&gt;)&lt;/li&gt;
  1299. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1114301&quot;&gt;python-drf-spectacular&lt;/a&gt;&lt;/li&gt;
  1300. &lt;li&gt;&lt;a href=&quot;https://salsa.debian.org/python-team/packages/python-fakeredis/-/compare/debian%2F2.29.0-4...debian%2F2.29.0-5?from_project_id=10544&quot;&gt;python-fakeredis&lt;/a&gt;&lt;/li&gt;
  1301. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1115563&quot;&gt;python-jsonrpc-websocket&lt;/a&gt; (&lt;a href=&quot;https://github.com/emlove/jsonrpc-websocket/pull/16&quot;&gt;contributed
  1302.  upstream&lt;/a&gt;, and
  1303.  sponsored upload for Tianyu Chen)&lt;/li&gt;
  1304. &lt;li&gt;&lt;a href=&quot;https://salsa.debian.org/python-team/packages/python-odmantic/-/commit/21977555a971b0b1fd8b59611f60984e74f3f3f0&quot;&gt;python-odmantic&lt;/a&gt;&lt;/li&gt;
  1305. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1114324&quot;&gt;python-pytest-trio&lt;/a&gt; (&lt;a href=&quot;https://github.com/python-trio/pytest-trio/issues/151&quot;&gt;upstream
  1306.  issue&lt;/a&gt;, &lt;a href=&quot;https://github.com/python-trio/pytest-trio/pull/152&quot;&gt;upstream
  1307.  &lt;span class=&quot;caps&quot;&gt;PR&lt;/span&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/pytest-dev/pytest/issues/13734&quot;&gt;pytest issue
  1308.  about possible root
  1309.  cause&lt;/a&gt;)&lt;/li&gt;
  1310. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1114327&quot;&gt;python-repoze.sphinx.autointerface&lt;/a&gt;&lt;/li&gt;
  1311. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1114332&quot;&gt;python-sluurp&lt;/a&gt;&lt;/li&gt;
  1312. &lt;li&gt;python-youtubeaio (&lt;a href=&quot;https://bugs.debian.org/1113903&quot;&gt;filed bug&lt;/a&gt;)&lt;/li&gt;
  1313. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1115575&quot;&gt;rtsp-to-webrtc&lt;/a&gt;&lt;/li&gt;
  1314. &lt;/ul&gt;
  1315. &lt;p&gt;After some upstream discussion I &lt;a href=&quot;https://bugs.debian.org/1115318&quot;&gt;requested removal of
  1316. pydantic-compat&lt;/a&gt;, since it was more trouble
  1317. than it was worth to keep it working with the latest pydantic version.&lt;/p&gt;
  1318. &lt;p&gt;I filed &lt;a href=&quot;https://bugs.debian.org/1115299&quot;&gt;dh-python: pybuild-plugin-pyproject doesn’t know about
  1319. headers&lt;/a&gt; and added it to
  1320. &lt;a href=&quot;https://wiki.debian.org/Python/PybuildPluginPyproject&quot;&gt;Python/PybuildPluginPyproject&lt;/a&gt;,
  1321. and converted some packages to &lt;code&gt;pybuild-plugin-pyproject&lt;/code&gt;:&lt;/p&gt;
  1322. &lt;ul&gt;
  1323. &lt;li&gt;aresponses&lt;/li&gt;
  1324. &lt;li&gt;python-azure, fixing an &lt;a href=&quot;https://bugs.debian.org/1114162&quot;&gt;autopkgtest failure in kombu&lt;/a&gt;&lt;/li&gt;
  1325. &lt;li&gt;python-ciso8601&lt;/li&gt;
  1326. &lt;/ul&gt;
  1327. &lt;p&gt;I updated dh-python to &lt;a href=&quot;https://salsa.debian.org/python-team/tools/dh-python/-/merge_requests/62&quot;&gt;suppress generated dependencies that would be
  1328. satisfied by python3 &amp;gt;=
  1329. 3.11&lt;/a&gt;.&lt;/p&gt;
  1330. &lt;p&gt;&lt;code&gt;pkg_resources&lt;/code&gt; is
  1331. &lt;a href=&quot;https://github.com/pypa/setuptools/issues/3085&quot;&gt;deprecated&lt;/a&gt;.  In most cases
  1332. replacing it is a relatively simple matter of &lt;a href=&quot;https://importlib-resources.readthedocs.io/en/latest/migration.html&quot;&gt;porting to
  1333. &lt;code&gt;importlib.resources&lt;/code&gt;&lt;/a&gt;,
  1334. but packages that used its old namespace package support need more
  1335. complicated work to port them to &lt;a href=&quot;https://peps.python.org/pep-0420/&quot;&gt;implicit namespace
  1336. packages&lt;/a&gt;.  We had quite a few bugs about
  1337. this on &lt;code&gt;zope.*&lt;/code&gt; packages, but fortunately upstream did the &lt;a href=&quot;https://github.com/zopefoundation/meta/issues/194&quot;&gt;hard part of
  1338. this&lt;/a&gt; recently.  I went
  1339. round and cleaned up most of the remaining loose ends, with some help from
  1340. Alexandre Detiste.  Some of these aren’t completely done yet as they’re
  1341. awaiting new upstream releases:&lt;/p&gt;
  1342. &lt;ul&gt;
  1343. &lt;li&gt;zope.component (&lt;a href=&quot;https://bugs.debian.org/1084007&quot;&gt;Debian bug&lt;/a&gt;, &lt;a href=&quot;https://github.com/zopefoundation/zope.component/pull/80&quot;&gt;upstream
  1344.  &lt;span class=&quot;caps&quot;&gt;PR&lt;/span&gt;&lt;/a&gt;)&lt;/li&gt;
  1345. &lt;li&gt;zope.configuration (&lt;a href=&quot;https://bugs.debian.org/1084006&quot;&gt;Debian bug&lt;/a&gt;,
  1346.  &lt;a href=&quot;https://github.com/zopefoundation/zope.configuration/pull/68&quot;&gt;upstream
  1347.  &lt;span class=&quot;caps&quot;&gt;PR&lt;/span&gt;&lt;/a&gt;)&lt;/li&gt;
  1348. &lt;li&gt;zope.deferredimport (&lt;a href=&quot;https://bugs.debian.org/1084008&quot;&gt;Debian bug&lt;/a&gt;,
  1349.  &lt;a href=&quot;https://github.com/zopefoundation/zope.deferredimport/pull/18&quot;&gt;upstream
  1350.  &lt;span class=&quot;caps&quot;&gt;PR&lt;/span&gt;&lt;/a&gt;)&lt;/li&gt;
  1351. &lt;li&gt;zope.deprecation (&lt;a href=&quot;https://bugs.debian.org/1084009&quot;&gt;Debian bug&lt;/a&gt;, &lt;a href=&quot;https://github.com/zopefoundation/zope.deprecation/pull/27&quot;&gt;upstream
  1352.  &lt;span class=&quot;caps&quot;&gt;PR&lt;/span&gt;&lt;/a&gt;)&lt;/li&gt;
  1353. &lt;li&gt;zope.exceptions (&lt;a href=&quot;https://bugs.debian.org/1084012&quot;&gt;Debian bug&lt;/a&gt;, &lt;a href=&quot;https://github.com/zopefoundation/zope.exceptions/pull/42&quot;&gt;upstream
  1354.  &lt;span class=&quot;caps&quot;&gt;PR&lt;/span&gt;&lt;/a&gt;)&lt;/li&gt;
  1355. &lt;li&gt;zope.i18nmessageid (&lt;a href=&quot;https://bugs.debian.org/1084014&quot;&gt;Debian bug&lt;/a&gt;,
  1356.  &lt;a href=&quot;https://github.com/zopefoundation/zope.i18nmessageid/pull/67&quot;&gt;upstream
  1357.  &lt;span class=&quot;caps&quot;&gt;PR&lt;/span&gt;&lt;/a&gt;)&lt;/li&gt;
  1358. &lt;li&gt;zope.interface (&lt;a href=&quot;https://bugs.debian.org/1084013&quot;&gt;Debian bug&lt;/a&gt;, &lt;a href=&quot;https://github.com/zopefoundation/zope.interface/pull/346&quot;&gt;upstream
  1359.  &lt;span class=&quot;caps&quot;&gt;PR&lt;/span&gt;&lt;/a&gt;)&lt;/li&gt;
  1360. &lt;li&gt;zope.location (&lt;a href=&quot;https://bugs.debian.org/1084016&quot;&gt;Debian bug&lt;/a&gt;, &lt;a href=&quot;https://github.com/zopefoundation/zope.location/pull/17&quot;&gt;upstream
  1361.  &lt;span class=&quot;caps&quot;&gt;PR&lt;/span&gt;&lt;/a&gt;)&lt;/li&gt;
  1362. &lt;li&gt;zope.security (&lt;a href=&quot;https://bugs.debian.org/1084018&quot;&gt;Debian bug&lt;/a&gt;, &lt;a href=&quot;https://github.com/zopefoundation/zope.security/pull/122&quot;&gt;upstream
  1363.  &lt;span class=&quot;caps&quot;&gt;PR&lt;/span&gt;&lt;/a&gt;)&lt;/li&gt;
  1364. &lt;li&gt;zope.testing (&lt;a href=&quot;https://bugs.debian.org/1084019&quot;&gt;Debian bug&lt;/a&gt;, &lt;a href=&quot;https://github.com/zopefoundation/zope.testing/pull/55&quot;&gt;upstream
  1365.  &lt;span class=&quot;caps&quot;&gt;PR&lt;/span&gt;&lt;/a&gt;)&lt;/li&gt;
  1366. &lt;li&gt;zope.testrunner (&lt;a href=&quot;https://bugs.debian.org/1084020&quot;&gt;Debian bug&lt;/a&gt;, &lt;a href=&quot;https://github.com/zopefoundation/zope.testrunner/pull/201&quot;&gt;upstream
  1367.  &lt;span class=&quot;caps&quot;&gt;PR&lt;/span&gt;&lt;/a&gt;)&lt;/li&gt;
  1368. &lt;/ul&gt;
  1369. &lt;p&gt;This work also caused a couple of build regressions, which I fixed:&lt;/p&gt;
  1370. &lt;ul&gt;
  1371. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1115803&quot;&gt;zope.hookable&lt;/a&gt;&lt;/li&gt;
  1372. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1115763&quot;&gt;zope.location&lt;/a&gt;&lt;/li&gt;
  1373. &lt;/ul&gt;
  1374. &lt;p&gt;I fixed
  1375. &lt;a href=&quot;https://salsa.debian.org/python-team/packages/jupyter-client/-/commit/ebe94146e3bb6405c529aeae8118161334bc9ab1&quot;&gt;jupyter-client&lt;/a&gt;
  1376. so that its autopkgtests would work in Debusine.&lt;/p&gt;
  1377. &lt;p&gt;I fixed &lt;a href=&quot;https://bugs.debian.org/1116924&quot;&gt;waitress&lt;/a&gt; to build with the
  1378. &lt;code&gt;nocheck&lt;/code&gt; profile.&lt;/p&gt;
  1379. &lt;p&gt;I fixed several other build/test failures:&lt;/p&gt;
  1380. &lt;ul&gt;
  1381. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1114057&quot;&gt;austin&lt;/a&gt; (&lt;a href=&quot;https://github.com/P403n1x87/austin/pull/330&quot;&gt;contributed follow-up fix
  1382.  upstream&lt;/a&gt;)&lt;/li&gt;
  1383. &lt;li&gt;&lt;a href=&quot;https://salsa.debian.org/python-team/packages/fsspec/-/commit/849213bc0a6abb533d8046302378246c9da5549e&quot;&gt;fsspec&lt;/a&gt;&lt;/li&gt;
  1384. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1114876&quot;&gt;python-asgiref&lt;/a&gt;&lt;/li&gt;
  1385. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1115079&quot;&gt;python-django-channels&lt;/a&gt;&lt;/li&gt;
  1386. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1116155&quot;&gt;twisted&lt;/a&gt;&lt;/li&gt;
  1387. &lt;/ul&gt;
  1388. &lt;p&gt;I fixed some other bugs:&lt;/p&gt;
  1389. &lt;ul&gt;
  1390. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1017761&quot;&gt;python-jpype: java.lang.ClassNotFoundException: org.jpype.classloader.DynamicClassLoader&lt;/a&gt;&lt;/li&gt;
  1391. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1035211&quot;&gt;python-jpype: Please add autopkgtests (to add coverage for python3-numpy)&lt;/a&gt;&lt;/li&gt;
  1392. &lt;/ul&gt;
  1393. &lt;h2&gt;Code reviews&lt;/h2&gt;
  1394. &lt;ul&gt;
  1395. &lt;li&gt;debbugs: &lt;a href=&quot;https://salsa.debian.org/debbugs-team/debbugs/-/merge_requests/24&quot;&gt;Fix dep8 autopkgtests, make Salsa &lt;span class=&quot;caps&quot;&gt;CI&lt;/span&gt; fully
  1396.  green&lt;/a&gt;
  1397.  (still in progress)&lt;/li&gt;
  1398. &lt;li&gt;dput-ng: &lt;a href=&quot;https://bugs.debian.org/1112107&quot;&gt;Add trixie-backports &lt;span class=&quot;amp&quot;&gt;&amp;amp;&lt;/span&gt; bookworm-backports-sloppy&lt;/a&gt;&lt;/li&gt;
  1399. &lt;li&gt;openssh: &lt;a href=&quot;https://salsa.debian.org/ssh-team/openssh/-/merge_requests/34&quot;&gt;Update sshd@.service to follow upstream&lt;/a&gt;&lt;/li&gt;
  1400. &lt;li&gt;openssh: &lt;a href=&quot;https://salsa.debian.org/ssh-team/openssh/-/merge_requests/35&quot;&gt;authfd: fallback to default if $SSH_AUTH_SOCK is
  1401.  unset&lt;/a&gt;
  1402.  (still in progress)&lt;/li&gt;
  1403. &lt;li&gt;putty: &lt;a href=&quot;https://salsa.debian.org/ssh-team/putty/-/merge_requests/7&quot;&gt;d/rules: Use dh_assistant restore-file-on-clean&lt;/a&gt;&lt;/li&gt;
  1404. &lt;li&gt;python-debian: &lt;a href=&quot;https://salsa.debian.org/python-debian-team/python-debian/-/merge_requests/151&quot;&gt;Update from pyupgrade to
  1405.  —py37-plus&lt;/a&gt;
  1406.  (still in progress)&lt;/li&gt;
  1407. &lt;li&gt;release-notes: &lt;a href=&quot;https://salsa.debian.org/ddp-team/release-notes/-/merge_requests/322&quot;&gt;issues: mention tzdata-legacy split&lt;/a&gt;&lt;/li&gt;
  1408. &lt;/ul&gt;
  1409. &lt;h2&gt;Other bits and pieces&lt;/h2&gt;
  1410. &lt;p&gt;I fixed several CMake 4 build failures:&lt;/p&gt;
  1411. &lt;ul&gt;
  1412. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1112984&quot;&gt;halibut&lt;/a&gt;&lt;/li&gt;
  1413. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1112986&quot;&gt;hdf5-blosc&lt;/a&gt;&lt;/li&gt;
  1414. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1112987&quot;&gt;hdf5-filter-plugin&lt;/a&gt;&lt;/li&gt;
  1415. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1113655&quot;&gt;yubihsm-shell&lt;/a&gt;&lt;/li&gt;
  1416. &lt;/ul&gt;
  1417. &lt;p&gt;I got &lt;span class=&quot;caps&quot;&gt;CI&lt;/span&gt; for debbugs passing
  1418. (&lt;a href=&quot;https://salsa.debian.org/debbugs-team/debbugs/-/merge_requests/22&quot;&gt;!22&lt;/a&gt;,
  1419. &lt;a href=&quot;https://salsa.debian.org/debbugs-team/debbugs/-/merge_requests/23&quot;&gt;!23&lt;/a&gt;).&lt;/p&gt;
  1420. &lt;p&gt;I fixed a &lt;a href=&quot;https://bugs.debian.org/1114418&quot;&gt;build failure with &lt;span class=&quot;caps&quot;&gt;GCC&lt;/span&gt; 15 in
  1421. trn4&lt;/a&gt;.&lt;/p&gt;
  1422. &lt;p&gt;I filed a &lt;a href=&quot;https://bugs.debian.org/1114970&quot;&gt;release-notes bug&lt;/a&gt; about the
  1423. tzdata reorganization in the trixie cycle.&lt;/p&gt;
  1424. &lt;p&gt;I filed and fixed a &lt;a href=&quot;https://bugs.debian.org/1115226&quot;&gt;git-dpm regression with bash
  1425. 5.3&lt;/a&gt;.&lt;/p&gt;
  1426. &lt;p&gt;I upgraded libfilter-perl to a new upstream version.&lt;/p&gt;
  1427. &lt;p&gt;I &lt;a href=&quot;https://code.launchpad.net/~cjwatson/ubuntu-dev-tools/+git/ubuntu-dev-tools/+merge/492543&quot;&gt;optimized some code in
  1428. ubuntu-dev-tools&lt;/a&gt;
  1429. that made O(1) &lt;span class=&quot;caps&quot;&gt;HTTP&lt;/span&gt; requests when it could instead make O(n).&lt;/p&gt;</description>
  1430. <pubDate>Wed, 08 Oct 2025 18:16:52 +0000</pubDate>
  1431. </item>
  1432. <item>
  1433. <title>David Mohammed: Ubuntu Budgie 25.10 release notes</title>
  1434. <guid isPermaLink="false">https://ubuntubudgie.org/?p=3911</guid>
  1435. <link>https://ubuntubudgie.org/2025/10/ubuntu-budgie-25-10-release-notes/</link>
  1436. <description>&lt;p&gt;Ubuntu Budgie 25.10 (Questing Quokka) is a Standard Release with 9 months of support by your distro maintainers and Canonical, from Oct 2025 to July 2026. These release notes showcase the key takeaways for 25.04 upgraders to 25.10. Please note – there is no direct upgrade path from 24.04.3 to 25.10; you must uplift to 24.10 first or perform a fresh install. In these release notes the areas…&lt;/p&gt;
  1437. &lt;p&gt;&lt;a href=&quot;https://ubuntubudgie.org/2025/10/ubuntu-budgie-25-10-release-notes/&quot; rel=&quot;nofollow&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;</description>
  1438. <pubDate>Wed, 08 Oct 2025 17:26:51 +0000</pubDate>
  1439. </item>
  1440. <item>
  1441. <title>Julian Andres Klode: Dependency Tries</title>
  1442. <guid isPermaLink="true">https://blog.jak-linux.org/2025/09/27/dependency-tries/</guid>
  1443. <link>https://blog.jak-linux.org/2025/09/27/dependency-tries/</link>
  1444. <description>&lt;p&gt;As I was shopping groceries I had a shocking realization: The active dependencies
  1445. of packages in a solver actually form a trie (a dependency &lt;code&gt;A|B&lt;/code&gt; - “A or B” - of
  1446. a package &lt;code&gt;X&lt;/code&gt; is considered active if we marked &lt;code&gt;X&lt;/code&gt; for install).&lt;/p&gt;
  1447. &lt;p&gt;Consider the dependencies &lt;code&gt;A|B|C&lt;/code&gt;, &lt;code&gt;A|B&lt;/code&gt;, &lt;code&gt;B|X&lt;/code&gt;.
  1448. In most package managers these just express alternatives, that is, the “or” relationship,
  1449. but in Debian packages, it also expresses a preference relationship between its operands,
  1450. so in &lt;code&gt;A|B|C&lt;/code&gt;, &lt;code&gt;A&lt;/code&gt; is preferred over &lt;code&gt;B&lt;/code&gt; and &lt;code&gt;B&lt;/code&gt; over &lt;code&gt;C&lt;/code&gt; (and &lt;code&gt;A&lt;/code&gt; transitively over &lt;code&gt;C&lt;/code&gt;).&lt;/p&gt;
  1451. &lt;p&gt;This means that we can convert the three dependencies into a trie as follows:&lt;/p&gt;
  1452. &lt;p&gt;&lt;img alt=&quot;Dependency trie of the three dependencies&quot; src=&quot;https://blog.jak-linux.org/post/trie1.svg&quot; /&gt;&lt;/p&gt;
  1453. &lt;p&gt;Solving the dependency here becomes a matter of trying to install the package
  1454. referenced by the first edge of the root, and seeing if that sticks. In this
  1455. case, that would be ‘a’. Let’s assume that ‘a’ failed to install, the next
  1456. step is to remove the empty node of &lt;code&gt;a&lt;/code&gt;, and merging its children into the
  1457. root.&lt;/p&gt;
  1458. &lt;p&gt;&lt;img alt=&quot;Reduced dependency trie with “not A” containing b, b|c, b|x&quot; src=&quot;https://blog.jak-linux.org/post/trie2.svg&quot; /&gt;&lt;/p&gt;
  1459. &lt;p&gt;For ease of visualisation, we remove “a” from the dependency nodes as well,
  1460. leading us to a trie of the dependencies “b”, “b|c”, and “b|x”.&lt;/p&gt;
  1461. &lt;p&gt;Presenting the Debian dependency problem, or the positive part of it as a
  1462. trie allows us for a great visualization of the problem but it may not proof
  1463. to be an effective implementation choice.&lt;/p&gt;
  1464. &lt;p&gt;In the real world we may actually store this as a priority queue that we
  1465. can delete from. Since we don’t actually want to delete from the queue
  1466. for real, our queue items are pairs of a pointer to dependency and an
  1467. activitity level, say &lt;code&gt;A|B@1&lt;/code&gt;.
  1468. Whenever a variable is assigned false, we look at its reverse dependencies
  1469. and bump their activity, and reinsert them (the priority of the item being
  1470. determined by the leftmost solution still possible, it has now changed).
  1471. When we iterate the queue, we remove items with a lower activity level:&lt;/p&gt;
  1472. &lt;ol&gt;
  1473. &lt;li&gt;Our queue is &lt;code&gt;A|B@1&lt;/code&gt;, &lt;code&gt;A|B|C@1&lt;/code&gt;, &lt;code&gt;B|X@1&lt;/code&gt;&lt;/li&gt;
  1474. &lt;li&gt;Rejecting A bump the activity for its reverse dependencies and reinset them:
  1475. Our queue is &lt;code&gt;A|B@1&lt;/code&gt;, &lt;code&gt;A|B|C@1&lt;/code&gt;, &lt;code&gt;(A|)B@2&lt;/code&gt;, &lt;code&gt;(A|)B|C@2&lt;/code&gt;, &lt;code&gt;B|X@1&lt;/code&gt;&lt;/li&gt;
  1476. &lt;li&gt;We visit &lt;code&gt;A|B@1&lt;/code&gt; but see the activity of the underlying dependency is now 2 and remove it
  1477. Our queue is &lt;code&gt;A|B|C@1&lt;/code&gt;, &lt;code&gt;(A|)B@2&lt;/code&gt;, &lt;code&gt;(A|)B|C@2&lt;/code&gt;, &lt;code&gt;B|X@1&lt;/code&gt;&lt;/li&gt;
  1478. &lt;li&gt;We visit &lt;code&gt;A|B|C@1&lt;/code&gt; but see the activity of the underlying dependency is now 2 and remove it
  1479. Our queue is &lt;code&gt;(A|)B@2&lt;/code&gt;, &lt;code&gt;(A|)B|C@2&lt;/code&gt;, &lt;code&gt;B|X@1&lt;/code&gt;&lt;/li&gt;
  1480. &lt;li&gt;We visit &lt;code&gt;A|B@2&lt;/code&gt;, see the activity matches and find B is the solution.&lt;/li&gt;
  1481. &lt;/ol&gt;</description>
  1482. <pubDate>Sat, 27 Sep 2025 14:32:19 +0000</pubDate>
  1483. </item>
  1484. <item>
  1485. <title>Aaron Rainbolt: Setting up a weird dual-boot DOS workstation</title>
  1486. <guid isPermaLink="true">https://arraybolt3.substack.com/p/setting-up-a-weird-dual-boot-dos</guid>
  1487. <link>https://arraybolt3.substack.com/p/setting-up-a-weird-dual-boot-dos</link>
  1488. <description>&lt;p&gt;I’ve been wanting to create some Bible study software for DOS for a while now. Why target DOS? Because it’s a cool platform, it’s still in use in some areas of the world, and I haven’t been able to find readily available Bible software for DOS, whether open-source or not. Over the weekend, I was thinking about this project again, and decided that, for the sake of development ease and avoiding emulator quirks, I should set up a DOS installation on physical hardware and create the software on that machine.&lt;/p&gt;&lt;p&gt;I have tons of old computers in varying states of decay or usefulness; three of them still work pretty well. I decided to pick the weakest of the three for this project since it probably had more than enough grunt for the project at hand, but wouldn’t be useful for much else. The chosen system was a Compaq Presario 6000 desktop, featuring some iteration of an AMD Athlon XP processor, 256 MB RAM, a 20 GB hard drive (which I was about to expand for reasons I’ll get into later), a floppy drive, and dual optical drives (only one of which works). This particular system is a bit strange since its USB controller and network card are both NVIDIA hardware, even though NVIDIA is typically associated with graphics cards. Beyond that though, the system was pretty typical for the kind of hardware you’d see in the early 2000s - all of the drives use IDE to communicate with the motherboard, and most of the expansion slots are PCI (except for a couple of mystery slots, one of them &lt;em&gt;might&lt;/em&gt; be AGP, and another one seems to be intentionally blocked off and I can’t tell what it is). The back panel features PS/2 ports for a mouse and keyboard, a parallel port and a serial port, a VGA port for the monitor, and a few USB (probably USB 2) ports. There was also a 3Com network card installed in one of the slots, which I had put there when experimenting with OpenBSD on this system. The front panel had a couple more USB ports.&lt;/p&gt;&lt;div class=&quot;subscription-widget-wrap-editor&quot; data-attrs=&quot;{&amp;quot;url&amp;quot;:&amp;quot;https://arraybolt3.substack.com/subscribe?&amp;quot;,&amp;quot;text&amp;quot;:&amp;quot;Subscribe&amp;quot;,&amp;quot;language&amp;quot;:&amp;quot;en&amp;quot;}&quot; data-component-name=&quot;SubscribeWidgetToDOM&quot;&gt;&lt;div class=&quot;subscription-widget show-subscribe&quot;&gt;&lt;div class=&quot;preamble&quot;&gt;&lt;p class=&quot;cta-caption&quot;&gt;Thanks for reading Arraybolt's Archives! Subscribe for free to receive new posts and support my work.&lt;/p&gt;&lt;/div&gt;&lt;form class=&quot;subscription-widget-subscribe&quot;&gt;&lt;input class=&quot;email-input&quot; name=&quot;email&quot; tabindex=&quot;-1&quot; type=&quot;email&quot; /&gt;&lt;input class=&quot;button primary&quot; type=&quot;submit&quot; value=&quot;Subscribe&quot; /&gt;&lt;div class=&quot;fake-input-wrapper&quot;&gt;&lt;div class=&quot;fake-input&quot;&gt;&lt;/div&gt;&lt;div class=&quot;fake-button&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/form&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;One downside of using DOS for development is a lack of good source code versioning systems. Git doesn’t exist for DOS, and I don’t have the time or willingness to learn RCS or similar (maybe I should?), so I decided I would implement version control by just copying the project every so often to a backup location, probably zipping it in the process. Anticipating that this would probably require a hefty chunk of disk space, I decided to add a 40 GB Maxtor drive taken from a Pentium 4 desktop I had laying around. Getting the drive installed was a bit of a challenge; many older computers have the drives slide out backwards into the system, but this Compaq has them slide out &lt;em&gt;forward&lt;/em&gt; out the front of the machine. This meant I had to get the front panel off of the machine, which was hard because it was held on by four extremely stiff plastic latches that had to all be disengaged at the same time. Thankfully the plastic of the front panel was able to bend enough that I could disengage each latch individually, then keep it that way while I worked on another latch.&lt;/p&gt;&lt;p&gt;After getting the cover off, I had to fight with Compaq’s drive mounting hardware. Rather than just screwing the drives directly into the bay like a normal computer would, Compaq elected to use a system of rails and latches to keep the drives fully hooked into the machine. The screws had very thick heads, and were intended to slide along the rails and then latch in place once inserted far enough. As strange as this already was, there was also the problem that the secondary drive bay had a malformed rail, that was just &lt;em&gt;barely&lt;/em&gt; too narrow for the mounting screws to actually slide in. There were also separate screw types for the optical drives and the hard drives. What I ended up doing was using optical drive screws on the Maxtor hard drive, which seemed to fit correctly and were able to latch in place. After getting this kludgy setup to work, I then remembered that I needed to set jumpers on the drives to configure them as “master” and “slave” properly, so I then took both drives out, reconfigured the jumpers, and slid them back in. After a bit of cable routing shenanigans (including removing a rather unfortunately located zip tie), I finally had both drives installed.&lt;/p&gt;&lt;p&gt;To confirm that I hadn’t made a total mess of my drive configuration, I decided to take some time to power the system on and check the BIOS. I had an old PS/2 Microsoft keyboard, and a small, 4:3 aspect ratio flatscreen display with a built-in VGA cable, so I decided to use those for the project. Nothing caught fire when I plugged it in and powered it on, and after getting into the BIOS settings I found that both drives appeared to be properly recognized. I also saw “Removable Media Boot”, which made me hopeful that this machine might support USB boot. I turned off a bunch of settings related to “fast startup” to minimize the chances of having issues, then saved my changes and exited.&lt;/p&gt;&lt;p&gt;Since I thought USB boot might work, I downloaded the FreeDOS 1.4 FullUSB and flashed it to a USB drive. Unfortunately, my hopes were soon dashed; the USB drive did not appear in the BIOS’s boot order settings. Crud.&lt;/p&gt;&lt;p&gt;I don’t generally like burning CD-Rs if I don’t have to, since they can’t be rewritten, they probably won’t keep being manufactured for much longer, and I only had 48 of my original stack of 50 left (oh horror!), but I didn’t see another good option at this point, so I dragged out one of the other working old computers, a Panasonic Toughbook that had an old-ish install of Void Linux on it. This particular machine looks like it’s been through a warzone, but it still works well enough, and most importantly, the CD burner in it seems to work flawlessly. In the hopes of not having to waste any further CDs in the future, I decided to burn Plop Boot Manager to the disc rather than burning FreeDOS itself. The burn went smoothly enough, the Compaq was happy to boot from it, and next thing I knew I was able to boot into FreeDOS from the USB! Woohoo!…&lt;/p&gt;&lt;p&gt;…or…. not. FreeDOS itself seemed to run without issues, and partitioning and formatting the drives wasn’t a problem, but for some reason FreeDOS’s installer didn’t work when booted in this way. Despite the fact that it was installing to what it considered drive D:, it kept trying to write files to drive C:, which was the read-only volume on the USB drive. This resulted in lots of “Abort, Retry, Ignore, Fail?” error messages, and while the installer did seem to work (kinda) if I just &quot;ignored” all the errors, I didn’t trust the finished installation was going to work. I also couldn’t just sit there and press and hold the “I” key to keep ignoring errors, since doing so slowed the copy process down (probably because it was spamming the keyboard interrupt, I would guess). So, one CD-R apparently wasted. Next!&lt;/p&gt;&lt;p&gt;Back on the Toughbook, I used wget to download both the FreeDOS 1.4 LiveCD and BonusCD. I needed both discs, since the OS was on the LiveCD and the development tools (like the C compiler I wanted to use) was on the BonusCD. Burning the discs was pretty easy, and FreeDOS seemed much happier installing from a CD than trying to install from a USB. Soon enough I had a working FreeDOS installation, and a little bit later I had a good text editor and the Open Watcom 1.9 compiler installed.&lt;/p&gt;&lt;p&gt;At this point I was almost ready to sit down and start coding, but decided I had better figure out how to get data off the system before I dedicated a bunch of time working on my project. I didn’t want it to just rot on the machine it was coded on. At this point I discovered two frustrating facts:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;The USB driver included with FreeDOS only works with UHCI controllers, but the controller in this system is an OHCI controller.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The network card wasn’t supported out of the box - there were packet drivers out there for it most likely, but those weren’t very useful since I couldn’t get outside data onto the machine since USB didn’t work.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;(At this point one might reasonably ask why I don’t just use the floppy disk drive. That’s because I have exactly one functional computer with a floppy disk drive, that being the Compaq I was setting up. I can use floppies as storage if I’m willing to risk catastrophic data loss, but they’re useless as a data transfer mechanism. There are also OHCI drivers for DOS available online, even open-source drivers, but of course those would have to be transferred to the system in order to use them.)&lt;/p&gt;&lt;p&gt;At this point what a normal person probably would do is accept the fact that they’re going to have to burn some more CD-Rs, and proceed to get some USB and network drivers onto the machine. But due to being paranoid about running out of CD-Rs, that was an absolutely unacceptable solution to me. I had the OpenBSD disc I used some months ago laying around, so…&lt;/p&gt;&lt;p&gt;Dual-booting FreeDOS and OpenBSD didn’t end up being all that hard. For one, BSD’s partitioning system actually works really well for multibooting. Even though OpenBSD generally uses a whole bunch of partitions, it doesn’t try to create them all directly on the drive. Instead, it creates one “container” partition, and then creates a bunch of OpenBSD-specific partitions within that container, separate from the drive’s usual partitioning scheme. On top of that, the installer is pretty straightforward (once you realize that you need to skip all forms of network setup if you don’t intend to plug the machine into a network), and an OpenBSD installation without an X server or games fits in 3 GB of disk space with a bit of wiggle room to spare. I don’t expect I’ll be able to update this installation without pain, but since all I need it to do is let me move files to and from a USB drive, I don’t need to update it (and won’t be connecting it to a network).&lt;/p&gt;&lt;p&gt;The only really painful part of the installation process was partitioning - every operating system seems to have a radically different idea of how fdisk is supposed to work, and OpenBSD’s idea of fdisk is the most… um… interesting one I’ve seen to date. Rather than working in terms of unallocated space and partition creation, OpenBSD’s fdisk just acts as if all four partitions MBR allows for always exist at all times. You don’t create a partition, you just configure each of the partition slots you’re interested in working with. If you don’t want a partition to exit, you set its type code to “00” (unused). If you do want a partition to exist, you set its type code to whatever’s appropriate for your use case, define a start and end sector, and you’re done. I’m guessing this is &lt;em&gt;probably&lt;/em&gt; a more accurate model of how MBR actually works, but it was nonetheless surprising to me. More surprising is that there don’t seem to be any safeguards to make sure you don’t do something completely ridiculous like define partitions that overlap each other, or put sector 0 as part of a partition. OpenBSD’s fdisk also does not try to guess things like how large you want the partition to be, so you have to calculate everything by hand and double-check your work to keep from making a mess. To be honest, I actually kind of like this system, it was just very unexpected.&lt;/p&gt;&lt;p&gt;After fighting with the partitioner a bit, I made a 3 GB partition at the end of the 40 GB Maxtor drive to install OpenBSD to. The remaining 37 GB would still be dedicated to a FAT32 DOS system. (In retrospect, I wish I had split the drive 50-50 between DOS and OpenBSD so I could play with both, and in all likelihood I’ll probably go back and do that at some point in the future, but this is the setup I have now.) Once that was done, OpenBSD installed just fine…&lt;/p&gt;&lt;p&gt;…and then I realized that the BIOS in this machine doesn’t allow me to specify which hard drive I want to boot from. The boot order settings fail to list the secondary drive anywhere, and there’s no boot menu button.&lt;/p&gt;&lt;p&gt;Thankfully there was a good workaround. Remember the Plop Boot Manager disc I burned near the beginning of this ordeal? Turns out it had no problem recognizing all of the partitions on all of the drives in this system. All I have to do is just leave the Plop CD in the bootable drive, and then I can choose whether i want to boot into FreeDOS or OpenBSD effortlessly.&lt;/p&gt;&lt;p&gt;That pretty much describes where my setup is at so far. I have been able to successfully transfer files between my main work laptop and the FreeDOS system using this OpenBSD “shim”. I haven’t gotten USB working in FreeDOS yet, and I haven’t managed to get either of the network cards to work yet, but the system does work, and I had a lot of fun using “edit” and “fed” to write up a README.TXT for the Bible software project that inspired this whole endeavor. There’s still more to do for setting up the workstation though:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;I really would like to have working USB in FreeDOS. There’s a Panasonic driver floating around the Internet that people claim to have success with, I’ll probably end up using that.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;I should replace the broken optical drive. Then I can have both Plop Boot Manager and the FreeDos 1.4 BonusCD inserted at the same time, which would make life quite a bit easier.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;I’m already regretting only giving OpenBSD 3 GB of space on the secondary drive. I’d like to be able to use it to chat on IRC, which means connecting it to the Internet, which means keeping it up-to-date, so I’ll probably repartition the drive, allocate 20 GB to OpenBSD, and leave 20 GB for DOS. Even that’s probably huge, but we’ll find out. (I don’t intend to connect FreeDOS to the Internet since I’m a bit scared of the security issues of doing that.)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Embarrassingly, I’m using a Chromebook to let me look at Open Watcom’s documentation in a web browser. I should set things up so that I can read the documentation from within DOS itself.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Other than the above points though, the system is working quite well, and I’m happy with it. Hopefully I won’t end up spending so much time setting it up that I never use it for its intended purpose! :P&lt;/p&gt;&lt;div class=&quot;subscription-widget-wrap-editor&quot; data-attrs=&quot;{&amp;quot;url&amp;quot;:&amp;quot;https://arraybolt3.substack.com/subscribe?&amp;quot;,&amp;quot;text&amp;quot;:&amp;quot;Subscribe&amp;quot;,&amp;quot;language&amp;quot;:&amp;quot;en&amp;quot;}&quot; data-component-name=&quot;SubscribeWidgetToDOM&quot;&gt;&lt;div class=&quot;subscription-widget show-subscribe&quot;&gt;&lt;div class=&quot;preamble&quot;&gt;&lt;p class=&quot;cta-caption&quot;&gt;Thanks for reading Arraybolt's Archives! Subscribe for free to receive new posts and support my work.&lt;/p&gt;&lt;/div&gt;&lt;form class=&quot;subscription-widget-subscribe&quot;&gt;&lt;input class=&quot;email-input&quot; name=&quot;email&quot; tabindex=&quot;-1&quot; type=&quot;email&quot; /&gt;&lt;input class=&quot;button primary&quot; type=&quot;submit&quot; value=&quot;Subscribe&quot; /&gt;&lt;div class=&quot;fake-input-wrapper&quot;&gt;&lt;div class=&quot;fake-input&quot;&gt;&lt;/div&gt;&lt;div class=&quot;fake-button&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/form&gt;&lt;/div&gt;&lt;/div&gt;</description>
  1489. <pubDate>Sun, 21 Sep 2025 18:04:21 +0000</pubDate>
  1490.        <enclosure url="https://substackcdn.com/image/fetch/$s_!U9th!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81afb1c6-f320-42fc-97ab-f1de570fde3a_288x288.png" length="0" type="image/jpeg"/>
  1491. </item>
  1492. <item>
  1493. <title>Lubuntu Blog: Lubuntu Questing Beta Released!</title>
  1494. <guid isPermaLink="false">https://lubuntu.me/?p=4154</guid>
  1495. <link>https://lubuntu.me/lubuntu-questing-beta-released/</link>
  1496. <description>Thanks to all the hard work from our contributors, Lubuntu 25.10 Beta has been released. With the codename Questing Quokka, Lubuntu 25.10 will be the 29th release of Lubuntu, the fifteenth release of Lubuntu with LXQt as the default desktop environment. Support lifespan With 25.10 being an interim release, it will follow the standard non-LTS […]</description>
  1497. <pubDate>Thu, 18 Sep 2025 21:42:05 +0000</pubDate>
  1498. </item>
  1499. <item>
  1500. <title>Jonathan Riddell: Adios Chicos, 25 Years of KDE</title>
  1501. <guid isPermaLink="false">https://jriddell.org/?p=1606</guid>
  1502. <link>https://jriddell.org/2025/09/14/adios-chicos-25-years-of-kde/</link>
  1503. <description>&lt;p&gt;It was the turn of the millenium when I got my first computer fresh at university.  Windows seemed uninteresting, it was impossible to work out how it worked or write programs for it.  SuSE Linux 6.2 was much more interesting to try and opened a world of understanding how computers worked and wanting to code on them.  These were the days of the .com boom and I went to big expos in London where they showered you with freebies and IBM competed with SuSE and Red Hat for the biggest stall.  IBM said that Linux had made it on the server and now was going to take over the desktop so I realised that working with KDE would be a good idea.  And as a novice coder it was very perfect for learning Qt and how open development worked and I loved the free software ideals.  Going to the pre-Akademy conference (it was called Kastle then) in Nove Hrady was a great intro to the community in person and in some ways I learnt more about software development in a week there then my years at uni.&lt;/p&gt;
  1504.  
  1505.  
  1506.  
  1507. &lt;p&gt;So clearly this was a good way to make a career.  I dossed around for a year until the Quaker geek collective heard tale of an African Spaceman who was funding a new Linux distro called SSDS (Shuttleworth’s Super Secret Debian Startup) so I got into Debian packaging and made a point that KDE should be involved.  Before long they came knocking and I went to the first Ubuntu conference in Australia.  I spent about ten amazing years brining KDE to Ubuntu or bringing Ubuntu to KDE for what was already called Kubuntu (not my name choice), a successful community project I’m really proud of.  At one point Nokia wanted to use it alongside Plasma Active to sell on a tablet thing along with phones, this could well have taken over the world but y’know, iPhone happened and Kubuntu never found a commercial use after that although it still gets used in big places like Google or the City of Munich or Weta digital (watch those Hobbit DVD extras).  I loved being invited out to Nigeria or India to give talks and spread the world of open software.  Looking back there’s probably a million business cases that would have been possible but I’m not the best at being a future visionary.  Eventually Canonical decided to stop funding it which is fair enough.  &lt;/p&gt;
  1508.  
  1509.  
  1510.  
  1511. &lt;p&gt;But then Blue Systems came along, another nice guy with deep pockets wanting to help and we carried on.  When Canonical decided to kill off lots of community projects we came up with the idea of moving directly into KDE to make KDE neon.  It has always been crazy how open source communities like KDE are reliant on separate companies to take their software out to the world so we wanted to change that, and I like to think we succeeded.  Using CI systems we could create a much more manageable setup.  Still the system was never as resiliant as it should have been and several times KDE neon ended up shipping a duff update which will have been very painful for users.  We had three people working full time on it at the start but before long it was just me and a volunteer and the quality suffered as a result.&lt;/p&gt;
  1512.  
  1513.  
  1514.  
  1515. &lt;p&gt;Last winter I drove to the Blue Systems schoße for a routine conference and was organising people to give talks when the guy who pays us started off by saying he was dying and the company would be shutting down.  Which was very sad but it makes sense to end it on a high.  After years of having no business modal and not knowing what the aims of the company were, which caused several people to genuinely go mad, we finally had a business model of sorts with Valve paying us to make Plasma up to the standards needed to ship it as Desktop Scope on the Valve Steam Deck games console.  Nate had been given advanced notice of the company shutting down and had already started another company, Tech Paladin, to take on the business.  Shouldn’t this be run as a cooperative we wondered?  No that was too complex he said.  The next day I ended up at a funeral for some German accountants and when I came back there had been some more discussion and we watched a video about Igalia who make the other operating system for Valve.  They are a cooperative socialist paradise and Nate said he’d look into doing that instead of the setup where he had full control and all the profit.  It was clear there was to be no other discussion on the matter of our future.&lt;/p&gt;
  1516.  
  1517.  
  1518.  
  1519. &lt;p&gt;A few weeks later we had an online meeting where I proposed a useful agenda but was ignored, instead Nate gave his updated plan for a business which was to give Dave a slice of the profit and otherwise he’d keep all the profit and all the control.  So I gave my proposal I’d been working on for a company with equal ownership, equal profit, a management structure and workers rights.  A couple weeks later we had anther video call but Nate called me first and told me I’d be excluded from it.  No explanation was given beyond I had “made some comments and would not be happy”.  If someone is telling you what your emotions that is when controlling behaviour starts to become abusive.  And thus ended my 25 years with KDE.&lt;/p&gt;
  1520.  
  1521.  
  1522.  
  1523. &lt;p&gt;And what of my colleagues?  Surely they wouldn’t want a setup where they have no control over their professional life and all their profit goes to one person?  Well dunno, they’ve stopped speaking to me.  Nothing.  Silence.  Nil.  Not so much as a “cheereo”, nor “sorry we chose the option were you got excluded” and certainly no explanation.  From people who I have worked with for some twenty years in some cases that hurts.  I don’t know why they stopped talking to me, I can only speculate and I don’t want to do that.&lt;/p&gt;
  1524.  
  1525.  
  1526.  
  1527. &lt;p&gt;We never had workers rights at Blue Systems, we were all on self employment contracts.  This will continue at Tech Paladin.  It is illegal but unenforceable when done on an international setup.  But employment rights are not a luxury you can chose to do without if you enjoy your job and want some more flexibility in your work day.  They are fundamental and life altering rights that change people’s lives as I discovered when my adopted children were taken away from me.  Nobody should be doing business with or taking money from Tech Paladin else be party to illegal workers rights abuses.&lt;/p&gt;
  1528.  
  1529.  
  1530.  
  1531. &lt;p&gt;Then I started to get sad, being cut off from my life for the last 25 years was too much for me.  All things come to an end and I’ve seen plenty people had to leave KDE because the money ran out or maybe they had a disagreement with someone in the project, but never a profiteering control struggle like this.  I struggled to get out of bed on some days.  I’ve given my life to KDE, I’ve seen it gone from a sure fire project to take over the world to being one open desktop project in a world of many to seeing the revival in recent years where we can honestly say we make some of the best software out there.  I like to think I’ve been part of keeping it alive, progressing, relevant and at the forefront of commercial, government and community usage.  It’s been an amazing ride full of opportunities and adventures the likes of which I’m sure my peers from my university course have never had.&lt;/p&gt;
  1532.  
  1533.  
  1534.  
  1535. &lt;p&gt;But in the end I lost my friends, my colleagues, my job, my career and my family.  What’s a spod who just tried to do the right thing for society to do?  Dunno.  For now, if you want me, you can find me surfing the endless wave whenever the sun sets over my digital nomad coliving paddleshack at the end of the world.&lt;/p&gt;
  1536.  
  1537.  
  1538.  
  1539. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=oLEwUpT5DUc&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1610&quot; height=&quot;859&quot; src=&quot;https://jriddell.org/wp-content/uploads/2025/09/image-1024x859.png&quot; width=&quot;1024&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=oLEwUpT5DUc&quot;&gt;Sunset surfs at the digital nomad coliving paddleshack at the end of the world&lt;/a&gt;&lt;/figure&gt;</description>
  1540. <pubDate>Sun, 14 Sep 2025 20:56:35 +0000</pubDate>
  1541. </item>
  1542. <item>
  1543. <title>Xubuntu: Guide Terbaru Slot Online, Versi Demo Tanpa Deposit, serta Platform Slot Online Gacor Versi Update</title>
  1544. <guid isPermaLink="false">https://xubuntu.org/?p=5699</guid>
  1545. <link>https://xubuntu.org/news/guide-terbaru-slot-online-versi-demo-tanpa-deposit-serta-platform-slot-online-gacor-versi-update/</link>
  1546. <description>&lt;h1&gt;Panduan Asik Slot Online 2025&lt;/h1&gt;
  1547. &lt;p&gt;Saat ini, &lt;a href=&quot;https://emirategate.com/&quot;&gt;demo slot pragmatic&lt;/a&gt; semakin booming di para pecinta hiburan. Ada banyak alasan yang bikin game slot jadi favorit, mulai dari praktis dimainkan, koleksi slot bejibun, hingga hadiah besar yang bikin penasaran. Gak heran kalau slot gacor selalu jadi buruan utama bagi pemain baru maupun pemain pro.&lt;/p&gt;
  1548. &lt;h2&gt;Mengenal Game Slot&lt;/h2&gt;
  1549. &lt;p&gt;Permainan slot online adalah bentuk digital dari mesin slot klasik yang dulunya cuma ada di rumah judi. Lewat internet, setiap orang bisa menikmati slot online hanya dengan laptop mereka. Inilah alasan game slot menjadi tren, karena gampang dimengerti, fleksibel, serta bikin nagih.&lt;/p&gt;
  1550. &lt;p&gt;Daya tarik slot online juga ada di visual kece, soundtrack epik, dan koleksi tema unik. Dari retro vibes sampai slot modern, semua ada. Bahkan banyak developer game bikin slot bertema anime. Jadi, user bisa tentuin game favorit dengan bebas.&lt;/p&gt;
  1551. &lt;h2&gt;Manfaat Slot Demo&lt;/h2&gt;
  1552. &lt;p&gt;Mode gratis berguna banget buat pemula yang baru kenal slot. Dengan mode ini, pemain bisa mengetes mekanisme slot tanpa resiko kehilangan saldo. Mereka juga bisa belajar fitur scatter. Bahkan player berpengalaman sering menggunakan demo slot untuk uji RTP sebelum main sungguhan.&lt;/p&gt;
  1553. &lt;p&gt;Kesimpulannya, slot demo adalah alat belajar yang bikin nyaman, bukan hanya untuk player baru tapi juga user senior. Dengan begitu, saat masuk ke slot online, mereka lebih paham.&lt;/p&gt;
  1554. &lt;h2&gt;Fenomena Slot Gacor&lt;/h2&gt;
  1555. &lt;p&gt;Di kalangan penggemar slot, istilah slot hoki jadi bahan obrolan. Banyak yang yakin kalau ada periode spesial di mana slot kasih big win. Walaupun hasilnya RNG, kemenangan besar bikin pemain makin percaya ada slot gacor. Itulah kenapa akses slot gacor selalu heboh pemain.&lt;/p&gt;
  1556. &lt;h2&gt;Tips Cari Situs Slot Aman&lt;/h2&gt;
  1557. &lt;p&gt;Platform permainan slot ada banyak banget sekarang, tapi gak semuanya aman. Makanya pemain wajib cermat sebelum main. Beberapa hal penting yang patut diperhatikan antara lain:&lt;/p&gt;
  1558. &lt;ul&gt;
  1559. &lt;li&gt;Proteksi data biar informasi pribadi tetap terjaga.&lt;/li&gt;
  1560. &lt;li&gt;Support 24 jam yang cepat tanggap buat bantu masalah pemain.&lt;/li&gt;
  1561. &lt;li&gt;Review positif supaya user lebih percaya diri saat main.&lt;/li&gt;
  1562. &lt;li&gt;Transaksi lancar agar gak ribet untuk semua pemain.&lt;/li&gt;
  1563. &lt;/ul&gt;
  1564. &lt;h2&gt;Tren Toto Slot&lt;/h2&gt;
  1565. &lt;p&gt;Game toto belakangan makin naik daun. Fitur inovatif dari jenis ini ada di bonus spesial yang seru. Berbeda dengan slot klasik, toto slot sering ngasih free spin, bikin user merasa semakin enjoy tiap kali nyoba.&lt;/p&gt;
  1566. &lt;h3&gt;Panduan Bermain Slot Santai&lt;/h3&gt;
  1567. &lt;p&gt;Supaya main makin menyenangkan, ada beberapa trik yang bisa diterapkan:&lt;/p&gt;
  1568. &lt;ul&gt;
  1569. &lt;li&gt;Mulai dari slot demo biar ngerti cara main dulu.&lt;/li&gt;
  1570. &lt;li&gt;Kontrol budget dengan hati-hati, jangan terlalu napsu.&lt;/li&gt;
  1571. &lt;li&gt;Jangan lupa, permainan slot itu bergantung hoki, jadi fokus ke hiburan daripada ngejar profit.&lt;/li&gt;
  1572. &lt;/ul&gt;
  1573. &lt;h2&gt;Penutup&lt;/h2&gt;
  1574. &lt;p&gt;Game slot digital makin seru dengan teknologi baru. Dari demo slot untuk latihan, slot mudah jackpot yang banyak dicari, sampai toto slot yang lagi trend, semua tersedia buat pengguna. Yang penting, mainlah santai, pilih situs aman, dan selalu sadari kalau keseruan lebih utama daripada cari profit.&lt;/p&gt;</description>
  1575. <pubDate>Wed, 10 Sep 2025 17:39:35 +0000</pubDate>
  1576. </item>
  1577. <item>
  1578. <title>Andrea Corbellini: Testing crash recovery features in a CI environment</title>
  1579. <guid isPermaLink="false">tag:andrea.corbellini.name,2025-09-09:/2025/09/09/testing-crash-recovery-features-in-ci/</guid>
  1580. <link>https://andrea.corbellini.name/2025/09/09/testing-crash-recovery-features-in-ci/</link>
  1581. <description>&lt;p&gt;About two years ago I wrote a Rust crate to fulfill this promise:&lt;/p&gt;
  1582. &lt;blockquote&gt;
  1583. &lt;p&gt;If a crash occurs while updating a file, the file either contains the old
  1584. contents, or the new contents, nothing in between.&lt;/p&gt;
  1585. &lt;/blockquote&gt;
  1586. &lt;p&gt;This crate essentially solves the following problem: when you update a file,
  1587. generally you open it, truncate it, write to it block-by-block, and eventually
  1588. close it. The problem with this process is that if a crash occurs at any point
  1589. during this process (the program segfaults, the kernel panics, the machine
  1590. loses power, …), your file will be left in an intermediate state where the
  1591. old contents are completely lost, and the new contents are only partially
  1592. written (if at all). My crate solves this problem by making file updates &lt;em&gt;atomic&lt;/em&gt;.&lt;/p&gt;
  1593. &lt;p&gt;This crate is publicly available as &lt;a href=&quot;https://crates.io/crates/atomic-write-file&quot;&gt;atomic-write-file&lt;/a&gt; and you can read its
  1594. description for more details (sorry, I’m very bad at naming things).&lt;/p&gt;
  1595. &lt;p&gt;The way the crate works is simple:&lt;/p&gt;
  1596. &lt;ol&gt;
  1597. &lt;li&gt;Instead of opening the &lt;em&gt;target&lt;/em&gt; file directly, the crate opens a &lt;em&gt;temporary&lt;/em&gt;
  1598.   file.&lt;/li&gt;
  1599. &lt;li&gt;You write to the temporary file.&lt;/li&gt;
  1600. &lt;li&gt;Once all changes are in, the temporary file contents are synced to the
  1601.   storage, and it is atomically renamed so that it replaces the target file.&lt;/li&gt;
  1602. &lt;/ol&gt;
  1603. &lt;p&gt;This is not by any chance a new technique that I invented, and it’s a very
  1604. common strategy to solve the problem. This technique guarantees that if a crash
  1605. occurs at or before step 3, then the file will have the old contents,
  1606. unchanged. If a crash occurs after step 3, then the file will have the new
  1607. contents.&lt;/p&gt;
  1608. &lt;p&gt;There’s a small caveat with this technique: if a crash occurs between steps 1
  1609. and 3, then the crate will leave behind a temporary file that occupies some
  1610. space on the storage device with no purpose.&lt;/p&gt;
  1611. &lt;p&gt;This is where Linux anonymous temporary files come into play: this
  1612. Linux-specific feature allows you to create temporary files that are written on
  1613. the filesystem, but are not given a path in the filesystem. If a crash occurs
  1614. between step 1 and 3, the temporary file will simply be forgotten into
  1615. oblivion.&lt;/p&gt;
  1616. &lt;h1 id=&quot;meet-the-opponent-btrfs&quot;&gt;Meet the opponent: btrfs&lt;/h1&gt;
  1617. &lt;p&gt;Using Linux anonymous temporary files seemed very appealing for
  1618. atomic-write-file to avoid leaving leftovers behind, although I knew that
  1619. they’re not the perfect solution: there’s limited support (they’re supported
  1620. only on Linux, and only on some filesystems), they require the use of Linux
  1621. features that may not be available all the time (the &lt;code&gt;/proc&lt;/code&gt; filesystem), and
  1622. they also have the problem that, sooner or later, they will need to be given a
  1623. name if we want to be able to replace the target file, and this leaves a small
  1624. time window during which we could leave some cruft behind.&lt;/p&gt;
  1625. &lt;p&gt;But none of these are huge problems, and in fact atomic-write-file is able to
  1626. do a best effort attempt at using anonymous temporary files, and reverting to
  1627. regular files if that doesn’t work.&lt;/p&gt;
  1628. &lt;p&gt;One day I was notified about &lt;a href=&quot;https://github.com/andreacorbellini/rust-atomic-write-file/issues/6&quot;&gt;an issue on using my crate on the btrfs file
  1629. system&lt;/a&gt;: after a crash, my crate could break its promise and leave the
  1630. file contents &lt;strong&gt;empty&lt;/strong&gt;. I did some investigation on the issue that &lt;a href=&quot;https://github.com/andreacorbellini/rust-atomic-write-file/issues/6#issuecomment-2048836275&quot;&gt;you can
  1631. read about if you’re interested&lt;/a&gt;, and then fixed it.&lt;/p&gt;
  1632. &lt;p&gt;This problem was specific to btrfs, and I argue that it’s actually caused by a
  1633. btrfs bug, rather than a bug in the crate itself, but nonetheless this issue
  1634. had revealed a critical flaw of my crate: &lt;strong&gt;I did not have any tests to check
  1635. if my crate was fulfilling its promise or not!&lt;/strong&gt;&lt;/p&gt;
  1636. &lt;p&gt;Therefore I decided to create a small test suite for Linux to simulate crashes
  1637. and inspect the contents of files after those crashes occurred on a variety of
  1638. filesystems, which is what this blog post is about. This test suite now runs on
  1639. my laptop and &lt;a href=&quot;https://github.com/andreacorbellini/rust-atomic-write-file/actions/workflows/crash-tests.yml&quot;&gt;on GitHub Actions&lt;/a&gt;, and potentially any
  1640. other CI environment.&lt;/p&gt;
  1641. &lt;h1 id=&quot;testing-strategy&quot;&gt;Testing strategy&lt;/h1&gt;
  1642. &lt;p&gt;Here’s the idea I came up with: I can create a virtual machine, with a virtual
  1643. storage device attached to it, and a filesystem initialized with a file. The
  1644. virtual machine updates the file using atomic-write-file, and then triggers a
  1645. kernel panic. After that, the file is inspected for consistency.&lt;/p&gt;
  1646. &lt;p&gt;So here is how it works in practice: there are 3 main pieces:
  1647. 1. A test binary that is responsible for updating the test file using
  1648.   atomic-write-file.
  1649. 1. An &lt;code&gt;init.sh&lt;/code&gt; script that runs inside the virtual machine.
  1650. 1. The &lt;code&gt;run-tests.sh&lt;/code&gt; script that puts everything together and starts up the
  1651.   virtual machine.&lt;/p&gt;
  1652. &lt;h2 id=&quot;the-test-binary&quot;&gt;The test binary&lt;/h2&gt;
  1653. &lt;p&gt;The test binary that is a &lt;a href=&quot;https://github.com/andreacorbellini/rust-atomic-write-file/blob/master/crash-tests/linux/src/main.rs&quot;&gt;short Rust program&lt;/a&gt; that I can paste here:&lt;/p&gt;
  1654. &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;atomic_write_file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;AtomicWriteFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  1655. &lt;span class=&quot;k&quot;&gt;use&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;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;io&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Write&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  1656.  
  1657. &lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  1658. &lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;file&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;AtomicWriteFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;/test/file&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;open failed&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  1659. &lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;write_all&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;b&quot;hello&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;write failed&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  1660. &lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;commit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;commit failed&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  1661. &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
  1662. &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  1663.  
  1664. &lt;p&gt;Nothing special to see here: this is the minimal code required to use atomic-write-file.&lt;/p&gt;
  1665. &lt;h2 id=&quot;the-initsh-script&quot;&gt;The init.sh script&lt;/h2&gt;
  1666. &lt;p&gt;&lt;a href=&quot;https://github.com/andreacorbellini/rust-atomic-write-file/blob/master/crash-tests/linux/init.sh&quot;&gt;The &lt;code&gt;init.sh&lt;/code&gt; script&lt;/a&gt; is more interesting: this script in fact is meant to run
  1667. &lt;em&gt;twice&lt;/em&gt;. The first time it runs, &lt;code&gt;init.sh&lt;/code&gt; will run the test binary above and
  1668. trigger the kernel panic. The second time, it will read the test file contents
  1669. and report them back &lt;code&gt;run-tests.sh&lt;/code&gt; script for inspection.&lt;/p&gt;
  1670. &lt;p&gt;Let’s take a closer look at what it does: first, it mounts the &lt;code&gt;/proc&lt;/code&gt; and
  1671. &lt;code&gt;/sys&lt;/code&gt; virtual filesystems. These are needed for some basic system functions,
  1672. and also to enable the Linux anonymous temporary file feature.&lt;/p&gt;
  1673. &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mount&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-t&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;proc&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;none&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/proc
  1674. mount&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-t&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;sysfs&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;none&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/sys
  1675. &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  1676.  
  1677. &lt;p&gt;Then it mounts the filesystem containing the test file. Before it can do that,
  1678. however, it needs to load the correct kernel module for the filesystem. Nothing
  1679. too fancy here: the filesystem type is simply specified on the kernel command
  1680. line (read through &lt;code&gt;/proc/cmdline&lt;/code&gt;):&lt;/p&gt;
  1681. &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;fstype&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;grep&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-Eo&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'test.fs=\w+'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/proc/cmdline&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;cut&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-d&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-f2&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;
  1682. modprobe&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$fstype&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;||&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;true&lt;/span&gt;
  1683. mount&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-t&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$fstype&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/dev/sdb&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/test
  1684. &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  1685.  
  1686. &lt;p&gt;Then, if this script is run for the first time, it will run the test executable and quit:&lt;/p&gt;
  1687. &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Running test binary'&lt;/span&gt;
  1688. atomic-write-file-test
  1689. &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  1690.  
  1691. &lt;p&gt;&lt;code&gt;init.sh&lt;/code&gt; (as the name suggests) is run as the init script of the virtual
  1692. machine. In Linux, if the init script quits without invoking the proper
  1693. shutdown sequence, the kernel will panic. So we don’t actually need to do
  1694. anything special to trigger a panic. I could have inserted a &lt;code&gt;echo c &amp;gt;
  1695. /proc/sysrq-trigger&lt;/code&gt; line to make it more explicit, but then I figured that
  1696. having that line wouldn’t be nice for people who want to test the script on
  1697. their system.&lt;/p&gt;
  1698. &lt;p&gt;You might ask: how does &lt;code&gt;init.sh&lt;/code&gt; know if it’s the first time it gets called or
  1699. the second? Again, nothing fancy here: &lt;code&gt;run-tests.sh&lt;/code&gt; gives that hint using a
  1700. kernel command line argument:&lt;/p&gt;
  1701. &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;grep&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-q&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;test.verify&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/proc/cmdline&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;then&lt;/span&gt;
  1702. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# ...&lt;/span&gt;
  1703. &lt;span class=&quot;k&quot;&gt;fi&lt;/span&gt;
  1704. &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  1705.  
  1706. &lt;p&gt;If &lt;code&gt;test.verify&lt;/code&gt; is specified on &lt;code&gt;/proc/cmdline&lt;/code&gt;, then it means this is the
  1707. second time this script is run. In that case, the file contents are just
  1708. printed on the console:&lt;/p&gt;
  1709. &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;grep&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-q&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;test.verify&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/proc/cmdline&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;then&lt;/span&gt;
  1710. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Verifying test file contents'&lt;/span&gt;
  1711. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'-----'&lt;/span&gt;
  1712. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;xxd&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/test/file
  1713. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'-----'&lt;/span&gt;
  1714. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;poweroff&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-f
  1715. &lt;span class=&quot;k&quot;&gt;fi&lt;/span&gt;
  1716. &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  1717.  
  1718. &lt;p&gt;This uses &lt;code&gt;xxd&lt;/code&gt; so in case there are garbled characters on screen, we can
  1719. comfortably analyze the output and figure out what happened. At the end, the
  1720. system is more gracefully shut down using &lt;code&gt;poweroff&lt;/code&gt; to avoid another kernel
  1721. panic (this is not really necessary).&lt;/p&gt;
  1722. &lt;h1 id=&quot;the-run-testssh-script&quot;&gt;The run-tests.sh script&lt;/h1&gt;
  1723. &lt;p&gt;And then there’s &lt;a href=&quot;https://github.com/andreacorbellini/rust-atomic-write-file/blob/master/crash-tests/linux/run-test.sh&quot;&gt;the &lt;code&gt;run-tests.sh&lt;/code&gt; script that crates the virtual storage,
  1724. launches the virtual machine, and inspects the file contents&lt;/a&gt;.
  1725. This is where most the complexity is, so let’s go step-by-step (the code below
  1726. has been simplified from the original for readability):&lt;/p&gt;
  1727. &lt;p&gt;The first thing it does is compiling the test binary above. The virtual machine
  1728. runs in a very barebone environment, so I used static linking to avoid having
  1729. to copy additional libraries like &lt;code&gt;libc&lt;/code&gt;:&lt;/p&gt;
  1730. &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;uname&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-m&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;-unknown-linux-gnu
  1731. &lt;span class=&quot;nv&quot;&gt;RUSTFLAGS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'-C target-feature=+crt-static'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;cargo&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;build&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--release&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--features&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$cargo_features&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--target&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$target&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
  1732. &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  1733.  
  1734. &lt;p&gt;Then &lt;code&gt;run-tests.sh&lt;/code&gt; creates a minimal &lt;a href=&quot;https://en.wikipedia.org/wiki/Initial_ramdisk&quot;&gt;initramfs&lt;/a&gt; for the virtual machine. The
  1735. initramfs is a filesystem that gets mounted by Linux early at boot. It’s
  1736. generally used by Linux distributions to load the main operating system, but in
  1737. my case the initramfs contains everything needed for the test. In particular,
  1738. it contains:&lt;/p&gt;
  1739. &lt;ul&gt;
  1740. &lt;li&gt;The test binary.&lt;/li&gt;
  1741. &lt;li&gt;The &lt;code&gt;init.sh&lt;/code&gt; script.&lt;/li&gt;
  1742. &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/BusyBox&quot;&gt;BusyBox&lt;/a&gt;, to get the needed utilities like &lt;code&gt;xxd&lt;/code&gt; and &lt;code&gt;poweroff&lt;/code&gt;.&lt;/li&gt;
  1743. &lt;li&gt;The kernel modules to mount filesystems and their dependencies.&lt;/li&gt;
  1744. &lt;/ul&gt;
  1745. &lt;p&gt;The first 3 items are easy to set up:&lt;/p&gt;
  1746. &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cp&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;init.sh&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-T&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$initramfs_build_dir&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/sbin/init&quot;&lt;/span&gt;
  1747. cp&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;atomic-write-file-test&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-t&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$initramfs_build_dir&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/bin&quot;&lt;/span&gt;
  1748. cp&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;which&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;busybox&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-t&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$initramfs_build_dir&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/bin&quot;&lt;/span&gt;
  1749. &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$busybox&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--install&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-s&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$initramfs_build_dir&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/bin&quot;&lt;/span&gt;
  1750. &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  1751.  
  1752. &lt;p&gt;The kernel modules are a bit more complicated. First of all: where can we get
  1753. them from? Ideally, I would have liked to download them from some minimal Linux
  1754. distribution, but this turned out to be more complicated than expected. In the
  1755. end, I decided to just steal them from the host operating system:&lt;/p&gt;
  1756. &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;modules&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/usr/lib/modules/&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;uname&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-r&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;
  1757. cp&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-a&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$modules&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-t&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$initramfs_build_dir&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/lib/modules&quot;&lt;/span&gt;
  1758.  
  1759. &lt;span class=&quot;k&quot;&gt;while&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-r&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;mod_path&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
  1760. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$mod_path&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;*.ko.gz&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]]&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;then&lt;/span&gt;
  1761. &lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;gunzip&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$mod_path&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-o&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$mod_path&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.uncompressed&quot;&lt;/span&gt;
  1762. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;elif&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;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$mod_path&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;*.ko.xz&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]]&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;then&lt;/span&gt;
  1763. &lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;unxz&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$mod_path&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-o&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$mod_path&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.uncompressed&quot;&lt;/span&gt;
  1764. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;elif&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;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$mod_path&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;*.ko.zst&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]]&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;then&lt;/span&gt;
  1765. &lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;unzstd&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$mod_path&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-o&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$mod_path&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.uncompressed&quot;&lt;/span&gt;
  1766. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;
  1767. &lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;continue&lt;/span&gt;
  1768. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;fi&lt;/span&gt;
  1769. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;mv&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$mod_path&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.uncompressed&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$mod_path&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
  1770. &lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;modprobe&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--dirname&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$initramfs_build_dir&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--show-depends&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$filesystem_type&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;grep&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;^insmod&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;cut&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-d&lt;span class=&quot;s1&quot;&gt;' '&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-f2&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  1771. &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  1772.  
  1773. &lt;p&gt;What this does is copying all the module files from the host, getting all the
  1774. dependencies for the filesystem module using &lt;code&gt;modprobe&lt;/code&gt;, and then uncompressing
  1775. those modules if they’re compressed (I found this much easier than adding
  1776. compression support in the virtual machine). An alternative approach would be
  1777. to simply decompress all the modules, but that’s much slower.&lt;/p&gt;
  1778. &lt;p&gt;Once everything has been copied over and uncompressed, the initramfs is
  1779. created:&lt;/p&gt;
  1780. &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;initramfs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;rootfs.img
  1781. mksquashfs&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$initramfs_build_dir&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$initramfs&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
  1782. &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  1783.  
  1784. &lt;p&gt;Now it’s time to create the virtual storage device with the filesystem, which
  1785. is a trivial task:&lt;/p&gt;
  1786. &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;testfs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;testfs.img
  1787. dd&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/dev/zero&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$testfs&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;bs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;1M&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;300&lt;/span&gt;
  1788. &lt;span class=&quot;s2&quot;&gt;&quot;mkfs.&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$filesystem_type&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$testfs&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
  1789. &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  1790.  
  1791. &lt;p&gt;Finally, we can start our VM using &lt;a href=&quot;https://en.wikipedia.org/wiki/QEMU&quot;&gt;QEMU&lt;/a&gt;:&lt;/p&gt;
  1792. &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;qemu&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;qemu-system-&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;uname&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-m&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;
  1793. &lt;span class=&quot;nv&quot;&gt;kernel&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/boot/vmlinuz-&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;uname&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-r&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;
  1794.  
  1795. &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$qemu&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  1796. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;-kernel&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$kernel&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  1797. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;-append&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;root=/dev/sda ro panic=-1 console=ttyS0 quiet test.fs=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$filesystem_type&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  1798. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;-drive&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;index=0,media=disk,format=raw,file=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$initramfs&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  1799. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;-drive&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;index=1,media=disk,format=raw,file=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$testfs&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  1800. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;-no-reboot&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  1801. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;-nographic
  1802. &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  1803.  
  1804. &lt;p&gt;Again we’re stealing the kernel from the host operating system, which is also
  1805. where the kernel modules come from. The &lt;code&gt;drive&lt;/code&gt; with &lt;code&gt;index=0&lt;/code&gt; is the initramfs
  1806. and will be visible as &lt;code&gt;/dev/sda&lt;/code&gt; in the guest; the other drive with &lt;code&gt;index=1&lt;/code&gt;
  1807. is our test storage and will be visible as &lt;code&gt;/dev/sdb&lt;/code&gt;.&lt;/p&gt;
  1808. &lt;p&gt;&lt;code&gt;root=/dev/sda&lt;/code&gt; tells the kernel to boot from our initramfs image. &lt;code&gt;panic=-1&lt;/code&gt;
  1809. tells the kernel not to reboot in case of a panic (&lt;code&gt;panic=N&lt;/code&gt; specifies the
  1810. number of seconds to wait before rebooting in case of kernel panic; specifying
  1811. a negative value blocks that behavior). &lt;code&gt;console=ttyS0&lt;/code&gt; allows us to capture
  1812. the output printed by the init script. &lt;code&gt;test.fs=...&lt;/code&gt; is the option that
  1813. &lt;code&gt;init.sh&lt;/code&gt; is going to look for to understand what filesystem type to use.&lt;/p&gt;
  1814. &lt;p&gt;Once that runs, the virtual machine is expected to do its job and crash with a
  1815. kernel panic. We then need to restart it to verify the file contents. The QEMU
  1816. command is exactly the same except for the additional &lt;code&gt;test.verify&lt;/code&gt; option:&lt;/p&gt;
  1817. &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;output.txt
  1818.  
  1819. &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$qemu&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  1820. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;-kernel&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$kernel&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  1821. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;-append&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;root=/dev/sda ro panic=-1 console=ttyS0 quiet test.fs=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$filesystem_type&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; test.verify&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  1822. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;-drive&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;index=0,media=disk,format=raw,file=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$initramfs&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  1823. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;-drive&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;index=1,media=disk,format=raw,file=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$testfs&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  1824. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;-no-reboot&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  1825. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;-nographic&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  1826. &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;tee&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$output&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
  1827. &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  1828.  
  1829. &lt;p&gt;The output from this command is captured in a file that can be analyzed. If you
  1830. remember how &lt;code&gt;init.sh&lt;/code&gt; is written, you might have noticed that it writes the
  1831. test file contents between two markers:&lt;/p&gt;
  1832. &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'-----'&lt;/span&gt;
  1833. xxd&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/test/file
  1834. &lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'-----'&lt;/span&gt;
  1835. &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  1836.  
  1837. &lt;p&gt;So what we have to do to verify the contents of the file is simply look for
  1838. those two &lt;code&gt;-----&lt;/code&gt; markers, get the content in between, and parse it through
  1839. &lt;code&gt;xxd -r&lt;/code&gt;:&lt;/p&gt;
  1840. &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;sed&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-n&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'/-----/, /-----/p'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$output&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;xxd&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-r&lt;span class=&quot;k&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;hello&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]]&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;then&lt;/span&gt;
  1841. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Success&quot;&lt;/span&gt;
  1842. &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;
  1843. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Failure&quot;&lt;/span&gt;
  1844. &lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;exit&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
  1845. &lt;span class=&quot;k&quot;&gt;fi&lt;/span&gt;
  1846. &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  1847.  
  1848. &lt;p&gt;And that’s it!&lt;/p&gt;
  1849. &lt;h1 id=&quot;running-in-github-actions&quot;&gt;Running in GitHub Actions&lt;/h1&gt;
  1850. &lt;p&gt;The next step for me was to set up some automation to make sure that my test
  1851. script was run whenever I made any change to the crate. Because my project was
  1852. already hosted on GitHub, I decided to go with GitHub Actions. I was a bit
  1853. worried that I would have had to struggle to make it work because my script
  1854. works by &lt;em&gt;stealing&lt;/em&gt; the kernel from the host, and I thought that the GitHub
  1855. runners could have some protections in place to prevent me from reading the
  1856. kernel. To my surprise, there were no such restrictions. In fact, I did not
  1857. have to modify a single line of code to make my tests work in GitHub Actions:
  1858. check out the &lt;a href=&quot;https://github.com/andreacorbellini/rust-atomic-write-file/blob/master/.github/workflows/crash-tests.yml&quot;&gt;workflow file&lt;/a&gt; if you’re curious.&lt;/p&gt;
  1859. &lt;h1 id=&quot;result&quot;&gt;Result&lt;/h1&gt;
  1860. &lt;p&gt;In the end, the test suite was able to reproduce the issue with btrfs and
  1861. anonymous temporary files, as well as show that the fix was working as
  1862. intended. This is what it looks like (output in the screenshot was trimmed down
  1863. a bit):&lt;/p&gt;
  1864. &lt;figure&gt;
  1865.  &lt;img alt=&quot;Output showing a failure from the test suite&quot; src=&quot;https://andrea.corbellini.name/images/crash-tests-failure.png&quot; /&gt;
  1866.  Output from the &lt;code&gt;run-test.sh&lt;/code&gt; script &lt;em&gt;before&lt;/em&gt; applying the fix, showing a failure.
  1867. &lt;/figure&gt;
  1868.  
  1869. &lt;figure&gt;
  1870.  &lt;img alt=&quot;Output showing a success from the test suite&quot; src=&quot;https://andrea.corbellini.name/images/crash-tests-success.png&quot; /&gt;
  1871.  Output from the &lt;code&gt;run-test.sh&lt;/code&gt; script &lt;em&gt;after&lt;/em&gt; applying the fix, showing a success.
  1872. &lt;/figure&gt;
  1873.  
  1874. &lt;h1 id=&quot;future&quot;&gt;Future&lt;/h1&gt;
  1875. &lt;p&gt;I’m pretty satisfied with the general approach of running in a virtual machine
  1876. and simulating a crash, but the implementation has a huge limitation: because
  1877. it &lt;em&gt;steals&lt;/em&gt; the kernel from the host, it cannot simulate crashes on other
  1878. kernels, operating systems, or platforms.&lt;/p&gt;
  1879. &lt;p&gt;I think in the future I’m going to take a look at &lt;a href=&quot;https://github.com/cross-rs/cross&quot;&gt;cross-rs&lt;/a&gt;, a cross-platform
  1880. tool for Rust crates. Cross-rs works kinda in a similar way as my test suite,
  1881. in that it uses QEMU emulation to run tests. Maybe I can reuse their QEMU
  1882. images and tweak them to run my crash tests. If that is feasible, then I will
  1883. be able to extend my test suite to all major platforms and operating systems.&lt;/p&gt;</description>
  1884. <pubDate>Tue, 09 Sep 2025 00:05:00 +0000</pubDate>
  1885. </item>
  1886. <item>
  1887. <title>Colin Watson: Free software activity in August 2025</title>
  1888. <guid isPermaLink="false">tag:www.chiark.greenend.org.uk,2025-09-03:/~cjwatson/blog/activity-2025-08.html</guid>
  1889. <link>https://www.chiark.greenend.org.uk/~cjwatson/blog/activity-2025-08.html</link>
  1890. <description>&lt;p&gt;About 95% of my Debian contributions this month were
  1891. &lt;a href=&quot;https://www.freexian.com/about/debian-contributions/&quot;&gt;sponsored&lt;/a&gt; by Freexian.&lt;/p&gt;
  1892. &lt;p&gt;You can also support my work directly via
  1893. &lt;a href=&quot;https://liberapay.com/cjwatson&quot;&gt;Liberapay&lt;/a&gt; or &lt;a href=&quot;https://github.com/sponsors/cjwatson&quot;&gt;GitHub
  1894. Sponsors&lt;/a&gt;.&lt;/p&gt;
  1895. &lt;h2&gt;Python team&lt;/h2&gt;
  1896. &lt;p&gt;forky is
  1897. &lt;a href=&quot;https://lists.debian.org/debian-devel-announce/2025/08/msg00002.html&quot;&gt;open&lt;/a&gt;!
  1898. As a result I’m starting to think about the &lt;a href=&quot;https://peps.python.org/pep-0745/&quot;&gt;upcoming Python
  1899. 3.14&lt;/a&gt;.  At some point we’ll doubtless do
  1900. a full test rebuild, but in advance of that I concluded that one of the most
  1901. useful things I could do would be to work on our &lt;a href=&quot;https://udd.debian.org/dmd/?email1=team%2Bpython%40tracker.debian.org&quot;&gt;very long list of packages
  1902. with new upstream
  1903. versions&lt;/a&gt;.
  1904. Of course there’s no real chance of this ever becoming empty since upstream
  1905. maintainers aren’t going to stop work for that long, but there are a lot of
  1906. packages there where we’re quite a long way out of date, and many of those
  1907. include fixes that we’ll need for 3.14, either directly or by fixing
  1908. interactions with new versions of other packages that in turn will need to
  1909. be fixed.  We can backport changes when we need to, but more often than not
  1910. the most efficient way to do things is just to keep up to date.&lt;/p&gt;
  1911. &lt;p&gt;So, I upgraded these packages to new upstream versions (deep breath):&lt;/p&gt;
  1912. &lt;ul&gt;
  1913. &lt;li&gt;aioftp&lt;/li&gt;
  1914. &lt;li&gt;aiosignal (building on &lt;a href=&quot;https://salsa.debian.org/python-team/packages/aiosignal/-/merge_requests/1&quot;&gt;work by
  1915.  IanLucca&lt;/a&gt;)&lt;/li&gt;
  1916. &lt;li&gt;audioop-lts&lt;/li&gt;
  1917. &lt;li&gt;celery&lt;/li&gt;
  1918. &lt;li&gt;djangorestframework&lt;/li&gt;
  1919. &lt;li&gt;djoser&lt;/li&gt;
  1920. &lt;li&gt;fpylll&lt;/li&gt;
  1921. &lt;li&gt;frozenlist&lt;/li&gt;
  1922. &lt;li&gt;git-repo-updater&lt;/li&gt;
  1923. &lt;li&gt;ipykernel&lt;/li&gt;
  1924. &lt;li&gt;klepto&lt;/li&gt;
  1925. &lt;li&gt;kombu&lt;/li&gt;
  1926. &lt;li&gt;multipart&lt;/li&gt;
  1927. &lt;li&gt;netmiko (sponsoring &lt;a href=&quot;https://salsa.debian.org/python-team/packages/netmiko/-/merge_requests/1&quot;&gt;work by Eduardo
  1928.  Silva&lt;/a&gt;;
  1929.  &lt;a href=&quot;https://github.com/ktbyers/netmiko/pull/3722&quot;&gt;contributed supporting fix
  1930.  upstream&lt;/a&gt;)&lt;/li&gt;
  1931. &lt;li&gt;pathos&lt;/li&gt;
  1932. &lt;li&gt;ppft&lt;/li&gt;
  1933. &lt;li&gt;pydantic&lt;/li&gt;
  1934. &lt;li&gt;pydantic-core&lt;/li&gt;
  1935. &lt;li&gt;pydantic-settings&lt;/li&gt;
  1936. &lt;li&gt;pylsqpack&lt;/li&gt;
  1937. &lt;li&gt;pymssql&lt;/li&gt;
  1938. &lt;li&gt;pytest-mock&lt;/li&gt;
  1939. &lt;li&gt;pytest-pretty&lt;/li&gt;
  1940. &lt;li&gt;pytest-repeat&lt;/li&gt;
  1941. &lt;li&gt;pytest-rerunfailures&lt;/li&gt;
  1942. &lt;li&gt;python-a2wsgi&lt;/li&gt;
  1943. &lt;li&gt;python-apptools (sponsoring &lt;a href=&quot;https://salsa.debian.org/python-team/packages/python-apptools/-/merge_requests/6&quot;&gt;work by Kathlyn Lara
  1944.  Murussi&lt;/a&gt;)&lt;/li&gt;
  1945. &lt;li&gt;python-asgiref&lt;/li&gt;
  1946. &lt;li&gt;python-asyncssh&lt;/li&gt;
  1947. &lt;li&gt;python-bitarray&lt;/li&gt;
  1948. &lt;li&gt;python-bitstring&lt;/li&gt;
  1949. &lt;li&gt;python-bytecode&lt;/li&gt;
  1950. &lt;li&gt;python-channels-redis&lt;/li&gt;
  1951. &lt;li&gt;python-charset-normalizer&lt;/li&gt;
  1952. &lt;li&gt;python-daphne&lt;/li&gt;
  1953. &lt;li&gt;python-django-analytical&lt;/li&gt;
  1954. &lt;li&gt;python-django-guid&lt;/li&gt;
  1955. &lt;li&gt;python-django-health-check&lt;/li&gt;
  1956. &lt;li&gt;python-django-pgbulk&lt;/li&gt;
  1957. &lt;li&gt;python-django-pgtrigger&lt;/li&gt;
  1958. &lt;li&gt;python-django-postgres-extra&lt;/li&gt;
  1959. &lt;li&gt;python-django-storages&lt;/li&gt;
  1960. &lt;li&gt;python-holidays&lt;/li&gt;
  1961. &lt;li&gt;python-httpx-sse&lt;/li&gt;
  1962. &lt;li&gt;python-icalendar&lt;/li&gt;
  1963. &lt;li&gt;python-lazy-model&lt;/li&gt;
  1964. &lt;li&gt;python-line-profiler&lt;/li&gt;
  1965. &lt;li&gt;python-lz4&lt;/li&gt;
  1966. &lt;li&gt;python-marshmallow-dataclass&lt;/li&gt;
  1967. &lt;li&gt;python-mastodon&lt;/li&gt;
  1968. &lt;li&gt;python-model-bakery&lt;/li&gt;
  1969. &lt;li&gt;python-oauthlib&lt;/li&gt;
  1970. &lt;li&gt;python-parse-type&lt;/li&gt;
  1971. &lt;li&gt;python-pathvalidate&lt;/li&gt;
  1972. &lt;li&gt;python-pgspecial&lt;/li&gt;
  1973. &lt;li&gt;python-processview&lt;/li&gt;
  1974. &lt;li&gt;python-pytest-subtests&lt;/li&gt;
  1975. &lt;li&gt;python-roman&lt;/li&gt;
  1976. &lt;li&gt;python-semantic-release&lt;/li&gt;
  1977. &lt;li&gt;python-testfixtures&lt;/li&gt;
  1978. &lt;li&gt;python-time-machine&lt;/li&gt;
  1979. &lt;li&gt;python-tokenize-rt&lt;/li&gt;
  1980. &lt;li&gt;python-typeguard&lt;/li&gt;
  1981. &lt;li&gt;python-typing-extensions&lt;/li&gt;
  1982. &lt;li&gt;python-urllib3&lt;/li&gt;
  1983. &lt;li&gt;pyupgrade&lt;/li&gt;
  1984. &lt;li&gt;requests (fixing &lt;a href=&quot;http://bugs.debian.org/1107368&quot;&gt;&lt;span class=&quot;caps&quot;&gt;CVE&lt;/span&gt;-2024-47081&lt;/a&gt;)&lt;/li&gt;
  1985. &lt;li&gt;responses&lt;/li&gt;
  1986. &lt;li&gt;zope.deferredimport&lt;/li&gt;
  1987. &lt;li&gt;zope.schema&lt;/li&gt;
  1988. &lt;li&gt;zope.testrunner&lt;/li&gt;
  1989. &lt;/ul&gt;
  1990. &lt;p&gt;That’s only about 10% of the backlog, but of course others are working on
  1991. this too.  If we can keep this up for a while then it should help.&lt;/p&gt;
  1992. &lt;p&gt;I packaged &lt;a href=&quot;https://bugs.debian.org/1111640&quot;&gt;pytest-run-parallel&lt;/a&gt;,
  1993. &lt;a href=&quot;https://bugs.debian.org/1110995&quot;&gt;pytest-unmagic&lt;/a&gt; (still in &lt;code&gt;NEW&lt;/code&gt;), and
  1994. &lt;a href=&quot;https://bugs.debian.org/1111569&quot;&gt;python-forbiddenfruit&lt;/a&gt; (still in &lt;code&gt;NEW&lt;/code&gt;),
  1995. all needed as new dependencies of various other packages.&lt;/p&gt;
  1996. &lt;p&gt;setuptools upstream will be &lt;a href=&quot;https://setuptools.pypa.io/en/stable/history.html#v80-1-0&quot;&gt;removing the &lt;code&gt;setup.py install&lt;/code&gt;
  1997. command&lt;/a&gt; on 31
  1998. October.  While this may not trickle down immediately into Debian, it does
  1999. mean that in the near future nearly all Python packages will have to use
  2000. &lt;code&gt;pybuild-plugin-pyproject&lt;/code&gt; (note that this does &lt;em&gt;not&lt;/em&gt; mean that they
  2001. necessarily have to use &lt;code&gt;pyproject.toml&lt;/code&gt;; this is just a question of how the
  2002. packaging runs the build system).  We talked about this a bit at DebConf,
  2003. and I said that I’d noticed a number of packages where this isn’t
  2004. straightforward and promised to write up some notes.  I wrote the
  2005. &lt;a href=&quot;https://wiki.debian.org/Python/PybuildPluginPyproject&quot;&gt;Python/PybuildPluginPyproject&lt;/a&gt;
  2006. wiki page for this; I expect to add more bits and pieces to it as I find them.&lt;/p&gt;
  2007. &lt;p&gt;On that note, I converted several packages to &lt;code&gt;pybuild-plugin-pyproject&lt;/code&gt;:&lt;/p&gt;
  2008. &lt;ul&gt;
  2009. &lt;li&gt;billiard&lt;/li&gt;
  2010. &lt;li&gt;lazr.config&lt;/li&gt;
  2011. &lt;li&gt;python-timeline&lt;/li&gt;
  2012. &lt;li&gt;zope.sqlalchemy&lt;/li&gt;
  2013. &lt;li&gt;zope.testing&lt;/li&gt;
  2014. &lt;/ul&gt;
  2015. &lt;p&gt;I fixed several build/test failures:&lt;/p&gt;
  2016. &lt;ul&gt;
  2017. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1111057&quot;&gt;aiosmtplib&lt;/a&gt;&lt;/li&gt;
  2018. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1111058&quot;&gt;blinker&lt;/a&gt;&lt;/li&gt;
  2019. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1111059&quot;&gt;ipykernel&lt;/a&gt;&lt;/li&gt;
  2020. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1111060&quot;&gt;ipyparallel&lt;/a&gt;&lt;/li&gt;
  2021. &lt;li&gt;&lt;a href=&quot;https://salsa.debian.org/python-team/packages/quart/-/commit/481c11c4fc33a18b17f8b223dff584342adc84af&quot;&gt;quart&lt;/a&gt;&lt;/li&gt;
  2022. &lt;/ul&gt;
  2023. &lt;p&gt;I fixed some other bugs:&lt;/p&gt;
  2024. &lt;ul&gt;
  2025. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1110821&quot;&gt;austin: binutils now has a libsframe-dev package, please add an explicit
  2026.  build dependency&lt;/a&gt;&lt;/li&gt;
  2027. &lt;li&gt;&lt;a href=&quot;https://salsa.debian.org/python-team/packages/python-django-pgbulk/-/commit/96a17113f634d3c401c21a113579273ec49ccc2b&quot;&gt;python-django-pgbulk: Missing dependency on
  2028.  python3-typing-extensions&lt;/a&gt;
  2029.  (&lt;a href=&quot;https://github.com/AmbitionEng/django-pgbulk/pull/54&quot;&gt;contributed
  2030.  upstream&lt;/a&gt;)&lt;/li&gt;
  2031. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1110139&quot;&gt;python-maturin: Upcoming rust-which update&lt;/a&gt;&lt;/li&gt;
  2032. &lt;/ul&gt;
  2033. &lt;p&gt;I reviewed &lt;a href=&quot;https://salsa.debian.org/python-team/packages/fail2ban/-/merge_requests/18&quot;&gt;Debian defaults: nftables as banaction and systemd as
  2034. backend&lt;/a&gt;,
  2035. but it looked as though nothing actually needed to be changed so we closed
  2036. this with no action.&lt;/p&gt;
  2037. &lt;h2&gt;Rust team&lt;/h2&gt;
  2038. &lt;p&gt;Upgrading Pydantic was complicated, and required a rust-pyo3 transition
  2039. (which Jelmer Vernooij started and Peter Michael Green has mostly been
  2040. driving, thankfully), packaging rust-malloc-size-of (including an &lt;a href=&quot;https://github.com/servo/malloc_size_of/pull/12&quot;&gt;upstream
  2041. portability fix&lt;/a&gt;), and
  2042. upgrading several packages to new upstream versions:&lt;/p&gt;
  2043. &lt;ul&gt;
  2044. &lt;li&gt;rust-serde&lt;/li&gt;
  2045. &lt;li&gt;rust-serde-derive&lt;/li&gt;
  2046. &lt;li&gt;rust-serde-json&lt;/li&gt;
  2047. &lt;li&gt;rust-smallvec&lt;/li&gt;
  2048. &lt;li&gt;rust-speedate&lt;/li&gt;
  2049. &lt;li&gt;rust-time&lt;/li&gt;
  2050. &lt;li&gt;rust-time-core&lt;/li&gt;
  2051. &lt;li&gt;rust-time-macros&lt;/li&gt;
  2052. &lt;/ul&gt;
  2053. &lt;h2&gt;bugs.debian.org&lt;/h2&gt;
  2054. &lt;p&gt;I fixed &lt;a href=&quot;https://bugs.debian.org/1078575&quot;&gt;bugs.debian.org: misspelled checkbox id
  2055. “uselessmesages”&lt;/a&gt;, as well as a &lt;a href=&quot;https://salsa.debian.org/debbugs-team/debbugs/-/commit/fff0db4e57a2781f5c82827e42f395a3325270f3&quot;&gt;bug that
  2056. caused incoming emails with certain header contents to go
  2057. missing&lt;/a&gt;.&lt;/p&gt;
  2058. &lt;h2&gt;OpenSSH&lt;/h2&gt;
  2059. &lt;p&gt;I fixed &lt;a href=&quot;https://bugs.debian.org/1080350&quot;&gt;openssh-server: refuses further connections after having handled
  2060. PerSourceMaxStartups connections&lt;/a&gt; with a
  2061. cherry-pick from upstream.&lt;/p&gt;
  2062. &lt;h2&gt;Other bits and pieces&lt;/h2&gt;
  2063. &lt;p&gt;I upgraded libfido2 to a new upstream version.&lt;/p&gt;
  2064. &lt;p&gt;I fixed &lt;a href=&quot;https://bugs.debian.org/1103589&quot;&gt;mimalloc: &lt;span class=&quot;caps&quot;&gt;FTBFS&lt;/span&gt; on armhf: cc1: error: ‘-mfloat-abi=hard’: selected
  2065. architecture lacks an &lt;span class=&quot;caps&quot;&gt;FPU&lt;/span&gt;&lt;/a&gt;, which was
  2066. blocking changes to pendulum in the Python team.  I also spent some time
  2067. helping to investigate &lt;a href=&quot;https://bugs.debian.org/1106879&quot;&gt;libmimalloc3: Illegal instruction Running mtxrun
  2068. —generate&lt;/a&gt;, though that bug is still open.&lt;/p&gt;
  2069. &lt;p&gt;I fixed &lt;a href=&quot;https://salsa.debian.org/debian/gssproxy/-/compare/debian%2F0.9.2-3...debian%2F0.9.2-4?from_project_id=45135&quot;&gt;various autopkgtest bugs in
  2070. gssproxy&lt;/a&gt;,
  2071. prompted by
  2072. &lt;a href=&quot;https://salsa.debian.org/freexian-team/debusine/-/issues/1007&quot;&gt;#1007&lt;/a&gt; in Debusine.&lt;/p&gt;
  2073. &lt;p&gt;Since my old team is &lt;a href=&quot;https://blog.launchpad.net/general/phasing-out-bazaar-code-hosting&quot;&gt;decommissioning Bazaar/Breezy code hosting in
  2074. Launchpad&lt;/a&gt;
  2075. (the end of an era, which I have distinctly mixed feelings about), I
  2076. converted &lt;a href=&quot;https://git.launchpad.net/storm&quot;&gt;Storm&lt;/a&gt; to git.&lt;/p&gt;</description>
  2077. <pubDate>Wed, 03 Sep 2025 10:56:59 +0000</pubDate>
  2078. </item>
  2079. <item>
  2080. <title>Dougie Richardson: CLI Corner: rsync</title>
  2081. <guid isPermaLink="false">https://dougiewougie.com/?p=2981</guid>
  2082. <link>https://dougiewougie.com/linux/cli-corner-rsync/</link>
  2083. <description>&lt;p&gt;Synchronise two directories, e.g. Nextcloud and an encrypted USB drive with archive, recursive, partial, and progress flags:&lt;/p&gt;
  2084.  
  2085.  
  2086.  
  2087. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code class=&quot;language-bash&quot; lang=&quot;bash&quot;&gt;rsync -varP src destination&lt;/code&gt;&lt;/pre&gt;
  2088.  
  2089.  
  2090.  
  2091. &lt;p&gt;&lt;/p&gt;</description>
  2092. <pubDate>Sun, 31 Aug 2025 10:38:37 +0000</pubDate>
  2093. </item>
  2094. <item>
  2095. <title>Scarlett Gately Moore: A Bittersweet Farewell: My Final KDE Snap Release and the End of an Era</title>
  2096. <guid isPermaLink="false">https://www.scarlettgatelymoore.dev/?p=2134</guid>
  2097. <link>https://www.scarlettgatelymoore.dev/a-bittersweet-farewell-my-final-kde-snap-release-and-the-end-of-an-era/</link>
  2098. <description>&lt;p&gt;Today marks both a milestone and a turning point in my journey with open source software. I’m proud to announce the release of KDE Gear 25.08.0 as my final snap package release. You can find all the details about this exciting update at the &lt;a href=&quot;https://kde.org/announcements/gear/25.08.0/&quot;&gt;official KDE announcement&lt;/a&gt;.&lt;/p&gt;
  2099.  
  2100.  
  2101.  
  2102. &lt;p&gt;After much reflection and with a heavy heart, I’ve made the difficult decision to retire from most of my open source software work, including snap packaging. This wasn’t a choice I made lightly – it comes after months of rejections and silence in an industry I’ve loved and called home for over 20 years.&lt;/p&gt;
  2103.  
  2104.  
  2105.  
  2106. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Passing the Torch&lt;/h2&gt;
  2107.  
  2108.  
  2109.  
  2110. &lt;p&gt;While I’m stepping back, I’m thrilled to share that the future of KDE snaps is in excellent hands. Carlos from the Neon team has been working tirelessly to set up snaps on the new infrastructure that KDE has made available. This means building snaps in KDE CI is now possible – a significant leap forward for the ecosystem. I’ll be helping Carlos get the pipelines properly configured to ensure a smooth transition.&lt;/p&gt;
  2111.  
  2112.  
  2113.  
  2114. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Staying Connected (But Differently)&lt;/h2&gt;
  2115.  
  2116.  
  2117.  
  2118. &lt;p&gt;Though I’m stepping away from most development work, I won’t be disappearing entirely from the communities that have meant so much to me:&lt;/p&gt;
  2119.  
  2120.  
  2121.  
  2122. &lt;ul class=&quot;wp-block-list&quot;&gt;
  2123. &lt;li&gt;&lt;strong&gt;Kubuntu&lt;/strong&gt;: I’ll remain available as a backup, though Rik is doing an absolutely fabulous job getting the latest and greatest KDE packages uploaded. The distribution is in capable hands.&lt;/li&gt;
  2124.  
  2125.  
  2126.  
  2127. &lt;li&gt;&lt;strong&gt;Ubuntu Community Council&lt;/strong&gt;: I’m continuing my involvement here because I’ve found myself genuinely enjoying the community side of things. There’s something deeply fulfilling about focusing on the human connections that make these projects possible.&lt;/li&gt;
  2128.  
  2129.  
  2130.  
  2131. &lt;li&gt;&lt;strong&gt;Debian&lt;/strong&gt;: I’ll likely be submitting for emeritus status, as I haven’t had the time to contribute meaningfully and want to be honest about my current capacity.&lt;/li&gt;
  2132. &lt;/ul&gt;
  2133.  
  2134.  
  2135.  
  2136. &lt;h2 class=&quot;wp-block-heading&quot;&gt;The Reality Behind the Decision&lt;/h2&gt;
  2137.  
  2138.  
  2139.  
  2140. &lt;p&gt;This transition isn’t just about career fatigue – it’s about financial reality. I’ve spent too many years working for free while struggling to pay my bills. The recent changes in the industry, particularly with AI transforming the web development landscape, have made things even more challenging. Getting traffic to websites now requires extensive social media work and marketing – all expected to be done without compensation.&lt;/p&gt;
  2141.  
  2142.  
  2143.  
  2144. &lt;p&gt;My stint at webwork was good while it lasted, but the changing landscape has made it unsustainable. I’ve reached a point where I can’t continue doing free work when my family and I are struggling financially. It shouldn’t take breaking a limb to receive the donations needed to survive.&lt;/p&gt;
  2145.  
  2146.  
  2147.  
  2148. &lt;h2 class=&quot;wp-block-heading&quot;&gt;A Career That Meant Everything&lt;/h2&gt;
  2149.  
  2150.  
  2151.  
  2152. &lt;p&gt;These 20+ years in open source have been the defining chapter of my professional life. I’ve watched communities grow, technologies evolve, and witnessed firsthand the incredible things that happen when passionate people work together. The relationships I’ve built, the problems we’ve solved together, and the software we’ve created have been deeply meaningful.&lt;/p&gt;
  2153.  
  2154.  
  2155.  
  2156. &lt;p&gt;But I also have to be honest about where I stand today: I cannot compete in the current job market. The industry has changed, and despite my experience and passion, the opportunities just aren’t there for someone in my situation.&lt;/p&gt;
  2157.  
  2158.  
  2159.  
  2160. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Looking Forward&lt;/h2&gt;
  2161.  
  2162.  
  2163.  
  2164. &lt;p&gt;Making a career change after two decades is terrifying, but it’s also necessary. I need to find a path that can provide financial stability for my family while still allowing me to contribute meaningfully to the world.&lt;/p&gt;
  2165.  
  2166.  
  2167.  
  2168. &lt;p&gt;If you’ve benefited from my work over the years and are in a position to help during this transition, I would be forever grateful for any support. Every contribution, no matter the size, helps ease this difficult period: &lt;a href=&quot;https://gofund.me/a9c55d8f&quot;&gt;https://gofund.me/a9c55d8f&lt;/a&gt;&lt;/p&gt;
  2169.  
  2170.  
  2171.  
  2172. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Thank You&lt;/h2&gt;
  2173.  
  2174.  
  2175.  
  2176. &lt;p&gt;To everyone who has collaborated with me, tested my packages, filed bug reports, offered encouragement, or simply used the software I’ve helped maintain – thank you. You’ve made these 20+ years worthwhile, and you’ve been part of something bigger than any individual contribution.&lt;/p&gt;
  2177.  
  2178.  
  2179.  
  2180. &lt;p&gt;The open source world will continue to thrive because it’s built on the collective passion of thousands of people like Carlos, Rik, and countless others who are carrying the torch forward. While my active development days are ending, the impact of this community will continue long into the future.&lt;/p&gt;
  2181.  
  2182.  
  2183.  
  2184. &lt;p&gt;With sincere gratitude and fond farewells,&lt;/p&gt;
  2185.  
  2186.  
  2187.  
  2188. &lt;p&gt;Scarlett Moore&lt;/p&gt;</description>
  2189. <pubDate>Mon, 25 Aug 2025 15:42:29 +0000</pubDate>
  2190. </item>
  2191. <item>
  2192. <title>Andrea Corbellini: It will take decades to undo the damage done by &quot;AI&quot;</title>
  2193. <guid isPermaLink="false">tag:andrea.corbellini.name,2025-08-20:/2025/08/20/it-will-take-decades-to-undo-the-damage-done-by-ai/</guid>
  2194. <link>https://andrea.corbellini.name/2025/08/20/it-will-take-decades-to-undo-the-damage-done-by-ai/</link>
  2195. <description>&lt;p&gt;Many business owners in the software development industry are investing a lot
  2196. into LLM bots, marketed as “generative AI”. Some of them go as far as &lt;em&gt;forcing&lt;/em&gt;
  2197. software developers to use such tools under the threat of being fired if they
  2198. don’t comply. After all, why shouldn’t they? This technology has a catchy name,
  2199. it produces very convincing output that sometimes is correct (or close to being
  2200. correct), and companies producing these tools are very good at downplaying
  2201. their limitations and at promising that the “next version” will be
  2202. astonishingly better than the one before.&lt;/p&gt;
  2203. &lt;p&gt;My day-to-day experience, and scientific research, however show a quite big
  2204. problem: while senior developers get little or no gain from “generative AI”
  2205. (&lt;a href=&quot;https://www.reuters.com/business/ai-slows-down-some-experienced-software-developers-study-finds-2025-07-10/&quot;&gt;1&lt;/a&gt;,
  2206. &lt;a href=&quot;https://fortune.com/2025/07/20/ai-hampers-productivity-software-developers-productivity-study/&quot;&gt;2&lt;/a&gt;,
  2207. &lt;a href=&quot;https://blueheadline.com/software-dev/ai-helps-new-developers-but-seniors/&quot;&gt;3&lt;/a&gt;,
  2208. &lt;a href=&quot;https://blog.stackademic.com/ai-coding-tools-slow-senior-devs-by-19-why-experts-are-still-using-them-98d855b81c4e&quot;&gt;4&lt;/a&gt;),
  2209. junior developers get massive boosts in productivity. Why am I describing a
  2210. boost in productivity as a problem? Well, it’s simple: the new generations of
  2211. software developers (the ones that are just entering the job market, and the
  2212. ones that are still in school) are relying heavily on these LLM tools for
  2213. &lt;em&gt;nearly all&lt;/em&gt; work-related tasks. And, again, why shouldn’t they? The entire
  2214. world is telling them to do so! And as a result of that, they are advancing
  2215. without gaining any actual skill.&lt;/p&gt;
  2216. &lt;p&gt;Me and other (ex-)coworkers have seen it first hand: a junior developer
  2217. completes a task using an LLM bot. More senior developers find major problems
  2218. with the result. Junior developers go back to the LLM tool asking for a fix,
  2219. wasting hours or days without a positive outcome. &lt;strong&gt;Junior developers are
  2220. becoming unable to perform tasks independently.&lt;/strong&gt;&lt;/p&gt;
  2221. &lt;p&gt;In addition to that, there’s a problem that I feel like is not talked about
  2222. extensively: these LLM tools can only regurgitate what they’ve been trained
  2223. with. They’re good at finding patterns and re-applying strategies that have
  2224. been used in prior work, but by their nature they cannot &lt;em&gt;create&lt;/em&gt; or
  2225. &lt;em&gt;innovate&lt;/em&gt;. So, if this trend continues, &lt;strong&gt;the new generations of software
  2226. developers are not just going to be &lt;em&gt;skill-less&lt;/em&gt;, they’re also going to be
  2227. incapable of solving new problems that haven’t been seen before&lt;/strong&gt;.&lt;/p&gt;
  2228. &lt;p&gt;My prediction? &lt;strong&gt;Within 10 or 20 years, the older generation of software
  2229. developers will be asked to come out of retirement to fix the unmaintainable
  2230. mess created by the newer generations, and to make advancements in the
  2231. information technology sector.&lt;/strong&gt; A bit like old COBOL developers are asked to
  2232. come out of retirement to maintain banking systems, but on a much larger scale.
  2233. This, unless there will be advancements towards &lt;em&gt;true&lt;/em&gt; Artificial Intelligence,
  2234. or unless the current trend in education is broken.&lt;/p&gt;
  2235. &lt;p&gt;Now don’t get me wrong: I’m not opposed to LLM bots (although I’m against
  2236. calling them “AI”, because they’re very far from fulfilling the AI promise),
  2237. and I think they can be very powerful tools. What I’m worried about is that new
  2238. generations are being told to rely on them almost exclusively, and this can
  2239. only lead to an evident skill gap. In fact, I think that if there’s a country
  2240. that in the future will be able to harness the power of the LLM bots and &lt;em&gt;at
  2241. the same time&lt;/em&gt; maintain a good enough level of education, thus addressing the
  2242. skill gap problem, they will be the dominant economic power of the future,
  2243. because they will be able to automate tasks that are time/energy-consuming for
  2244. humans, while at the same time use the human brain to innovate and advance.&lt;/p&gt;</description>
  2245. <pubDate>Wed, 20 Aug 2025 17:17:00 +0000</pubDate>
  2246. </item>
  2247. <item>
  2248. <title>Erich Eickmeyer: Raspberry Pi as a Networked Audio Interface</title>
  2249. <guid isPermaLink="false">http://ericheickmeyer.com/?p=5998</guid>
  2250. <link>https://ericheickmeyer.com/2025/08/19/raspberry-pi-as-a-networked-audio-interface/</link>
  2251. <description>&lt;p&gt;I haven’t posted for quite some time, and a lot has happened. For instance, my wife revived Edubuntu and my work with Ubuntu Studio now spans over 7 years.&lt;/p&gt;
  2252.  
  2253.  
  2254.  
  2255. &lt;p&gt;Recently, I became the proud owner of a Behringer X-Air XR18. This became the key to opening a new business, which I’ll announce at a later date. I’m working on acquiring more equipment to make this work.&lt;/p&gt;
  2256.  
  2257.  
  2258.  
  2259. &lt;p&gt;As many people know, the XR18 is a stagebox-style mixer in which the mixer is physically on the stage with no controls but controlled with an iPad or Android tablet. However, as the owner of a Behringer X-Touch, which integrates seamlessly with an X-Air mixer via either MIDI or Network connections. In my situation, this gives the ability to have a physical front-of-house setup, with a computer showing the X-Air Edit application.&lt;/p&gt;
  2260.  
  2261.  
  2262.  
  2263. &lt;p&gt;However, what if I want to multi-track record or add custom effects via Ubuntu Studio? This is where it would get complicated as I would then have to run a prohibitively-long USB cable from my computer to the XR18 on the stage. This would not be ideal.&lt;/p&gt;
  2264.  
  2265.  
  2266.  
  2267. &lt;p&gt;As many people know, MIDI can be routed via network, which is the way the X-Touch, XR18, and X-Air app work together. A simple WiFi router and ethernet cable wouild be a great solution to this problem, but that also leaves an Ethernet cable prone to being tripped-over by audience members (unless one were to gaff it down). So, since we’ve already got WiFi, let’s take advantage of that.&lt;/p&gt;
  2268.  
  2269.  
  2270.  
  2271. &lt;p&gt;To expose the audio ports to the WiFi, we’re going to have to bridge it. But… how? Most people would tell me just to use &lt;a href=&quot;https://www.audinate.com/&quot;&gt;Dante&lt;/a&gt; but, unfortunately, Audinate refuses to support Linux, and AES67 support in PipeWire is very young. However, it turns out, &lt;a href=&quot;https://www.jacktrip.com/&quot;&gt;JackTrip&lt;/a&gt; is in the Ubuntu repositories and, as its name would imply, integrates seamlessly with &lt;a href=&quot;https://jackaudio.org/&quot;&gt;JACK &lt;/a&gt;and, therefore, &lt;a href=&quot;https://pipewire.org&quot;&gt;PipeWire&lt;/a&gt;.&lt;/p&gt;
  2272.  
  2273.  
  2274.  
  2275. &lt;p&gt;Setting this up is rather simple, and I’m documenting the process here.&lt;/p&gt;
  2276.  
  2277.  
  2278.  
  2279. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Prerequisites&lt;/h2&gt;
  2280.  
  2281.  
  2282.  
  2283. &lt;ul class=&quot;wp-block-list&quot;&gt;
  2284. &lt;li&gt;A Raspberry Pi 4 or higher (I have a late 2023 Raspberry Pi 5)&lt;/li&gt;
  2285.  
  2286.  
  2287.  
  2288. &lt;li&gt;A micro SD card (16GB or larger)&lt;/li&gt;
  2289.  
  2290.  
  2291.  
  2292. &lt;li&gt;&lt;a href=&quot;https://cdimage.ubuntu.com/releases/noble/release/&quot;&gt;Ubuntu Server for Raspberry Pi&lt;/a&gt; (I used 24.04, linked here).&lt;/li&gt;
  2293.  
  2294.  
  2295.  
  2296. &lt;li&gt;Optional: &lt;a href=&quot;https://ubuntu.com/pro&quot;&gt;Ubuntu Pro&lt;/a&gt; (for the RealTime Ubuntu Raspberry Pi Kernel)&lt;/li&gt;
  2297. &lt;/ul&gt;
  2298.  
  2299.  
  2300.  
  2301. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Here we go…&lt;/h2&gt;
  2302.  
  2303.  
  2304. &lt;div class=&quot;wp-block-image&quot;&gt;
  2305. &lt;figure class=&quot;alignright size-large is-resized&quot;&gt;&lt;a href=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-6004&quot; data-attachment-id=&quot;6004&quot; data-comments-opened=&quot;1&quot; data-image-caption=&quot;&quot; data-image-description=&quot;&quot; data-image-meta=&quot;{&amp;quot;aperture&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;credit&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;camera&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;created_timestamp&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;copyright&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;focal_length&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;iso&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;shutter_speed&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;orientation&amp;quot;:&amp;quot;0&amp;quot;}&quot; data-image-title=&quot;image&quot; data-large-file=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image.png?w=662&quot; data-medium-file=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image.png?w=300&quot; data-orig-file=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image.png&quot; data-orig-size=&quot;832,616&quot; data-permalink=&quot;https://ericheickmeyer.com/2025/08/19/raspberry-pi-as-a-networked-audio-interface/image/&quot; height=&quot;616&quot; src=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image.png?w=832&quot; style=&quot;width: 417px; height: auto;&quot; width=&quot;832&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;
  2306.  
  2307.  
  2308. &lt;p&gt;The first thing I did was install the downloaded preinstalled server image to a micro SD card. This is accomplished using Raspberry Pi Imager. I used the Snap version maintained by Dave Jones of Canonical, part of Canonical’s Raspberry Pi team. If you’ve never met Dave, he does all of his computing via Raspberry Pi, and it’s a sight to behold!&lt;br /&gt;&lt;br /&gt;To get that, it’s as easy as &lt;code&gt;sudo snap install rpi-imager&lt;/code&gt;.&lt;/p&gt;
  2309.  
  2310.  
  2311.  
  2312. &lt;p&gt;I made sure to set the server to automatically detect my WiFi, but if you plan to use a hard Ethernet connection, this isn’t necessary. Just be sure you can SSH into the machine as this is key (pre-set a user and set the machine name).&lt;/p&gt;
  2313.  
  2314.  
  2315.  
  2316. &lt;p&gt;Once the SD card is imaged, I SSH’d into the machine (&lt;code&gt;ssh erich@{computer-name}.local&lt;/code&gt;). The first thing I did was install &lt;code&gt;jackd2&lt;/code&gt; and &lt;code&gt;jacktrip&lt;/code&gt;:&lt;/p&gt;
  2317.  
  2318.  
  2319.  
  2320. &lt;p&gt;&lt;code&gt;sudo apt install --no-install-recommends jackd2 jacktrip&lt;/code&gt;&lt;/p&gt;
  2321.  
  2322.  
  2323.  
  2324. &lt;p&gt;One must use the &lt;code&gt;--no-install-recommends&lt;/code&gt; option to avoid installing unecessary graphical tools as &lt;code&gt;jackd2&lt;/code&gt; will want to install &lt;code&gt;qjackctl&lt;/code&gt; which is the GUI application to control JACK. We don’t need it here. JackTrip has an option to automatically connect to all inputs and outputs, so we’ll use that here.&lt;/p&gt;
  2325.  
  2326.  
  2327.  
  2328. &lt;p&gt;To automatically start JACK upon boot, I modified &lt;a href=&quot;https://raw.githubusercontent.com/jackaudio/jack2/refs/heads/develop/systemd/jack%40.service.in&quot;&gt;this systemd unit file &lt;/a&gt;to be custom for my setup. You’ll notice I made the buffer 256 (&lt;code&gt;-p 256&lt;/code&gt;) with 3 periods per buffer (&lt;code&gt;-n 3&lt;/code&gt;) as gives the highest reliablility on a USB connection. Additionally, the highest frequency an XR18 runs at is 48000 Hz, so I made sure to set the frequency there (&lt;code&gt;-r 48000&lt;/code&gt;). Also, we want the process to run in realtime and directly to ALSA (&lt;code&gt;--realtime -dalsa&lt;/code&gt;):&lt;/p&gt;
  2329.  
  2330.  
  2331.  
  2332. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;[Unit]
  2333. Description=JACK server using %i user profile
  2334. Documentation=man:jackd(1)
  2335. After=sound.target local-fs.target
  2336.  
  2337. [Service]
  2338. User=%i
  2339. Group=%i
  2340. #Type=notify
  2341. EnvironmentFile=-/etc/jack/alsa.conf
  2342. #EnvironmentFile=-%h/.config/jack/%i.conf
  2343. ExecStart=/usr/bin/jackd --realtime -dalsa -p 256 -n 3 -r 48000
  2344. # -d $DEVICE $DRIVER_SETTINGS
  2345. LimitRTPRIO=95
  2346. LimitRTTIME=infinity
  2347. LimitMEMLOCK=infinity
  2348. # Caution: use on memory-limited devices only
  2349. # OOMScoreAdjust=-1000
  2350.  
  2351. [Install]
  2352. WantedBy=multi-user.target
  2353. &lt;/code&gt;&lt;/pre&gt;
  2354.  
  2355.  
  2356.  
  2357. &lt;p&gt;I installed this to &lt;code&gt;/usr/lib/systemd/system/jackd@.service&lt;/code&gt;.&lt;/p&gt;
  2358.  
  2359.  
  2360.  
  2361. &lt;p&gt;Next, I created a systemd unit file to start JackTrip. I needed this to be a server (&lt;code&gt;-s&lt;/code&gt;), with 18 inputs and outputs (for an XR18, &lt;code&gt;-n 18&lt;/code&gt;) and automatically connect upon start (&lt;code&gt;-q auto&lt;/code&gt;):&lt;/p&gt;
  2362.  
  2363.  
  2364.  
  2365. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;[Unit]
  2366. Description=JackTrip Audio Network Service
  2367. After=network.target sound.target jackd@%i.service
  2368. Wants=network-online.target
  2369.  
  2370. [Service]
  2371. # Run as a specific user who has JACK permissions
  2372. User=%i
  2373. Group=%i
  2374.  
  2375. ExecStart=jacktrip -s -n 18 -q auto --udprt
  2376. Restart=always
  2377. RestartSec=5
  2378.  
  2379. # Optional: environment for JACK if needed
  2380. #Environment=JACK_NO_AUDIO_RESERVATION=1
  2381.  
  2382. # Give JACK/JackTrip real-time priority
  2383. LimitRTPRIO=infinity
  2384. LimitMEMLOCK=infinity
  2385.  
  2386. [Install]
  2387. WantedBy=multi-user.target&lt;/code&gt;&lt;/pre&gt;
  2388.  
  2389.  
  2390.  
  2391. &lt;p&gt;I installed this to &lt;code&gt;/usr/lib/systemd/system/jacktrip@.service&lt;/code&gt;.&lt;/p&gt;
  2392.  
  2393.  
  2394.  
  2395. &lt;p&gt;Next, to make sure this runs as my user, I did the following:&lt;/p&gt;
  2396.  
  2397.  
  2398.  
  2399. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;sudo systemctl enable jackd@erich.service
  2400. sudo systemctl enable jacktrip@erich.service&lt;/code&gt;&lt;/pre&gt;
  2401.  
  2402.  
  2403.  
  2404. &lt;p&gt;Optionally, since this will be used as a headless appliance, one can use Ubuntu Pro to get the RealTime Kernel. This is accomplished by the following with an &lt;a href=&quot;https://login.ubuntu.com/&quot;&gt;Ubuntu One account&lt;/a&gt;:&lt;/p&gt;
  2405.  
  2406.  
  2407.  
  2408. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;pro attach
  2409. pro enable realtime-kernel&lt;/code&gt;&lt;/pre&gt;
  2410.  
  2411.  
  2412.  
  2413. &lt;p&gt;To make sure everything worked, check &lt;code&gt;pro status&lt;/code&gt;.&lt;/p&gt;
  2414.  
  2415.  
  2416.  
  2417. &lt;p&gt;You can have up to 5 machines running Ubuntu Pro for free. In my case, as an Ubuntu Member, I can have up to 50 machines for free, and this is only my third one!&lt;/p&gt;
  2418.  
  2419.  
  2420.  
  2421. &lt;p&gt;Once this is done, reboot. On your other machine, install &lt;code&gt;jacktrip-gui&lt;/code&gt;. (This will be in Ubuntu Studio 25.10 and higher by default!): &lt;code&gt;sudo apt install jacktrip-gui&lt;/code&gt;.&lt;/p&gt;
  2422.  
  2423.  
  2424.  
  2425. &lt;p&gt;Opening it, it will ask you if you want to sign in with a Virtual Studio account. This is because JackTrip allows you to collaborate across the entire internet with fellow musicians with very low latency! It’s pretty cool! However, we don’t need that for this purpose. Instead, we’re going to say “No” and simply connect to the server as a P2P client:&lt;/p&gt;
  2426.  
  2427.  
  2428. &lt;div class=&quot;wp-block-image&quot;&gt;
  2429. &lt;figure class=&quot;aligncenter size-large is-resized&quot;&gt;&lt;a href=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image-1.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-6012&quot; data-attachment-id=&quot;6012&quot; data-comments-opened=&quot;1&quot; data-image-caption=&quot;&quot; data-image-description=&quot;&quot; data-image-meta=&quot;{&amp;quot;aperture&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;credit&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;camera&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;created_timestamp&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;copyright&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;focal_length&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;iso&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;shutter_speed&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;orientation&amp;quot;:&amp;quot;0&amp;quot;}&quot; data-image-title=&quot;image&quot; data-large-file=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image-1.png?w=662&quot; data-medium-file=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image-1.png?w=300&quot; data-orig-file=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image-1.png&quot; data-orig-size=&quot;856,795&quot; data-permalink=&quot;https://ericheickmeyer.com/2025/08/19/raspberry-pi-as-a-networked-audio-interface/image-2/&quot; height=&quot;795&quot; src=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image-1.png?w=856&quot; style=&quot;width: 678px; height: auto;&quot; width=&quot;856&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;
  2430.  
  2431.  
  2432. &lt;p&gt;Enter the computer name with &lt;code&gt;.local&lt;/code&gt; afterwards, and it should find it as long as your desktop or laptop is connected to the same network as the Raspberry Pi.&lt;/p&gt;
  2433.  
  2434.  
  2435.  
  2436. &lt;p&gt;After you click “Connect”, you should see this:&lt;/p&gt;
  2437.  
  2438.  
  2439. &lt;div class=&quot;wp-block-image&quot;&gt;
  2440. &lt;figure class=&quot;aligncenter size-large is-resized&quot;&gt;&lt;a href=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image-3.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-6017&quot; data-attachment-id=&quot;6017&quot; data-comments-opened=&quot;1&quot; data-image-caption=&quot;&quot; data-image-description=&quot;&quot; data-image-meta=&quot;{&amp;quot;aperture&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;credit&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;camera&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;created_timestamp&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;copyright&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;focal_length&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;iso&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;shutter_speed&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;orientation&amp;quot;:&amp;quot;0&amp;quot;}&quot; data-image-title=&quot;image&quot; data-large-file=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image-3.png?w=662&quot; data-medium-file=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image-3.png?w=224&quot; data-orig-file=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image-3.png&quot; data-orig-size=&quot;856,1148&quot; data-permalink=&quot;https://ericheickmeyer.com/2025/08/19/raspberry-pi-as-a-networked-audio-interface/image-4/&quot; height=&quot;1024&quot; src=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image-3.png?w=764&quot; style=&quot;width: 630px; height: auto;&quot; width=&quot;764&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;
  2441.  
  2442.  
  2443. &lt;p&gt;As you can see, this has audio coming in from a microphone already.&lt;/p&gt;
  2444.  
  2445.  
  2446.  
  2447. &lt;p&gt;Back in X-Air Edit, already connected to the mixer, I changed my routing so channels 1 and 2 were being sent to the aux, so I can then use my computer’s audio there for music from e.g. Spotify:&lt;/p&gt;
  2448.  
  2449.  
  2450.  
  2451. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image-4.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-6019&quot; data-attachment-id=&quot;6019&quot; data-comments-opened=&quot;1&quot; data-image-caption=&quot;&quot; data-image-description=&quot;&quot; data-image-meta=&quot;{&amp;quot;aperture&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;credit&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;camera&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;created_timestamp&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;copyright&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;focal_length&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;iso&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;shutter_speed&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;orientation&amp;quot;:&amp;quot;0&amp;quot;}&quot; data-image-title=&quot;image&quot; data-large-file=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image-4.png?w=662&quot; data-medium-file=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image-4.png?w=300&quot; data-orig-file=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image-4.png&quot; data-orig-size=&quot;1189,754&quot; data-permalink=&quot;https://ericheickmeyer.com/2025/08/19/raspberry-pi-as-a-networked-audio-interface/image-5/&quot; height=&quot;649&quot; src=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image-4.png?w=1024&quot; width=&quot;1024&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  2452.  
  2453.  
  2454.  
  2455. &lt;p&gt;Next I started a Dummy Audio Device from &lt;a href=&quot;https://ubuntustudio.org/audio-configuration/&quot;&gt;Ubuntu Studio Audio Configuration&lt;/a&gt; and made it the main output for the computer. I then connected the monitor of the dummy output to channels 1 and 2 of JackTrip using Patchance:&lt;/p&gt;
  2456.  
  2457.  
  2458. &lt;div class=&quot;wp-block-image&quot;&gt;
  2459. &lt;figure class=&quot;aligncenter size-large&quot;&gt;&lt;a href=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image-5.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-6021&quot; data-attachment-id=&quot;6021&quot; data-comments-opened=&quot;1&quot; data-image-caption=&quot;&quot; data-image-description=&quot;&quot; data-image-meta=&quot;{&amp;quot;aperture&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;credit&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;camera&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;created_timestamp&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;copyright&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;focal_length&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;iso&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;shutter_speed&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;orientation&amp;quot;:&amp;quot;0&amp;quot;}&quot; data-image-title=&quot;image&quot; data-large-file=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image-5.png?w=457&quot; data-medium-file=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image-5.png?w=300&quot; data-orig-file=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image-5.png&quot; data-orig-size=&quot;457,326&quot; data-permalink=&quot;https://ericheickmeyer.com/2025/08/19/raspberry-pi-as-a-networked-audio-interface/image-6/&quot; height=&quot;326&quot; src=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/image-5.png?w=457&quot; width=&quot;457&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;
  2460.  
  2461.  
  2462. &lt;p&gt;…and VIOLA! Even testing my microphone, there was so little latency it was imperceivable.&lt;/p&gt;
  2463.  
  2464.  
  2465.  
  2466. &lt;p&gt;I’m envisioning a setup like this:&lt;/p&gt;
  2467.  
  2468.  
  2469.  
  2470. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/stage.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-6068&quot; data-attachment-id=&quot;6068&quot; data-comments-opened=&quot;1&quot; data-image-caption=&quot;&quot; data-image-description=&quot;&quot; data-image-meta=&quot;{&amp;quot;aperture&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;credit&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;camera&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;created_timestamp&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;copyright&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;focal_length&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;iso&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;shutter_speed&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;orientation&amp;quot;:&amp;quot;0&amp;quot;}&quot; data-image-title=&quot;stage&quot; data-large-file=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/stage.png?w=662&quot; data-medium-file=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/stage.png?w=300&quot; data-orig-file=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/stage.png&quot; data-orig-size=&quot;740,294&quot; data-permalink=&quot;https://ericheickmeyer.com/2025/08/19/raspberry-pi-as-a-networked-audio-interface/stage/&quot; height=&quot;294&quot; src=&quot;https://ericheickmeyer.com/wp-content/uploads/2025/08/stage.png?w=740&quot; width=&quot;740&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  2471.  
  2472.  
  2473.  
  2474. &lt;p&gt;I’m excited to test this further! Overall, I feel like I’ve found a way to do a Dante-less audio-over-ethernet setup that cost me nothing!&lt;/p&gt;</description>
  2475. <pubDate>Tue, 19 Aug 2025 19:48:23 +0000</pubDate>
  2476. </item>
  2477. <item>
  2478. <title>Jonathan Carter: Debian 13</title>
  2479. <guid isPermaLink="false">https://jonathancarter.org/?p=11948</guid>
  2480. <link>https://jonathancarter.org/2025/08/10/debian-13/</link>
  2481. <description>&lt;p&gt;Debian 13 has finally &lt;a href=&quot;https://bits.debian.org/2025/08/trixie-released.html&quot;&gt;been released&lt;/a&gt;!&lt;/p&gt;
  2482.  
  2483.  
  2484.  
  2485. &lt;p&gt;One of the biggest and under-hyped features is support for HTTP Boot. This allows you to simply specify a URL (to any d-i or live image iso) in your computer’s firmware setup and then you can boot to it directly over the Internet, so no need to download an image, write it to flash disk and then boot from the flash disk on computers made in the last ~5 years. This is also supported on the Tianocore free EFI firmware, which is useful if you’d like to try it out on QEMU/KVM.&lt;/p&gt;
  2486.  
  2487.  
  2488.  
  2489. &lt;p&gt;More details about Debian 13 available on the &lt;a href=&quot;https://www.debian.org/News/2025/20250809&quot;&gt;official press release&lt;/a&gt;.&lt;/p&gt;
  2490.  
  2491.  
  2492.  
  2493. &lt;p&gt;The default theme for Debian 13 is &lt;a href=&quot;https://wiki.debian.org/DebianArt/Themes/Ceratopsian&quot;&gt;Ceratopsian&lt;/a&gt;, designed by Elise Couper. I’ll be honest, I wasn’t 100% sure it was the best choice when it won the artwork vote, but it really grew on me over the last few months, and it looked &lt;em&gt;great&lt;/em&gt; in combination with all kinds of other things during DebConf too, so it has certainly won me over.&lt;/p&gt;
  2494.  
  2495.  
  2496. &lt;div class=&quot;wp-block-image&quot;&gt;
  2497. &lt;figure class=&quot;aligncenter size-full is-resized&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-11957&quot; height=&quot;500&quot; src=&quot;https://jonathancarter.org/files/images/wllpaper.jpeg&quot; style=&quot;width: 798px; height: auto;&quot; width=&quot;800&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  2498.  
  2499.  
  2500. &lt;p&gt;And I particularly like the Plymouth theme. It’s very minimal, and it reminds me of the Toy Story Trixie character, it’s almost like it helps explain the theme:&lt;/p&gt;
  2501.  
  2502.  
  2503. &lt;div class=&quot;wp-block-image&quot;&gt;
  2504. &lt;figure class=&quot;aligncenter size-large is-resized&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-11961&quot; height=&quot;644&quot; src=&quot;https://jonathancarter.org/files/images/certop-1024x644.jpeg&quot; style=&quot;width: 1024px; height: auto;&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  2505.  
  2506.  
  2507. &lt;p class=&quot;has-text-align-center&quot;&gt;&lt;em&gt;Plymouth (start-up/shutdown) theme.&lt;/em&gt;&lt;/p&gt;
  2508.  
  2509.  
  2510. &lt;div class=&quot;wp-block-image&quot;&gt;
  2511. &lt;figure class=&quot;aligncenter size-full&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-11963&quot; height=&quot;631&quot; src=&quot;https://jonathancarter.org/files/images/trixie.jpeg&quot; width=&quot;600&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  2512.  
  2513.  
  2514. &lt;p class=&quot;has-text-align-center&quot;&gt;&lt;a href=&quot;https://disney.fandom.com/wiki/Trixie&quot;&gt;Trixie, the character from Toy Story&lt;/a&gt; that was chosen as the codename for Debian 13.&lt;/p&gt;
  2515.  
  2516.  
  2517.  
  2518. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Debian Local Team ISO testing&lt;/h2&gt;
  2519.  
  2520.  
  2521.  
  2522. &lt;p&gt;Yesterday we got some locals together for ISO testing and we got a cake with the wallpaper printed on it, along with our local team logo which has been a work in progress for the last 3 years, so hopefully we’ll finalise it this year!  (it will be ready when it’s ready). It came out a lot bluer than the original wallpaper, but still tasted great.&lt;/p&gt;
  2523.  
  2524.  
  2525. &lt;div class=&quot;wp-block-image&quot;&gt;
  2526. &lt;figure class=&quot;aligncenter size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-11949&quot; height=&quot;771&quot; src=&quot;https://jonathancarter.org/files/images/cake-13-1024x771.jpg&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  2527.  
  2528.  
  2529. &lt;p&gt;For many releases, I’ve been the only person from South Africa doing ISO smoke-testing, and this time was quite different, since everyone else in the photo below tested an image except for me. I basically just provided some support and helped out with getting salsa/wiki accounts and some troubleshooting. It went nice and fast, and it’s always a big relief when there are no showstoppers for the release.&lt;/p&gt;
  2530.  
  2531.  
  2532. &lt;div class=&quot;wp-block-image&quot;&gt;
  2533. &lt;figure class=&quot;aligncenter size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-11951&quot; height=&quot;590&quot; src=&quot;https://jonathancarter.org/files/images/trixiecake2-1024x590.jpg&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  2534.  
  2535.  
  2536. &lt;p class=&quot;has-text-align-center&quot;&gt;&lt;em&gt;My dog was really wishing hard that the cake would slip off.&lt;/em&gt;&lt;/p&gt;
  2537.  
  2538.  
  2539. &lt;div class=&quot;wp-block-image&quot;&gt;
  2540. &lt;figure class=&quot;aligncenter size-full&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-11970&quot; height=&quot;221&quot; src=&quot;https://jonathancarter.org/files/images/cambalache.jpg&quot; width=&quot;600&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  2541.  
  2542.  
  2543. &lt;p&gt;Packaging-wise, I only have one big new package for Trixie, and that’s &lt;a href=&quot;https://github.com/xjuan/cambalache/tree/main&quot;&gt;Cambalache&lt;/a&gt;, a rapid application design UI builder for GTK3/GTK4.&lt;/p&gt;
  2544.  
  2545.  
  2546. &lt;div class=&quot;wp-block-image&quot;&gt;
  2547. &lt;figure class=&quot;aligncenter size-full is-resized&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-11972&quot; height=&quot;423&quot; src=&quot;https://jonathancarter.org/files/images/image-29.png&quot; style=&quot;width: 616px; height: auto;&quot; width=&quot;752&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  2548.  
  2549.  
  2550. &lt;p&gt;The version in trixie is 0.94.1-3 and version 1.0 was recently released, so I’ll get that updated in forky and backport it if possible.&lt;/p&gt;
  2551.  
  2552.  
  2553.  
  2554. &lt;p&gt;I was originally considering using Cambalache for an installer UI, but ended up going with a web front-end instead. But that’s moving firmly towards forky territory, so more on that another time!&lt;/p&gt;
  2555.  
  2556.  
  2557.  
  2558. &lt;p&gt;Thanks to everyone who was involved in this release, so far upgrades have been very smooth!&lt;/p&gt;
  2559. &lt;img alt=&quot;&quot; height=&quot;0&quot; src=&quot;https://analytics.jonathancarter.org/piwik.php?idsite=1&amp;amp;rec=1&amp;amp;url=https%3A%2F%2Fjonathancarter.org%2F2025%2F08%2F10%2Fdebian-13%2F&amp;amp;action_name=Debian+13&amp;amp;urlref=https%3A%2F%2Fjonathancarter.org%2Ffeed%2F&quot; style=&quot;border: 0; width: 0; height: 0;&quot; width=&quot;0&quot; /&gt;</description>
  2560. <pubDate>Sun, 10 Aug 2025 14:53:36 +0000</pubDate>
  2561. </item>
  2562. <item>
  2563. <title>Thomas Bechtold: Streamline Root Filesystem Modifications with chimg</title>
  2564. <guid isPermaLink="false">http://toabctl.wordpress.com/?p=151</guid>
  2565. <link>https://toabctl.wordpress.com/2025/07/31/streamline-root-filesystem-modifications-with-chimg/</link>
  2566. <description>&lt;p&gt;During the last year I developed as a side project a new tool called &lt;a href=&quot;https://github.com/canonical/chimg/&quot;&gt;chimg&lt;/a&gt; . That tool is useful to modify a given rootfs chroot directory in a declarative way. It can replace a kernel within a chroot, preseed snaps, install debian packages, add PPAs and more (documentation is in git but not yet published).&lt;/p&gt;
  2567.  
  2568.  
  2569.  
  2570. &lt;p&gt;The nice thing about this is, that this tool can be integrated into &lt;a href=&quot;https://launchpad.net/livecd-rootfs&quot;&gt;livecd-rootfs&lt;/a&gt; (the tool that is usually used to build Ubuntu images) or future tools which might use the craft framework to build images. &lt;code&gt;chimg&lt;/code&gt; automatically detects already bind-mounted filesystems (eg. &lt;code&gt;/sys&lt;/code&gt;, &lt;code&gt;/proc&lt;/code&gt;, …), detects already preseeded snaps and usually does that same thing that &lt;code&gt;livecd-rootfs&lt;/code&gt; currently does when eg. replacing an already installed kernel.&lt;/p&gt;
  2571.  
  2572.  
  2573.  
  2574. &lt;p&gt;Install &lt;code&gt;chimg&lt;/code&gt; with:&lt;/p&gt;
  2575.  
  2576.  
  2577. &lt;div class=&quot;wp-block-syntaxhighlighter-code &quot;&gt;&lt;pre class=&quot;brush: plain; title: ; notranslate&quot;&gt;sudo snap install chimg --classic
  2578. &lt;/pre&gt;&lt;/div&gt;
  2579.  
  2580.  
  2581. &lt;p&gt;An example configuration (eg. &lt;code&gt;config.yaml&lt;/code&gt;) to modify a rootfs chroot directory looks like this:&lt;/p&gt;
  2582.  
  2583.  
  2584. &lt;div class=&quot;wp-block-syntaxhighlighter-code &quot;&gt;&lt;pre class=&quot;brush: yaml; title: ; notranslate&quot;&gt;---
  2585. kernel: linux-aws
  2586. debs:
  2587.  - name: shim-signed
  2588.  - name: grub-pc
  2589.  - name: grub2-common
  2590.  - name: ubuntu-cloud-minimal
  2591. snap:
  2592.  assertion_brand: canonical
  2593.  assertion_model: aws-classic
  2594.  snaps:
  2595.    - name: hello
  2596.      channel: latest/stable
  2597. files:
  2598.  -
  2599.    destination: /etc/default/grub.d/70-mysettings.cfg
  2600.    content: |+
  2601.      GRUB_TIMEOUT=0
  2602.  
  2603. cmds_post:
  2604.  -
  2605.    cmd: |
  2606.      echo &quot;Everything done&quot;
  2607. &lt;/pre&gt;&lt;/div&gt;
  2608.  
  2609.  
  2610. &lt;p&gt;This config (stored in &lt;code&gt;config.yaml&lt;/code&gt; in this example) can be applied to a newly created (or existing) root filesystem directory. Let’s create one in &lt;code&gt;/tmp/chimg-noble&lt;/code&gt;:&lt;/p&gt;
  2611.  
  2612.  
  2613. &lt;div class=&quot;wp-block-syntaxhighlighter-code &quot;&gt;&lt;pre class=&quot;brush: bash; title: ; notranslate&quot;&gt;sudo mmdebstrap --variant=apt --verbose noble /tmp/chimg-noble
  2614. &lt;/pre&gt;&lt;/div&gt;
  2615.  
  2616.  
  2617. &lt;p&gt;Let’s apply the config changes now:&lt;/p&gt;
  2618.  
  2619.  
  2620. &lt;div class=&quot;wp-block-syntaxhighlighter-code &quot;&gt;&lt;pre class=&quot;brush: bash; title: ; notranslate&quot;&gt;sudo chimg --log-console chrootfs config.yaml /tmp/chimg-noble
  2621. &lt;/pre&gt;&lt;/div&gt;
  2622.  
  2623.  
  2624. &lt;p&gt;That’s it. The modifications are now applied to the &lt;code&gt;/tmp/chimg-noble&lt;/code&gt; directory.&lt;/p&gt;
  2625.  
  2626.  
  2627.  
  2628. &lt;p&gt;&lt;/p&gt;</description>
  2629. <pubDate>Thu, 31 Jul 2025 18:15:36 +0000</pubDate>
  2630. </item>
  2631. <item>
  2632. <title>Oliver Grawert: Rooming with Mark</title>
  2633. <guid isPermaLink="false">http://ograblog.wordpress.com/?p=389</guid>
  2634. <link>https://ograblog.wordpress.com/2025/05/16/rooming-with-mark/</link>
  2635. <description>&lt;p class=&quot;has-black-color has-text-color has-link-color wp-elements-46088db9ef993c5ecc5629835e2d0dbd&quot;&gt;Yesterday, exactly twenty years ago my mobile rang while I was walking the dog. &lt;br /&gt;&lt;br /&gt;I had just returned from Sydney about a week ago (still battling with the last remains of my Jet-lag (I had never left Europe before!)) where I had attended the UbuntuDownUnder summit and had a 30min interview on the last day (that was literally rather like having a coffee with friends after lunch) with Mark Shuttleworth and Matt Zimmerman (back then Canonicals CTO) on a nice hotel terrace directly under a tree with a colony of flying foxes sleeping above our heads.&lt;br /&gt;&lt;br /&gt;There was Jane Silber (CEO) on the phone, telling me: “I’m so happy to tell you you are hired! In your new role we want you to create an educational flavor of Ubuntu, there will be a debian-edu/skolelinux gathering in Bergen in Norway from the 10th to 12th of June, are you okay flying there with Mark?”&lt;br /&gt;&lt;br /&gt;I rushed back home and told my girlfriend: “I’m hired, and I’ll fly Canonical One on my first business trip next month!” (Canonical One was the name of Marks plane). I learned the next weeks that Canonical had indeed booked a generic scheduled flight for me and we’d only meet at the venue &lt;img alt=&quot;🙂&quot; class=&quot;wp-smiley&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f642.png&quot; style=&quot;height: 1em;&quot; /&gt;&lt;br /&gt;&lt;br /&gt;The flight was a disaster, after we were boarding that small 20-seater 2 prop plane that was supposed to get us from Cologne to Amsterdam and the pilot started the engine my window all of a sudden was soaked in oil. We had to stay in the plane out on the filed while the mechanics were fixing the engine for like 2-3h so indeed I missed the connection in Amsterdam and had to stay for the night instead of arriving in Bergen the evening before the event started.&lt;br /&gt;&lt;br /&gt;When I arrived at the venue everyone was already busy hacking on stuff and I jumped right in alongside, finally meeting some users of LTSP (Linux Terminal Server Project) which I was upstream for at that time and working with them on the problems they faced in debian with it, tinkering with moodle as a teaching support system and looking at other edu software, meanwhile Mark was sitting on a bar-stool in a corner with his laptop hacking on launchpad code.&lt;br /&gt;&lt;br /&gt;When we went to our hotel in the evening it turned out they did not have our booking at all and were completely overbooked due to a jewelry exhibition they had in the house for that week. I talked like 15min to the lady behind the counter, showed her my booking confirmation PDF on the laptop, begged and flirted a lot and eventually she told us “We do have an exhibition room that we keep as spare, it only has one bed but you can have it and we will add a folding bed”. The room was actually a normal hotel room but completely set up with wallpaper tables all around the walls. &lt;br /&gt;&lt;br /&gt;Mark insisted to take the folding bed and I can tell you, he does not snore … (well, he didn’t back then)&lt;br /&gt;&lt;br /&gt;This was only the first of a plethora of adventures that followed in the upcoming 20 years, that phone call clearly changed my life and the company gave me the opportunity to work with the brightest, sharpest and most intelligent people on the planet in and outside of Canonical.&lt;br /&gt;&lt;br /&gt;It surely changed a lot over these years (when I started we were building the distro with 18 people in the distro team and did that for quite a few years before it actually got split into server, foundations, kernel and desktop teams) but it never lost its special spirit of having these exceptional people with such a high focus on bringing opensource to everyone and making it accessible to everyone. &lt;br /&gt;Indeed, with growth comes the requirement to make more money to pay the people, the responsibility to give your employees a certain amount of security and persistence grows, but Canonical and especially Mark have always managed to keep the balance to not lose that focus and do the right thing in the end.&lt;br /&gt;&lt;br /&gt;Ten years ago I said “onward to the next ten!!”, I won’t really say “onward to the next 20!” today, not because I ever plan to resign but simply because I doubt I still want to work full time when I’m 75 &lt;img alt=&quot;😉&quot; class=&quot;wp-smiley&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f609.png&quot; style=&quot;height: 1em;&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Thank you Mark for dragging me into this adventure and thank you for still having me! I still love the ride!!&lt;/p&gt;
  2636.  
  2637.  
  2638.  
  2639. &lt;p&gt;&lt;/p&gt;
  2640.  
  2641.  
  2642.  
  2643. &lt;p&gt;&lt;/p&gt;
  2644.  
  2645.  
  2646.  
  2647. &lt;p&gt;&lt;/p&gt;</description>
  2648. <pubDate>Tue, 29 Jul 2025 13:26:03 +0000</pubDate>
  2649. </item>
  2650. <item>
  2651. <title>Dimitri John Ledkov: Achieving actually full disk encryption of UEFI ESP at rest with TCG OPAL, FIPS, LUKS</title>
  2652. <guid isPermaLink="false">tag:blogger.com,1999:blog-347582618045055410.post-5137629174584752121</guid>
  2653. <link>http://blog.surgut.co.uk/2025/07/achieving-actually-full-disk-encryption.html</link>
  2654. <description>&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifDQL9Ducebgoi5rQaoK8ZXCp1ud1YHOguORDpgsmeD5E1PNT9Ptcdps3hLehMw6RHpXeovif1fgMpYF8lAucFgYmUZYgvdl68669qcjgUkN4hcpTRBzSK1HilijZgPjSxpCySZQtvtmkh7EjKMjMB27qIpJvXXmlFfobGPp7bIjoluItyPF6cJ7fnL1A/s1280/pexels-markus-winkler-1430818-3828944.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;853&quot; data-original-width=&quot;1280&quot; height=&quot;427&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifDQL9Ducebgoi5rQaoK8ZXCp1ud1YHOguORDpgsmeD5E1PNT9Ptcdps3hLehMw6RHpXeovif1fgMpYF8lAucFgYmUZYgvdl68669qcjgUkN4hcpTRBzSK1HilijZgPjSxpCySZQtvtmkh7EjKMjMB27qIpJvXXmlFfobGPp7bIjoluItyPF6cJ7fnL1A/w640-h427/pexels-markus-winkler-1430818-3828944.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Achieving full disk encryption using FIPS, TCG OPAL and LUKS to encrypt UEFI ESP on bare-metal and in VMs&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Many security standards such as CIS and STIG require to protect information at rest. For example, &lt;a href=&quot;https://doi.org/10.6028/NIST.SP.800-53r5&quot;&gt;NIST SP 800-53r5&lt;/a&gt; SC-28 advocate to use cryptographic protection, offline storage and TPMs to enhance protection of information confidentiality and/or integrity.&lt;/p&gt;&lt;p&gt;Traditionally to satisfy such controls on portable devices such as laptops one would utilize software based Full Disk Encryption - &lt;a href=&quot;https://support.apple.com/en-gb/guide/mac-help/mh11785/mac&quot;&gt;Mac OS X FileVault&lt;/a&gt;, &lt;a href=&quot;https://support.microsoft.com/en-us/windows/bitlocker-drive-encryption-76b92ac9-1040-48d6-9f5f-d14b3c5fa178&quot;&gt;Windows Bitlocker&lt;/a&gt;, &lt;a href=&quot;https://gitlab.com/cryptsetup/cryptsetup&quot;&gt;Linux cryptsetup LUKS2&lt;/a&gt;. In cases when FIPS cryptography is required, additional burden would be placed onto these systems to operate their kernels in FIPS mode.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://trustedcomputinggroup.org/&quot;&gt;Trusted Computing Group&lt;/a&gt; works on establishing many industry standards and specifications, which are widely adopted to improve safety and security of computing whilst keeping it easy to use. One of their most famous specifications them is TCG &lt;span face=&quot;Roboto-Medium&quot; style=&quot;background-color: white;&quot;&gt;TPM 2.0 (Trusted Platform Module). TPMs are now widely available on most devices and help to protect secret keys and attest systems. For example, most software full disk encryption solutions can utilise TCG TPM to store full disk encryption keys providing passwordless, biometric or pin-base ways to unlock the drives as well as attesting that system have not been modified or compromised whilst offline.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://trustedcomputinggroup.org/resource/storage-work-group-storage-security-subsystem-class-opal/&quot;&gt;TCG Storage Security Subsystem Class: Opal Specification&lt;/a&gt; is a set of specifications for features of data storage devices. The authors and contributors to OPAL are leading and well trusted storage manufacturers such as Samsung, Western Digital, Seagate Technologies, Dell, Google, Lenovo, IBM, Kioxia, among others. One of the features that Opal Specification enables is self-encrypting drives which becomes very powerful when combined with pre-boot authentication. Out of the box, such drives always and transparently encrypt all disk data using hardware acceleration. To protect data one can enter UEFI firmware setup (BIOS) to set NVMe single user password (or user + administrator/recovery passwords) to encrypt the disk encryption key. If one's firmware didn't come with such features, one can also use &lt;a href=&quot;https://sedutil.com/&quot;&gt;SEDutil&lt;/a&gt; to inspect and configure all of this. Latest release of major Linux distributions have SEDutil already packaged.&lt;/p&gt;&lt;p&gt;Once password is set, on startup, pre-boot authentication will request one to enter password - prior to booting any operating systems. It means that full disk is actually encrypted, including the UEFI ESP and all operating systems that are installed in case of dual or multi-boot installations. This also prevents tampering with ESP, UEFI bootloaders and kernels which with traditional software-based encryption often remain unencrypted and accessible. It also means one doesn't have to do special OS level repartitioning, or installation steps to ensure all data is encrypted at rest.&lt;/p&gt;&lt;p&gt;What about FIPS compliance? Well, the good news is that majority of the OPAL compliant hard drives and/or security sub-chips do have FIPS 140-3 certification. Meaning they have been tested by independent laboratories to ensure they do in-fact encrypt data. On the &lt;a href=&quot;https://csrc.nist.gov/Projects/cryptographic-module-validation-program/validated-modules/search&quot;&gt;CMVP&lt;/a&gt; website one can search for module name terms &quot;OPAL&quot; or &quot;NVMe&quot; or name of hardware vendor to locate FIPS certificates.&lt;/p&gt;&lt;p&gt;Are such drives widely available? Yes. For example, a common Thinkpad X1 gen 11 has OPAL NVMe drives as standard, and they have FIPS certification too. Thus, it is likely in your hardware fleet these are already widely available. Use sedutil to check if MediaEncrypt and LockingSupported features are available.&lt;/p&gt;&lt;p&gt;Well, this is great for laptops and physical servers, but you may ask - what about public or private cloud? Actually, more or less the same is already in-place in both. On CVMP website all major clouds have their disk encryption hardware certified, and all of them always encrypt all Virtual Machines with FIPS certified cryptography without an ability to opt-out. One is however in full control of how the encryption keys are managed: cloud-provider or self-managed (either with a cloud HSM or KMS or bring your own / external). See these relevant encryption options and key management docs for &lt;a href=&quot;https://cloud.google.com/docs/security/encryption/default-encryption?hl=en&quot;&gt;GCP&lt;/a&gt;, &lt;a href=&quot;https://learn.microsoft.com/en-us/azure/virtual-machines/disk-encryption-overview&quot;&gt;Azure&lt;/a&gt;, &lt;a href=&quot;https://maturitymodel.security.aws.dev/en/2.-foundational/kms/&quot;&gt;AWS&lt;/a&gt;. But the key takeaway without doing anything, at rest, VMs in public cloud are always encrypted and satisfy NIST SP 800-53 controls.&lt;/p&gt;&lt;p&gt;What about private cloud? Most Linux based private clouds ultimately use &lt;a href=&quot;https://www.qemu.org/&quot;&gt;qemu&lt;/a&gt; typically with qcow2 virtual disk images. Qemu supports user-space encryption of qcow2 disk, see this &lt;a href=&quot;https://www.qemu.org/docs/master/tools/qemu-img.html&quot;&gt;manpage&lt;/a&gt;. Such encryption encrypts the full virtual machine disk, including the bootloader and ESP. And it is handled entirely outside of the VM on the host - meaning the VM never has access to the disk encryption keys. Qemu implements this encryption entirely in userspace using gnutls, nettle, libgcrypt depending on how it was compiled. This also means one can satisfy FIPS requirements entirely in userspace without a Linux kernel in FIPS mode. Higher level APIs built on top of qemu also support qcow2 disk encryption, as in projects such as &lt;a href=&quot;https://libvirt.org/formatstorageencryption.html&quot;&gt;libvirt&lt;/a&gt; and &lt;a href=&quot;https://docs.openstack.org/cinder/latest/configuration/block-storage/volume-encryption.html&quot;&gt;OpenStack Cinder&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;If you carefully read the docs, you may notice that agent support is explicitly sometimes called out as not supported or not mentioned. Quite often agents running inside the OS may not have enough observability to them to assess if there is external encryption. It does mean that monitoring above encryption options require different approaches - for example monitor your cloud configuration using tools such as Wiz and &lt;a href=&quot;https://orca.security/&quot;&gt;Orca&lt;/a&gt;, rather than using agents inside individual VMs. For laptop / endpoint security agents, I do wish they would start gaining capability to report OPAL SED availability and status if it is active or not.&lt;/p&gt;&lt;p&gt;What about using software encryption none-the-less on top of the above solutions? It is commonly referred to double or multiple encryption. There will be an additional performance impact, but it can be worthwhile. It really depends on what you define as data at rest for yourself and which controls you need. If one has a dual-boot laptop, and wants to keep one OS encrypted whilst booted into the other, it can perfectly reasonable to encrypted the two using separate software encryption keys. In addition to the OPAL encryption of the ESP. For more targeted per-file / per-folder encryption, one can look into using &lt;a href=&quot;https://nuetzlich.net/gocryptfs/&quot;&gt;gocryptfs&lt;/a&gt; which is the best successor to the once popular, but now deprecated &lt;a href=&quot;https://www.ecryptfs.org/&quot;&gt;eCryptfs&lt;/a&gt; (amazing tool, but has fallen behind in development and can lead to data loss).&lt;/p&gt;&lt;p&gt;All of the above mostly talks about cryptographic encryption, which only provides confidentially but not data integrity. To protect integrity, one needs to choose how to maintain that. &lt;a href=&quot;https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/verity.html&quot;&gt;dm-verity&lt;/a&gt; is a good choice for read-only and rigid installations. For read-write workloads, it may be easier to deploy &lt;a href=&quot;https://zfsonlinux.org/&quot;&gt;ZFS&lt;/a&gt; or &lt;a href=&quot;https://btrfs.readthedocs.io/en/latest/index.html&quot;&gt;Btrfs&lt;/a&gt; instead. If one is using filesystems without a built-in integrity support such as XFS or Ext4, one can retrofit integrity layer to them by using &lt;a href=&quot;https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/dm-integrity.html&quot;&gt;dm-integrity&lt;/a&gt; (either standalone, or via dm-luks/cryptsetup --integrity option).&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;If one has a lot of estate and a lot of encryption keys to keep track off a key management solution is likely needed. The most popular solution is likely the one from Thales Group marketed under &lt;a href=&quot;https://cpl.thalesgroup.com/encryption/data-security-platform&quot;&gt;ChiperTrust Data Security Platform&lt;/a&gt; (previously Vormetric), but there are many others including OEM / Vendor / Hardware / Cloud specific or agnostic solutions.&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;I hope this crash course guide piques your interest to learn and discover modern confidentially and integrity solutions, and to re-affirm or change your existing controls w.r.t. to data protection at rest. &lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Full disk encryption, including UEFI ESP /boot/efi is now widely achievable by default on both baremetal machines and in VMs including with FIPS certification. To discuss more let's connect on &lt;a href=&quot;https://www.linkedin.com/in/dimitri-john-ledkov/&quot;&gt;Linkedin&lt;/a&gt;.&lt;/p&gt;</description>
  2655. <pubDate>Mon, 28 Jul 2025 11:13:30 +0000</pubDate>
  2656. <author>noreply@blogger.com (Dimitri John Ledkov)</author>
  2657. </item>
  2658. <item>
  2659. <title>Jonathan Carter: DebConf25</title>
  2660. <guid isPermaLink="false">https://jonathancarter.org/?p=11929</guid>
  2661. <link>https://jonathancarter.org/2025/07/19/debconf25/</link>
  2662. <description>&lt;p&gt;The last two weeks I attended &lt;a href=&quot;https://debconf25.debconf.org/&quot;&gt;DebConf and DebCamp&lt;/a&gt; in Brest, France.&lt;/p&gt;
  2663.  
  2664.  
  2665.  
  2666. &lt;p&gt;Usually, I like to do a more detailed write-up of DebConf, but I was already quite burnt out when I got here, so I’ll circle back to a few things that were important to me in later posts.&lt;/p&gt;
  2667.  
  2668.  
  2669.  
  2670. &lt;p&gt;In the meantime, thanks to everyone who made this DebConf possible, whether you volunteered for one task or were part of the organisation team. Also a special thanks to the &lt;a href=&quot;https://debconf25.debconf.org/sponsors/&quot;&gt;wonderful sponsors&lt;/a&gt; who made this entire event possible!&lt;/p&gt;
  2671.  
  2672.  
  2673.  
  2674. &lt;p&gt;See you next year in Argentina!&lt;/p&gt;
  2675.  
  2676.  
  2677.  
  2678. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;Jellyfish taken during daytrip at aquarium.&quot; class=&quot;wp-image-11936&quot; height=&quot;577&quot; src=&quot;https://jonathancarter.org/files/images/jellyfish-1024x577.jpeg&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;
  2679.  
  2680.  
  2681.  
  2682. &lt;p class=&quot;has-text-align-center&quot;&gt;&lt;em&gt;Jellyfish, taken during daytrip at aquarium.&lt;/em&gt;&lt;/p&gt;
  2683.  
  2684.  
  2685.  
  2686. &lt;p&gt;&lt;/p&gt;
  2687. &lt;img alt=&quot;&quot; height=&quot;0&quot; src=&quot;https://analytics.jonathancarter.org/piwik.php?idsite=1&amp;amp;rec=1&amp;amp;url=https%3A%2F%2Fjonathancarter.org%2F2025%2F07%2F19%2Fdebconf25%2F&amp;amp;action_name=DebConf25&amp;amp;urlref=https%3A%2F%2Fjonathancarter.org%2Ffeed%2F&quot; style=&quot;border: 0; width: 0; height: 0;&quot; width=&quot;0&quot; /&gt;</description>
  2688. <pubDate>Sat, 19 Jul 2025 17:12:49 +0000</pubDate>
  2689. </item>
  2690. <item>
  2691. <title>Faizul &quot;Piju&quot; 9M2PJU: OpenRocket: Design, Simulate, and Launch Your Own Rockets — Free and Open Source</title>
  2692. <guid isPermaLink="false">https://hamradio.my/?p=7766</guid>
  2693. <link>https://hamradio.my/2025/07/openrocket-design-simulate-and-launch-your-own-rockets-free-and-open-source/</link>
  2694. <description>&lt;h2 class=&quot;wp-block-heading&quot;&gt;&lt;/h2&gt;
  2695.  
  2696.  
  2697.  
  2698. &lt;p&gt;Have you ever dreamed of building and launching your own rockets? Whether you’re a &lt;strong&gt;student&lt;/strong&gt;, &lt;strong&gt;educator&lt;/strong&gt;, &lt;strong&gt;hobbyist&lt;/strong&gt;, or &lt;strong&gt;aerospace enthusiast&lt;/strong&gt;, there’s one tool that makes rocketry accessible, educational, and exciting: &lt;strong&gt;OpenRocket&lt;/strong&gt;.&lt;/p&gt;
  2699.  
  2700.  
  2701.  
  2702. &lt;p&gt;&lt;strong&gt;OpenRocket&lt;/strong&gt; is a &lt;strong&gt;free, fully open-source model rocket simulator&lt;/strong&gt; that helps you &lt;strong&gt;design, simulate, and optimize rockets&lt;/strong&gt; in a virtual environment — all before a single part is printed or assembled.&lt;/p&gt;
  2703.  
  2704.  
  2705.  
  2706. &lt;p&gt;And the best part? It’s &lt;strong&gt;completely free&lt;/strong&gt;, runs on &lt;strong&gt;Windows, macOS, and Linux&lt;/strong&gt;, and is trusted by thousands around the world — from classrooms to high-powered launch pads.&lt;/p&gt;
  2707.  
  2708.  
  2709.  
  2710. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2711.  
  2712.  
  2713.  
  2714. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;🛰&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/1f6f0.png&quot; style=&quot;height: 1em;&quot; /&gt; What is OpenRocket?&lt;/h3&gt;
  2715.  
  2716.  
  2717.  
  2718. &lt;p&gt;OpenRocket is a powerful simulation tool designed to make rocket science &lt;strong&gt;understandable and practical&lt;/strong&gt;. It enables users to build virtual models of rockets, test their flight performance, and iterate on designs long before committing to physical builds. Whether you’re building a simple school project or a multi-stage high-powered model, OpenRocket is built to support you at every step.&lt;/p&gt;
  2719.  
  2720.  
  2721.  
  2722. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2723.  
  2724.  
  2725.  
  2726. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;🛠&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/1f6e0.png&quot; style=&quot;height: 1em;&quot; /&gt; Key Features&lt;/h3&gt;
  2727.  
  2728.  
  2729.  
  2730. &lt;ul class=&quot;wp-block-list&quot;&gt;
  2731. &lt;li&gt;&lt;img alt=&quot;🖱&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/1f5b1.png&quot; style=&quot;height: 1em;&quot; /&gt; &lt;strong&gt;Drag-and-Drop Rocket Design&lt;/strong&gt;&lt;br /&gt;Build your rocket with ease using a graphical interface — choose body tubes, fins, nose cones, engines, recovery systems, and more.&lt;/li&gt;
  2732.  
  2733.  
  2734.  
  2735. &lt;li&gt;&lt;img alt=&quot;🧮&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/1f9ee.png&quot; style=&quot;height: 1em;&quot; /&gt; &lt;strong&gt;Accurate Flight Simulations&lt;/strong&gt;&lt;br /&gt;Simulate flights in real-world conditions with detailed physics modeling, including wind, thrust curves, drag, gravity, and stability.&lt;/li&gt;
  2736.  
  2737.  
  2738.  
  2739. &lt;li&gt;&lt;img alt=&quot;📊&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/1f4ca.png&quot; style=&quot;height: 1em;&quot; /&gt; &lt;strong&gt;Detailed Analysis Tools&lt;/strong&gt;&lt;br /&gt;Visualize graphs for altitude, velocity, acceleration, angle of attack, and more — perfect for science fair projects and engineering analysis.&lt;/li&gt;
  2740.  
  2741.  
  2742.  
  2743. &lt;li&gt;&lt;img alt=&quot;🚀&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/1f680.png&quot; style=&quot;height: 1em;&quot; /&gt; &lt;strong&gt;Support for Multistage and Cluster Rockets&lt;/strong&gt;&lt;br /&gt;Go beyond basic designs and experiment with multi-engine configurations, boosters, and complex recovery systems.&lt;/li&gt;
  2744.  
  2745.  
  2746.  
  2747. &lt;li&gt;&lt;img alt=&quot;📐&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/1f4d0.png&quot; style=&quot;height: 1em;&quot; /&gt; &lt;strong&gt;Advanced Stability Calculations&lt;/strong&gt;&lt;br /&gt;See real-time updates on your rocket’s center of pressure and center of gravity — helping ensure stable flights.&lt;/li&gt;
  2748.  
  2749.  
  2750.  
  2751. &lt;li&gt;&lt;img alt=&quot;🎓&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/1f393.png&quot; style=&quot;height: 1em;&quot; /&gt; &lt;strong&gt;Education-First Philosophy&lt;/strong&gt;&lt;br /&gt;Built with educators and students in mind — great for teaching physics, aerodynamics, math, and engineering concepts.&lt;/li&gt;
  2752.  
  2753.  
  2754.  
  2755. &lt;li&gt;&lt;img alt=&quot;🔓&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/1f513.png&quot; style=&quot;height: 1em;&quot; /&gt; &lt;strong&gt;100% Free and Open Source (GPLv3 License)&lt;/strong&gt;&lt;br /&gt;Modify, contribute, or use it freely in academic and personal projects.&lt;/li&gt;
  2756. &lt;/ul&gt;
  2757.  
  2758.  
  2759.  
  2760. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2761.  
  2762.  
  2763.  
  2764. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;👨‍🏫&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/1f468-200d-1f3eb.png&quot; style=&quot;height: 1em;&quot; /&gt; Perfect for Classrooms and Competitions&lt;/h3&gt;
  2765.  
  2766.  
  2767.  
  2768. &lt;p&gt;OpenRocket is a favorite in schools, universities, and STEM clubs. It’s ideal for:&lt;/p&gt;
  2769.  
  2770.  
  2771.  
  2772. &lt;ul class=&quot;wp-block-list&quot;&gt;
  2773. &lt;li&gt;Physics and engineering lessons&lt;/li&gt;
  2774.  
  2775.  
  2776.  
  2777. &lt;li&gt;STEM competitions&lt;/li&gt;
  2778.  
  2779.  
  2780.  
  2781. &lt;li&gt;High school and university rocketry teams&lt;/li&gt;
  2782.  
  2783.  
  2784.  
  2785. &lt;li&gt;Maker clubs and hobbyist communities&lt;/li&gt;
  2786. &lt;/ul&gt;
  2787.  
  2788.  
  2789.  
  2790. &lt;p&gt;With OpenRocket, students don’t just learn theory — they test it, visualize it, and bring it to life.&lt;/p&gt;
  2791.  
  2792.  
  2793.  
  2794. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2795.  
  2796.  
  2797.  
  2798. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;💻&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/1f4bb.png&quot; style=&quot;height: 1em;&quot; /&gt; Cross-Platform and Easy to Use&lt;/h3&gt;
  2799.  
  2800.  
  2801.  
  2802. &lt;p&gt;OpenRocket runs smoothly on &lt;strong&gt;Windows, Linux, and macOS&lt;/strong&gt;, with a lightweight footprint and no complex setup required. Just download, install, and launch.&lt;/p&gt;
  2803.  
  2804.  
  2805.  
  2806. &lt;p&gt;Want to try the latest features? There are &lt;strong&gt;stable&lt;/strong&gt; and &lt;strong&gt;experimental&lt;/strong&gt; versions available, with an active community improving the project continuously.&lt;/p&gt;
  2807.  
  2808.  
  2809.  
  2810. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2811.  
  2812.  
  2813.  
  2814. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;🌍&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/1f30d.png&quot; style=&quot;height: 1em;&quot; /&gt; Join a Global Community&lt;/h3&gt;
  2815.  
  2816.  
  2817.  
  2818. &lt;p&gt;OpenRocket is powered by passionate volunteers and used worldwide. With an active community on forums and GitHub, it’s easy to get help, share ideas, and even contribute your own code or simulations.&lt;/p&gt;
  2819.  
  2820.  
  2821.  
  2822. &lt;p&gt;If you’re ready to explore the world of rocketry without burning through your budget, &lt;strong&gt;OpenRocket is your launchpad&lt;/strong&gt;.&lt;/p&gt;
  2823.  
  2824.  
  2825.  
  2826. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2827.  
  2828.  
  2829.  
  2830. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;🔗&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/1f517.png&quot; style=&quot;height: 1em;&quot; /&gt; Ready for Liftoff?&lt;/h3&gt;
  2831.  
  2832.  
  2833.  
  2834. &lt;p&gt;Visit &lt;a href=&quot;https://openrocket.info/&quot;&gt;openrocket.info&lt;/a&gt; and start building your dream rocket today.&lt;/p&gt;
  2835.  
  2836.  
  2837.  
  2838. &lt;p&gt;&lt;strong&gt;Design. Simulate. Launch. Learn. Repeat.&lt;/strong&gt;&lt;/p&gt;
  2839.  
  2840.  
  2841.  
  2842. &lt;p&gt;Welcome to the world of &lt;strong&gt;OpenRocket&lt;/strong&gt; — where rocket science is for everyone.&lt;/p&gt;</description>
  2843. <pubDate>Sat, 19 Jul 2025 16:15:07 +0000</pubDate>
  2844. </item>
  2845. <item>
  2846. <title>Faizul &quot;Piju&quot; 9M2PJU: Digital – Design, Simulate, and Understand Logic Circuits Like Never Before</title>
  2847. <guid isPermaLink="false">https://hamradio.my/?p=7763</guid>
  2848. <link>https://hamradio.my/2025/07/digital-design-simulate-and-understand-logic-circuits-like-never-before/</link>
  2849. <description>&lt;h2 class=&quot;wp-block-heading&quot;&gt;&lt;/h2&gt;
  2850.  
  2851.  
  2852.  
  2853. &lt;p&gt;If you’ve ever wanted to dive into the world of &lt;strong&gt;digital electronics&lt;/strong&gt;, whether as a student, educator, engineer, or hobbyist, you’re going to love this tool: &lt;strong&gt;Digital&lt;/strong&gt; — a powerful, free, and open-source logic circuit simulator created by &lt;strong&gt;Helmut Neemann&lt;/strong&gt;. Available on GitHub at &lt;a href=&quot;https://github.com/hneemann/Digital&quot;&gt;hneemann/Digital&lt;/a&gt;, this Java-based application combines clarity, flexibility, and educational value in one sleek package.&lt;/p&gt;
  2854.  
  2855.  
  2856.  
  2857. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;⚙&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/2699.png&quot; style=&quot;height: 1em;&quot; /&gt; What Is Digital?&lt;/h3&gt;
  2858.  
  2859.  
  2860.  
  2861. &lt;p&gt;&lt;strong&gt;Digital&lt;/strong&gt; is a &lt;strong&gt;logic circuit simulator&lt;/strong&gt; designed with a clear goal: to make the teaching, learning, and development of digital logic &lt;strong&gt;intuitive and visual&lt;/strong&gt;. It lets you create, simulate, and analyze logic circuits ranging from basic gates to complex CPUs — all with a &lt;strong&gt;drag-and-drop interface&lt;/strong&gt; and &lt;strong&gt;real-time simulation&lt;/strong&gt;.&lt;/p&gt;
  2862.  
  2863.  
  2864.  
  2865. &lt;p&gt;Unlike other bloated EDA software, Digital is refreshingly simple, elegant, and lightweight. But don’t let its simplicity fool you — it’s capable of simulating complex architectures with &lt;strong&gt;clocked components, finite state machines, memory modules, and even custom microprocessors&lt;/strong&gt;.&lt;/p&gt;
  2866.  
  2867.  
  2868.  
  2869. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2870.  
  2871.  
  2872.  
  2873. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;🔑&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/1f511.png&quot; style=&quot;height: 1em;&quot; /&gt; Key Features&lt;/h3&gt;
  2874.  
  2875.  
  2876.  
  2877. &lt;ul class=&quot;wp-block-list&quot;&gt;
  2878. &lt;li&gt;&lt;img alt=&quot;🖱&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/1f5b1.png&quot; style=&quot;height: 1em;&quot; /&gt; &lt;strong&gt;Intuitive Interface&lt;/strong&gt;&lt;br /&gt;Drag and drop components onto your canvas, connect wires, and see how your circuit behaves in real-time.&lt;/li&gt;
  2879.  
  2880.  
  2881.  
  2882. &lt;li&gt;&lt;img alt=&quot;🕒&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/1f552.png&quot; style=&quot;height: 1em;&quot; /&gt; &lt;strong&gt;Real-Time Simulation&lt;/strong&gt;&lt;br /&gt;Changes are reflected immediately, with live logic levels and animations that bring your circuits to life.&lt;/li&gt;
  2883.  
  2884.  
  2885.  
  2886. &lt;li&gt;&lt;img alt=&quot;🧩&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/1f9e9.png&quot; style=&quot;height: 1em;&quot; /&gt; &lt;strong&gt;Modular Design&lt;/strong&gt;&lt;br /&gt;Use subcircuits and hierarchical design to keep things organized, even in large-scale projects.&lt;/li&gt;
  2887.  
  2888.  
  2889.  
  2890. &lt;li&gt;&lt;img alt=&quot;⏱&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/23f1.png&quot; style=&quot;height: 1em;&quot; /&gt; &lt;strong&gt;Clocked Components&lt;/strong&gt;&lt;br /&gt;Simulate registers, flip-flops, RAM, and sequential logic effortlessly.&lt;/li&gt;
  2891.  
  2892.  
  2893.  
  2894. &lt;li&gt;&lt;img alt=&quot;🧠&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/1f9e0.png&quot; style=&quot;height: 1em;&quot; /&gt; &lt;strong&gt;Built-in CPU &amp;amp; Assembler&lt;/strong&gt;&lt;br /&gt;Digital includes a simple, yet powerful CPU with its own instruction set and assembler — ideal for teaching &lt;strong&gt;computer architecture&lt;/strong&gt;.&lt;/li&gt;
  2895.  
  2896.  
  2897.  
  2898. &lt;li&gt;&lt;img alt=&quot;🧑‍🏫&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/1f9d1-200d-1f3eb.png&quot; style=&quot;height: 1em;&quot; /&gt; &lt;strong&gt;Made for Education&lt;/strong&gt;&lt;br /&gt;Widely used in universities and schools. Perfect for explaining logic gates, truth tables, FSMs, and microprocessor fundamentals.&lt;/li&gt;
  2899.  
  2900.  
  2901.  
  2902. &lt;li&gt;&lt;img alt=&quot;💻&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/1f4bb.png&quot; style=&quot;height: 1em;&quot; /&gt; &lt;strong&gt;Cross-platform (Java-based)&lt;/strong&gt;&lt;br /&gt;Works on Windows, macOS, and Linux. Just download and run!&lt;/li&gt;
  2903.  
  2904.  
  2905.  
  2906. &lt;li&gt;&lt;img alt=&quot;🔓&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/1f513.png&quot; style=&quot;height: 1em;&quot; /&gt; &lt;strong&gt;Open Source (GPL-3.0 License)&lt;/strong&gt;&lt;br /&gt;Actively maintained and completely free. Fork it, contribute, or adapt it to your own projects.&lt;/li&gt;
  2907. &lt;/ul&gt;
  2908.  
  2909.  
  2910.  
  2911. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2912.  
  2913.  
  2914.  
  2915. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;📚&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/1f4da.png&quot; style=&quot;height: 1em;&quot; /&gt; Who Is It For?&lt;/h3&gt;
  2916.  
  2917.  
  2918.  
  2919. &lt;ul class=&quot;wp-block-list&quot;&gt;
  2920. &lt;li&gt;&lt;strong&gt;Students&lt;/strong&gt;: Learn digital logic step by step with instant feedback.&lt;/li&gt;
  2921.  
  2922.  
  2923.  
  2924. &lt;li&gt;&lt;strong&gt;Educators&lt;/strong&gt;: Use it in the classroom to teach logic circuits and CPU architecture interactively.&lt;/li&gt;
  2925.  
  2926.  
  2927.  
  2928. &lt;li&gt;&lt;strong&gt;Makers &amp;amp; Hobbyists&lt;/strong&gt;: Build and test your own logic-based inventions.&lt;/li&gt;
  2929.  
  2930.  
  2931.  
  2932. &lt;li&gt;&lt;strong&gt;Researchers &amp;amp; Developers&lt;/strong&gt;: Prototype logic systems before implementing them in hardware.&lt;/li&gt;
  2933. &lt;/ul&gt;
  2934.  
  2935.  
  2936.  
  2937. &lt;p&gt;Whether you’re building an &lt;strong&gt;ALU&lt;/strong&gt;, a &lt;strong&gt;traffic light controller&lt;/strong&gt;, or your own &lt;strong&gt;8-bit CPU&lt;/strong&gt;, Digital gives you the tools to simulate it with precision.&lt;/p&gt;
  2938.  
  2939.  
  2940.  
  2941. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2942.  
  2943.  
  2944.  
  2945. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;🚀&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/1f680.png&quot; style=&quot;height: 1em;&quot; /&gt; Get Started in Minutes&lt;/h3&gt;
  2946.  
  2947.  
  2948.  
  2949. &lt;ol class=&quot;wp-block-list&quot;&gt;
  2950. &lt;li&gt;Head over to the &lt;a href=&quot;https://github.com/hneemann/Digital&quot;&gt;Digital GitHub repository&lt;/a&gt;.&lt;/li&gt;
  2951.  
  2952.  
  2953.  
  2954. &lt;li&gt;Download the latest release (JAR file).&lt;/li&gt;
  2955.  
  2956.  
  2957.  
  2958. &lt;li&gt;Run it using Java (Java 8 or higher required).&lt;/li&gt;
  2959.  
  2960.  
  2961.  
  2962. &lt;li&gt;Start building your first circuit with just a few clicks.&lt;/li&gt;
  2963. &lt;/ol&gt;
  2964.  
  2965.  
  2966.  
  2967. &lt;p&gt;No complex installations. No licenses. No fees. Just pure learning and tinkering joy.&lt;/p&gt;
  2968.  
  2969.  
  2970.  
  2971. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2972.  
  2973.  
  2974.  
  2975. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;❤&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/16.0.1/72x72/2764.png&quot; style=&quot;height: 1em;&quot; /&gt; Final Thoughts&lt;/h3&gt;
  2976.  
  2977.  
  2978.  
  2979. &lt;p&gt;In a world of expensive and overly complex simulation tools, &lt;strong&gt;Digital&lt;/strong&gt; shines as a &lt;strong&gt;free, open-source&lt;/strong&gt;, and &lt;strong&gt;educator-friendly&lt;/strong&gt; alternative. It’s ideal for classrooms, home labs, and anyone curious about what happens beneath the silicon.&lt;/p&gt;
  2980.  
  2981.  
  2982.  
  2983. &lt;p&gt;So if you’re ready to master digital logic — from basic gates to building your own CPU — it’s time to download &lt;strong&gt;Digital&lt;/strong&gt; and start creating.&lt;/p&gt;
  2984.  
  2985.  
  2986.  
  2987. &lt;p&gt;&lt;strong&gt;Explore. Simulate. Learn. With Digital.&lt;/strong&gt;&lt;/p&gt;</description>
  2988. <pubDate>Fri, 18 Jul 2025 16:05:45 +0000</pubDate>
  2989. </item>
  2990.  
  2991. </channel>
  2992. </rss>
  2993.  

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.ubuntu.com/rss20.xml

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