This is a valid RSS feed.
This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.
line 366, column 0: (5 occurrences) [help]
<p>Ubuntu Studio now includes <strong><a data-id="pencil ...
line 366, column 0: (4 occurrences) [help]
<p>Ubuntu Studio now includes <strong><a data-id="pencil ...
<description><img alt="Xubuntu 25.10 &quot;Questing Quokka& ...
line 904, column 57: (2 occurrences) [help]
<title>St&eacute;phane Graber: Announcing Incus 6.17</title>
^
line 1086, column 0: (2 occurrences) [help]
<description><p>I’ve been wanting to create some Bible study software ...
line 1086, column 0: (2 occurrences) [help]
<description><p>I’ve been wanting to create some Bible study software ...
line 2236, column 0: (6 occurrences) [help]
<figure class="alignright size-large is-resized"><a href= ...
line 2236, column 0: (6 occurrences) [help]
<figure class="alignright size-large is-resized"><a href= ...
line 2236, column 0: (6 occurrences) [help]
<figure class="alignright size-large is-resized"><a href= ...
line 2236, column 0: (6 occurrences) [help]
<figure class="alignright size-large is-resized"><a href= ...
line 2236, column 0: (6 occurrences) [help]
<figure class="alignright size-large is-resized"><a href= ...
line 2236, column 0: (6 occurrences) [help]
<figure class="alignright size-large is-resized"><a href= ...
line 2236, column 0: (6 occurrences) [help]
<figure class="alignright size-large is-resized"><a href= ...
line 2236, column 0: (6 occurrences) [help]
<figure class="alignright size-large is-resized"><a href= ...
line 2236, column 0: (6 occurrences) [help]
<figure class="alignright size-large is-resized"><a href= ...
line 2236, column 0: (6 occurrences) [help]
<figure class="alignright size-large is-resized"><a href= ...
line 2236, column 0: (6 occurrences) [help]
<figure class="alignright size-large is-resized"><a href= ...
<description><table align="center" cellpadding="0" c ...
<description><table align="center" cellpadding="0" c ...
</channel>
<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>Planet Ubuntu</title>
<link>http://planet.ubuntu.com/</link>
<language>en</language>
<description>Planet Ubuntu - http://planet.ubuntu.com/</description>
<item>
<title>Ubuntu Blog: NVIDIA DGX Spark: The developer’s personal AI supercomputer built on an Ubuntu base</title>
<guid isPermaLink="true">https://ubuntu.com//blog/nvidia-dgx-spark-ubuntu-base</guid>
<link>https://ubuntu.com//blog/nvidia-dgx-spark-ubuntu-base</link>
<description><p>The history of computing is a story of incredible change, but not every revolution happens at the same speed. It took decades to downsize the mainframe, invent the microprocessor, and bring computing into personal devices. Today, we are witnessing a new era: the move from massive, centralized AI clusters to powerful, on-device AI PCs. And it’s happening at an explosive pace. This article explores why the second revolution is so much faster, and how years of advancements in the Ubuntu ecosystem have helped facilitate this shift.</p>
<h2 class="wp-block-heading">NVIDIA DGX Spark: huge AI models running locally</h2>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img alt="" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_680/https%3A%2F%2Fubuntu.com%2Fwp-content%2Fuploads%2F714b%2F1758132002210.jpeg" width="680" />Credit: <a href="https://www.linkedin.com/posts/nvidia-ai_sparksomethingbig-activity-7383656061058269184-Y-Mx?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAADEwr_sBw6omXnnXyXfg-_rYjVqBRvsnjmk">NVIDIA</a></figure></div>
<p>As consumers demand more AI capabilities at their fingertips, a move from massive, centralized GPU clusters to on-device AI is currently happening, at a fast pace. NVIDIA has just announced the availability of DGX Spark for AI developers. The system is designed from the ground up to build and run AI.</p>
<p><a href="https://www.nvidia.com/en-us/products/workstations/dgx-spark/">NVIDIA DGX Spark </a>brings enormous computing power to the hands of developers. It delivers 1 petaFLOP of AI performance in a power-efficient, compact design. With 128 GB of unified system memory, the Blackwell GPU and the Grace CPU with 20 ARM cores, it can handle AI models of up to 200B parameters. Using <a href="https://www.nvidia.com/en-us/networking/ethernet-adapters/">NVIDIA ConnectX </a>networking, two DGX Spark systems can be connected to work on even larger models up to 405B parameters. This setup provides a robust platform for prototyping, fine-tuning, and inferencing large models locally DGX Spark provides a full stack solution for AI developers including the NVIDIA AI software stack to accelerate AI workloads and support an incredible third-party developer ecosystem.</p>
<h2 class="wp-block-heading">Ubuntu as a base for DGX OS</h2>
<p>The NVIDIA DGX Spark operating system, DGX OS, is based on Ubuntu. DGX OS makes use of Ubuntu’s established ecosystem and trusted repositories to accelerate development. The Ubuntu ecosystem brings years of open-source maturity in the software stack, especially the software stack around the CUDA runtime and CUDA development tools. Canonical helps ensure a secure computing environment by maintaining consistent updates, patching thousands of open-source packages and addressing CVEs in a timely manner. </p>
<p>Ubuntu brings three fundamental pillars to enrich the developer experience in the DGX OS:</p>
<h3 class="wp-block-heading">1. Ubuntu uses the same kernel for Ubuntu Server and Ubuntu Desktop</h3>
<p>Because Ubuntu Server and Ubuntu Desktop share the same core kernel, they are not separate operating systems. This unified foundation allows developers to install server packages on the desktop and vice-versa. As a result, Ubuntu desktop benefits from years of mature development in the CUDA ecosystem on Ubuntu servers. AI workloads running on massive cloud clusters can use the exact same software stack on DGX OS, creating a consistent and stable development environment.</p>
<h3 class="wp-block-heading">2. Arm support in Ubuntu</h3>
<p>Canonical has supported Arm processors since 2011, establishing Ubuntu as a scalable platform for AI on both servers and devices. This long-standing and consistent support for the 64-bit Armv8 architecture ensures NVIDIA DGX Spark, which features an ARM-based Grace CPU, is fully supported from its launch.</p>
<h3 class="wp-block-heading">3. Mature package distribution and supply chain security</h3>
<p>DGX OS leverages Ubuntu’s mature package management and resilient software supply chain to be a production-ready platform. It inherits trusted repositories, ensuring software is validated. Additionally, Canonical’s Expanded Security Maintenance (ESM), available through Ubuntu Pro, provides timely security patches for open source packages, which are critical for AI and data science workloads.</p>
<p>By building DGX OS on Ubuntu, NVIDIA could leverage the same software that runs on cloud servers for a compact desktop device. This was possible due to Ubuntu’s mature support for Arm processors and its securely-designed software supply chain, which created a stable, production-ready platform and significantly sped up development.</p>
<h2 class="wp-block-heading"><a></a>A unified developer experience</h2>
<p>The NVIDIA AI platform software architecture makes it possible for DGX Spark users to easily move their models from their desktop to DGX Cloud or any accelerated cloud or data center infrastructure, making it easier to prototype, fine-tune, and iterate.</p>
<p>To give developers a familiar experience, NVIDIA DGX Spark mirrors the same software architecture that powers industrial-strength AI factories. It comes preconfigured with the latest NVIDIA AI software stack, along with developer program access to NVIDIA NIM™ and NVIDIA Blueprints. This means developers can hit the ground running using leading open source AI models and common tools such as PyTorch, Jupyter, and Ollama to prototype, fine-tune, and inference on NVIDIA DGX Spark and easily deploy in the data center or cloud. With DGX Spark, developers benefit from a familiar environment and a streamlined setup experience via a setup wizard that ensures fast onboarding.</p>
<h2 class="wp-block-heading"><a></a>Looking ahead</h2>
<p>The introduction of NVIDIA DGX Spark marks an exciting milestone in desktop AI computing. As AI continues to transform industries and drive innovation, tools like DGX Spark will play a crucial role in democratizing access to powerful AI development resources. At Canonical, we’re excited to continue our collaboration with NVIDIA, supporting the AI community with robust, open-source solutions that power the next generation of AI breakthroughs.</p>
<p> <a class="p-button--small p-button--positive" href="https://ubuntu.com/nvidia" rel="noreferrer noopener" target="_blank">Learn more about Canonical’s work with NVIDIA</a></p>
<h2 class="wp-block-heading">Further reading</h2>
<ul>
<li><a href="https://canonical.com/partners/silicon"><u>Discover our silicon partner program</u></a></li>
</ul>
<p></p></description>
<pubDate>Tue, 14 Oct 2025 14:30:26 +0000</pubDate>
</item>
<item>
<title>The Fridge: Ubuntu Weekly Newsletter Issue 913</title>
<guid isPermaLink="false">https://fridge.ubuntu.com/?p=10661</guid>
<link>https://fridge.ubuntu.com/2025/10/13/ubuntu-weekly-newsletter-issue-913/</link>
<description><figure class="wp-block-image"><img alt="" src="https://fridge.ubuntu.com/wp-content/uploads/2020/02/c9d7/header.png" /></figure>
<p>Welcome to the Ubuntu Weekly Newsletter, <strong>Issue 913 for the week of October 5 – 11, 2025</strong>. The full version of this issue is available <a href="https://discourse.ubuntu.com/t/ubuntu-weekly-newsletter-issue-913/68863">here</a>.</p>
<p>In this issue we cover:</p>
<ul><li>Ubuntu 25.10 (“Questing Quokka”) released</li><li>The clock is ticking: Ubuntu Summit 25.10 is just around the corner</li><li>Ubuntu Stats</li><li>Hot in Support</li><li>Other Meeting Reports</li><li>Upcoming Meetings and Events</li><li>UbuCon Latin America 2025 Agenda Now Available</li><li>LoCo Events</li><li>How we delivered the new APT solver in 25.10</li><li>Staying in the loop on the Ubuntu Discourse [POLL]</li><li>Ubuntu 25.10: A Retrospective</li><li>Ubuntu Cloud News</li><li>In the Blogosphere</li><li>Featured Audio and Video</li><li>Updates and Security for Ubuntu 22.04, 24.04, 25.04, and 25.10</li><li>And much more!</li></ul>
<p><strong>The Ubuntu Weekly Newsletter is brought to you by:</strong></p>
<ul><li>Krytarik Raido</li><li>Bashing-om</li><li>Chris Guiver</li><li>Wild Man</li><li>irihapeti</li><li>And many others</li></ul>
<p>If you have a story idea for the Weekly Newsletter, join the <a href="https://lists.ubuntu.com/mailman/listinfo/Ubuntu-news-team">Ubuntu News Team mailing list</a> and submit it. Ideas can also be added to the <a href="https://discourse.ubuntu.com/t/ubuntu-weekly-newsletter-ideas/40053">wiki</a>!</p>
<div class="wp-block-image"><figure class="alignleft"><img alt="" src="https://fridge.ubuntu.com/wp-content/uploads/2015/05/ab28/CCL.png" /></figure></div>
<p><a href="https://fridge.ubuntu.com/2025/10/13/ubuntu-weekly-newsletter-issue-913/"></a>.</p></description>
<pubDate>Mon, 13 Oct 2025 22:17:42 +0000</pubDate>
</item>
<item>
<title>Kubuntu General News: Kubuntu 25.10 “Questing Quokka” Released:</title>
<guid isPermaLink="false">https://kubuntu.org/?p=5351</guid>
<link>https://kubuntu.org/news/kubuntu-25-10-questing-quokka-released/</link>
<description><p>October 9, 2025 – The Kubuntu team is thrilled to announce the release of Kubuntu 25.10, codenamed “Questing Quokka”!</p>
<figure class="wp-block-image size-full is-resized"><img alt="" class="wp-image-5354" height="473" src="https://kubuntu.org/wp-content/uploads/2025/10/b709/Kubuntu_Questing.png" width="840" /></figure>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>Kubuntu remains completely free to download, use, and share—empowering our global community to innovate without barriers. Download it now from <a href="https://kubuntu.org/getkubuntu" rel="noreferrer noopener" target="_blank">kubuntu.org/getkubuntu</a> and join the conversation in our forums or IRC channels.</p>
<h2>Three Exciting New Features for Kubuntu Users</h2>
<p>Here are three standout enhancements that Kubuntu 25.10 brings to your desktop, designed to make your workflow faster, more secure, and visually stunning:</p>
<ul><li><strong>KDE Plasma 6.4: A Refined and Responsive Desktop</strong> 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.<br /></li><li><strong>Plasma Wayland as Default Session</strong> 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.<br /></li><li><strong>Rust-Powered sudo-rs for Safer System Management</strong> 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.</li></ul>
<h2>What’s New Under the Hood</h2>
<p>Beyond these highlights, Kubuntu 25.10 inherits Ubuntu’s robust platform upgrades:</p>
<ul><li><strong>Linux Kernel 6.17</strong>: Better Arm and RISC-V support, nested virtualization, and Intel TDX for confidential computing—ideal for developers and edge deployments.<br /></li><li><strong>Updated Developer Tools</strong>: OpenJDK 25, Python 3.14 RC3, Golang 1.25, GCC 15, and Rust 1.85 (with 1.88 available) to supercharge your coding sessions.<br /></li><li><strong>Enhanced Security and Accessibility</strong>: 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.<br /></li><li><strong>KDE Applications Galore</strong>: Everything from Dolphin file manager to Konsole terminal refreshed to 25.08 versions, plus legacy Qt5/KF5 support for your favorite older apps.</li></ul>
<p>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.</p>
<p>Ready to quokka-hop into the future? Upgrade today or install fresh. Questions? Head to <a href="https://discourse.ubuntu.com/c/flavors/kubuntu/187">https://discourse.ubuntu.com/c/flavors/kubuntu/187</a> or ping us on Matrix at <a href="https://matrix.to/#/#kubuntu:matrix.org" rel="noreferrer noopener" target="_blank">#kubuntu:matrix.org</a>.</p>
<p>Stay tuned for the Ubuntu Summit on October 23-24, where we’ll showcase more on Kubuntu’s role in open source innovation</p>
<p>P.S New updated website coming soon…. keep an eye on kubuntu.org for when we switch</p></description>
<pubDate>Fri, 10 Oct 2025 13:48:07 +0000</pubDate>
</item>
<item>
<title>The Fridge: Ubuntu 25.10 (“Questing Quokka”) released</title>
<guid isPermaLink="false">https://fridge.ubuntu.com/?p=10656</guid>
<link>https://fridge.ubuntu.com/2025/10/10/ubuntu-25-10-questing-quokka-released/</link>
<description><p>Ubuntu 25.10, codenamed “Questing Quokka”, is here. This release continues Ubuntu’s proud tradition of integrating the latest and greatest open-source technologies into a high-quality, easy-to-use Linux distribution. The team has been hard at work through this cycle, partnering with the community and our partners, to introduce new features and fix bugs.</p>
<p>Ubuntu 25.10 introduces GNOME 49 with media and power controls on the lock screen, HDR brightness settings, and enhanced accessibility features in line with the European Accessibility Act. New apps include Loupe, a modern image viewer, and Ptyxis, a lightweight terminal emulator.</p>
<p>Built on the Linux 6.17 kernel, this release brings nested virtualization on Arm, early Intel TDX host support for confidential computing, and enhanced support for TPM-backed full disk encryption with passphrase support, recovery key management and better integration with firmware updates. Network Time Security (NTS) is enabled by default for more secure time synchronization.</p>
<p>Developer experience advances with updated toolchains for Python 3.13.7 and availability of 3.14 RC3, GCC 15, Rust 1.85, Go 1.25, OpenJDK 25, and previews of .NET 10 and Zig.</p>
<p>Ubuntu 25.10 also debuts Rust-based implementations of sudo and coreutils for improved memory safety, and adopts the new RVA23 profile as the baseline for RISC-V, paving the way to Ubuntu 26.04 LTS.</p>
<p>The newest Edubuntu, Kubuntu, Lubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, and Xubuntu are also being released today. More details can be found for these at their individual release notes under the Official Flavours section:</p>
<p style="margin-left: 15px;"><a href="https://discourse.ubuntu.com/t/questing-quokka-release-notes/59220#heading--official-flavours">https://discourse.ubuntu.com/t/questing-quokka-release-notes/59220#heading–official-flavours</a></p>
<p>Maintenance updates will be provided for 9 months for all flavours releasing with 25.10.</p>
<h3>To get Ubuntu 25.10<br />
</h3>
<p>In order to download Ubuntu 25.10, visit:</p>
<p style="margin-left: 15px;"><a href="https://ubuntu.com/download">https://ubuntu.com/download</a></p>
<p>Users of Ubuntu 25.04 will be offered an automatic upgrade to 25.10 if they have selected to be notified of all releases rather than just LTS upgrades. For further information about upgrading, see:</p>
<p style="margin-left: 15px;"><a href="https://ubuntu.com/download/desktop/upgrade">https://ubuntu.com/download/desktop/upgrade</a></p>
<p>As always, upgrades to the latest version of Ubuntu are entirely free of charge.</p>
<p>We recommend that all users read the release notes, which document caveats, workarounds for known issues, as well as more in-depth notes on the release itself. They are available at:</p>
<p style="margin-left: 15px;"><a href="https://discourse.ubuntu.com/t/questing-quokka-release-notes/59220">https://discourse.ubuntu.com/t/questing-quokka-release-notes/59220</a></p>
<p>Find out what’s new in this release with a graphical overview:</p>
<p style="margin-left: 15px;"><a href="https://ubuntu.com/desktop">https://ubuntu.com/desktop</a><br />
<a href="https://ubuntu.com/desktop/features">https://ubuntu.com/desktop/features</a></p>
<p>If you have a question, or if you think you may have found a bug but aren’t sure, you can try asking in any of the following places:</p>
<p style="margin-left: 15px;"><a href="https://matrix.to/#/#support:ubuntu.com">https://matrix.to/#/#support:ubuntu.com</a><br />
<a href="https://discourse.ubuntu.com/support">https://discourse.ubuntu.com/support</a><br />
<a href="https://lists.ubuntu.com/mailman/listinfo/ubuntu-users">https://lists.ubuntu.com/mailman/listinfo/ubuntu-users</a></p>
<h3>Help Shape Ubuntu<br />
</h3>
<p>If you would like to help shape Ubuntu, take a look at the list of ways you can participate at:</p>
<p style="margin-left: 15px;"><a href="https://ubuntu.com/community/contribute">https://ubuntu.com/community/contribute</a></p>
<h3>About Ubuntu<br />
</h3>
<p>Ubuntu is a full-featured Linux distribution for desktops, laptops, IoT, cloud, and servers, with a fast and easy installation and regular releases. A tightly-integrated selection of excellent applications is included, and an incredible variety of add-on software is just a few clicks away.</p>
<p>Professional services including support are available from Canonical and hundreds of other companies around the world. For more information about support, visit:</p>
<p style="margin-left: 15px;"><a href="https://ubuntu.com/support">https://ubuntu.com/support</a></p>
<h3>More Information<br />
</h3>
<p>You can learn more about Ubuntu and about this release on our website listed below:</p>
<p style="margin-left: 15px;"><a href="https://ubuntu.com">https://ubuntu.com</a></p>
<p>To sign up for future Ubuntu announcements, please subscribe to Ubuntu’s very low volume announcement list at:</p>
<p style="margin-left: 15px;"><a href="https://lists.ubuntu.com/mailman/listinfo/ubuntu-announce">https://lists.ubuntu.com/mailman/listinfo/ubuntu-announce</a></p>
<p><em>Originally posted to the <a href="https://lists.ubuntu.com/archives/ubuntu-announce/2025-October/000317.html">ubuntu-announce mailing list</a> on Thu Oct 9 09:46:52 UTC 2025 by Utkarsh Gupta, on behalf of the Ubuntu Release Team.</em></p></description>
<pubDate>Fri, 10 Oct 2025 03:35:25 +0000</pubDate>
</item>
<item>
<title>Erich Eickmeyer: Why I Won’t Be Attending or Speaking at Ubuntu Summit 25.10</title>
<guid isPermaLink="false">http://ericheickmeyer.com/?p=6134</guid>
<link>https://ericheickmeyer.com/2025/10/09/why-i-wont-be-attending-or-speaking-at-ubuntu-summit-25-10/</link>
<description><p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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 <em><a href="https://www.nurturingparenting.com/images/cmsfiles/hardwired_to_connect.pdf">Hardwired to Connect</a></em>, 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.</p>
<p>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.</p>
<p>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. </p>
<p>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.</p>
<p><strong><em>Except it’s not.</em></strong></p>
<p>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.</p>
<p>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.</p>
<p>Again, I get it. Canonical is a company that is and always has been majority remote work. Except for one thing: they get together <strong>twice a year</strong> in-person, and are even given T-Shirts to celebrate the immediately-prior release <em>which was partially built by volunteers</em>. 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.</p>
<p>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:</p>
<ul class="wp-block-list">
<li>Have the Summit be in-person once a year following the <code>yy.04</code> release
<ul class="wp-block-list">
<li>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, <strong>it just needs to be in-person</strong>.</li>
</ul>
</li>
<li>Have the Summit be online once a year following the <code>yy.10</code> release</li>
</ul>
<p>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.</p>
<p>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.</p>
<p>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!</p>
<p>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.</p>
<p>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.</p></description>
<pubDate>Thu, 09 Oct 2025 22:01:09 +0000</pubDate>
</item>
<item>
<title>Ubuntu Studio: Ubuntu Studio 25.10 Released</title>
<guid isPermaLink="false">https://ubuntustudio.org/?p=3029</guid>
<link>https://ubuntustudio.org/2025/10/ubuntu-studio-25-10-released/</link>
<description><div class="wp-block-image"><figure class="aligncenter size-full is-resized"><img alt="" class="wp-image-3031" height="223" src="https://ubuntustudio.org/wp-content/uploads/2025/10/b9e8/finalbanner.png" width="600" /></figure></div>
<p id="block-08eb94aa-8521-4ed2-adb1-72f6f4094411">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.</p>
<p id="block-895e2f57-e719-450c-a4c8-9405017a7e75">Since it’s just out, you may experience some issues, so you might want to wait a bit before upgrading. Please see the <a href="https://discourse.ubuntu.com/t/ubuntu-studio-25-10-release-notes/">release notes</a> for a more complete list of changes and known issues. Listed here are some of the major highlights.</p>
<div class="wp-block-image"><figure class="aligncenter size-full is-resized"><img alt="" class="wp-image-3032" height="270" src="https://ubuntustudio.org/wp-content/uploads/2025/10/0619/desktop_screenshot.png" width="480" /></figure></div>
<p id="block-aef9a406-e305-4f97-a130-f522c2f1ce7e">You can download Ubuntu Studio 25.10 from our <a href="https://ubuntustudio.org/download">download page</a>.</p>
<h2 id="block-6ca66e3a-8d42-42a8-a0cf-a8ed86e6025f">Special Notes</h2>
<p id="block-708043b1-523e-4fb9-92ca-720e3316371a">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 <a href="https://ubuntu.com/tutorials/create-a-usb-stick-on-ubuntu#1-overview">creating a bootable USB stick</a> with the ISO image or burning to a Dual-Layer DVD.</p>
<p>Minimum installation media requirements: Dual-Layer DVD or 8GB USB drive.</p>
<p id="block-fa4be379-b904-4919-9502-c73469ca31ef">Images can be obtained from this link: <a href="https://cdimage.ubuntu.com/ubuntustudio/releases/25.10/release/" rel="noreferrer noopener" target="_blank">https://cdimage.ubuntu.com/ubuntustudio/releases/25.1</a><a href="https://cdimage.ubuntu.com/ubuntustudio/releases/25.10/release/" rel="noreferrer noopener" target="_blank">0</a><a href="https://cdimage.ubuntu.com/ubuntustudio/releases/25.10/release/" rel="noreferrer noopener" target="_blank">/release/</a></p>
<p id="block-bf39c734-e080-4549-9621-044e9241d48c">Full updated information, including <strong>Upgrade Instructions,</strong> are available in the <strong><a href="https://discourse.ubuntu.com/t/ubuntu-studio-25-10-release-notes/">Release Notes</a></strong><a href="https://wiki.ubuntu.com/GroovyGorilla/Beta/UbuntuStudio">.</a></p>
<p>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.</p>
<h2>New This Release</h2>
<div class="wp-block-image"><figure class="alignright size-full is-resized"><img alt="" class="wp-image-3033" height="106" src="https://ubuntustudio.org/wp-content/uploads/2025/10/3402/site-logo.webp" width="74" /></figure></div>
<h3>The Return of Internet DJ Console (IDJC)!</h3>
<p>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!</p>
<div class="wp-block-image"><figure class="alignright size-full is-resized"><img alt="" class="wp-image-3034" height="96" src="https://ubuntustudio.org/wp-content/uploads/2025/10/9f6a/UbyLIWcj_400x400.jpg" width="96" /></figure></div>
<h3>JackTrip</h3>
<p>Ubuntu Studio now includes <strong><a data-id="pencil2d.org" data-type="URL" href="http://pencil2d.org">JackTrip</a></strong>! 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!</p>
<p>It supports any number of channels (as many as the computer/network can handle) of bidirectional, high quality, uncompressed audio signal streaming.<br /></p>
<h3>More Musical Plugins</h3>
<p>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:</p>
<ul><li>din</li><li>drumkv1</li><li>freewheeling</li><li>gxtuner</li><li>Hydrogen Drumkit Effects</li><li>kmetronome</li><li>padthv1</li><li>polyphone</li><li>samplv1</li><li>synthv1</li></ul>
<h3>More Photography Tools</h3>
<ul><li>PhotoCollage – allows you to create photo collage phosters</li><li>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.</li></ul>
<h3>PipeWire 1.4.7</h3>
<div class="wp-block-image"><figure class="alignright size-full is-resized"><img alt="" class="wp-image-2766" height="70" src="https://ubuntustudio.org/wp-content/uploads/2024/04/be34/Pipewire_logo.svg_.png" width="324" /></figure></div>
<p>This release contains <strong>PipeWire 1.4.7</strong>. </p>
<p>PipeWire’s JACK compatibility is configured to use out-of-the-box and is zero-latency internally. System latency is configurable via <a data-id="2797" data-type="page" href="https://ubuntustudio.org/audio-configuration/">Ubuntu Studio Audio Configuration</a> and can now be configured on a per-user basis instead of globally.</p>
<h3>Ubuntu Studio Audio Configuration</h3>
<p>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!</p>
<div class="wp-block-image"><figure class="aligncenter size-full is-resized"><img alt="" class="wp-image-3035" height="239" src="https://ubuntustudio.org/wp-content/uploads/2025/10/73c8/image.png" width="622" /></figure></div>
<h3>Ardour 8.12</h3>
<div class="wp-block-image"><figure class="alignright size-full is-resized"><img alt="" class="wp-image-1977" height="73" src="https://ubuntustudio.org/wp-content/uploads/2020/06/2a76/ardour.png" width="84" /></figure></div>
<p>This is, as of this writing, the latest release of Ardour, packed with the latest bugfixes.</p>
<p>To help support Ardour’s funding, you may obtain later versions directly from ardour.org. To do so, please <a data-id="https://ardour.org" data-type="URL" href="https://ardour.org">one-time purchase or subscribe to Ardour from their website.</a> 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.</p>
<h2 id="block-c7a21be7-9349-421e-a098-c0d2919f320a">Frequently Asked Questions</h2>
<p id="block-163f794a-f451-40b0-bbbd-6f26c6cbe8e8"><strong>Q:</strong> Does Ubuntu Studio contain snaps?<br /><strong>A:</strong> 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.</p>
<p>Thunderbird also became a snap so that the maintainers can get security patches delivered faster.</p>
<p id="block-342134d3-a024-4b7b-b768-76c758b20acd">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.</p>
<p>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.</p>
<p id="block-2266cee7-0ea1-49cf-8340-594da42a09d7"><strong>Q</strong>: Will you make an ISO with {my favorite desktop environment}?<br /><strong>A:</strong> 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 <a href="https://ubuntu.com/download/flavours">official flavor for the desktop environment of your choice</a> and use <a href="https://ubuntustudio.org/ubuntu-studio-installer">Ubuntu Studio Installer</a> to get Ubuntu Studio – which does *not* convert that flavor to Ubuntu Studio but adds its benefits.</p>
<p id="block-48669a69-39bc-4971-b46b-c7da87133d24"><strong>Q: </strong>What if I don’t want all these packages installed on my machine?<br /><strong>A: </strong>Simply use the <strong>Ubuntu Studio Installer</strong> 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!</p>
<h2>Get Involved!</h2>
<p>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! <a href="https://ubuntustudio.org/contribute/">Check out all the ways you can contribute!</a></p>
<p><strong>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</strong>!</p>
<h2>Contact the Team</h2>
<p>The best way to contact the Ubuntu Studio team is via the <a href="https://discourse.ubuntu.com/c/flavors/ubuntustudio/">Ubuntu Discourse</a>.</p>
<h2>Special Thanks</h2>
<p>Huge special thanks for this release go to:</p>
<ul><li><strong>Eylul Dogruel</strong>: Artwork, Graphics Design</li><li><strong>Ross Gammon</strong>: Upstream Debian Developer, Testing</li><li><strong>Sebastien Ramacher</strong>:<strong> </strong>Upstream Debian Developer</li><li><strong>Dennis Braun</strong>: Upstream Debian Developer</li><li><strong>Rik Mills</strong>: Kubuntu Council Member, help with Plasma desktop</li><li><strong>Scarlett Moore: </strong>Kubuntu Project Lead, help with Plasma desktop</li><li><strong>Len Ovens:</strong> Testing, insight</li><li><strong>Mauro Gaspari</strong>: Tutorials, Promotion, and Documentation, Testing, keeping Erich sane</li><li><strong>Erich Eickmeyer</strong>: Project Leader, Packaging, Development, Direction, Treasurer</li><li><strong>Steve Langasek: </strong>You are missed.</li></ul></description>
<pubDate>Thu, 09 Oct 2025 17:11:02 +0000</pubDate>
</item>
<item>
<title>Lubuntu Blog: Lubuntu 25.10 (Questing Quokka) Released!</title>
<guid isPermaLink="false">https://lubuntu.me/?p=4159</guid>
<link>https://lubuntu.me/lubuntu-25-10-questing-quokka-released/</link>
<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>
<pubDate>Thu, 09 Oct 2025 14:05:30 +0000</pubDate>
</item>
<item>
<title>Ubuntu Blog: Canonical releases Ubuntu 25.10 Questing Quokka</title>
<guid isPermaLink="true">https://ubuntu.com//blog/canonical-releases-ubuntu-25-10-questing-quokka</guid>
<link>https://ubuntu.com//blog/canonical-releases-ubuntu-25-10-questing-quokka</link>
<description><h4 class="wp-block-heading">The latest interim release of Ubuntu comes with compatibility enhancements at the silicon level, accessibility upgrades and a robust security posture that sets the stage for the next LTS.</h4>
<figure class="wp-block-image size-full"><img alt="" height="1080" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1920/https%3A%2F%2Fubuntu.com%2Fwp-content%2Fuploads%2F2e6a%2FQuesting_Quokka_Wallpaper_Color_1920x1080.png" width="1920" /></figure>
<p><strong>October 9, 2025</strong></p>
<p>Today Canonical announced the release of Ubuntu 25.10, codenamed “Questing Quokka,” available to download and install from <a href="http://ubuntu.com/download">ubuntu.com/download</a>. </p>
<p>Alongside GNOME 49 and new default applications such as the Ptyxis terminal emulator and the Loupe image viewer, Ubuntu 25.10 introduces notable platform upgrades, from improved Bluetooth audio handling to expanded support for confidential computing features. Ubuntu 25.10 is the first to benefit from memory-safe implementations of “coreutils” and “sudo-rs,” as well as improvements in TPM-backed full disk encryption and support for nested virtualization on Arm.</p>
<blockquote class="p-pull-quote--small">
<p class="p-pull-quote__quote">Ubuntu 25.10 is a statement of intent for the next Ubuntu LTS in 2026. Canonical continues to deliver a resilient, performant Linux operating system trusted by individuals and enterprises alike, from makers and developers to Fortune 500 companies, across hardware from IoT devices to modern datacenters. I’m particularly pleased with the progress on memory-safe utilities, and the enhancements to our TPM-backed full disk encryption.</p>
<span class="p-pull-quote__citation">Jon Seager, VP of Ubuntu Engineering at Canonical</span>
</blockquote>
<p>This Ubuntu release is also the first to coincide with a new format of the <a href="https://ubuntu.com/summit">Ubuntu Summit</a>, where viewers around the world can learn about the latest developments in Ubuntu and open source.</p>
<div class="p-cta-block">
<a class="p-button--positive" href="https://ubuntu.com/download">Download Ubuntu 25.10 for free</a>
<a href="https://discourse.ubuntu.com/t/register-for-ubuntu-summit-25-10/65270">Register for Ubuntu Summit ›</a>
</div>
<h2 class="wp-block-heading">GNOME 49 and accessibility enhancements</h2>
<figure class="wp-block-image size-full"><img alt="" height="796" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1282/https%3A%2F%2Fubuntu.com%2Fwp-content%2Fuploads%2Fb00a%2FUbuntu-25.10-desktop-screenshot.png" width="1282" /></figure>
<p>Ubuntu 25.10 features <a href="https://release.gnome.org/49/">GNOME 49</a>. This update introduces media and power controls on the lock screen, improved accessibility and HDR brightness settings. Users will also find two new applications: Loupe, a modern image viewer, and Ptyxis, a new terminal emulator. These additions are part of a broader effort to modernize Ubuntu’s application set. Selecting the “install restricted extras” option in the installer will now enable support for more Bluetooth codecs (AAC) and enable hardware accelerated screen recording in GNOME, further improving performance.</p>
<p>In line with the European Accessibility Act (EAA), Canonical continues its long-standing effort to make Linux easy for everyone to use. Ubuntu’s App Center and Settings panels come with better support for high contrast mode, keyboard navigation, and screen reading. The login screen also introduces a more prominent accessibility menu, making assistive technologies easier to access from the start.</p>
<h2 class="wp-block-heading">Next-generation toolchains bolster the developer experience</h2>
<p>Ubuntu 25.10 ships with OpenJDK 25, the latest version of Java, and the latest upstream versions for Python (3.14 RC3), Golang (1.25), and GCC (15). Rust 1.85 will be the default, and 1.88 is also available. A preview of the new <a href="https://ziglang.org/">Zig language</a> compiler is available in this release for <code>amd64</code> and <code>arm64</code>. </p>
<p>In addition, this release includes a preview of .NET 10, which is the upcoming .NET LTS due for release in November. <br />Canonical continues to improve the .NET developer experience on Ubuntu with an enhanced <a href="https://documentation.ubuntu.com/snapcraft/stable/common/craft-parts/reference/plugins/dotnet_v2_plugin/">.NET Snapcraft plugin</a> to improve support for monorepo setups, delivering better developer experience with MSBuild through custom flag attributes. In addition, the popular tools from Powershell on Windows are now available in Ubuntu on <code>arm64</code>, <code>ppc64el</code> and <code>s390x</code> platforms through the Powershell snap.</p>
<h2 class="wp-block-heading">Rust-based implementations of <code>sudo</code> and <code>coreutils</code> for improved memory safety</h2>
<p>Canonical is committed to increase the resilience of critical system software in Ubuntu by <a href="https://discourse.ubuntu.com/t/carefully-but-purposefully-oxidising-ubuntu/56995">adopting modern implementations</a> of key components like <code>sudo</code> and <code>coreutils</code>. As part of this initiative, Ubuntu 25.10 <a href="https://discourse.ubuntu.com/t/adopting-sudo-rs-by-default-in-ubuntu-25-10/60583">uses <code>sudo-rs</code></a>, a new Rust implementation of the <code>sudo</code> tool. While the Rust-based <code>sudo</code> is the default in this new release, the traditional <code>sudo</code> tool <a href="https://documentation.ubuntu.com/server/how-to/security/user-management/#sudo-rs">is still available</a> for users who need it. </p>
<p>The introduction of a memory-safe sudo delivers many benefits compared to the traditional implementation. For users, a reduced attack surface in the sudo tool will improve Ubuntu’s overall security posture. Canonical welcomes users to test the tool and provide feedback ahead of its inclusion in the upcoming Ubuntu 26.04 LTS. </p>
<p>“At Trifecta Tech Foundation, we aim to make essential building blocks like sudo more secure and robust for everyone,” said Erik Jonkers, Chair at Trifecta Tech Foundation. “Seeing sudo-rs landing in Ubuntu is a huge achievement we’re very excited about. We applaud Canonical for pushing for memory safety and thank them for the collaboration over the past months to get sudo-rs ready for the 25.10 release. We’re confident that by working together and taking in feedback, we can make this a seamless shift that will improve security for Ubuntu’s users.”<br />Similarly, Ubuntu 25.10 is the first major Linux distribution release to adopt <a href="https://uutils.github.io/"><code>uutils</code></a>‘ implementation of <a href="https://uutils.github.io/coreutils/"><code>coreutils</code></a>, which is a ground up reimplementation of the traditional GNU coreutils package in Rust with like-for-like compatibility and memory safety as key goals.</p>
<h2 class="wp-block-heading">Platform security improvements with TPM-backed FDE</h2>
<p>Ubuntu 25.10 offers <a href="https://discourse.ubuntu.com/t/tpm-fde-progress-for-ubuntu-25-10/65146/">experimental support</a> for TPM-backed Full Disk Encryption (FDE), providing a way to ensure all content on the disk is encrypted and inaccessible at rest. A TPM, or Trusted Platform Module is a chip found in most modern computers.</p>
<figure class="wp-block-image size-full"><img alt="" height="1189" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1609/https%3A%2F%2Fubuntu.com%2Fwp-content%2Fuploads%2F4f25%2FTPM-backed-FDE-Ubuntu-25.10-Questing-Quokka.png" width="1609" /></figure>
<p>TPM-backed FDE is a security method that uses the Trusted Platform Module to store cryptographic keys to encrypt the hard drive, making data unreadable without the correct key at boot time. New features include passphrase support and management, regeneration of the recovery key and better integration with firmware updates, alongside stabilization of the core components of the system to pave the way for the next Ubuntu LTS release. Security-focused users can test this FDE implementation in 25.10, but it’s not yet recommended for production environments. </p>
<p>Following the initial inclusion of Network Time Security (NTS) in <a href="https://discourse.ubuntu.com/t/ubuntu-server-gazette-issue-1-network-online-target-network-time-security-matrix-chat/56135">Ubuntu 25.04</a>, Questing Quokka ships with NTS enabled by default. NTS enhances Network Time Protocol (NTP) security by providing a cryptographic layer of authentication for the time synchronization process. This increases resilience against man-in-the-middle attacks and similar types of security risks. NTS uses Transport Layer Security (TLS) to ensure that time data comes from a trusted source.</p>
<h2 class="wp-block-heading">Linux kernel 6.17 delivers nested virtualization and enhanced confidential workloads</h2>
<p>In line with Canonical’s commitment to enable the latest features and hardware support, Ubuntu 25.10 ships with the latest Linux kernel, version 6.17. </p>
<p>Ubuntu 25.10 brings early access to the nested virtualization feature on Arm, following its inclusion in the upstream Linux kernel. Nested virtualization allows cloud providers and developers to run hypervisors inside virtual machines, enabling advanced CI/CD pipelines, flexible testing environments, and stronger workload isolation. Ubuntu 25.10 introduces support of this technology on platforms like NVIDIA Grace and AmpereOne, paving the way for broader use and maturity of nested virtualization on Arm.</p>
<blockquote class="p-pull-quote--small">
<p class="p-pull-quote__quote">As cloud infrastructure becomes more dynamic, the ability to run securely nested workloads is essential to scaling services efficiently while maintaining strong isolation and operational flexibility. With Ubuntu 25.10 enabling nested virtualization on Arm-based platforms both in the cloud and on-premises, developers and operators can advance development and deployment of this powerful capability. Together with Canonical, we’re accelerating the adoption of secure, scalable Arm-based cloud solutions.</p>
<span class="p-pull-quote__citation">Bhumik Patel, Director, Server Ecosystem Development, Infrastructure Business, Arm</span>
</blockquote>
<p>This latest interim release of Ubuntu also lays the foundation for native support of Intel TDX with Ubuntu 26.04 LTS as the host operating system. Intel TDX is a technology that creates hardware-isolated virtual machines for confidential computing, making it ideal to support data clean rooms and confidential AI workloads. Ubuntu 25.10 kernels will ship with Intel TDX host support, enabling enterprises to run and receive support for confidential computing on their data centers or private clouds.</p>
<h2 class="wp-block-heading">New RVA23 profile for accelerated RISC-V adoption</h2>
<p>With Ubuntu 25.10, Canonical is adopting the recently ratified RVA23 as the baseline profile for its RISC-V builds. RVA23 helps accelerate the growth of the RISC-V ecosystem ensuring compatibility across RISC-V implementations. This early move aligns Ubuntu with RVA23-class solutions reaching the market, and enables early rigorous testing, bug fixing and issue triage. This effort enables RVA23 readiness in Ubuntu 26.04 LTS and provides the RISC-V ecosystem with a predictable roadmap and target.</p>
<blockquote class="p-pull-quote--small">
<p class="p-pull-quote__quote">RISC-V International is excited to see Canonical adopting the RVA23 profile for Ubuntu. RVA23 was ratified to help accelerate widespread implementation of RISC-V among toolchains and operating systems, set the base for high performing modern application processors with support for vectors and hypervisors, and ensure binary compatibility at the application level. Our collaboration with Canonical strengthens the RISC-V software ecosystem and advances the adoption of RISC-V in enterprise applications from IoT to HPC.</p>
<span class="p-pull-quote__citation">Andrea Gallo, CEO of RISC-V International</span>
</blockquote>
<p>Readers can tune into the <a href="https://ubuntu.com/summit">Ubuntu Summit</a> on October 23-24 for a <a href="https://discourse.ubuntu.com/t/risc-v-forward-to-the-future-moving-to-rva23/67249">behind-the-scenes look at RVA23 advancements</a>.</p>
<h2 class="wp-block-heading">Next steps</h2>
<ul>
<li><a href="https://discourse.ubuntu.com/t/questing-quokka-release-notes/59220">Read the release notes</a></li>
<li><a href="https://discourse.ubuntu.com/">Follow the Ubuntu engineering team on Discourse</a></li>
</ul>
<div class="p-cta-block">
<a class="p-button--positive" href="https://ubuntu.com/download">Download Ubuntu 25.10 for free</a>
<a href="https://discourse.ubuntu.com/t/register-for-ubuntu-summit-25-10/65270">Register for Ubuntu Summit ›</a>
</div>
<h2 class="wp-block-heading">About Canonical</h2>
<p>Canonical, the publisher of Ubuntu, provides open source security, support and services. Our portfolio covers critical systems, from the smallest devices to the largest clouds, from the kernel to containers, from databases to AI. With customers that include top tech brands, emerging startups, governments and home users, Canonical delivers trusted open source for everyone. <br />Learn more at <a href="https://canonical.com/">canonical.com</a></p></description>
<pubDate>Thu, 09 Oct 2025 09:48:38 +0000</pubDate>
</item>
<item>
<title>Sean Davis: Xubuntu 25.10 "Questing Quokka"</title>
<guid isPermaLink="false">https://seand.xyz/tag/xubuntu/rss/68e73e02fa4f1216ce0f75bd</guid>
<link>https://seand.xyz/blog/2025/10/09/xubuntu-25-10-questing-quokka/</link>
<description><img alt="Xubuntu 25.10 &quot;Questing Quokka&quot;" src="https://seand.xyz/content/images/2025/10/xubuntu-2510-featured.png" /><p><em>A Critical Moment and a Glimpse of the Future</em></p><p><a href="https://wiki.xubuntu.org/releases/25.10/release-notes?ref=seand.xyz" rel="noreferrer">Xubuntu 25.10</a>, codenamed "Questing Quokka," 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.</p><p>Today, I&amp;aposll explore where Xubuntu stands as it approaches its twentieth anniversary and share what&amp;aposs new (and what&amp;aposs still rough around the edges) in this release.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img alt="Xubuntu 25.10 &quot;Questing Quokka&quot;" class="kg-image" height="900" src="https://seand.xyz/content/images/2025/10/xubuntu-2510-desktop.png" width="1440" /><span style="white-space: pre-wrap;">Xubuntu 25.10 "Questing Quokka": A screenshot of the desktop.</span></figure><h2 id="a-critical-juncture">A Critical Juncture</h2><p>The "Questing Quokka" arrives at a pivotal time in Xubuntu&amp;aposs history. In just six months, we&amp;aposll celebrate Xubuntu&amp;aposs twentieth anniversary (technically eight months: 6.06 marks the only time Ubuntu was released in June).</p><p>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.</p><p>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.</p><p>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 <a href="https://xubuntu.org/contribute/?ref=seand.xyz" rel="noreferrer">Get Involved</a> page to learn how to help with artwork, development, documentation, QA, marketing, and more.</p><p>Now, let’s look at what’s new (and what still needs work) in 25.10.</p><h2 id="xubuntu-2510-a-snapshot-of-the-future">Xubuntu 25.10: A Snapshot of the Future</h2><p>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 <code>sudo-rs</code>.</p><p>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. 🐞</p><h3 id="known-issues-and-what-to-expect">Known Issues (and What to Expect)</h3><h4 id="libadwaita-apps-and-the-case-of-the-missing-close-button">libadwaita Apps and the Case of the Missing Close Button</h4><p>Late in the cycle, <a href="https://bugs.launchpad.net/ubuntu/+source/elementary-xfce/+bug/2125025?ref=seand.xyz" rel="noreferrer">we discovered</a> that several GNOME and libadwaita-based apps have empty window close buttons when using the <em>elementary-xfce</em> icon theme. This affects Disk Usage Analyzer (<code>baobab</code>), Document Scanner (<code>simple-scan</code>), Fonts (<code>gnome-font-viewer</code>), Mines (<code>gnome-mines</code>), and Sudoku (<code>gnome-sudoku</code>).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img alt="Xubuntu 25.10 &quot;Questing Quokka&quot;" class="kg-image" height="800" src="https://seand.xyz/content/images/2025/10/xubuntu-2510-missing-libadwaita-close-icon.png" width="1280" /><span style="white-space: pre-wrap;">Modern GNOME applications are missing the close window icon. Can&amp;apost see it? Neither can I.</span></figure><h4 id="missing-icon-for-document-scanners-scan-options">Missing Icon for Document Scanner&amp;aposs Scan Options</h4><p>The Scan Options menu icon in Document Scanner is <a href="https://bugs.launchpad.net/ubuntu/+source/elementary-xfce/+bug/2127071?ref=seand.xyz" rel="noreferrer">currently invisible</a>. This issue has been reported upstream to the <em>elementary-xfce</em> GitHub tracker.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img alt="Xubuntu 25.10 &quot;Questing Quokka&quot;" class="kg-image" height="800" src="https://seand.xyz/content/images/2025/10/xubuntu-2510-missing-scan-options-icon.png" width="1280" /><span style="white-space: pre-wrap;">To the right of the Scan button is a menu button for the Scan Options. Invisible unless you hover it.</span></figure><h4 id="flatpak-packages-cannot-be-installed">Flatpak Packages Cannot Be Installed</h4><p>Due to a Fuse/AppArmor conflict in Ubuntu 25.10, installing Flatpak packages <a href="https://bugs.launchpad.net/ubuntu/+source/flatpak/+bug/2122161?ref=seand.xyz" rel="noreferrer">currently fails</a>. Work is underway to resolve this, and Flatpak support should return soon.</p><h4 id="graphical-ssh-agent-unavailable">Graphical SSH Agent Unavailable</h4><p>Xubuntu 25.10’s graphical SSH agent isn’t functioning as expected. Without it, SSH key passphrases must be entered each time. <a href="https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/2125549?ref=seand.xyz" rel="noreferrer">Investigation continues</a>, and a fix may land before the next release.</p><h4 id="double-network-icons-sometimes">Double Network Icons (Sometimes)</h4><p>Some users may see <a href="https://bugs.launchpad.net/ubuntu/+source/xfce4-panel/+bug/2059045?ref=seand.xyz" rel="noreferrer">duplicate network icons</a>, 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.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img alt="Xubuntu 25.10 &quot;Questing Quokka&quot;" class="kg-image" height="800" src="https://seand.xyz/content/images/2025/10/xubuntu-2510-double-network-icons.png" width="1280" /><span style="white-space: pre-wrap;">Some users may be confused to see two network icons that look nearly identical and function the same.</span></figure><h4 id="screensaver-wallpaper-discrepancy">Screensaver Wallpaper Discrepancy</h4><p>When first locking your screen, you <a href="https://bugs.launchpad.net/ubuntu/+source/xfce4-screensaver/+bug/2107239?ref=seand.xyz" rel="noreferrer">might notice</a> that the lock screen wallpaper defaults to Xfce’s background instead of Xubuntu’s. Changing (and reapplying) your wallpaper fixes the mismatch.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img alt="Xubuntu 25.10 &quot;Questing Quokka&quot;" class="kg-image" height="800" src="https://seand.xyz/content/images/2025/10/xubuntu-2510-wrong-screensaver-wallpaper.png" width="1280" /><span style="white-space: pre-wrap;">If you lock your screen before changing your wallpaper, you&amp;aposll be greeted by Xfce&amp;aposs wallpaper.</span></figure><h2 id="looking-ahead">Looking Ahead</h2><p>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.</p><p>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.</p><div class="kg-card kg-cta-card kg-cta-bg-grey kg-cta-minimal " data-layout="minimal">
<div class="kg-cta-sponsor-label-wrapper">
<div class="kg-cta-sponsor-label">
<span style="white-space: pre-wrap;">Join the Xubuntu Community</span>
</div>
</div>
<div class="kg-cta-content">
<div class="kg-cta-content-inner">
<div class="kg-cta-text">
<p dir="ltr"><b><strong style="white-space: pre-wrap;">Everyone can participate</strong></b><span style="white-space: pre-wrap;"> 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.</span></p>
</div>
<a class="kg-cta-button " href="https://xubuntu.org/contribute/?ref=seand.xyz" style="background-color: #000000; color: #ffffff;">
Get Involved
</a>
</div>
</div>
</div></description>
<pubDate>Thu, 09 Oct 2025 06:58:43 +0000</pubDate>
</item>
<item>
<title>Xubuntu: Xubuntu 25.10 released!</title>
<guid isPermaLink="false">https://xubuntu.org/?p=5725</guid>
<link>https://xubuntu.org/news/xubuntu-25-10-released/</link>
<description><p>The Xubuntu team is happy to announce the immediate release of Xubuntu 25.10.</p>
<p>Xubuntu 25.10, codenamed <strong>Questing Quokka</strong>, is a regular release and will be supported for 9 months, until July 2026.</p>
<figure class="wp-block-image size-full"><img alt="" class="wp-image-5726" height="900" src="https://xubuntu.org/wp-content/uploads/2025/10/ade5/xubuntu-2510-desktop.png" width="1440" />Xubuntu 25.10, featuring the latest updates from Xfce 4.20 and GNOME 49.</figure>
<p>Xubuntu 25.10 features the latest Xfce 4.20 and GNOME 49 updates. <strong>Xfce 4.20</strong> updates feature stability improvements and enhanced Wayland support, for those adventurous enough to use it. <strong>GNOME 49</strong> apps have received further polish and are well-suited for Xubuntu. <strong>MATE 1.26</strong> apps are still included to round out Xubuntu’s office suite.</p>
<p>The <strong>final release images</strong> for <strong>Xubuntu Desktop</strong> and <strong>Xubuntu Minimal</strong> are available as torrents and direct downloads from <a href="https://xubuntu.org/download/">xubuntu.org/download/</a>.</p>
<p>As the main server might be busy the first few days after the release, we recommend using the torrents if possible.</p>
<p>We want to thank everybody who contributed to this release of Xubuntu!</p>
<h2>Highlights and Known Issues</h2>
<h3>Highlights</h3>
<ul><li><strong>Xfce 4.20</strong> 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.</li><li><strong>GNOME 49</strong> apps are further refined with new features and usability improvements.</li></ul>
<h3>Known Issues</h3>
<ul><li>Some missing icons mean that <strong>libadwaita apps</strong> (modern GNOME style) have graphical glitches. Notably, the window <em>close</em> icons are blank (LP: <a href="https://bugs.launchpad.net/ubuntu/+source/elementary-xfce/+bug/2125025">#2125025</a>), and <strong>Document Scanner</strong> is missing an icon for the scanner options (LP: <a href="https://bugs.launchpad.net/ubuntu/+source/elementary-xfce/+bug/2127071">#2127071</a>).</li><li>The graphical <strong>SSH agent</strong> is unavailable due to a change in the <strong>GNOME Keyring Daemon</strong> (LP: <a href="https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/2125549">#2125549</a>).</li><li><strong>Flatpak</strong> packages will refuse to install due to a conflict between AppArmor and libfuse (LP: <a href="https://bugs.launchpad.net/ubuntu/+source/flatpak/+bug/2122161">#2122161</a>). A fix is in progress.</li></ul>
<p>Please refer to the <a href="https://wiki.xubuntu.org/releases/25.10/release-notes">Xubuntu Release Notes</a> for more obscure known issues, information on affecting bugs, bug fixes, and a list of new package versions.</p>
<p>The main <a href="https://discourse.ubuntu.com/t/questing-quokka-release-notes/59220">Ubuntu Release Notes</a> cover many other packages we carry and more generic issues.</p>
<h2>Support</h2>
<p><strong>For support</strong> with the release, navigate to <a href="https://xubuntu.org/help/">Help &amp; Support</a> for a complete list of methods to get help.</p></description>
<pubDate>Thu, 09 Oct 2025 01:06:35 +0000</pubDate>
</item>
<item>
<title>Colin Watson: Free software activity in September 2025</title>
<guid isPermaLink="false">tag:www.chiark.greenend.org.uk,2025-10-08:/~cjwatson/blog/activity-2025-09.html</guid>
<link>https://www.chiark.greenend.org.uk/~cjwatson/blog/activity-2025-09.html</link>
<description><p>About 90% of my Debian contributions this month were
<a href="https://www.freexian.com/about/debian-contributions/">sponsored</a> by Freexian.</p>
<p>You can also support my work directly via
<a href="https://liberapay.com/cjwatson">Liberapay</a> or <a href="https://github.com/sponsors/cjwatson">GitHub
Sponsors</a>.</p>
<p>Some months I feel like I’m pedalling furiously just to keep everything in a
roughly working state. This was one of those months.</p>
<h2>Python team</h2>
<p>I upgraded these packages to new upstream versions:</p>
<ul>
<li>aiosmtplib</li>
<li>billiard</li>
<li>dbus-fast</li>
<li>django-modeltranslation</li>
<li>django-sass-processor</li>
<li>feedparser</li>
<li>flask-security</li>
<li>jaraco.itertools</li>
<li>mariadb-connector-python</li>
<li>mistune</li>
<li>more-itertools</li>
<li>pydantic-settings</li>
<li>pyina</li>
<li>pytest-mock</li>
<li>python-asyncssh</li>
<li>python-bytecode</li>
<li>python-ciso8601</li>
<li>python-django-pgbulk</li>
<li>python-ewokscore</li>
<li>python-ewoksdask</li>
<li>python-ewoksutils</li>
<li>python-expandvars</li>
<li>python-git</li>
<li>python-gssapi</li>
<li>python-holidays</li>
<li>python-jira</li>
<li>python-jpype</li>
<li>python-mastodon</li>
<li>python-orjson (fixing a <a href="https://bugs.debian.org/1114315">build failure</a>)</li>
<li>python-pyftpdlib</li>
<li>python-pytest-asyncio (fixing a <a href="https://bugs.debian.org/1114323">build
failure</a>)</li>
<li>python-pytest-run-parallel</li>
<li>python-recurring-ical-events</li>
<li>python-redis</li>
<li>python-watchfiles (fixing a <a href="https://bugs.debian.org/1114338">build
failure</a>)</li>
<li>python-x-wr-timezone</li>
<li>python-zipp</li>
<li>pyzmq</li>
<li>readability</li>
<li>scalene (fixing test failures with pydantic 2.12.0~a1)</li>
<li>sen (<a href="https://github.com/TomasTomecek/sen/pull/190">contributed supporting fix
upstream</a>)</li>
<li>sqlfluff</li>
<li>trove-classifiers</li>
<li>ttconv</li>
<li>vdirsyncer</li>
<li>zope.component</li>
<li>zope.configuration</li>
<li>zope.deferredimport</li>
<li>zope.deprecation</li>
<li>zope.exceptions</li>
<li>zope.i18nmessageid</li>
<li>zope.interface</li>
<li>zope.proxy</li>
<li>zope.schema</li>
<li>zope.security (<a href="https://github.com/zopefoundation/zope.security/pull/121">contributed supporting fix
upstream</a>)</li>
<li>zope.testing</li>
<li>zope.testrunner</li>
</ul>
<p>I had to spend a fair bit of time this month chasing down build/test
regressions in various packages due to some other upgrades, particularly to
pydantic, python-pytest-asyncio, and rust-pyo3:</p>
<ul>
<li><a href="https://salsa.debian.org/python-team/packages/aiohappyeyeballs/-/commit/b637c131c4860c33140012bdc55ed4cb2ce006ec">aiohappyeyeballs</a></li>
<li>aiohttp-sse (<a href="https://bugs.debian.org/1115561">filed bug</a> and <a href="https://github.com/aio-libs/aiohttp-sse/pull/597">contributed
fix upstream</a>)</li>
<li>aioimaplib (<a href="https://github.com/iroco-co/aioimaplib/issues/124#issuecomment-3305911017">tried to fix upstream but failed to get tests working</a></li>
<li><a href="https://salsa.debian.org/python-team/packages/aiosmtplib/-/commit/6da2d47e5090d814e53319f77be4e93a47ae54b2">aiosmtplib</a>
(<a href="https://github.com/cole/aiosmtplib/pull/328">contributed upstream</a>)</li>
<li><a href="https://salsa.debian.org/python-team/packages/app-model/-/commit/32619704f8c254d1ee2df8642835ea9bf88b4d0e">app-model</a></li>
<li><a href="https://salsa.debian.org/python-team/packages/aresponses/-/commit/bfc135122501ccdceabbcb8324be1c478fbe55d1">aresponses</a>
(<a href="https://github.com/aresponses/aresponses/pull/85">contributed upstream</a>)</li>
<li>fastapi (<a href="https://bugs.debian.org/1113771">filed bug</a> and <a href="https://github.com/fastapi/fastapi/pull/14036">contributed fix
upstream</a>)</li>
<li><a href="https://salsa.debian.org/python-team/packages/ipython/-/commit/2bd12280052e5f80e9464506da4e4ebe1259c072">ipython</a></li>
<li>opendrop (<a href="https://bugs.debian.org/1115562">filed bug</a> and <a href="https://github.com/jdber1/opendrop/pull/74">contributed
fix upstream</a>)</li>
<li><a href="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">pydantic-extra-types</a></li>
<li><a href="https://bugs.debian.org/1114286">pytest-relaxed</a> (<a href="https://github.com/bitprophet/pytest-relaxed/pull/34">contributed
upstream</a>)</li>
<li><a href="https://bugs.debian.org/1114301">python-drf-spectacular</a></li>
<li><a href="https://salsa.debian.org/python-team/packages/python-fakeredis/-/compare/debian%2F2.29.0-4...debian%2F2.29.0-5?from_project_id=10544">python-fakeredis</a></li>
<li><a href="https://bugs.debian.org/1115563">python-jsonrpc-websocket</a> (<a href="https://github.com/emlove/jsonrpc-websocket/pull/16">contributed
upstream</a>, and
sponsored upload for Tianyu Chen)</li>
<li><a href="https://salsa.debian.org/python-team/packages/python-odmantic/-/commit/21977555a971b0b1fd8b59611f60984e74f3f3f0">python-odmantic</a></li>
<li><a href="https://bugs.debian.org/1114324">python-pytest-trio</a> (<a href="https://github.com/python-trio/pytest-trio/issues/151">upstream
issue</a>, <a href="https://github.com/python-trio/pytest-trio/pull/152">upstream
<span class="caps">PR</span></a>, <a href="https://github.com/pytest-dev/pytest/issues/13734">pytest issue
about possible root
cause</a>)</li>
<li><a href="https://bugs.debian.org/1114327">python-repoze.sphinx.autointerface</a></li>
<li><a href="https://bugs.debian.org/1114332">python-sluurp</a></li>
<li>python-youtubeaio (<a href="https://bugs.debian.org/1113903">filed bug</a>)</li>
<li><a href="https://bugs.debian.org/1115575">rtsp-to-webrtc</a></li>
</ul>
<p>After some upstream discussion I <a href="https://bugs.debian.org/1115318">requested removal of
pydantic-compat</a>, since it was more trouble
than it was worth to keep it working with the latest pydantic version.</p>
<p>I filed <a href="https://bugs.debian.org/1115299">dh-python: pybuild-plugin-pyproject doesn’t know about
headers</a> and added it to
<a href="https://wiki.debian.org/Python/PybuildPluginPyproject">Python/PybuildPluginPyproject</a>,
and converted some packages to <code>pybuild-plugin-pyproject</code>:</p>
<ul>
<li>aresponses</li>
<li>python-azure, fixing an <a href="https://bugs.debian.org/1114162">autopkgtest failure in kombu</a></li>
<li>python-ciso8601</li>
</ul>
<p>I updated dh-python to <a href="https://salsa.debian.org/python-team/tools/dh-python/-/merge_requests/62">suppress generated dependencies that would be
satisfied by python3 &gt;=
3.11</a>.</p>
<p><code>pkg_resources</code> is
<a href="https://github.com/pypa/setuptools/issues/3085">deprecated</a>. In most cases
replacing it is a relatively simple matter of <a href="https://importlib-resources.readthedocs.io/en/latest/migration.html">porting to
<code>importlib.resources</code></a>,
but packages that used its old namespace package support need more
complicated work to port them to <a href="https://peps.python.org/pep-0420/">implicit namespace
packages</a>. We had quite a few bugs about
this on <code>zope.*</code> packages, but fortunately upstream did the <a href="https://github.com/zopefoundation/meta/issues/194">hard part of
this</a> recently. I went
round and cleaned up most of the remaining loose ends, with some help from
Alexandre Detiste. Some of these aren’t completely done yet as they’re
awaiting new upstream releases:</p>
<ul>
<li>zope.component (<a href="https://bugs.debian.org/1084007">Debian bug</a>, <a href="https://github.com/zopefoundation/zope.component/pull/80">upstream
<span class="caps">PR</span></a>)</li>
<li>zope.configuration (<a href="https://bugs.debian.org/1084006">Debian bug</a>,
<a href="https://github.com/zopefoundation/zope.configuration/pull/68">upstream
<span class="caps">PR</span></a>)</li>
<li>zope.deferredimport (<a href="https://bugs.debian.org/1084008">Debian bug</a>,
<a href="https://github.com/zopefoundation/zope.deferredimport/pull/18">upstream
<span class="caps">PR</span></a>)</li>
<li>zope.deprecation (<a href="https://bugs.debian.org/1084009">Debian bug</a>, <a href="https://github.com/zopefoundation/zope.deprecation/pull/27">upstream
<span class="caps">PR</span></a>)</li>
<li>zope.exceptions (<a href="https://bugs.debian.org/1084012">Debian bug</a>, <a href="https://github.com/zopefoundation/zope.exceptions/pull/42">upstream
<span class="caps">PR</span></a>)</li>
<li>zope.i18nmessageid (<a href="https://bugs.debian.org/1084014">Debian bug</a>,
<a href="https://github.com/zopefoundation/zope.i18nmessageid/pull/67">upstream
<span class="caps">PR</span></a>)</li>
<li>zope.interface (<a href="https://bugs.debian.org/1084013">Debian bug</a>, <a href="https://github.com/zopefoundation/zope.interface/pull/346">upstream
<span class="caps">PR</span></a>)</li>
<li>zope.location (<a href="https://bugs.debian.org/1084016">Debian bug</a>, <a href="https://github.com/zopefoundation/zope.location/pull/17">upstream
<span class="caps">PR</span></a>)</li>
<li>zope.security (<a href="https://bugs.debian.org/1084018">Debian bug</a>, <a href="https://github.com/zopefoundation/zope.security/pull/122">upstream
<span class="caps">PR</span></a>)</li>
<li>zope.testing (<a href="https://bugs.debian.org/1084019">Debian bug</a>, <a href="https://github.com/zopefoundation/zope.testing/pull/55">upstream
<span class="caps">PR</span></a>)</li>
<li>zope.testrunner (<a href="https://bugs.debian.org/1084020">Debian bug</a>, <a href="https://github.com/zopefoundation/zope.testrunner/pull/201">upstream
<span class="caps">PR</span></a>)</li>
</ul>
<p>This work also caused a couple of build regressions, which I fixed:</p>
<ul>
<li><a href="https://bugs.debian.org/1115803">zope.hookable</a></li>
<li><a href="https://bugs.debian.org/1115763">zope.location</a></li>
</ul>
<p>I fixed
<a href="https://salsa.debian.org/python-team/packages/jupyter-client/-/commit/ebe94146e3bb6405c529aeae8118161334bc9ab1">jupyter-client</a>
so that its autopkgtests would work in Debusine.</p>
<p>I fixed <a href="https://bugs.debian.org/1116924">waitress</a> to build with the
<code>nocheck</code> profile.</p>
<p>I fixed several other build/test failures:</p>
<ul>
<li><a href="https://bugs.debian.org/1114057">austin</a> (<a href="https://github.com/P403n1x87/austin/pull/330">contributed follow-up fix
upstream</a>)</li>
<li><a href="https://salsa.debian.org/python-team/packages/fsspec/-/commit/849213bc0a6abb533d8046302378246c9da5549e">fsspec</a></li>
<li><a href="https://bugs.debian.org/1114876">python-asgiref</a></li>
<li><a href="https://bugs.debian.org/1115079">python-django-channels</a></li>
<li><a href="https://bugs.debian.org/1116155">twisted</a></li>
</ul>
<p>I fixed some other bugs:</p>
<ul>
<li><a href="https://bugs.debian.org/1017761">python-jpype: java.lang.ClassNotFoundException: org.jpype.classloader.DynamicClassLoader</a></li>
<li><a href="https://bugs.debian.org/1035211">python-jpype: Please add autopkgtests (to add coverage for python3-numpy)</a></li>
</ul>
<h2>Code reviews</h2>
<ul>
<li>debbugs: <a href="https://salsa.debian.org/debbugs-team/debbugs/-/merge_requests/24">Fix dep8 autopkgtests, make Salsa <span class="caps">CI</span> fully
green</a>
(still in progress)</li>
<li>dput-ng: <a href="https://bugs.debian.org/1112107">Add trixie-backports <span class="amp">&amp;</span> bookworm-backports-sloppy</a></li>
<li>openssh: <a href="https://salsa.debian.org/ssh-team/openssh/-/merge_requests/34">Update sshd@.service to follow upstream</a></li>
<li>openssh: <a href="https://salsa.debian.org/ssh-team/openssh/-/merge_requests/35">authfd: fallback to default if $SSH_AUTH_SOCK is
unset</a>
(still in progress)</li>
<li>putty: <a href="https://salsa.debian.org/ssh-team/putty/-/merge_requests/7">d/rules: Use dh_assistant restore-file-on-clean</a></li>
<li>python-debian: <a href="https://salsa.debian.org/python-debian-team/python-debian/-/merge_requests/151">Update from pyupgrade to
—py37-plus</a>
(still in progress)</li>
<li>release-notes: <a href="https://salsa.debian.org/ddp-team/release-notes/-/merge_requests/322">issues: mention tzdata-legacy split</a></li>
</ul>
<h2>Other bits and pieces</h2>
<p>I fixed several CMake 4 build failures:</p>
<ul>
<li><a href="https://bugs.debian.org/1112984">halibut</a></li>
<li><a href="https://bugs.debian.org/1112986">hdf5-blosc</a></li>
<li><a href="https://bugs.debian.org/1112987">hdf5-filter-plugin</a></li>
<li><a href="https://bugs.debian.org/1113655">yubihsm-shell</a></li>
</ul>
<p>I got <span class="caps">CI</span> for debbugs passing
(<a href="https://salsa.debian.org/debbugs-team/debbugs/-/merge_requests/22">!22</a>,
<a href="https://salsa.debian.org/debbugs-team/debbugs/-/merge_requests/23">!23</a>).</p>
<p>I fixed a <a href="https://bugs.debian.org/1114418">build failure with <span class="caps">GCC</span> 15 in
trn4</a>.</p>
<p>I filed a <a href="https://bugs.debian.org/1114970">release-notes bug</a> about the
tzdata reorganization in the trixie cycle.</p>
<p>I filed and fixed a <a href="https://bugs.debian.org/1115226">git-dpm regression with bash
5.3</a>.</p>
<p>I upgraded libfilter-perl to a new upstream version.</p>
<p>I <a href="https://code.launchpad.net/~cjwatson/ubuntu-dev-tools/+git/ubuntu-dev-tools/+merge/492543">optimized some code in
ubuntu-dev-tools</a>
that made O(1) <span class="caps">HTTP</span> requests when it could instead make O(n).</p></description>
<pubDate>Wed, 08 Oct 2025 18:16:52 +0000</pubDate>
</item>
<item>
<title>David Mohammed: Ubuntu Budgie 25.10 release notes</title>
<guid isPermaLink="false">https://ubuntubudgie.org/?p=3911</guid>
<link>https://ubuntubudgie.org/2025/10/ubuntu-budgie-25-10-release-notes/</link>
<description><p>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…</p>
<p><a href="https://ubuntubudgie.org/2025/10/ubuntu-budgie-25-10-release-notes/" rel="nofollow">Source</a></p></description>
<pubDate>Wed, 08 Oct 2025 17:26:51 +0000</pubDate>
</item>
<item>
<title>St&eacute;phane Graber: Announcing Incus 6.17</title>
<guid isPermaLink="false">https://stgraber.org/?p=1783</guid>
<link>https://stgraber.org/2025/09/29/announcing-incus-6-17/</link>
<description><p>The Incus team is pleased to announce the release of Incus 6.17!</p>
<p>This release comes with an early CLI for IncusOS users, a couple of nice enhancements to OVN networking, more flexibility for cluster users and a couple of new instance options.</p>
<figure class="wp-block-image size-large"><a href="https://linuxcontainers.org/incus/try-it/"><img alt="" class="wp-image-1784" height="659" src="https://stgraber.org/wp-content/uploads/2025/09/image-1-1024x659.png" width="1024" /></a></figure>
<p>The highlights for this release are:</p>
<ul class="wp-block-list">
<li>IncusOS management commands</li>
<li>Tunnel support on OVN networks</li>
<li>Control over out-of-memory priority</li>
<li>Override-able configuration and devices on backup import</li>
<li>database-client cluster role</li>
<li>Support for parent=none on OVN uplink networks</li>
<li>Cluster groups in configuration preseed</li>
</ul>
<p>The full announcement and changelog can be <a href="https://discuss.linuxcontainers.org/t/incus-6-17-has-been-released/24862" rel="noreferrer noopener" target="_blank">found here</a>.<br />And for those who prefer videos, here’s the release overview video:</p>
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
</div></figure>
<p>You can take the latest release of Incus up for a spin through our online demo service at: <a href="https://linuxcontainers.org/incus/try-it/" rel="noreferrer noopener" target="_blank">https://linuxcontainers.org/incus/try-it/</a></p>
<p>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: <a href="https://zabbly.com/incus">https://zabbly.com/incus</a></p>
<p>Donations towards my work on this and other open source projects is also always appreciated, you can find me on <a href="https://github.com/sponsors/stgraber">Github Sponsors</a>, <a href="https://patreon.com/stgraber">Patreon</a> and <a href="https://ko-fi.com/stgraber">Ko-fi</a>.</p>
<p>Enjoy!</p>
<p></p></description>
<pubDate>Mon, 29 Sep 2025 15:36:26 +0000</pubDate>
</item>
<item>
<title>Julian Andres Klode: Dependency Tries</title>
<guid isPermaLink="true">https://blog.jak-linux.org/2025/09/27/dependency-tries/</guid>
<link>https://blog.jak-linux.org/2025/09/27/dependency-tries/</link>
<description><p>As I was shopping groceries I had a shocking realization: The active dependencies
of packages in a solver actually form a trie (a dependency <code>A|B</code> - “A or B” - of
a package <code>X</code> is considered active if we marked <code>X</code> for install).</p>
<p>Consider the dependencies <code>A|B|C</code>, <code>A|B</code>, <code>B|X</code>.
In most package managers these just express alternatives, that is, the “or” relationship,
but in Debian packages, it also expresses a preference relationship between its operands,
so in <code>A|B|C</code>, <code>A</code> is preferred over <code>B</code> and <code>B</code> over <code>C</code> (and <code>A</code> transitively over <code>C</code>).</p>
<p>This means that we can convert the three dependencies into a trie as follows:</p>
<p><img alt="Dependency trie of the three dependencies" src="https://blog.jak-linux.org/post/trie1.svg" /></p>
<p>Solving the dependency here becomes a matter of trying to install the package
referenced by the first edge of the root, and seeing if that sticks. In this
case, that would be ‘a’. Let’s assume that ‘a’ failed to install, the next
step is to remove the empty node of <code>a</code>, and merging its children into the
root.</p>
<p><img alt="Reduced dependency trie with “not A” containing b, b|c, b|x" src="https://blog.jak-linux.org/post/trie2.svg" /></p>
<p>For ease of visualisation, we remove “a” from the dependency nodes as well,
leading us to a trie of the dependencies “b”, “b|c”, and “b|x”.</p>
<p>Presenting the Debian dependency problem, or the positive part of it as a
trie allows us for a great visualization of the problem but it may not proof
to be an effective implementation choice.</p>
<p>In the real world we may actually store this as a priority queue that we
can delete from. Since we don’t actually want to delete from the queue
for real, our queue items are pairs of a pointer to dependency and an
activitity level, say <code>A|B@1</code>.
Whenever a variable is assigned false, we look at its reverse dependencies
and bump their activity, and reinsert them (the priority of the item being
determined by the leftmost solution still possible, it has now changed).
When we iterate the queue, we remove items with a lower activity level:</p>
<ol>
<li>Our queue is <code>A|B@1</code>, <code>A|B|C@1</code>, <code>B|X@1</code></li>
<li>Rejecting A bump the activity for its reverse dependencies and reinset them:
Our queue is <code>A|B@1</code>, <code>A|B|C@1</code>, <code>(A|)B@2</code>, <code>(A|)B|C@2</code>, <code>B|X@1</code></li>
<li>We visit <code>A|B@1</code> but see the activity of the underlying dependency is now 2 and remove it
Our queue is <code>A|B|C@1</code>, <code>(A|)B@2</code>, <code>(A|)B|C@2</code>, <code>B|X@1</code></li>
<li>We visit <code>A|B|C@1</code> but see the activity of the underlying dependency is now 2 and remove it
Our queue is <code>(A|)B@2</code>, <code>(A|)B|C@2</code>, <code>B|X@1</code></li>
<li>We visit <code>A|B@2</code>, see the activity matches and find B is the solution.</li>
</ol></description>
<pubDate>Sat, 27 Sep 2025 14:32:19 +0000</pubDate>
</item>
<item>
<title>Podcast Ubuntu Portugal: E363 Longa Vida a Digi Ping</title>
<guid isPermaLink="false">https://hub.podcastubuntuportugal.org/s/eYXEygmJjofZJ5C/download/e363.mp3</guid>
<link>https://podcastubuntuportugal.org/e363/</link>
<description><p>Na semana que passou o Diogo andou a arrumar tudo em caixotes e aumentou o PIB Chinês em 127%! Toda a Glória ao Celestial Comprador de Electrónica dos Povos! E num verdadeiro Pro-Dígio de velocidade, brincou com RJ45, sfp+, OpenWRT e demais jigajogas para espremer 10 Gbps até ao último bit. Ainda trouxemos muitas novidades do Firefox 143, Questing Quokka, Gnome 49, Ubuntu Touch e coisas com nomes esquisitos, como Dracut, Cuda, Loupe, Rust e Ptyxis (pronuncia-se «Ptyxis»).</p>
<p>Já sabem: oiçam, subscrevam e partilhem!</p>
<ul>
<li><a href="https://www.saitek.com/uk/down/drivers.php">https://www.saitek.com/uk/down/drivers.php</a></li>
<li><a href="https://www.x-plane.com/">https://www.x-plane.com/</a></li>
<li><a href="https://pt.aliexpress.com/item/1005006900224809.html">https://pt.aliexpress.com/item/1005006900224809.html</a></li>
<li><a href="https://www.blender.org/">https://www.blender.org/</a></li>
<li><a href="https://www.amazon.es/dp/B0DNDS2NRJ">https://www.amazon.es/dp/B0DNDS2NRJ</a></li>
<li><a href="https://www.amazon.es/dp/B0DQ4VVZKN">https://www.amazon.es/dp/B0DQ4VVZKN</a></li>
<li><a href="https://www.youtube.com/watch?v=vvcMIoanhwE">https://www.youtube.com/watch?v=vvcMIoanhwE</a></li>
<li><a href="https://pt.aliexpress.com/item/1005009557703859.html?gatewayAdapt=glo2bra">https://pt.aliexpress.com/item/1005009557703859.html?gatewayAdapt=glo2bra</a></li>
<li><a href="https://www.amazon.es/dp/B07LFKGP1L">https://www.amazon.es/dp/B07LFKGP1L</a></li>
<li><a href="https://9to5linux.com/firefox-143-is-now-available-for-download-this-is-whats-new">https://9to5linux.com/firefox-143-is-now-available-for-download-this-is-whats-new</a></li>
<li><a href="https://support.mozilla.org/en-US/kb/firefox-protection-against-fingerprinting#w_suspected-fingerprinters">https://support.mozilla.org/en-US/kb/firefox-protection-against-fingerprinting#w_suspected-fingerprinters</a></li>
<li><a href="https://www.omgubuntu.co.uk/2025/09/firefox-143-release-key-changes">https://www.omgubuntu.co.uk/2025/09/firefox-143-release-key-changes</a></li>
<li><a href="https://www.omgubuntu.co.uk/2025/09/ubuntu-25-10-switches-to-dracut-by-default">https://www.omgubuntu.co.uk/2025/09/ubuntu-25-10-switches-to-dracut-by-default</a></li>
<li><a href="https://ubuntu.com/blog/canonical-announces-it-will-support-and-distribute-nvidia-cuda-in-ubuntu">https://ubuntu.com/blog/canonical-announces-it-will-support-and-distribute-nvidia-cuda-in-ubuntu</a></li>
<li><a href="https://developer.nvidia.com/cuda-toolkit">https://developer.nvidia.com/cuda-toolkit</a></li>
<li><a href="https://www.phoronix.com/news/Ubuntu-Better-CUDA">https://www.phoronix.com/news/Ubuntu-Better-CUDA</a></li>
<li><a href="https://9to5linux.com/canonical-to-package-and-distribute-nvidia-cuda-within-ubuntus-repositories">https://9to5linux.com/canonical-to-package-and-distribute-nvidia-cuda-within-ubuntus-repositories</a></li>
<li><a href="https://www.omgubuntu.co.uk/2025/09/canonical-adds-nvidia-cuda-ubuntu-repos">https://www.omgubuntu.co.uk/2025/09/canonical-adds-nvidia-cuda-ubuntu-repos</a></li>
<li><a href="https://www.phoronix.com/news/Ubuntu-Ptyxis-Recommended">https://www.phoronix.com/news/Ubuntu-Ptyxis-Recommended</a></li>
<li><a href="https://gitlab.gnome.org/chergert/ptyxis/">https://gitlab.gnome.org/chergert/ptyxis/</a></li>
<li><a href="https://apps.gnome.org/pt/Loupe/">https://apps.gnome.org/pt/Loupe/</a></li>
<li><a href="https://lists.ubuntu.com/archives/ubuntu-announce/2025-September/000316.html">https://lists.ubuntu.com/archives/ubuntu-announce/2025-September/000316.html</a></li>
<li><a href="https://www.phoronix.com/news/Ubuntu-25.10-Beta">https://www.phoronix.com/news/Ubuntu-25.10-Beta</a></li>
<li><a href="https://9to5linux.com/ubuntu-25-10-beta-released-with-linux-kernel-6-17-gnome-49-and-more">https://9to5linux.com/ubuntu-25-10-beta-released-with-linux-kernel-6-17-gnome-49-and-more</a></li>
<li><a href="https://www.omgubuntu.co.uk/2025/09/ubuntu-25-10-beta-released">https://www.omgubuntu.co.uk/2025/09/ubuntu-25-10-beta-released</a></li>
<li><a href="https://apps.gnome.org/pt/Loupe/">https://apps.gnome.org/pt/Loupe/</a></li>
<li><a href="https://lists.ubuntu.com/archives/ubuntu-announce/2025-September/000316.html">https://lists.ubuntu.com/archives/ubuntu-announce/2025-September/000316.html</a></li>
<li><a href="https://www.phoronix.com/news/Ubuntu-25.10-Beta">https://www.phoronix.com/news/Ubuntu-25.10-Beta</a></li>
<li><a href="https://9to5linux.com/ubuntu-25-10-beta-released-with-linux-kernel-6-17-gnome-49-and-more">https://9to5linux.com/ubuntu-25-10-beta-released-with-linux-kernel-6-17-gnome-49-and-more</a></li>
<li><a href="https://www.omgubuntu.co.uk/2025/09/ubuntu-25-10-beta-released">https://www.omgubuntu.co.uk/2025/09/ubuntu-25-10-beta-released</a></li>
<li><a href="https://discourse.ubuntu.com/t/ubuntu-desktop-25-10-the-questing-quokka-roadmap/61159">https://discourse.ubuntu.com/t/ubuntu-desktop-25-10-the-questing-quokka-roadmap/61159</a></li>
<li><a href="https://www.phoronix.com/news/GNOME-49-Released">https://www.phoronix.com/news/GNOME-49-Released</a></li>
<li><a href="https://9to5linux.com/gnome-49-brescia-desktop-environment-officially-released-heres-whats-new">https://9to5linux.com/gnome-49-brescia-desktop-environment-officially-released-heres-whats-new</a></li>
<li><a href="https://www.osnews.com/story/143369/gnome-49-released/">https://www.osnews.com/story/143369/gnome-49-released/</a></li>
<li><a href="https://www.omgubuntu.co.uk/2025/09/gnome-49-officially-released">https://www.omgubuntu.co.uk/2025/09/gnome-49-officially-released</a></li>
<li>Festa do Software Livre 2025, Porto, 3 a 5 de Outubro: <a href="https://festa2025.softwarelivre.eu/pt/">https://festa2025.softwarelivre.eu/pt/</a></li>
<li>Ubuntu Summit 2025, Londres, 23-24 de Outubro: <a href="https://ubuntu.com/blog/ubuntu-summit-25-10-is-coming-to-your-circle-of-friends-from-london">https://ubuntu.com/blog/ubuntu-summit-25-10-is-coming-to-your-circle-of-friends-from-london</a></li>
<li>LoCo PT: <a href="https://loco.ubuntu.com/teams/ubuntu-pt/">https://loco.ubuntu.com/teams/ubuntu-pt/</a></li>
<li>Mastodon: <a href="https://masto.pt/@pup">https://masto.pt/@pup</a></li>
<li>Youtube: <a href="https://youtube.com/PodcastUbuntuPortugal">https://youtube.com/PodcastUbuntuPortugal</a></li>
</ul>
<h3 id="atribuição-e-licenças">Atribuição e licenças</h3>
<p>Este episódio foi produzido por Diogo Constantino, Miguel e Tiago Carrondo e editado pelo <a href="https://senhorpodcast.pt/">Senhor Podcast</a>.
O website é produzido por Tiago Carrondo e o <a href="https://gitlab.com/podcastubuntuportugal/website">código aberto</a> está licenciado nos termos da <a href="https://gitlab.com/podcastubuntuportugal/website/main/LICENSE">Licença MIT</a>. (<a href="https://creativecommons.org/licenses/by/4.0/)">https://creativecommons.org/licenses/by/4.0/)</a>. A música do genérico é: “Won’t see it comin’ (Feat Aequality &amp; N’sorte d’autruche)”, por Alpha Hydrae e está licenciada nos termos da <a href="https://creativecommons.org/publicdomain/zero/1.0/">CC0 1.0 Universal License</a>.
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: Sitar long.aiff by Kaiho – <a href="https://freesound.org/s/37715/">https://freesound.org/s/37715/</a> – License: Attribution 3.0; Red Choir in Beijing Park.wav by Refrain – <a href="https://freesound.org/s/266500/">https://freesound.org/s/266500/</a> – License: Creative Commons 0
Este episódio e a imagem utilizada estão licenciados nos termos da licença: <a href="https://creativecommons.org/licenses/by-nc-nd/4.0/">Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)</a>, <a href="https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode">cujo texto integral pode ser lido aqui</a>. Estamos abertos a licenciar para permitir outros tipos de utilização, <a href="https://podcastubuntuportugal.org/contactos">contactem-nos</a> para validação e autorização.
A arte de episódio foi criada por encomenda pela Shizamura - artista, ilustradora e autora de BD. Podem ficar a conhecer melhor a <a href="https://ciberlandia.pt/@shizamura">Shizamura na Ciberlândia</a> e no <a href="https://sarilho.net/">seu sítio web</a>.</p></description>
<pubDate>Thu, 25 Sep 2025 00:00:00 +0000</pubDate>
<enclosure url="https://hub.podcastubuntuportugal.org/s/eYXEygmJjofZJ5C/download/e363.mp3" length="35809905" type="audio/mpeg"/>
</item>
<item>
<title>Aaron Rainbolt: Setting up a weird dual-boot DOS workstation</title>
<guid isPermaLink="true">https://arraybolt3.substack.com/p/setting-up-a-weird-dual-boot-dos</guid>
<link>https://arraybolt3.substack.com/p/setting-up-a-weird-dual-boot-dos</link>
<description><p>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.</p><p>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 <em>might</em> 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.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://arraybolt3.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Arraybolt's Archives! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input class="email-input" name="email" tabindex="-1" type="email" /><input class="button primary" type="submit" value="Subscribe" /><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>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 <em>forward</em> 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.</p><p>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 <em>barely</em> 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.</p><p>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.</p><p>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.</p><p>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!…</p><p>…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 "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!</p><p>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.</p><p>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:</p><ul><li><p>The USB driver included with FreeDOS only works with UHCI controllers, but the controller in this system is an OHCI controller.</p></li><li><p>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.</p></li></ul><p>(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.)</p><p>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…</p><p>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).</p><p>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 <em>probably</em> 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.</p><p>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…</p><p>…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.</p><p>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.</p><p>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:</p><ul><li><p>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.</p></li><li><p>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.</p></li><li><p>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.)</p></li><li><p>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.</p></li></ul><p>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</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://arraybolt3.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Arraybolt's Archives! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input class="email-input" name="email" tabindex="-1" type="email" /><input class="button primary" type="submit" value="Subscribe" /><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div></description>
<pubDate>Sun, 21 Sep 2025 18:04:21 +0000</pubDate>
<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"/>
</item>
<item>
<title>Launchpad News: Update on Launchpad mailing lists shutdown</title>
<guid isPermaLink="false">https://blog.launchpad.net/?p=4480</guid>
<link>https://blog.launchpad.net/general/update-on-launchpad-mailing-lists-shutdown</link>
<description><p>As announced earlier this year in our previous blog post: <a href="https://blog.launchpad.net/general/sunsetting-launchpads-mailing-lists">Sunsetting Launchpad’s mailing lists</a>, Launchpad will retire its mailing list feature at the end of October 2025.</p>
<p>We would like to provide an update on the next steps in this process.</p>
<p>Our current plan is to stop accepting and sending emails to Launchpad mailing lists during the week of <strong>13th to 17th October 2025</strong>. </p>
<p>If your team is still actively using or relying on Launchpad mailing lists, we recommend following one of the Migration Paths proposed on the <a href="https://blog.launchpad.net/general/sunsetting-launchpads-mailing-lists">previous blog post</a>. If you do not see a clear way forward, please reach out to us to discuss, and see how we can help you:</p>
<ul><li>Matrix: #launchpad:ubuntu.com</li><li>Email: feedback@launchpad.net</li></ul>
<p></p></description>
<pubDate>Fri, 19 Sep 2025 15:41:25 +0000</pubDate>
</item>
<item>
<title>Ubuntu Studio: Ubuntu Studio 25.10 Beta Released</title>
<guid isPermaLink="false">https://ubuntustudio.org/?p=3017</guid>
<link>https://ubuntustudio.org/2025/09/ubuntu-studio-25-10-beta-released/</link>
<description><div class="wp-block-image"><figure class="aligncenter size-full is-resized"><img alt="" class="wp-image-3021" height="223" src="https://ubuntustudio.org/wp-content/uploads/2025/09/0f74/betabanner.png" width="600" /></figure></div>
<p id="block-dfae7f3f-d386-4297-b510-560ae7fce8a5">The Ubuntu Studio team is pleased to announce the beta release of Ubuntu Studio 25.10, codenamed “Questing Quokka”.</p>
<p id="block-ebf85cba-74ad-4dc6-a731-f595c9f28a72">While this beta is reasonably free of any showstopper installer bugs, you will find some bugs within. This image is, however, mostly representative of what you will find when Ubuntu Studio 25.10 is released on October 9, 2025.</p>
<p>We encourage everyone to try this image and report bugs to improve our final release. Pay specific attention to apps that might need to be forced to run inside Xwayland so we can patch their launchers.</p>
<h2 id="block-6ca66e3a-8d42-42a8-a0cf-a8ed86e6025f">Special Notes</h2>
<p id="block-708043b1-523e-4fb9-92ca-720e3316371a">The Ubuntu Studio 25.10 beta 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 DVD. For this reason, we recommend downloading to a compatible file system. When creating a boot medium, we recommend <a href="https://ubuntu.com/tutorials/create-a-usb-stick-on-ubuntu#1-overview">creating a bootable USB stick</a> with the ISO image or burning to a Dual-Layer DVD.</p>
<p id="block-fa4be379-b904-4919-9502-c73469ca31ef">Images can be obtained from this link: <a href="https://cdimage.ubuntu.com/ubuntustudio/releases/25.10/beta/" rel="noreferrer noopener" target="_blank">https://cdimage.ubuntu.com/ubuntustudio/releases/25.10/beta/</a></p>
<p id="block-bf39c734-e080-4549-9621-044e9241d48c">Full updated information, including <strong>Upgrade Instructions,</strong> are available in the <strong><a href="https://discourse.ubuntu.com/t/ubuntu-studio-25-10-release-notes/">Release Notes</a></strong><a href="https://wiki.ubuntu.com/GroovyGorilla/Beta/UbuntuStudio">.</a></p>
<h2 id="block-aaaf14ed-800d-473e-abc2-4f2db719e0d7">New Features This Release</h2>
<p>This release is more evolutionary rather than revolutionary. While we work hard to bring new features, this one was not one where we had anything major to report. Here are a few highlights:</p>
<ul id="block-05beff49-852b-4564-9df3-018c2354c56e"><li><strong>Plasma 6.4</strong> is now the default desktop environment, an upgrade from Plasma 6.1.</li><li><strong>PipeWire</strong> continues to improve with every release.. Version 1.4.7</li><li>We now include an optional “macOS-like” layout for our users migrating from macOS, which features a dock at the bottom and a global menu. Do note that the global menu doesn’t work with all applications.</li><li>More fine-tuning of options available in <strong>Ubuntu Studio Audio Configuraiton</strong></li><li>Many options in <strong>Ubuntu Studio Audio Configuration</strong> are now at the user level as opposed to the system level.</li><li><strong>JackTrip</strong> has been added for those needing a GUI way to network audio between computers or collaborate remotely. version 2.7.1</li></ul>
<h2 id="block-c3e434c7-367a-4777-b799-a3fd6a35e1b3">Major Package Upgrades</h2>
<ul id="block-e855e703-e523-4f63-940a-d1071d6b8dbf"><li><strong>Qtractor</strong> version 1.5.8</li><li><strong>Audacity </strong>version 3.7.5</li><li><strong>digiKam</strong> version 8.7.0</li><li><strong>Kdenlive </strong>version 25.08.1</li><li><strong>Krita </strong>version 5.2.11</li><li><strong>GIMP</strong> version 3.0.4</li></ul>
<p id="block-5f0d720e-bce2-4330-9654-b7cd8589e194">There are many other improvements, too numerous to list here. We encourage you to look around the freely-downloadable ISO image.</p>
<h2 id="block-8f4aa3cc-9bd2-4090-a685-153ad6761131">Known Issues</h2>
<ul id="block-c6eb8dde-1349-461b-886c-937bdbed611d"><li>You will be prompted, upon first login of any new user, to reboot to apply proper audio configurations for audio production. This is intentional and is a workaround for the installer’s inability to <a href="https://launchpad.net/bugs/2063899">configure the first user as part of the “audio” group or for new users to be added to the audio group automatically.</a><br /></li><li>Official Ubuntu Studio release notes can be found at <a href="https://discourse.ubuntu.com/t/ubuntu-studio-25-10-release-notes/">https://discourse.ubuntu.com/t/ubuntu-studio-25-10-release-notes/</a></li></ul>
<p id="block-8127ec85-81e1-49ae-8132-7d07e86e6647">Further known issues, mostly pertaining to the desktop environment, can be found at <a href="https://wiki.ubuntu.com/QuestingQuokka/ReleaseNotes/Kubuntu">https://wiki.ubuntu.com/QuestingQuokka/ReleaseNotes/Kubuntu</a></p>
<p id="block-547b9794-57c5-49eb-a8cb-884c89bb51a8">Additionally, the main Ubuntu release notes contain more generic issues: <a href="https://discourse.ubuntu.com/t/questing-quokka-release-notes/">https://discourse.ubuntu.com/t/questing-quokka-release-notes/</a></p>
<h2 id="block-82f8513f-6640-43f9-bde7-5c17da0aa520">How You Can Help</h2>
<p>Please test using the test cases on <a href="https://iso.qa.ubuntu.com">https://iso.qa.ubuntu.com</a>. All you need is a <a href="https://launchpad.net">Launchpad</a> account to get started.</p>
<p><strong>Additionally, we need financial contributions. Our project lead, Erich Eickmeyer, is working long hours on this project and trying to generate a part-time income. <a data-id="56" data-type="page" href="https://ubuntustudio.org/contribute/">Go here</a> to see how you can contribute financially (options are also here in the sidebar).</strong></p>
<h2 id="block-c7a21be7-9349-421e-a098-c0d2919f320a">Frequently Asked Questions</h2>
<p id="block-163f794a-f451-40b0-bbbd-6f26c6cbe8e8"><strong>Q:</strong> Does Ubuntu Studio contain snaps?<br /><strong>A:</strong> 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.</p>
<p>Thunderbird is also a snap in order for the maintainers to get security patches delivered faster. This is done by the Thunderbird team in cooperation with Canonical.</p>
<p id="block-342134d3-a024-4b7b-b768-76c758b20acd">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.<br /><br />Also, to keep theming consistent, all included themes are snapped in addition to the included .deb versions so that snaps stay consistent with out themes.</p>
<p>We are working with Canonical to make sure that the quality of snaps goes up with each release, so we please ask that you give snaps a chance instead of writing them off completely.</p>
<p id="block-c5b30c83-d27b-4fd0-a958-bc418f83bf2a"><strong>Q:</strong> If I install this Beta release, will I have to reinstall when the final release comes out?<br /><strong>A:</strong> No. If you keep it updated, your installation will automatically become the final release.</p>
<p id="block-2266cee7-0ea1-49cf-8340-594da42a09d7"><strong>Q</strong>: Will you make an ISO with {my favorite desktop environment}?<br /><strong>A:</strong> 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 <a href="https://ubuntu.com/download/flavours">official flavor for the desktop environment of your choice</a> and use <a href="https://ubuntustudio.org/ubuntu-studio-installer">Ubuntu Studio Installer</a> to get Ubuntu Studio – which does *not* convert that flavor to Ubuntu Studio but adds its benefits.</p>
<p id="block-48669a69-39bc-4971-b46b-c7da87133d24"><strong>Q: </strong>What if I don’t want all these packages installed on my machine?<br /><strong>A: </strong>We now include a minimal install option. Install using the minimal install option, then use <strong>Ubuntu Studio Installer </strong>to install what you need for your very own content creation studio.</p></description>
<pubDate>Thu, 18 Sep 2025 21:49:47 +0000</pubDate>
</item>
<item>
<title>Lubuntu Blog: Lubuntu Questing Beta Released!</title>
<guid isPermaLink="false">https://lubuntu.me/?p=4154</guid>
<link>https://lubuntu.me/lubuntu-questing-beta-released/</link>
<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>
<pubDate>Thu, 18 Sep 2025 21:42:05 +0000</pubDate>
</item>
<item>
<title>Jonathan Riddell: Adios Chicos, 25 Years of KDE</title>
<guid isPermaLink="false">https://jriddell.org/?p=1606</guid>
<link>https://jriddell.org/2025/09/14/adios-chicos-25-years-of-kde/</link>
<description><p>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.</p>
<p>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. </p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<figure class="wp-block-image size-large"><a href="https://www.youtube.com/watch?v=oLEwUpT5DUc"><img alt="" class="wp-image-1610" height="859" src="https://jriddell.org/wp-content/uploads/2025/09/image-1024x859.png" width="1024" /></a><a href="https://www.youtube.com/watch?v=oLEwUpT5DUc">Sunset surfs at the digital nomad coliving paddleshack at the end of the world</a></figure></description>
<pubDate>Sun, 14 Sep 2025 20:56:35 +0000</pubDate>
</item>
<item>
<title>Podcast Ubuntu Portugal: E362 Malmen, Barbosa & Simões Contra as Torres Do Técnico</title>
<guid isPermaLink="false">https://hub.podcastubuntuportugal.org/s/pEYnEHygscmg3oB/download/e362.mp3</guid>
<link>https://podcastubuntuportugal.org/e362/</link>
<description><p>Desta feita recebemos a visita do Malmen (em directo de São Miguel), do André Barbosa (Wikimedia) e da Joana Simões (OSgeo) para falarmos um pouco sobre as suas aventuras tecnológicas e do que esperam da Festa do Software Livre no Porto. O Diogo e o Miguel visitaram o interior do país e trouxeram de lá muitas novidades boas; pelo meio discutimos as catástrofes globais da semana trazidas pelo jogo Alentejo Tinto’s Law, dramas da Comunidade e até Tamagochis no Ubuntu Touch.</p>
<p>Já sabem: oiçam, subscrevam e partilhem!</p>
<ul>
<li><a href="https://discourse.ubuntu.com/t/on-discourse-rules-about-politics/66986">https://discourse.ubuntu.com/t/on-discourse-rules-about-politics/66986</a></li>
<li><a href="https://discourse.ubuntu.com/t/an-update-concerning-the-ubuntu-archive-service-disruption/66997">https://discourse.ubuntu.com/t/an-update-concerning-the-ubuntu-archive-service-disruption/66997</a></li>
<li><a href="https://open-store.io/app/gearboy.bhdouglass">https://open-store.io/app/gearboy.bhdouglass</a></li>
<li><a href="https://blog.mozilla.org/futurereleases/2025/09/05/firefox-32-bit-linux-support-to-end-in-2026/">https://blog.mozilla.org/futurereleases/2025/09/05/firefox-32-bit-linux-support-to-end-in-2026/</a></li>
<li><a href="https://www.omgubuntu.co.uk/2025/09/firefox-32-bit-linux-support-ending">https://www.omgubuntu.co.uk/2025/09/firefox-32-bit-linux-support-ending</a></li>
<li><a href="https://open-store.io/app/ovi.alaskalinuxuser">https://open-store.io/app/ovi.alaskalinuxuser</a></li>
<li><a href="https://github.com/MalMen/HellYes/">https://github.com/MalMen/HellYes/</a></li>
<li><a href="https://masto.pt/@MalMen">https://masto.pt/@MalMen</a></li>
<li><a href="https://noc.social/@doublebyte">https://noc.social/@doublebyte</a></li>
<li><a href="https://ciberlandia.pt/@Barbosa">https://ciberlandia.pt/@Barbosa</a></li>
<li><a href="https://github.com/byteroad/pygeoapi_config">https://github.com/byteroad/pygeoapi_config</a></li>
<li><a href="https://wiki.osgeo.org/wiki/OSGeo_Community_Sprint_2025">https://wiki.osgeo.org/wiki/OSGeo_Community_Sprint_2025</a></li>
<li>Festa do Software Livre 2025, Porto, 3 a 5 de Outubro: <a href="https://festa2025.softwarelivre.eu/pt/">https://festa2025.softwarelivre.eu/pt/</a></li>
<li>Ubuntu Summit 2025, Londres, 23-24 de Outubro: <a href="https://ubuntu.com/blog/ubuntu-summit-25-10-is-coming-to-your-circle-of-friends-from-london">https://ubuntu.com/blog/ubuntu-summit-25-10-is-coming-to-your-circle-of-friends-from-london</a></li>
<li>LoCo PT: <a href="https://loco.ubuntu.com/teams/ubuntu-pt/">https://loco.ubuntu.com/teams/ubuntu-pt/</a></li>
<li>Mastodon: <a href="https://masto.pt/@pup">https://masto.pt/@pup</a></li>
<li>Youtube: <a href="https://youtube.com/PodcastUbuntuPortugal">https://youtube.com/PodcastUbuntuPortugal</a></li>
</ul>
<h3 id="atribuição-e-licenças">Atribuição e licenças</h3>
<p>Este episódio foi produzido por Diogo Constantino, Miguel e Tiago Carrondo e editado pelo <a href="https://senhorpodcast.pt/">Senhor Podcast</a>.
O website é produzido por Tiago Carrondo e o <a href="https://gitlab.com/podcastubuntuportugal/website">código aberto</a> está licenciado nos termos da <a href="https://gitlab.com/podcastubuntuportugal/website/main/LICENSE">Licença MIT</a>. (<a href="https://creativecommons.org/licenses/by/4.0/)">https://creativecommons.org/licenses/by/4.0/)</a>. A música do genérico é: “Won’t see it comin’ (Feat Aequality &amp; N’sorte d’autruche)”, por Alpha Hydrae e está licenciada nos termos da <a href="https://creativecommons.org/publicdomain/zero/1.0/">CC0 1.0 Universal License</a>.
Os separadores de péssima qualidade foram tocados ao vivo e sem rede pelo Miguel (e há ali um cavaquinho desafinado do Barbosa), pelo que pedimos desculpa pelos incómodos causados. OS efeitos sonoros têm os seguintes créditos: Multidão com archotes e forquilhas: rowdy crowd.wav by xtrgamr – <a href="https://freesound.org/s/243798/">https://freesound.org/s/243798/</a> – License: Attribution 4.0; Sad Trombone: wah wah sad trombone.wav by kirbydx – <a href="https://freesound.org/s/175409/">https://freesound.org/s/175409/</a> – License: Creative Commons 0.
Este episódio e a imagem utilizada estão licenciados nos termos da licença: <a href="https://creativecommons.org/licenses/by-nc-nd/4.0/">Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)</a>, <a href="https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode">cujo texto integral pode ser lido aqui</a>. Estamos abertos a licenciar para permitir outros tipos de utilização, <a href="https://podcastubuntuportugal.org/contactos">contactem-nos</a> para validação e autorização.
A arte de episódio foi criada por encomenda pela Shizamura - artista, ilustradora e autora de BD. Podem ficar a conhecer melhor a <a href="https://ciberlandia.pt/@shizamura">Shizamura na Ciberlândia</a> e no <a href="https://sarilho.net/">seu sítio web</a>.</p></description>
<pubDate>Thu, 11 Sep 2025 00:00:00 +0000</pubDate>
<enclosure url="https://hub.podcastubuntuportugal.org/s/pEYnEHygscmg3oB/download/e362.mp3" length="48274493" type="audio/mpeg"/>
</item>
<item>
<title>Xubuntu: Guide Terbaru Slot Online, Versi Demo Tanpa Deposit, serta Platform Slot Online Gacor Versi Update</title>
<guid isPermaLink="false">https://xubuntu.org/?p=5699</guid>
<link>https://xubuntu.org/news/guide-terbaru-slot-online-versi-demo-tanpa-deposit-serta-platform-slot-online-gacor-versi-update/</link>
<description><h1>Panduan Asik Slot Online 2025</h1>
<p>Saat ini, <a href="https://emirategate.com/">demo slot pragmatic</a> 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.</p>
<h2>Mengenal Game Slot</h2>
<p>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.</p>
<p>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.</p>
<h2>Manfaat Slot Demo</h2>
<p>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.</p>
<p>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.</p>
<h2>Fenomena Slot Gacor</h2>
<p>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.</p>
<h2>Tips Cari Situs Slot Aman</h2>
<p>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:</p>
<ul>
<li>Proteksi data biar informasi pribadi tetap terjaga.</li>
<li>Support 24 jam yang cepat tanggap buat bantu masalah pemain.</li>
<li>Review positif supaya user lebih percaya diri saat main.</li>
<li>Transaksi lancar agar gak ribet untuk semua pemain.</li>
</ul>
<h2>Tren Toto Slot</h2>
<p>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.</p>
<h3>Panduan Bermain Slot Santai</h3>
<p>Supaya main makin menyenangkan, ada beberapa trik yang bisa diterapkan:</p>
<ul>
<li>Mulai dari slot demo biar ngerti cara main dulu.</li>
<li>Kontrol budget dengan hati-hati, jangan terlalu napsu.</li>
<li>Jangan lupa, permainan slot itu bergantung hoki, jadi fokus ke hiburan daripada ngejar profit.</li>
</ul>
<h2>Penutup</h2>
<p>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.</p></description>
<pubDate>Wed, 10 Sep 2025 17:39:35 +0000</pubDate>
</item>
<item>
<title>Andrea Corbellini: Testing crash recovery features in a CI environment</title>
<guid isPermaLink="false">tag:andrea.corbellini.name,2025-09-09:/2025/09/09/testing-crash-recovery-features-in-ci/</guid>
<link>https://andrea.corbellini.name/2025/09/09/testing-crash-recovery-features-in-ci/</link>
<description><p>About two years ago I wrote a Rust crate to fulfill this promise:</p>
<blockquote>
<p>If a crash occurs while updating a file, the file either contains the old
contents, or the new contents, nothing in between.</p>
</blockquote>
<p>This crate essentially solves the following problem: when you update a file,
generally you open it, truncate it, write to it block-by-block, and eventually
close it. The problem with this process is that if a crash occurs at any point
during this process (the program segfaults, the kernel panics, the machine
loses power, …), your file will be left in an intermediate state where the
old contents are completely lost, and the new contents are only partially
written (if at all). My crate solves this problem by making file updates <em>atomic</em>.</p>
<p>This crate is publicly available as <a href="https://crates.io/crates/atomic-write-file">atomic-write-file</a> and you can read its
description for more details (sorry, I’m very bad at naming things).</p>
<p>The way the crate works is simple:</p>
<ol>
<li>Instead of opening the <em>target</em> file directly, the crate opens a <em>temporary</em>
file.</li>
<li>You write to the temporary file.</li>
<li>Once all changes are in, the temporary file contents are synced to the
storage, and it is atomically renamed so that it replaces the target file.</li>
</ol>
<p>This is not by any chance a new technique that I invented, and it’s a very
common strategy to solve the problem. This technique guarantees that if a crash
occurs at or before step 3, then the file will have the old contents,
unchanged. If a crash occurs after step 3, then the file will have the new
contents.</p>
<p>There’s a small caveat with this technique: if a crash occurs between steps 1
and 3, then the crate will leave behind a temporary file that occupies some
space on the storage device with no purpose.</p>
<p>This is where Linux anonymous temporary files come into play: this
Linux-specific feature allows you to create temporary files that are written on
the filesystem, but are not given a path in the filesystem. If a crash occurs
between step 1 and 3, the temporary file will simply be forgotten into
oblivion.</p>
<h1 id="meet-the-opponent-btrfs">Meet the opponent: btrfs</h1>
<p>Using Linux anonymous temporary files seemed very appealing for
atomic-write-file to avoid leaving leftovers behind, although I knew that
they’re not the perfect solution: there’s limited support (they’re supported
only on Linux, and only on some filesystems), they require the use of Linux
features that may not be available all the time (the <code>/proc</code> filesystem), and
they also have the problem that, sooner or later, they will need to be given a
name if we want to be able to replace the target file, and this leaves a small
time window during which we could leave some cruft behind.</p>
<p>But none of these are huge problems, and in fact atomic-write-file is able to
do a best effort attempt at using anonymous temporary files, and reverting to
regular files if that doesn’t work.</p>
<p>One day I was notified about <a href="https://github.com/andreacorbellini/rust-atomic-write-file/issues/6">an issue on using my crate on the btrfs file
system</a>: after a crash, my crate could break its promise and leave the
file contents <strong>empty</strong>. I did some investigation on the issue that <a href="https://github.com/andreacorbellini/rust-atomic-write-file/issues/6#issuecomment-2048836275">you can
read about if you’re interested</a>, and then fixed it.</p>
<p>This problem was specific to btrfs, and I argue that it’s actually caused by a
btrfs bug, rather than a bug in the crate itself, but nonetheless this issue
had revealed a critical flaw of my crate: <strong>I did not have any tests to check
if my crate was fulfilling its promise or not!</strong></p>
<p>Therefore I decided to create a small test suite for Linux to simulate crashes
and inspect the contents of files after those crashes occurred on a variety of
filesystems, which is what this blog post is about. This test suite now runs on
my laptop and <a href="https://github.com/andreacorbellini/rust-atomic-write-file/actions/workflows/crash-tests.yml">on GitHub Actions</a>, and potentially any
other CI environment.</p>
<h1 id="testing-strategy">Testing strategy</h1>
<p>Here’s the idea I came up with: I can create a virtual machine, with a virtual
storage device attached to it, and a filesystem initialized with a file. The
virtual machine updates the file using atomic-write-file, and then triggers a
kernel panic. After that, the file is inspected for consistency.</p>
<p>So here is how it works in practice: there are 3 main pieces:
1. A test binary that is responsible for updating the test file using
atomic-write-file.
1. An <code>init.sh</code> script that runs inside the virtual machine.
1. The <code>run-tests.sh</code> script that puts everything together and starts up the
virtual machine.</p>
<h2 id="the-test-binary">The test binary</h2>
<p>The test binary that is a <a href="https://github.com/andreacorbellini/rust-atomic-write-file/blob/master/crash-tests/linux/src/main.rs">short Rust program</a> that I can paste here:</p>
<div class="highlight"><pre><span></span><code><span class="k">use</span><span class="w"> </span><span class="n">atomic_write_file</span><span class="p">::</span><span class="n">AtomicWriteFile</span><span class="p">;</span>
<span class="k">use</span><span class="w"> </span><span class="n">std</span><span class="p">::</span><span class="n">io</span><span class="p">::</span><span class="n">Write</span><span class="p">;</span>
<span class="k">fn</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">AtomicWriteFile</span><span class="p">::</span><span class="n">open</span><span class="p">(</span><span class="s">"/test/file"</span><span class="p">).</span><span class="n">expect</span><span class="p">(</span><span class="s">"open failed"</span><span class="p">);</span>
<span class="w"> </span><span class="n">file</span><span class="p">.</span><span class="n">write_all</span><span class="p">(</span><span class="s">b"hello"</span><span class="p">).</span><span class="n">expect</span><span class="p">(</span><span class="s">"write failed"</span><span class="p">);</span>
<span class="w"> </span><span class="n">file</span><span class="p">.</span><span class="n">commit</span><span class="p">().</span><span class="n">expect</span><span class="p">(</span><span class="s">"commit failed"</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div>
<p>Nothing special to see here: this is the minimal code required to use atomic-write-file.</p>
<h2 id="the-initsh-script">The init.sh script</h2>
<p><a href="https://github.com/andreacorbellini/rust-atomic-write-file/blob/master/crash-tests/linux/init.sh">The <code>init.sh</code> script</a> is more interesting: this script in fact is meant to run
<em>twice</em>. The first time it runs, <code>init.sh</code> will run the test binary above and
trigger the kernel panic. The second time, it will read the test file contents
and report them back <code>run-tests.sh</code> script for inspection.</p>
<p>Let’s take a closer look at what it does: first, it mounts the <code>/proc</code> and
<code>/sys</code> virtual filesystems. These are needed for some basic system functions,
and also to enable the Linux anonymous temporary file feature.</p>
<div class="highlight"><pre><span></span><code>mount<span class="w"> </span>-t<span class="w"> </span>proc<span class="w"> </span>none<span class="w"> </span>/proc
mount<span class="w"> </span>-t<span class="w"> </span>sysfs<span class="w"> </span>none<span class="w"> </span>/sys
</code></pre></div>
<p>Then it mounts the filesystem containing the test file. Before it can do that,
however, it needs to load the correct kernel module for the filesystem. Nothing
too fancy here: the filesystem type is simply specified on the kernel command
line (read through <code>/proc/cmdline</code>):</p>
<div class="highlight"><pre><span></span><code><span class="nv">fstype</span><span class="o">=</span><span class="k">$(</span>grep<span class="w"> </span>-Eo<span class="w"> </span><span class="s1">'test.fs=\w+'</span><span class="w"> </span>/proc/cmdline<span class="w"> </span><span class="p">|</span><span class="w"> </span>cut<span class="w"> </span>-d<span class="o">=</span><span class="w"> </span>-f2<span class="k">)</span>
modprobe<span class="w"> </span><span class="s2">"</span><span class="nv">$fstype</span><span class="s2">"</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="nb">true</span>
mount<span class="w"> </span>-t<span class="w"> </span><span class="s2">"</span><span class="nv">$fstype</span><span class="s2">"</span><span class="w"> </span>/dev/sdb<span class="w"> </span>/test
</code></pre></div>
<p>Then, if this script is run for the first time, it will run the test executable and quit:</p>
<div class="highlight"><pre><span></span><code><span class="nb">echo</span><span class="w"> </span><span class="s1">'Running test binary'</span>
atomic-write-file-test
</code></pre></div>
<p><code>init.sh</code> (as the name suggests) is run as the init script of the virtual
machine. In Linux, if the init script quits without invoking the proper
shutdown sequence, the kernel will panic. So we don’t actually need to do
anything special to trigger a panic. I could have inserted a <code>echo c &gt;
/proc/sysrq-trigger</code> line to make it more explicit, but then I figured that
having that line wouldn’t be nice for people who want to test the script on
their system.</p>
<p>You might ask: how does <code>init.sh</code> know if it’s the first time it gets called or
the second? Again, nothing fancy here: <code>run-tests.sh</code> gives that hint using a
kernel command line argument:</p>
<div class="highlight"><pre><span></span><code><span class="k">if</span><span class="w"> </span>grep<span class="w"> </span>-q<span class="w"> </span>test.verify<span class="w"> </span>/proc/cmdline<span class="p">;</span><span class="w"> </span><span class="k">then</span>
<span class="w"> </span><span class="c1"># ...</span>
<span class="k">fi</span>
</code></pre></div>
<p>If <code>test.verify</code> is specified on <code>/proc/cmdline</code>, then it means this is the
second time this script is run. In that case, the file contents are just
printed on the console:</p>
<div class="highlight"><pre><span></span><code><span class="k">if</span><span class="w"> </span>grep<span class="w"> </span>-q<span class="w"> </span>test.verify<span class="w"> </span>/proc/cmdline<span class="p">;</span><span class="w"> </span><span class="k">then</span>
<span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s1">'Verifying test file contents'</span>
<span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s1">'-----'</span>
<span class="w"> </span>xxd<span class="w"> </span>/test/file
<span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s1">'-----'</span>
<span class="w"> </span>poweroff<span class="w"> </span>-f
<span class="k">fi</span>
</code></pre></div>
<p>This uses <code>xxd</code> so in case there are garbled characters on screen, we can
comfortably analyze the output and figure out what happened. At the end, the
system is more gracefully shut down using <code>poweroff</code> to avoid another kernel
panic (this is not really necessary).</p>
<h1 id="the-run-testssh-script">The run-tests.sh script</h1>
<p>And then there’s <a href="https://github.com/andreacorbellini/rust-atomic-write-file/blob/master/crash-tests/linux/run-test.sh">the <code>run-tests.sh</code> script that crates the virtual storage,
launches the virtual machine, and inspects the file contents</a>.
This is where most the complexity is, so let’s go step-by-step (the code below
has been simplified from the original for readability):</p>
<p>The first thing it does is compiling the test binary above. The virtual machine
runs in a very barebone environment, so I used static linking to avoid having
to copy additional libraries like <code>libc</code>:</p>
<div class="highlight"><pre><span></span><code><span class="nv">target</span><span class="o">=</span><span class="k">$(</span>uname<span class="w"> </span>-m<span class="k">)</span>-unknown-linux-gnu
<span class="nv">RUSTFLAGS</span><span class="o">=</span><span class="s1">'-C target-feature=+crt-static'</span><span class="w"> </span>cargo<span class="w"> </span>build<span class="w"> </span>--release<span class="w"> </span>--features<span class="w"> </span><span class="s2">"</span><span class="nv">$cargo_features</span><span class="s2">"</span><span class="w"> </span>--target<span class="w"> </span><span class="s2">"</span><span class="nv">$target</span><span class="s2">"</span>
</code></pre></div>
<p>Then <code>run-tests.sh</code> creates a minimal <a href="https://en.wikipedia.org/wiki/Initial_ramdisk">initramfs</a> for the virtual machine. The
initramfs is a filesystem that gets mounted by Linux early at boot. It’s
generally used by Linux distributions to load the main operating system, but in
my case the initramfs contains everything needed for the test. In particular,
it contains:</p>
<ul>
<li>The test binary.</li>
<li>The <code>init.sh</code> script.</li>
<li><a href="https://en.wikipedia.org/wiki/BusyBox">BusyBox</a>, to get the needed utilities like <code>xxd</code> and <code>poweroff</code>.</li>
<li>The kernel modules to mount filesystems and their dependencies.</li>
</ul>
<p>The first 3 items are easy to set up:</p>
<div class="highlight"><pre><span></span><code>cp<span class="w"> </span><span class="s2">"init.sh"</span><span class="w"> </span>-T<span class="w"> </span><span class="s2">"</span><span class="nv">$initramfs_build_dir</span><span class="s2">/sbin/init"</span>
cp<span class="w"> </span><span class="s2">"atomic-write-file-test"</span><span class="w"> </span>-t<span class="w"> </span><span class="s2">"</span><span class="nv">$initramfs_build_dir</span><span class="s2">/bin"</span>
cp<span class="w"> </span><span class="s2">"</span><span class="k">$(</span>which<span class="w"> </span>busybox<span class="k">)</span><span class="s2">"</span><span class="w"> </span>-t<span class="w"> </span><span class="s2">"</span><span class="nv">$initramfs_build_dir</span><span class="s2">/bin"</span>
<span class="s2">"</span><span class="nv">$busybox</span><span class="s2">"</span><span class="w"> </span>--install<span class="w"> </span>-s<span class="w"> </span><span class="s2">"</span><span class="nv">$initramfs_build_dir</span><span class="s2">/bin"</span>
</code></pre></div>
<p>The kernel modules are a bit more complicated. First of all: where can we get
them from? Ideally, I would have liked to download them from some minimal Linux
distribution, but this turned out to be more complicated than expected. In the
end, I decided to just steal them from the host operating system:</p>
<div class="highlight"><pre><span></span><code><span class="nv">modules</span><span class="o">=</span>/usr/lib/modules/<span class="k">$(</span>uname<span class="w"> </span>-r<span class="k">)</span>
cp<span class="w"> </span>-a<span class="w"> </span><span class="s2">"</span><span class="nv">$modules</span><span class="s2">"</span><span class="w"> </span>-t<span class="w"> </span><span class="s2">"</span><span class="nv">$initramfs_build_dir</span><span class="s2">/lib/modules"</span>
<span class="k">while</span><span class="w"> </span><span class="nb">read</span><span class="w"> </span>-r<span class="w"> </span>mod_path<span class="p">;</span><span class="w"> </span><span class="k">do</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="o">[[</span><span class="w"> </span><span class="s2">"</span><span class="nv">$mod_path</span><span class="s2">"</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>*.ko.gz<span class="w"> </span><span class="o">]]</span><span class="p">;</span><span class="w"> </span><span class="k">then</span>
<span class="w"> </span>gunzip<span class="w"> </span><span class="s2">"</span><span class="nv">$mod_path</span><span class="s2">"</span><span class="w"> </span>-o<span class="w"> </span><span class="s2">"</span><span class="nv">$mod_path</span><span class="s2">.uncompressed"</span>
<span class="w"> </span><span class="k">elif</span><span class="w"> </span><span class="o">[[</span><span class="w"> </span><span class="s2">"</span><span class="nv">$mod_path</span><span class="s2">"</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>*.ko.xz<span class="w"> </span><span class="o">]]</span><span class="p">;</span><span class="w"> </span><span class="k">then</span>
<span class="w"> </span>unxz<span class="w"> </span><span class="s2">"</span><span class="nv">$mod_path</span><span class="s2">"</span><span class="w"> </span>-o<span class="w"> </span><span class="s2">"</span><span class="nv">$mod_path</span><span class="s2">.uncompressed"</span>
<span class="w"> </span><span class="k">elif</span><span class="w"> </span><span class="o">[[</span><span class="w"> </span><span class="s2">"</span><span class="nv">$mod_path</span><span class="s2">"</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>*.ko.zst<span class="w"> </span><span class="o">]]</span><span class="p">;</span><span class="w"> </span><span class="k">then</span>
<span class="w"> </span>unzstd<span class="w"> </span><span class="s2">"</span><span class="nv">$mod_path</span><span class="s2">"</span><span class="w"> </span>-o<span class="w"> </span><span class="s2">"</span><span class="nv">$mod_path</span><span class="s2">.uncompressed"</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="k">continue</span>
<span class="w"> </span><span class="k">fi</span>
<span class="w"> </span>mv<span class="w"> </span><span class="s2">"</span><span class="nv">$mod_path</span><span class="s2">.uncompressed"</span><span class="w"> </span><span class="s2">"</span><span class="nv">$mod_path</span><span class="s2">"</span>
<span class="k">done</span><span class="w"> </span>&lt;<span class="w"> </span>&lt;<span class="o">(</span>modprobe<span class="w"> </span>--dirname<span class="w"> </span><span class="s2">"</span><span class="nv">$initramfs_build_dir</span><span class="s2">"</span><span class="w"> </span>--show-depends<span class="w"> </span><span class="s2">"</span><span class="nv">$filesystem_type</span><span class="s2">"</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>grep<span class="w"> </span>^insmod<span class="w"> </span><span class="p">|</span><span class="w"> </span>cut<span class="w"> </span>-d<span class="s1">' '</span><span class="w"> </span>-f2<span class="o">)</span>
</code></pre></div>
<p>What this does is copying all the module files from the host, getting all the
dependencies for the filesystem module using <code>modprobe</code>, and then uncompressing
those modules if they’re compressed (I found this much easier than adding
compression support in the virtual machine). An alternative approach would be
to simply decompress all the modules, but that’s much slower.</p>
<p>Once everything has been copied over and uncompressed, the initramfs is
created:</p>
<div class="highlight"><pre><span></span><code><span class="nv">initramfs</span><span class="o">=</span>rootfs.img
mksquashfs<span class="w"> </span><span class="s2">"</span><span class="nv">$initramfs_build_dir</span><span class="s2">"</span><span class="w"> </span><span class="s2">"</span><span class="nv">$initramfs</span><span class="s2">"</span>
</code></pre></div>
<p>Now it’s time to create the virtual storage device with the filesystem, which
is a trivial task:</p>
<div class="highlight"><pre><span></span><code><span class="nv">testfs</span><span class="o">=</span>testfs.img
dd<span class="w"> </span><span class="k">if</span><span class="o">=</span>/dev/zero<span class="w"> </span><span class="nv">of</span><span class="o">=</span><span class="s2">"</span><span class="nv">$testfs</span><span class="s2">"</span><span class="w"> </span><span class="nv">bs</span><span class="o">=</span>1M<span class="w"> </span><span class="nv">count</span><span class="o">=</span><span class="m">300</span>
<span class="s2">"mkfs.</span><span class="nv">$filesystem_type</span><span class="s2">"</span><span class="w"> </span><span class="s2">"</span><span class="nv">$testfs</span><span class="s2">"</span>
</code></pre></div>
<p>Finally, we can start our VM using <a href="https://en.wikipedia.org/wiki/QEMU">QEMU</a>:</p>
<div class="highlight"><pre><span></span><code><span class="nv">qemu</span><span class="o">=</span>qemu-system-<span class="k">$(</span>uname<span class="w"> </span>-m<span class="k">)</span>
<span class="nv">kernel</span><span class="o">=</span>/boot/vmlinuz-<span class="k">$(</span>uname<span class="w"> </span>-r<span class="k">)</span>
<span class="s2">"</span><span class="nv">$qemu</span><span class="s2">"</span><span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-kernel<span class="w"> </span><span class="s2">"</span><span class="nv">$kernel</span><span class="s2">"</span><span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-append<span class="w"> </span><span class="s2">"root=/dev/sda ro panic=-1 console=ttyS0 quiet test.fs=</span><span class="nv">$filesystem_type</span><span class="s2">"</span><span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-drive<span class="w"> </span><span class="s2">"index=0,media=disk,format=raw,file=</span><span class="nv">$initramfs</span><span class="s2">"</span><span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-drive<span class="w"> </span><span class="s2">"index=1,media=disk,format=raw,file=</span><span class="nv">$testfs</span><span class="s2">"</span><span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-no-reboot<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-nographic
</code></pre></div>
<p>Again we’re stealing the kernel from the host operating system, which is also
where the kernel modules come from. The <code>drive</code> with <code>index=0</code> is the initramfs
and will be visible as <code>/dev/sda</code> in the guest; the other drive with <code>index=1</code>
is our test storage and will be visible as <code>/dev/sdb</code>.</p>
<p><code>root=/dev/sda</code> tells the kernel to boot from our initramfs image. <code>panic=-1</code>
tells the kernel not to reboot in case of a panic (<code>panic=N</code> specifies the
number of seconds to wait before rebooting in case of kernel panic; specifying
a negative value blocks that behavior). <code>console=ttyS0</code> allows us to capture
the output printed by the init script. <code>test.fs=...</code> is the option that
<code>init.sh</code> is going to look for to understand what filesystem type to use.</p>
<p>Once that runs, the virtual machine is expected to do its job and crash with a
kernel panic. We then need to restart it to verify the file contents. The QEMU
command is exactly the same except for the additional <code>test.verify</code> option:</p>
<div class="highlight"><pre><span></span><code><span class="nv">output</span><span class="o">=</span>output.txt
<span class="s2">"</span><span class="nv">$qemu</span><span class="s2">"</span><span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-kernel<span class="w"> </span><span class="s2">"</span><span class="nv">$kernel</span><span class="s2">"</span><span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-append<span class="w"> </span><span class="s2">"root=/dev/sda ro panic=-1 console=ttyS0 quiet test.fs=</span><span class="nv">$filesystem_type</span><span class="s2"> test.verify"</span><span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-drive<span class="w"> </span><span class="s2">"index=0,media=disk,format=raw,file=</span><span class="nv">$initramfs</span><span class="s2">"</span><span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-drive<span class="w"> </span><span class="s2">"index=1,media=disk,format=raw,file=</span><span class="nv">$testfs</span><span class="s2">"</span><span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-no-reboot<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-nographic<span class="w"> </span><span class="se">\</span>
<span class="w"> </span><span class="p">|</span><span class="w"> </span>tee<span class="w"> </span><span class="s2">"</span><span class="nv">$output</span><span class="s2">"</span>
</code></pre></div>
<p>The output from this command is captured in a file that can be analyzed. If you
remember how <code>init.sh</code> is written, you might have noticed that it writes the
test file contents between two markers:</p>
<div class="highlight"><pre><span></span><code><span class="nb">echo</span><span class="w"> </span><span class="s1">'-----'</span>
xxd<span class="w"> </span>/test/file
<span class="nb">echo</span><span class="w"> </span><span class="s1">'-----'</span>
</code></pre></div>
<p>So what we have to do to verify the contents of the file is simply look for
those two <code>-----</code> markers, get the content in between, and parse it through
<code>xxd -r</code>:</p>
<div class="highlight"><pre><span></span><code><span class="k">if</span><span class="w"> </span><span class="o">[[</span><span class="w"> </span><span class="k">$(</span>sed<span class="w"> </span>-n<span class="w"> </span><span class="s1">'/-----/, /-----/p'</span><span class="w"> </span><span class="s2">"</span><span class="nv">$output</span><span class="s2">"</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>xxd<span class="w"> </span>-r<span class="k">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>hello<span class="w"> </span><span class="o">]]</span><span class="p">;</span><span class="w"> </span><span class="k">then</span>
<span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">"Success"</span>
<span class="k">else</span>
<span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">"Failure"</span>
<span class="w"> </span><span class="nb">exit</span><span class="w"> </span><span class="m">1</span>
<span class="k">fi</span>
</code></pre></div>
<p>And that’s it!</p>
<h1 id="running-in-github-actions">Running in GitHub Actions</h1>
<p>The next step for me was to set up some automation to make sure that my test
script was run whenever I made any change to the crate. Because my project was
already hosted on GitHub, I decided to go with GitHub Actions. I was a bit
worried that I would have had to struggle to make it work because my script
works by <em>stealing</em> the kernel from the host, and I thought that the GitHub
runners could have some protections in place to prevent me from reading the
kernel. To my surprise, there were no such restrictions. In fact, I did not
have to modify a single line of code to make my tests work in GitHub Actions:
check out the <a href="https://github.com/andreacorbellini/rust-atomic-write-file/blob/master/.github/workflows/crash-tests.yml">workflow file</a> if you’re curious.</p>
<h1 id="result">Result</h1>
<p>In the end, the test suite was able to reproduce the issue with btrfs and
anonymous temporary files, as well as show that the fix was working as
intended. This is what it looks like (output in the screenshot was trimmed down
a bit):</p>
<figure>
<img alt="Output showing a failure from the test suite" src="https://andrea.corbellini.name/images/crash-tests-failure.png" />
Output from the <code>run-test.sh</code> script <em>before</em> applying the fix, showing a failure.
</figure>
<figure>
<img alt="Output showing a success from the test suite" src="https://andrea.corbellini.name/images/crash-tests-success.png" />
Output from the <code>run-test.sh</code> script <em>after</em> applying the fix, showing a success.
</figure>
<h1 id="future">Future</h1>
<p>I’m pretty satisfied with the general approach of running in a virtual machine
and simulating a crash, but the implementation has a huge limitation: because
it <em>steals</em> the kernel from the host, it cannot simulate crashes on other
kernels, operating systems, or platforms.</p>
<p>I think in the future I’m going to take a look at <a href="https://github.com/cross-rs/cross">cross-rs</a>, a cross-platform
tool for Rust crates. Cross-rs works kinda in a similar way as my test suite,
in that it uses QEMU emulation to run tests. Maybe I can reuse their QEMU
images and tweak them to run my crash tests. If that is feasible, then I will
be able to extend my test suite to all major platforms and operating systems.</p></description>
<pubDate>Tue, 09 Sep 2025 00:05:00 +0000</pubDate>
</item>
<item>
<title>Colin Watson: Free software activity in August 2025</title>
<guid isPermaLink="false">tag:www.chiark.greenend.org.uk,2025-09-03:/~cjwatson/blog/activity-2025-08.html</guid>
<link>https://www.chiark.greenend.org.uk/~cjwatson/blog/activity-2025-08.html</link>
<description><p>About 95% of my Debian contributions this month were
<a href="https://www.freexian.com/about/debian-contributions/">sponsored</a> by Freexian.</p>
<p>You can also support my work directly via
<a href="https://liberapay.com/cjwatson">Liberapay</a> or <a href="https://github.com/sponsors/cjwatson">GitHub
Sponsors</a>.</p>
<h2>Python team</h2>
<p>forky is
<a href="https://lists.debian.org/debian-devel-announce/2025/08/msg00002.html">open</a>!
As a result I’m starting to think about the <a href="https://peps.python.org/pep-0745/">upcoming Python
3.14</a>. At some point we’ll doubtless do
a full test rebuild, but in advance of that I concluded that one of the most
useful things I could do would be to work on our <a href="https://udd.debian.org/dmd/?email1=team%2Bpython%40tracker.debian.org">very long list of packages
with new upstream
versions</a>.
Of course there’s no real chance of this ever becoming empty since upstream
maintainers aren’t going to stop work for that long, but there are a lot of
packages there where we’re quite a long way out of date, and many of those
include fixes that we’ll need for 3.14, either directly or by fixing
interactions with new versions of other packages that in turn will need to
be fixed. We can backport changes when we need to, but more often than not
the most efficient way to do things is just to keep up to date.</p>
<p>So, I upgraded these packages to new upstream versions (deep breath):</p>
<ul>
<li>aioftp</li>
<li>aiosignal (building on <a href="https://salsa.debian.org/python-team/packages/aiosignal/-/merge_requests/1">work by
IanLucca</a>)</li>
<li>audioop-lts</li>
<li>celery</li>
<li>djangorestframework</li>
<li>djoser</li>
<li>fpylll</li>
<li>frozenlist</li>
<li>git-repo-updater</li>
<li>ipykernel</li>
<li>klepto</li>
<li>kombu</li>
<li>multipart</li>
<li>netmiko (sponsoring <a href="https://salsa.debian.org/python-team/packages/netmiko/-/merge_requests/1">work by Eduardo
Silva</a>;
<a href="https://github.com/ktbyers/netmiko/pull/3722">contributed supporting fix
upstream</a>)</li>
<li>pathos</li>
<li>ppft</li>
<li>pydantic</li>
<li>pydantic-core</li>
<li>pydantic-settings</li>
<li>pylsqpack</li>
<li>pymssql</li>
<li>pytest-mock</li>
<li>pytest-pretty</li>
<li>pytest-repeat</li>
<li>pytest-rerunfailures</li>
<li>python-a2wsgi</li>
<li>python-apptools (sponsoring <a href="https://salsa.debian.org/python-team/packages/python-apptools/-/merge_requests/6">work by Kathlyn Lara
Murussi</a>)</li>
<li>python-asgiref</li>
<li>python-asyncssh</li>
<li>python-bitarray</li>
<li>python-bitstring</li>
<li>python-bytecode</li>
<li>python-channels-redis</li>
<li>python-charset-normalizer</li>
<li>python-daphne</li>
<li>python-django-analytical</li>
<li>python-django-guid</li>
<li>python-django-health-check</li>
<li>python-django-pgbulk</li>
<li>python-django-pgtrigger</li>
<li>python-django-postgres-extra</li>
<li>python-django-storages</li>
<li>python-holidays</li>
<li>python-httpx-sse</li>
<li>python-icalendar</li>
<li>python-lazy-model</li>
<li>python-line-profiler</li>
<li>python-lz4</li>
<li>python-marshmallow-dataclass</li>
<li>python-mastodon</li>
<li>python-model-bakery</li>
<li>python-oauthlib</li>
<li>python-parse-type</li>
<li>python-pathvalidate</li>
<li>python-pgspecial</li>
<li>python-processview</li>
<li>python-pytest-subtests</li>
<li>python-roman</li>
<li>python-semantic-release</li>
<li>python-testfixtures</li>
<li>python-time-machine</li>
<li>python-tokenize-rt</li>
<li>python-typeguard</li>
<li>python-typing-extensions</li>
<li>python-urllib3</li>
<li>pyupgrade</li>
<li>requests (fixing <a href="http://bugs.debian.org/1107368"><span class="caps">CVE</span>-2024-47081</a>)</li>
<li>responses</li>
<li>zope.deferredimport</li>
<li>zope.schema</li>
<li>zope.testrunner</li>
</ul>
<p>That’s only about 10% of the backlog, but of course others are working on
this too. If we can keep this up for a while then it should help.</p>
<p>I packaged <a href="https://bugs.debian.org/1111640">pytest-run-parallel</a>,
<a href="https://bugs.debian.org/1110995">pytest-unmagic</a> (still in <code>NEW</code>), and
<a href="https://bugs.debian.org/1111569">python-forbiddenfruit</a> (still in <code>NEW</code>),
all needed as new dependencies of various other packages.</p>
<p>setuptools upstream will be <a href="https://setuptools.pypa.io/en/stable/history.html#v80-1-0">removing the <code>setup.py install</code>
command</a> on 31
October. While this may not trickle down immediately into Debian, it does
mean that in the near future nearly all Python packages will have to use
<code>pybuild-plugin-pyproject</code> (note that this does <em>not</em> mean that they
necessarily have to use <code>pyproject.toml</code>; this is just a question of how the
packaging runs the build system). We talked about this a bit at DebConf,
and I said that I’d noticed a number of packages where this isn’t
straightforward and promised to write up some notes. I wrote the
<a href="https://wiki.debian.org/Python/PybuildPluginPyproject">Python/PybuildPluginPyproject</a>
wiki page for this; I expect to add more bits and pieces to it as I find them.</p>
<p>On that note, I converted several packages to <code>pybuild-plugin-pyproject</code>:</p>
<ul>
<li>billiard</li>
<li>lazr.config</li>
<li>python-timeline</li>
<li>zope.sqlalchemy</li>
<li>zope.testing</li>
</ul>
<p>I fixed several build/test failures:</p>
<ul>
<li><a href="https://bugs.debian.org/1111057">aiosmtplib</a></li>
<li><a href="https://bugs.debian.org/1111058">blinker</a></li>
<li><a href="https://bugs.debian.org/1111059">ipykernel</a></li>
<li><a href="https://bugs.debian.org/1111060">ipyparallel</a></li>
<li><a href="https://salsa.debian.org/python-team/packages/quart/-/commit/481c11c4fc33a18b17f8b223dff584342adc84af">quart</a></li>
</ul>
<p>I fixed some other bugs:</p>
<ul>
<li><a href="https://bugs.debian.org/1110821">austin: binutils now has a libsframe-dev package, please add an explicit
build dependency</a></li>
<li><a href="https://salsa.debian.org/python-team/packages/python-django-pgbulk/-/commit/96a17113f634d3c401c21a113579273ec49ccc2b">python-django-pgbulk: Missing dependency on
python3-typing-extensions</a>
(<a href="https://github.com/AmbitionEng/django-pgbulk/pull/54">contributed
upstream</a>)</li>
<li><a href="https://bugs.debian.org/1110139">python-maturin: Upcoming rust-which update</a></li>
</ul>
<p>I reviewed <a href="https://salsa.debian.org/python-team/packages/fail2ban/-/merge_requests/18">Debian defaults: nftables as banaction and systemd as
backend</a>,
but it looked as though nothing actually needed to be changed so we closed
this with no action.</p>
<h2>Rust team</h2>
<p>Upgrading Pydantic was complicated, and required a rust-pyo3 transition
(which Jelmer Vernooij started and Peter Michael Green has mostly been
driving, thankfully), packaging rust-malloc-size-of (including an <a href="https://github.com/servo/malloc_size_of/pull/12">upstream
portability fix</a>), and
upgrading several packages to new upstream versions:</p>
<ul>
<li>rust-serde</li>
<li>rust-serde-derive</li>
<li>rust-serde-json</li>
<li>rust-smallvec</li>
<li>rust-speedate</li>
<li>rust-time</li>
<li>rust-time-core</li>
<li>rust-time-macros</li>
</ul>
<h2>bugs.debian.org</h2>
<p>I fixed <a href="https://bugs.debian.org/1078575">bugs.debian.org: misspelled checkbox id
“uselessmesages”</a>, as well as a <a href="https://salsa.debian.org/debbugs-team/debbugs/-/commit/fff0db4e57a2781f5c82827e42f395a3325270f3">bug that
caused incoming emails with certain header contents to go
missing</a>.</p>
<h2>OpenSSH</h2>
<p>I fixed <a href="https://bugs.debian.org/1080350">openssh-server: refuses further connections after having handled
PerSourceMaxStartups connections</a> with a
cherry-pick from upstream.</p>
<h2>Other bits and pieces</h2>
<p>I upgraded libfido2 to a new upstream version.</p>
<p>I fixed <a href="https://bugs.debian.org/1103589">mimalloc: <span class="caps">FTBFS</span> on armhf: cc1: error: ‘-mfloat-abi=hard’: selected
architecture lacks an <span class="caps">FPU</span></a>, which was
blocking changes to pendulum in the Python team. I also spent some time
helping to investigate <a href="https://bugs.debian.org/1106879">libmimalloc3: Illegal instruction Running mtxrun
—generate</a>, though that bug is still open.</p>
<p>I fixed <a href="https://salsa.debian.org/debian/gssproxy/-/compare/debian%2F0.9.2-3...debian%2F0.9.2-4?from_project_id=45135">various autopkgtest bugs in
gssproxy</a>,
prompted by
<a href="https://salsa.debian.org/freexian-team/debusine/-/issues/1007">#1007</a> in Debusine.</p>
<p>Since my old team is <a href="https://blog.launchpad.net/general/phasing-out-bazaar-code-hosting">decommissioning Bazaar/Breezy code hosting in
Launchpad</a>
(the end of an era, which I have distinctly mixed feelings about), I
converted <a href="https://git.launchpad.net/storm">Storm</a> to git.</p></description>
<pubDate>Wed, 03 Sep 2025 10:56:59 +0000</pubDate>
</item>
<item>
<title>St&eacute;phane Graber: Announcing Incus 6.16</title>
<guid isPermaLink="false">https://stgraber.org/?p=1777</guid>
<link>https://stgraber.org/2025/09/01/announcing-incus-6-16/</link>
<description><p>The Incus team is pleased to announce the release of Incus 6.16!</p>
<p>This release brings in a new storage driver, the ability to install Windows VMs without having to rely on a repacked ISO and support for temporary storage in containers.</p>
<figure class="wp-block-image size-large"><a href="https://linuxcontainers.org/incus/try-it/"><img alt="" class="wp-image-1778" height="425" src="https://stgraber.org/wp-content/uploads/2025/09/image-1024x425.png" width="1024" /></a></figure>
<p>The highlights for this release are:</p>
<ul class="wp-block-list">
<li>TrueNAS storage driver</li>
<li>USB CD-ROM handling for VMs</li>
<li>tmpfs and tmpfs-overlay disks for containers</li>
<li>Configurable console behavior in the CLI</li>
</ul>
<p>The full announcement and changelog can be <a href="https://discuss.linuxcontainers.org/t/incus-6-16-has-been-released/24614" rel="noreferrer noopener" target="_blank">found here</a>.<br />And for those who prefer videos, here’s the release overview video:</p>
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
</div></figure>
<p>You can take the latest release of Incus up for a spin through our online demo service at: <a href="https://linuxcontainers.org/incus/try-it/" rel="noreferrer noopener" target="_blank">https://linuxcontainers.org/incus/try-it/</a></p>
<p>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: <a href="https://zabbly.com/incus">https://zabbly.com/incus</a></p>
<p>Donations towards my work on this and other open source projects is also always appreciated, you can find me on <a href="https://github.com/sponsors/stgraber">Github Sponsors</a>, <a href="https://patreon.com/stgraber">Patreon</a> and <a href="https://ko-fi.com/stgraber">Ko-fi</a>.</p>
<p>Enjoy!</p>
<p></p></description>
<pubDate>Mon, 01 Sep 2025 15:19:43 +0000</pubDate>
</item>
<item>
<title>Dougie Richardson: CLI Corner: rsync</title>
<guid isPermaLink="false">https://dougiewougie.com/?p=2981</guid>
<link>https://dougiewougie.com/linux/cli-corner-rsync/</link>
<description><p>Synchronise two directories, e.g. Nextcloud and an encrypted USB drive with archive, recursive, partial, and progress flags:</p>
<pre class="wp-block-code"><code class="language-bash" lang="bash">rsync -varP src destination</code></pre>
<p></p></description>
<pubDate>Sun, 31 Aug 2025 10:38:37 +0000</pubDate>
</item>
<item>
<title>Scarlett Gately Moore: A Bittersweet Farewell: My Final KDE Snap Release and the End of an Era</title>
<guid isPermaLink="false">https://www.scarlettgatelymoore.dev/?p=2134</guid>
<link>https://www.scarlettgatelymoore.dev/a-bittersweet-farewell-my-final-kde-snap-release-and-the-end-of-an-era/</link>
<description><p>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 <a href="https://kde.org/announcements/gear/25.08.0/">official KDE announcement</a>.</p>
<p>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.</p>
<h2 class="wp-block-heading">Passing the Torch</h2>
<p>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.</p>
<h2 class="wp-block-heading">Staying Connected (But Differently)</h2>
<p>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:</p>
<ul class="wp-block-list">
<li><strong>Kubuntu</strong>: 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.</li>
<li><strong>Ubuntu Community Council</strong>: 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.</li>
<li><strong>Debian</strong>: 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.</li>
</ul>
<h2 class="wp-block-heading">The Reality Behind the Decision</h2>
<p>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.</p>
<p>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.</p>
<h2 class="wp-block-heading">A Career That Meant Everything</h2>
<p>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.</p>
<p>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.</p>
<h2 class="wp-block-heading">Looking Forward</h2>
<p>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.</p>
<p>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: <a href="https://gofund.me/a9c55d8f">https://gofund.me/a9c55d8f</a></p>
<h2 class="wp-block-heading">Thank You</h2>
<p>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.</p>
<p>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.</p>
<p>With sincere gratitude and fond farewells,</p>
<p>Scarlett Moore</p></description>
<pubDate>Mon, 25 Aug 2025 15:42:29 +0000</pubDate>
</item>
<item>
<title>Launchpad News: Deprecating CVS and Subversion imports</title>
<guid isPermaLink="false">https://blog.launchpad.net/?p=4471</guid>
<link>https://blog.launchpad.net/general/deprecating-cvs-and-subversion-imports</link>
<description><h3><strong>What are code imports?</strong></h3>
<p>Launchpad’s <a href="https://code.launchpad.net/+code-imports">code import</a> service allows users to automatically mirror code from external version control systems into Launchpad. Historically, this has supported imports from CVS, Subversion, Bazaar and Git.</p>
<p>As part of this, Launchpad currently also supports imports <strong>into Bazaar branches</strong> from:</p>
<ul><li>Concurrent Version System to Bazaar</li><li>Subversion via cvs2svn to Bazaar</li><li>Subversion via bzr-svn to Bazaar</li></ul>
<p>These imports will be deprecated.</p>
<h3><strong>Why deprecate these imports?</strong></h3>
<p>As announced in<a href="https://discourse.ubuntu.com/t/phasing-out-bazaar-code-hosting/62189"> Phasing out Bazaar code hosting</a>, Bazaar itself has been deprecated and is no longer actively developed. The last release was in 2016, and usage has steadily declined.</p>
<p>Maintaining imports from these less common version controls to Bazaar requires significant efforts.</p>
<p>To streamline our services and focus resources where they matter most, Launchpad will be <strong>retiring the previously mentioned Bazaar-based imports</strong>.</p>
<h3><strong>Timelines</strong></h3>
<ul><li><strong>September 18th, 2025</strong>: No new import configurations for the previously mentioned Bazaar-based imports will be accepted.<br /></li><li><strong>October 1st, 2025</strong>: All existing CVS to Bazaar and SVN to Bazaar imports (both cvs2svn and bzr-svn) will be shut down. Import jobs will no longer run after this date.<br /></li></ul>
<h3><strong>Migration paths</strong></h3>
<p>If you are currently using these imports, we recommend:</p>
<ul><li>Migrating the source repository to Git.</li><li>Reconfiguring your Launchpad project to use a Git-based import instead.</li></ul>
<p><strong>Guides and references:</strong></p>
<ul><li><a href="https://discourse.ubuntu.com/t/migrate-a-repository-from-bazaar-to-git/...">Migrate a Repository From Bazaar to Git</a></li><li>General CVS/SVN to Git migration tools (such as git cvsimport, svn2git, or git svn) are widely documented.</li></ul>
<h3><strong>Call for action</strong></h3>
<p>If you have a project still depending on CVS to Bazaar or SVN to Bazaar imports, and you are unsure how to migrate, please reach out to us.</p>
<p>You can contact us in <strong>#launchpad:ubuntu.com</strong> on Matrix, or via e-mail at <strong>feedback@launchpad.net</strong>.</p>
<p>Join the discussion at:<a href="https://discourse.ubuntu.com/t/deprecating-cvs-and-subversion-imports/66876" rel="noreferrer noopener" target="_blank"> https://discourse.ubuntu.com/t/deprecating-cvs-and-subversion-imports/66876</a></p>
<p></p></description>
<pubDate>Mon, 25 Aug 2025 07:14:50 +0000</pubDate>
</item>
<item>
<title>Andrea Corbellini: It will take decades to undo the damage done by "AI"</title>
<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>
<link>https://andrea.corbellini.name/2025/08/20/it-will-take-decades-to-undo-the-damage-done-by-ai/</link>
<description><p>Many business owners in the software development industry are investing a lot
into LLM bots, marketed as “generative AI”. Some of them go as far as <em>forcing</em>
software developers to use such tools under the threat of being fired if they
don’t comply. After all, why shouldn’t they? This technology has a catchy name,
it produces very convincing output that sometimes is correct (or close to being
correct), and companies producing these tools are very good at downplaying
their limitations and at promising that the “next version” will be
astonishingly better than the one before.</p>
<p>My day-to-day experience, and scientific research, however show a quite big
problem: while senior developers get little or no gain from “generative AI”
(<a href="https://www.reuters.com/business/ai-slows-down-some-experienced-software-developers-study-finds-2025-07-10/">1</a>,
<a href="https://fortune.com/2025/07/20/ai-hampers-productivity-software-developers-productivity-study/">2</a>,
<a href="https://blueheadline.com/software-dev/ai-helps-new-developers-but-seniors/">3</a>,
<a href="https://blog.stackademic.com/ai-coding-tools-slow-senior-devs-by-19-why-experts-are-still-using-them-98d855b81c4e">4</a>),
junior developers get massive boosts in productivity. Why am I describing a
boost in productivity as a problem? Well, it’s simple: the new generations of
software developers (the ones that are just entering the job market, and the
ones that are still in school) are relying heavily on these LLM tools for
<em>nearly all</em> work-related tasks. And, again, why shouldn’t they? The entire
world is telling them to do so! And as a result of that, they are advancing
without gaining any actual skill.</p>
<p>Me and other (ex-)coworkers have seen it first hand: a junior developer
completes a task using an LLM bot. More senior developers find major problems
with the result. Junior developers go back to the LLM tool asking for a fix,
wasting hours or days without a positive outcome. <strong>Junior developers are
becoming unable to perform tasks independently.</strong></p>
<p>In addition to that, there’s a problem that I feel like is not talked about
extensively: these LLM tools can only regurgitate what they’ve been trained
with. They’re good at finding patterns and re-applying strategies that have
been used in prior work, but by their nature they cannot <em>create</em> or
<em>innovate</em>. So, if this trend continues, <strong>the new generations of software
developers are not just going to be <em>skill-less</em>, they’re also going to be
incapable of solving new problems that haven’t been seen before</strong>.</p>
<p>My prediction? <strong>Within 10 or 20 years, the older generation of software
developers will be asked to come out of retirement to fix the unmaintainable
mess created by the newer generations, and to make advancements in the
information technology sector.</strong> A bit like old COBOL developers are asked to
come out of retirement to maintain banking systems, but on a much larger scale.
This, unless there will be advancements towards <em>true</em> Artificial Intelligence,
or unless the current trend in education is broken.</p>
<p>Now don’t get me wrong: I’m not opposed to LLM bots (although I’m against
calling them “AI”, because they’re very far from fulfilling the AI promise),
and I think they can be very powerful tools. What I’m worried about is that new
generations are being told to rely on them almost exclusively, and this can
only lead to an evident skill gap. In fact, I think that if there’s a country
that in the future will be able to harness the power of the LLM bots and <em>at
the same time</em> maintain a good enough level of education, thus addressing the
skill gap problem, they will be the dominant economic power of the future,
because they will be able to automate tasks that are time/energy-consuming for
humans, while at the same time use the human brain to innovate and advance.</p></description>
<pubDate>Wed, 20 Aug 2025 17:17:00 +0000</pubDate>
</item>
<item>
<title>Erich Eickmeyer: Raspberry Pi as a Networked Audio Interface</title>
<guid isPermaLink="false">http://ericheickmeyer.com/?p=5998</guid>
<link>https://ericheickmeyer.com/2025/08/19/raspberry-pi-as-a-networked-audio-interface/</link>
<description><p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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 <a href="https://www.audinate.com/">Dante</a> but, unfortunately, Audinate refuses to support Linux, and AES67 support in PipeWire is very young. However, it turns out, <a href="https://www.jacktrip.com/">JackTrip</a> is in the Ubuntu repositories and, as its name would imply, integrates seamlessly with <a href="https://jackaudio.org/">JACK </a>and, therefore, <a href="https://pipewire.org">PipeWire</a>.</p>
<p>Setting this up is rather simple, and I’m documenting the process here.</p>
<h2 class="wp-block-heading">Prerequisites</h2>
<ul class="wp-block-list">
<li>A Raspberry Pi 4 or higher (I have a late 2023 Raspberry Pi 5)</li>
<li>A micro SD card (16GB or larger)</li>
<li><a href="https://cdimage.ubuntu.com/releases/noble/release/">Ubuntu Server for Raspberry Pi</a> (I used 24.04, linked here).</li>
<li>Optional: <a href="https://ubuntu.com/pro">Ubuntu Pro</a> (for the RealTime Ubuntu Raspberry Pi Kernel)</li>
</ul>
<h2 class="wp-block-heading">Here we go…</h2>
<div class="wp-block-image">
<figure class="alignright size-large is-resized"><a href="https://ericheickmeyer.com/wp-content/uploads/2025/08/image.png"><img alt="" class="wp-image-6004" data-attachment-id="6004" data-comments-opened="1" data-image-caption="" data-image-description="" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-large-file="https://ericheickmeyer.com/wp-content/uploads/2025/08/image.png?w=662" data-medium-file="https://ericheickmeyer.com/wp-content/uploads/2025/08/image.png?w=300" data-orig-file="https://ericheickmeyer.com/wp-content/uploads/2025/08/image.png" data-orig-size="832,616" data-permalink="https://ericheickmeyer.com/2025/08/19/raspberry-pi-as-a-networked-audio-interface/image/" height="616" src="https://ericheickmeyer.com/wp-content/uploads/2025/08/image.png?w=832" style="width: 417px; height: auto;" width="832" /></a></figure></div>
<p>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!<br /><br />To get that, it’s as easy as <code>sudo snap install rpi-imager</code>.</p>
<p>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).</p>
<p>Once the SD card is imaged, I SSH’d into the machine (<code>ssh erich@{computer-name}.local</code>). The first thing I did was install <code>jackd2</code> and <code>jacktrip</code>:</p>
<p><code>sudo apt install --no-install-recommends jackd2 jacktrip</code></p>
<p>One must use the <code>--no-install-recommends</code> option to avoid installing unecessary graphical tools as <code>jackd2</code> will want to install <code>qjackctl</code> 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.</p>
<p>To automatically start JACK upon boot, I modified <a href="https://raw.githubusercontent.com/jackaudio/jack2/refs/heads/develop/systemd/jack%40.service.in">this systemd unit file </a>to be custom for my setup. You’ll notice I made the buffer 256 (<code>-p 256</code>) with 3 periods per buffer (<code>-n 3</code>) 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 (<code>-r 48000</code>). Also, we want the process to run in realtime and directly to ALSA (<code>--realtime -dalsa</code>):</p>
<pre class="wp-block-code"><code>[Unit]
Description=JACK server using %i user profile
Documentation=man:jackd(1)
After=sound.target local-fs.target
[Service]
User=%i
Group=%i
#Type=notify
EnvironmentFile=-/etc/jack/alsa.conf
#EnvironmentFile=-%h/.config/jack/%i.conf
ExecStart=/usr/bin/jackd --realtime -dalsa -p 256 -n 3 -r 48000
# -d $DEVICE $DRIVER_SETTINGS
LimitRTPRIO=95
LimitRTTIME=infinity
LimitMEMLOCK=infinity
# Caution: use on memory-limited devices only
# OOMScoreAdjust=-1000
[Install]
WantedBy=multi-user.target
</code></pre>
<p>I installed this to <code>/usr/lib/systemd/system/jackd@.service</code>.</p>
<p>Next, I created a systemd unit file to start JackTrip. I needed this to be a server (<code>-s</code>), with 18 inputs and outputs (for an XR18, <code>-n 18</code>) and automatically connect upon start (<code>-q auto</code>):</p>
<pre class="wp-block-code"><code>[Unit]
Description=JackTrip Audio Network Service
After=network.target sound.target jackd@%i.service
Wants=network-online.target
[Service]
# Run as a specific user who has JACK permissions
User=%i
Group=%i
ExecStart=jacktrip -s -n 18 -q auto --udprt
Restart=always
RestartSec=5
# Optional: environment for JACK if needed
#Environment=JACK_NO_AUDIO_RESERVATION=1
# Give JACK/JackTrip real-time priority
LimitRTPRIO=infinity
LimitMEMLOCK=infinity
[Install]
WantedBy=multi-user.target</code></pre>
<p>I installed this to <code>/usr/lib/systemd/system/jacktrip@.service</code>.</p>
<p>Next, to make sure this runs as my user, I did the following:</p>
<pre class="wp-block-code"><code>sudo systemctl enable jackd@erich.service
sudo systemctl enable jacktrip@erich.service</code></pre>
<p>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 <a href="https://login.ubuntu.com/">Ubuntu One account</a>:</p>
<pre class="wp-block-code"><code>pro attach
pro enable realtime-kernel</code></pre>
<p>To make sure everything worked, check <code>pro status</code>.</p>
<p>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!</p>
<p>Once this is done, reboot. On your other machine, install <code>jacktrip-gui</code>. (This will be in Ubuntu Studio 25.10 and higher by default!): <code>sudo apt install jacktrip-gui</code>.</p>
<p>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:</p>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><a href="https://ericheickmeyer.com/wp-content/uploads/2025/08/image-1.png"><img alt="" class="wp-image-6012" data-attachment-id="6012" data-comments-opened="1" data-image-caption="" data-image-description="" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-large-file="https://ericheickmeyer.com/wp-content/uploads/2025/08/image-1.png?w=662" data-medium-file="https://ericheickmeyer.com/wp-content/uploads/2025/08/image-1.png?w=300" data-orig-file="https://ericheickmeyer.com/wp-content/uploads/2025/08/image-1.png" data-orig-size="856,795" data-permalink="https://ericheickmeyer.com/2025/08/19/raspberry-pi-as-a-networked-audio-interface/image-2/" height="795" src="https://ericheickmeyer.com/wp-content/uploads/2025/08/image-1.png?w=856" style="width: 678px; height: auto;" width="856" /></a></figure></div>
<p>Enter the computer name with <code>.local</code> afterwards, and it should find it as long as your desktop or laptop is connected to the same network as the Raspberry Pi.</p>
<p>After you click “Connect”, you should see this:</p>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><a href="https://ericheickmeyer.com/wp-content/uploads/2025/08/image-3.png"><img alt="" class="wp-image-6017" data-attachment-id="6017" data-comments-opened="1" data-image-caption="" data-image-description="" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-large-file="https://ericheickmeyer.com/wp-content/uploads/2025/08/image-3.png?w=662" data-medium-file="https://ericheickmeyer.com/wp-content/uploads/2025/08/image-3.png?w=224" data-orig-file="https://ericheickmeyer.com/wp-content/uploads/2025/08/image-3.png" data-orig-size="856,1148" data-permalink="https://ericheickmeyer.com/2025/08/19/raspberry-pi-as-a-networked-audio-interface/image-4/" height="1024" src="https://ericheickmeyer.com/wp-content/uploads/2025/08/image-3.png?w=764" style="width: 630px; height: auto;" width="764" /></a></figure></div>
<p>As you can see, this has audio coming in from a microphone already.</p>
<p>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:</p>
<figure class="wp-block-image size-large"><a href="https://ericheickmeyer.com/wp-content/uploads/2025/08/image-4.png"><img alt="" class="wp-image-6019" data-attachment-id="6019" data-comments-opened="1" data-image-caption="" data-image-description="" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-large-file="https://ericheickmeyer.com/wp-content/uploads/2025/08/image-4.png?w=662" data-medium-file="https://ericheickmeyer.com/wp-content/uploads/2025/08/image-4.png?w=300" data-orig-file="https://ericheickmeyer.com/wp-content/uploads/2025/08/image-4.png" data-orig-size="1189,754" data-permalink="https://ericheickmeyer.com/2025/08/19/raspberry-pi-as-a-networked-audio-interface/image-5/" height="649" src="https://ericheickmeyer.com/wp-content/uploads/2025/08/image-4.png?w=1024" width="1024" /></a></figure>
<p>Next I started a Dummy Audio Device from <a href="https://ubuntustudio.org/audio-configuration/">Ubuntu Studio Audio Configuration</a> 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:</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://ericheickmeyer.com/wp-content/uploads/2025/08/image-5.png"><img alt="" class="wp-image-6021" data-attachment-id="6021" data-comments-opened="1" data-image-caption="" data-image-description="" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-large-file="https://ericheickmeyer.com/wp-content/uploads/2025/08/image-5.png?w=457" data-medium-file="https://ericheickmeyer.com/wp-content/uploads/2025/08/image-5.png?w=300" data-orig-file="https://ericheickmeyer.com/wp-content/uploads/2025/08/image-5.png" data-orig-size="457,326" data-permalink="https://ericheickmeyer.com/2025/08/19/raspberry-pi-as-a-networked-audio-interface/image-6/" height="326" src="https://ericheickmeyer.com/wp-content/uploads/2025/08/image-5.png?w=457" width="457" /></a></figure></div>
<p>…and VIOLA! Even testing my microphone, there was so little latency it was imperceivable.</p>
<p>I’m envisioning a setup like this:</p>
<figure class="wp-block-image size-large"><a href="https://ericheickmeyer.com/wp-content/uploads/2025/08/stage.png"><img alt="" class="wp-image-6068" data-attachment-id="6068" data-comments-opened="1" data-image-caption="" data-image-description="" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="stage" data-large-file="https://ericheickmeyer.com/wp-content/uploads/2025/08/stage.png?w=662" data-medium-file="https://ericheickmeyer.com/wp-content/uploads/2025/08/stage.png?w=300" data-orig-file="https://ericheickmeyer.com/wp-content/uploads/2025/08/stage.png" data-orig-size="740,294" data-permalink="https://ericheickmeyer.com/2025/08/19/raspberry-pi-as-a-networked-audio-interface/stage/" height="294" src="https://ericheickmeyer.com/wp-content/uploads/2025/08/stage.png?w=740" width="740" /></a></figure>
<p>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!</p></description>
<pubDate>Tue, 19 Aug 2025 19:48:23 +0000</pubDate>
</item>
<item>
<title>Jonathan Carter: Debian 13</title>
<guid isPermaLink="false">https://jonathancarter.org/?p=11948</guid>
<link>https://jonathancarter.org/2025/08/10/debian-13/</link>
<description><p>Debian 13 has finally <a href="https://bits.debian.org/2025/08/trixie-released.html">been released</a>!</p>
<p>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.</p>
<p>More details about Debian 13 available on the <a href="https://www.debian.org/News/2025/20250809">official press release</a>.</p>
<p>The default theme for Debian 13 is <a href="https://wiki.debian.org/DebianArt/Themes/Ceratopsian">Ceratopsian</a>, 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 <em>great</em> in combination with all kinds of other things during DebConf too, so it has certainly won me over.</p>
<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img alt="" class="wp-image-11957" height="500" src="https://jonathancarter.org/files/images/wllpaper.jpeg" style="width: 798px; height: auto;" width="800" /></figure></div>
<p>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:</p>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img alt="" class="wp-image-11961" height="644" src="https://jonathancarter.org/files/images/certop-1024x644.jpeg" style="width: 1024px; height: auto;" width="1024" /></figure></div>
<p class="has-text-align-center"><em>Plymouth (start-up/shutdown) theme.</em></p>
<div class="wp-block-image">
<figure class="aligncenter size-full"><img alt="" class="wp-image-11963" height="631" src="https://jonathancarter.org/files/images/trixie.jpeg" width="600" /></figure></div>
<p class="has-text-align-center"><a href="https://disney.fandom.com/wiki/Trixie">Trixie, the character from Toy Story</a> that was chosen as the codename for Debian 13.</p>
<h2 class="wp-block-heading">Debian Local Team ISO testing</h2>
<p>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.</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img alt="" class="wp-image-11949" height="771" src="https://jonathancarter.org/files/images/cake-13-1024x771.jpg" width="1024" /></figure></div>
<p>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.</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img alt="" class="wp-image-11951" height="590" src="https://jonathancarter.org/files/images/trixiecake2-1024x590.jpg" width="1024" /></figure></div>
<p class="has-text-align-center"><em>My dog was really wishing hard that the cake would slip off.</em></p>
<div class="wp-block-image">
<figure class="aligncenter size-full"><img alt="" class="wp-image-11970" height="221" src="https://jonathancarter.org/files/images/cambalache.jpg" width="600" /></figure></div>
<p>Packaging-wise, I only have one big new package for Trixie, and that’s <a href="https://github.com/xjuan/cambalache/tree/main">Cambalache</a>, a rapid application design UI builder for GTK3/GTK4.</p>
<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img alt="" class="wp-image-11972" height="423" src="https://jonathancarter.org/files/images/image-29.png" style="width: 616px; height: auto;" width="752" /></figure></div>
<p>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.</p>
<p>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!</p>
<p>Thanks to everyone who was involved in this release, so far upgrades have been very smooth!</p>
<img alt="" height="0" src="https://analytics.jonathancarter.org/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fjonathancarter.org%2F2025%2F08%2F10%2Fdebian-13%2F&amp;action_name=Debian+13&amp;urlref=https%3A%2F%2Fjonathancarter.org%2Ffeed%2F" style="border: 0; width: 0; height: 0;" width="0" /></description>
<pubDate>Sun, 10 Aug 2025 14:53:36 +0000</pubDate>
</item>
<item>
<title>Scarlett Gately Moore: Fostering Constructive Communication in Open Source Communities</title>
<guid isPermaLink="false">https://www.scarlettgatelymoore.dev/?p=2127</guid>
<link>https://www.scarlettgatelymoore.dev/fostering-constructive-communication-in-open-source-communities/</link>
<description><figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img alt="" class="wp-image-2128" data-id="2128" height="625" src="https://www.scarlettgatelymoore.dev/wp-content/uploads/5278-1024x625.jpg" width="1024" />Partners holding big jigsaw puzzle pieces flat vector illustration. Successful partnership, communication and collaboration metaphor. Teamwork and business cooperation concept.</figure>
</figure>
<p>I write this in the wake of a personal attack against my work and a project that is near and dear to me. Instead of spreading vile rumors and hearsay, talk to me. I am not known to be ‘hard to talk to’ and am wide open for productive communication. I am disheartened and would like to share some thoughts of the importance of communication. Thanks for listening.</p>
<p>Open source development thrives on collaboration, shared knowledge, and mutual respect. Yet sometimes, the very passion that drives us to contribute can lead to misunderstandings and conflicts that harm both individuals and the projects we care about. As contributors, maintainers, and community members, we have a responsibility to foster environments where constructive dialogue flourishes.</p>
<h2 class="wp-block-heading">The Foundation of Healthy Open Source Communities</h2>
<p>At its core, open source is about people coming together to build something greater than what any individual could create alone. This collaborative spirit requires more than just technical skills—it demands emotional intelligence, empathy, and a commitment to treating one another with dignity and respect.</p>
<p>When disagreements arise—and they inevitably will—the manner in which we handle them defines the character of our community. Technical debates should focus on the merits of ideas, implementations, and approaches, not on personal attacks or character assassinations conducted behind closed doors.</p>
<h2 class="wp-block-heading">The Importance of Direct Communication</h2>
<p>One of the most damaging patterns in any community is when criticism travels through indirect channels while bypassing the person who could actually address the concerns. When we have legitimate technical disagreements or concerns about someone’s work, the constructive path forward is always direct, respectful communication.</p>
<p>Consider these approaches:</p>
<ul class="wp-block-list">
<li><strong>Address concerns directly</strong>: If you have technical objections to someone’s work, engage with them directly through appropriate channels</li>
<li><strong>Focus on specifics</strong>: Critique implementations, documentation, or processes—not the person behind them</li>
<li><strong>Assume good intentions</strong>: Most contributors are doing their best with the time and resources available to them</li>
<li><strong>Offer solutions</strong>: Instead of just pointing out problems, suggest constructive alternatives</li>
</ul>
<h2 class="wp-block-heading">Supporting Contributors Through Challenges</h2>
<p>Open source contributors often juggle their community involvement with work, family, and personal challenges. Many are volunteers giving their time freely, while others may be going through difficult periods in their lives—job searching, dealing with health issues, or facing other personal struggles.</p>
<p>During these times, our response as a community matters enormously. A word of encouragement can sustain someone through tough periods, while harsh criticism delivered thoughtlessly can drive away valuable contributors permanently.</p>
<h2 class="wp-block-heading">Building Resilient Communities</h2>
<p>Strong open source communities are built on several key principles:</p>
<p><strong>Transparency in Communication</strong>: Discussions about technical decisions should happen in public forums where all stakeholders can participate and learn from the discourse.</p>
<p><strong>Constructive Feedback Culture</strong>: Criticism should be specific, actionable, and delivered with the intent to improve rather than to tear down.</p>
<p><strong>Recognition of Contribution</strong>: Every contribution, whether it’s code, documentation, bug reports, or community support, has value and deserves acknowledgment.</p>
<p><strong>Conflict Resolution Processes</strong>: Clear, fair procedures for handling disputes help prevent minor disagreements from escalating into community-damaging conflicts.</p>
<h2 class="wp-block-heading">The Long View</h2>
<p>Many successful open source projects span decades, with contributors coming and going as their life circumstances change. The relationships we build and the culture we create today will determine whether these projects continue to attract and retain the diverse talent they need to thrive.</p>
<p>When we invest in treating each other well—even during disagreements—we’re investing in the long-term health of our projects and communities. We’re creating spaces where innovation can flourish because people feel safe to experiment, learn from mistakes, and grow together.</p>
<h2 class="wp-block-heading">Moving Forward Constructively</h2>
<p>If you find yourself in conflict with another community member, consider these steps:</p>
<ol class="wp-block-list">
<li><strong>Take a breath</strong>: Strong emotions rarely lead to productive outcomes</li>
<li><strong>Seek to understand</strong>: What are the underlying concerns or motivations?</li>
<li><strong>Communicate directly</strong>: Reach out privately first, then publicly if necessary</li>
<li><strong>Focus on solutions</strong>: How can the situation be improved for everyone involved?</li>
<li><strong>Know when to step back</strong>: Sometimes the healthiest choice is to disengage from unproductive conflicts</li>
</ol>
<h2 class="wp-block-heading">A Call for Better</h2>
<p>Open source has given us incredible tools, technologies, and opportunities. The least we can do in return is treat each other with the respect and kindness that makes these collaborative achievements possible.</p>
<p>Every contributor—whether they’re packaging software, writing documentation, fixing bugs, or supporting users—is helping to build something remarkable. Let’s make sure our communities are places where that work can continue to flourish, supported by constructive communication and mutual respect.</p>
<p>The next time you encounter work you disagree with, ask yourself: How can I make this better? How can I help this contributor grow? How can I model the kind of community interaction I want to see?</p>
<p>Our projects are only as strong as the communities that support them. Let’s build communities worthy of the amazing software we create together.</p>
<p><a href="https://gofund.me/506c910c">https://gofund.me/506c910c</a></p></description>
<pubDate>Mon, 04 Aug 2025 21:52:10 +0000</pubDate>
</item>
<item>
<title>Thomas Bechtold: Streamline Root Filesystem Modifications with chimg</title>
<guid isPermaLink="false">http://toabctl.wordpress.com/?p=151</guid>
<link>https://toabctl.wordpress.com/2025/07/31/streamline-root-filesystem-modifications-with-chimg/</link>
<description><p>During the last year I developed as a side project a new tool called <a href="https://github.com/canonical/chimg/">chimg</a> . 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).</p>
<p>The nice thing about this is, that this tool can be integrated into <a href="https://launchpad.net/livecd-rootfs">livecd-rootfs</a> (the tool that is usually used to build Ubuntu images) or future tools which might use the craft framework to build images. <code>chimg</code> automatically detects already bind-mounted filesystems (eg. <code>/sys</code>, <code>/proc</code>, …), detects already preseeded snaps and usually does that same thing that <code>livecd-rootfs</code> currently does when eg. replacing an already installed kernel.</p>
<p>Install <code>chimg</code> with:</p>
<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">sudo snap install chimg --classic
</pre></div>
<p>An example configuration (eg. <code>config.yaml</code>) to modify a rootfs chroot directory looks like this:</p>
<div class="wp-block-syntaxhighlighter-code "><pre class="brush: yaml; title: ; notranslate">---
kernel: linux-aws
debs:
- name: shim-signed
- name: grub-pc
- name: grub2-common
- name: ubuntu-cloud-minimal
snap:
assertion_brand: canonical
assertion_model: aws-classic
snaps:
- name: hello
channel: latest/stable
files:
-
destination: /etc/default/grub.d/70-mysettings.cfg
content: |+
GRUB_TIMEOUT=0
cmds_post:
-
cmd: |
echo "Everything done"
</pre></div>
<p>This config (stored in <code>config.yaml</code> in this example) can be applied to a newly created (or existing) root filesystem directory. Let’s create one in <code>/tmp/chimg-noble</code>:</p>
<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">sudo mmdebstrap --variant=apt --verbose noble /tmp/chimg-noble
</pre></div>
<p>Let’s apply the config changes now:</p>
<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">sudo chimg --log-console chrootfs config.yaml /tmp/chimg-noble
</pre></div>
<p>That’s it. The modifications are now applied to the <code>/tmp/chimg-noble</code> directory.</p>
<p></p></description>
<pubDate>Thu, 31 Jul 2025 18:15:36 +0000</pubDate>
</item>
<item>
<title>Oliver Grawert: Rooming with Mark</title>
<guid isPermaLink="false">http://ograblog.wordpress.com/?p=389</guid>
<link>https://ograblog.wordpress.com/2025/05/16/rooming-with-mark/</link>
<description><p class="has-black-color has-text-color has-link-color wp-elements-46088db9ef993c5ecc5629835e2d0dbd">Yesterday, exactly twenty years ago my mobile rang while I was walking the dog. <br /><br />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.<br /><br />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?”<br /><br />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 <img alt="🙂" class="wp-smiley" src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f642.png" style="height: 1em;" /><br /><br />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.<br /><br />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.<br /><br />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. <br /><br />Mark insisted to take the folding bed and I can tell you, he does not snore … (well, he didn’t back then)<br /><br />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.<br /><br />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. <br />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.<br /><br />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 <img alt="😉" class="wp-smiley" src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f609.png" style="height: 1em;" /><br /><br />Thank you Mark for dragging me into this adventure and thank you for still having me! I still love the ride!!</p>
<p></p>
<p></p>
<p></p></description>
<pubDate>Tue, 29 Jul 2025 13:26:03 +0000</pubDate>
</item>
<item>
<title>Dimitri John Ledkov: Achieving actually full disk encryption of UEFI ESP at rest with TCG OPAL, FIPS, LUKS</title>
<guid isPermaLink="false">tag:blogger.com,1999:blog-347582618045055410.post-5137629174584752121</guid>
<link>http://blog.surgut.co.uk/2025/07/achieving-actually-full-disk-encryption.html</link>
<description><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifDQL9Ducebgoi5rQaoK8ZXCp1ud1YHOguORDpgsmeD5E1PNT9Ptcdps3hLehMw6RHpXeovif1fgMpYF8lAucFgYmUZYgvdl68669qcjgUkN4hcpTRBzSK1HilijZgPjSxpCySZQtvtmkh7EjKMjMB27qIpJvXXmlFfobGPp7bIjoluItyPF6cJ7fnL1A/s1280/pexels-markus-winkler-1430818-3828944.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="853" data-original-width="1280" height="427" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifDQL9Ducebgoi5rQaoK8ZXCp1ud1YHOguORDpgsmeD5E1PNT9Ptcdps3hLehMw6RHpXeovif1fgMpYF8lAucFgYmUZYgvdl68669qcjgUkN4hcpTRBzSK1HilijZgPjSxpCySZQtvtmkh7EjKMjMB27qIpJvXXmlFfobGPp7bIjoluItyPF6cJ7fnL1A/w640-h427/pexels-markus-winkler-1430818-3828944.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Achieving full disk encryption using FIPS, TCG OPAL and LUKS to encrypt UEFI ESP on bare-metal and in VMs</td></tr></tbody></table><p>Many security standards such as CIS and STIG require to protect information at rest. For example, <a href="https://doi.org/10.6028/NIST.SP.800-53r5">NIST SP 800-53r5</a> SC-28 advocate to use cryptographic protection, offline storage and TPMs to enhance protection of information confidentiality and/or integrity.</p><p>Traditionally to satisfy such controls on portable devices such as laptops one would utilize software based Full Disk Encryption - <a href="https://support.apple.com/en-gb/guide/mac-help/mh11785/mac">Mac OS X FileVault</a>, <a href="https://support.microsoft.com/en-us/windows/bitlocker-drive-encryption-76b92ac9-1040-48d6-9f5f-d14b3c5fa178">Windows Bitlocker</a>, <a href="https://gitlab.com/cryptsetup/cryptsetup">Linux cryptsetup LUKS2</a>. In cases when FIPS cryptography is required, additional burden would be placed onto these systems to operate their kernels in FIPS mode.</p><p><a href="https://trustedcomputinggroup.org/">Trusted Computing Group</a> 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 <span face="Roboto-Medium" style="background-color: white;">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.</span></p><p><a href="https://trustedcomputinggroup.org/resource/storage-work-group-storage-security-subsystem-class-opal/">TCG Storage Security Subsystem Class: Opal Specification</a> 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 <a href="https://sedutil.com/">SEDutil</a> to inspect and configure all of this. Latest release of major Linux distributions have SEDutil already packaged.</p><p>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.</p><p>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 <a href="https://csrc.nist.gov/Projects/cryptographic-module-validation-program/validated-modules/search">CMVP</a> website one can search for module name terms "OPAL" or "NVMe" or name of hardware vendor to locate FIPS certificates.</p><p>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.</p><p>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 <a href="https://cloud.google.com/docs/security/encryption/default-encryption?hl=en">GCP</a>, <a href="https://learn.microsoft.com/en-us/azure/virtual-machines/disk-encryption-overview">Azure</a>, <a href="https://maturitymodel.security.aws.dev/en/2.-foundational/kms/">AWS</a>. But the key takeaway without doing anything, at rest, VMs in public cloud are always encrypted and satisfy NIST SP 800-53 controls.</p><p>What about private cloud? Most Linux based private clouds ultimately use <a href="https://www.qemu.org/">qemu</a> typically with qcow2 virtual disk images. Qemu supports user-space encryption of qcow2 disk, see this <a href="https://www.qemu.org/docs/master/tools/qemu-img.html">manpage</a>. 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 <a href="https://libvirt.org/formatstorageencryption.html">libvirt</a> and <a href="https://docs.openstack.org/cinder/latest/configuration/block-storage/volume-encryption.html">OpenStack Cinder</a>.</p><p>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 <a href="https://orca.security/">Orca</a>, 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.</p><p>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 <a href="https://nuetzlich.net/gocryptfs/">gocryptfs</a> which is the best successor to the once popular, but now deprecated <a href="https://www.ecryptfs.org/">eCryptfs</a> (amazing tool, but has fallen behind in development and can lead to data loss).</p><p>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. <a href="https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/verity.html">dm-verity</a> is a good choice for read-only and rigid installations. For read-write workloads, it may be easier to deploy <a href="https://zfsonlinux.org/">ZFS</a> or <a href="https://btrfs.readthedocs.io/en/latest/index.html">Btrfs</a> 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 <a href="https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/dm-integrity.html">dm-integrity</a> (either standalone, or via dm-luks/cryptsetup --integrity option).</p><p style="text-align: left;">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 <a href="https://cpl.thalesgroup.com/encryption/data-security-platform">ChiperTrust Data Security Platform</a> (previously Vormetric), but there are many others including OEM / Vendor / Hardware / Cloud specific or agnostic solutions.</p><p style="text-align: left;">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. </p><p style="text-align: left;">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 <a href="https://www.linkedin.com/in/dimitri-john-ledkov/">Linkedin</a>.</p></description>
<pubDate>Mon, 28 Jul 2025 11:13:30 +0000</pubDate>
<author>noreply@blogger.com (Dimitri John Ledkov)</author>
</item>
<item>
<title>Jonathan Carter: DebConf25</title>
<guid isPermaLink="false">https://jonathancarter.org/?p=11929</guid>
<link>https://jonathancarter.org/2025/07/19/debconf25/</link>
<description><p>The last two weeks I attended <a href="https://debconf25.debconf.org/">DebConf and DebCamp</a> in Brest, France.</p>
<p>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.</p>
<p>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 <a href="https://debconf25.debconf.org/sponsors/">wonderful sponsors</a> who made this entire event possible!</p>
<p>See you next year in Argentina!</p>
<figure class="wp-block-image size-large"><img alt="Jellyfish taken during daytrip at aquarium." class="wp-image-11936" height="577" src="https://jonathancarter.org/files/images/jellyfish-1024x577.jpeg" width="1024" /></figure>
<p class="has-text-align-center"><em>Jellyfish, taken during daytrip at aquarium.</em></p>
<p></p>
<img alt="" height="0" src="https://analytics.jonathancarter.org/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fjonathancarter.org%2F2025%2F07%2F19%2Fdebconf25%2F&amp;action_name=DebConf25&amp;urlref=https%3A%2F%2Fjonathancarter.org%2Ffeed%2F" style="border: 0; width: 0; height: 0;" width="0" /></description>
<pubDate>Sat, 19 Jul 2025 17:12:49 +0000</pubDate>
</item>
<item>
<title>Faizul "Piju" 9M2PJU: OpenRocket: Design, Simulate, and Launch Your Own Rockets — Free and Open Source</title>
<guid isPermaLink="false">https://hamradio.my/?p=7766</guid>
<link>https://hamradio.my/2025/07/openrocket-design-simulate-and-launch-your-own-rockets-free-and-open-source/</link>
<description><h2 class="wp-block-heading"></h2>
<p>Have you ever dreamed of building and launching your own rockets? Whether you’re a <strong>student</strong>, <strong>educator</strong>, <strong>hobbyist</strong>, or <strong>aerospace enthusiast</strong>, there’s one tool that makes rocketry accessible, educational, and exciting: <strong>OpenRocket</strong>.</p>
<p><strong>OpenRocket</strong> is a <strong>free, fully open-source model rocket simulator</strong> that helps you <strong>design, simulate, and optimize rockets</strong> in a virtual environment — all before a single part is printed or assembled.</p>
<p>And the best part? It’s <strong>completely free</strong>, runs on <strong>Windows, macOS, and Linux</strong>, and is trusted by thousands around the world — from classrooms to high-powered launch pads.</p>
<hr class="wp-block-separator has-alpha-channel-opacity" />
<h3 class="wp-block-heading"><img alt="🛰" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f6f0.png" style="height: 1em;" /> What is OpenRocket?</h3>
<p>OpenRocket is a powerful simulation tool designed to make rocket science <strong>understandable and practical</strong>. 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.</p>
<hr class="wp-block-separator has-alpha-channel-opacity" />
<h3 class="wp-block-heading"><img alt="🛠" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f6e0.png" style="height: 1em;" /> Key Features</h3>
<ul class="wp-block-list">
<li><img alt="🖱" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f5b1.png" style="height: 1em;" /> <strong>Drag-and-Drop Rocket Design</strong><br />Build your rocket with ease using a graphical interface — choose body tubes, fins, nose cones, engines, recovery systems, and more.</li>
<li><img alt="🧮" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f9ee.png" style="height: 1em;" /> <strong>Accurate Flight Simulations</strong><br />Simulate flights in real-world conditions with detailed physics modeling, including wind, thrust curves, drag, gravity, and stability.</li>
<li><img alt="📊" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f4ca.png" style="height: 1em;" /> <strong>Detailed Analysis Tools</strong><br />Visualize graphs for altitude, velocity, acceleration, angle of attack, and more — perfect for science fair projects and engineering analysis.</li>
<li><img alt="🚀" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f680.png" style="height: 1em;" /> <strong>Support for Multistage and Cluster Rockets</strong><br />Go beyond basic designs and experiment with multi-engine configurations, boosters, and complex recovery systems.</li>
<li><img alt="📐" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f4d0.png" style="height: 1em;" /> <strong>Advanced Stability Calculations</strong><br />See real-time updates on your rocket’s center of pressure and center of gravity — helping ensure stable flights.</li>
<li><img alt="🎓" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f393.png" style="height: 1em;" /> <strong>Education-First Philosophy</strong><br />Built with educators and students in mind — great for teaching physics, aerodynamics, math, and engineering concepts.</li>
<li><img alt="🔓" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f513.png" style="height: 1em;" /> <strong>100% Free and Open Source (GPLv3 License)</strong><br />Modify, contribute, or use it freely in academic and personal projects.</li>
</ul>
<hr class="wp-block-separator has-alpha-channel-opacity" />
<h3 class="wp-block-heading"><img alt="👨🏫" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f468-200d-1f3eb.png" style="height: 1em;" /> Perfect for Classrooms and Competitions</h3>
<p>OpenRocket is a favorite in schools, universities, and STEM clubs. It’s ideal for:</p>
<ul class="wp-block-list">
<li>Physics and engineering lessons</li>
<li>STEM competitions</li>
<li>High school and university rocketry teams</li>
<li>Maker clubs and hobbyist communities</li>
</ul>
<p>With OpenRocket, students don’t just learn theory — they test it, visualize it, and bring it to life.</p>
<hr class="wp-block-separator has-alpha-channel-opacity" />
<h3 class="wp-block-heading"><img alt="💻" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f4bb.png" style="height: 1em;" /> Cross-Platform and Easy to Use</h3>
<p>OpenRocket runs smoothly on <strong>Windows, Linux, and macOS</strong>, with a lightweight footprint and no complex setup required. Just download, install, and launch.</p>
<p>Want to try the latest features? There are <strong>stable</strong> and <strong>experimental</strong> versions available, with an active community improving the project continuously.</p>
<hr class="wp-block-separator has-alpha-channel-opacity" />
<h3 class="wp-block-heading"><img alt="🌍" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f30d.png" style="height: 1em;" /> Join a Global Community</h3>
<p>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.</p>
<p>If you’re ready to explore the world of rocketry without burning through your budget, <strong>OpenRocket is your launchpad</strong>.</p>
<hr class="wp-block-separator has-alpha-channel-opacity" />
<h3 class="wp-block-heading"><img alt="🔗" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f517.png" style="height: 1em;" /> Ready for Liftoff?</h3>
<p>Visit <a href="https://openrocket.info/">openrocket.info</a> and start building your dream rocket today.</p>
<p><strong>Design. Simulate. Launch. Learn. Repeat.</strong></p>
<p>Welcome to the world of <strong>OpenRocket</strong> — where rocket science is for everyone.</p>
<p>The post <a href="https://hamradio.my/2025/07/openrocket-design-simulate-and-launch-your-own-rockets-free-and-open-source/">OpenRocket: Design, Simulate, and Launch Your Own Rockets — Free and Open Source</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p></description>
<pubDate>Sat, 19 Jul 2025 16:15:07 +0000</pubDate>
</item>
<item>
<title>Faizul "Piju" 9M2PJU: Digital – Design, Simulate, and Understand Logic Circuits Like Never Before</title>
<guid isPermaLink="false">https://hamradio.my/?p=7763</guid>
<link>https://hamradio.my/2025/07/digital-design-simulate-and-understand-logic-circuits-like-never-before/</link>
<description><h2 class="wp-block-heading"></h2>
<p>If you’ve ever wanted to dive into the world of <strong>digital electronics</strong>, whether as a student, educator, engineer, or hobbyist, you’re going to love this tool: <strong>Digital</strong> — a powerful, free, and open-source logic circuit simulator created by <strong>Helmut Neemann</strong>. Available on GitHub at <a href="https://github.com/hneemann/Digital">hneemann/Digital</a>, this Java-based application combines clarity, flexibility, and educational value in one sleek package.</p>
<h3 class="wp-block-heading"><img alt="⚙" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/2699.png" style="height: 1em;" /> What Is Digital?</h3>
<p><strong>Digital</strong> is a <strong>logic circuit simulator</strong> designed with a clear goal: to make the teaching, learning, and development of digital logic <strong>intuitive and visual</strong>. It lets you create, simulate, and analyze logic circuits ranging from basic gates to complex CPUs — all with a <strong>drag-and-drop interface</strong> and <strong>real-time simulation</strong>.</p>
<p>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 <strong>clocked components, finite state machines, memory modules, and even custom microprocessors</strong>.</p>
<hr class="wp-block-separator has-alpha-channel-opacity" />
<h3 class="wp-block-heading"><img alt="🔑" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f511.png" style="height: 1em;" /> Key Features</h3>
<ul class="wp-block-list">
<li><img alt="🖱" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f5b1.png" style="height: 1em;" /> <strong>Intuitive Interface</strong><br />Drag and drop components onto your canvas, connect wires, and see how your circuit behaves in real-time.</li>
<li><img alt="🕒" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f552.png" style="height: 1em;" /> <strong>Real-Time Simulation</strong><br />Changes are reflected immediately, with live logic levels and animations that bring your circuits to life.</li>
<li><img alt="🧩" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f9e9.png" style="height: 1em;" /> <strong>Modular Design</strong><br />Use subcircuits and hierarchical design to keep things organized, even in large-scale projects.</li>
<li><img alt="⏱" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/23f1.png" style="height: 1em;" /> <strong>Clocked Components</strong><br />Simulate registers, flip-flops, RAM, and sequential logic effortlessly.</li>
<li><img alt="🧠" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f9e0.png" style="height: 1em;" /> <strong>Built-in CPU &amp; Assembler</strong><br />Digital includes a simple, yet powerful CPU with its own instruction set and assembler — ideal for teaching <strong>computer architecture</strong>.</li>
<li><img alt="🧑🏫" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f9d1-200d-1f3eb.png" style="height: 1em;" /> <strong>Made for Education</strong><br />Widely used in universities and schools. Perfect for explaining logic gates, truth tables, FSMs, and microprocessor fundamentals.</li>
<li><img alt="💻" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f4bb.png" style="height: 1em;" /> <strong>Cross-platform (Java-based)</strong><br />Works on Windows, macOS, and Linux. Just download and run!</li>
<li><img alt="🔓" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f513.png" style="height: 1em;" /> <strong>Open Source (GPL-3.0 License)</strong><br />Actively maintained and completely free. Fork it, contribute, or adapt it to your own projects.</li>
</ul>
<hr class="wp-block-separator has-alpha-channel-opacity" />
<h3 class="wp-block-heading"><img alt="📚" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f4da.png" style="height: 1em;" /> Who Is It For?</h3>
<ul class="wp-block-list">
<li><strong>Students</strong>: Learn digital logic step by step with instant feedback.</li>
<li><strong>Educators</strong>: Use it in the classroom to teach logic circuits and CPU architecture interactively.</li>
<li><strong>Makers &amp; Hobbyists</strong>: Build and test your own logic-based inventions.</li>
<li><strong>Researchers &amp; Developers</strong>: Prototype logic systems before implementing them in hardware.</li>
</ul>
<p>Whether you’re building an <strong>ALU</strong>, a <strong>traffic light controller</strong>, or your own <strong>8-bit CPU</strong>, Digital gives you the tools to simulate it with precision.</p>
<hr class="wp-block-separator has-alpha-channel-opacity" />
<h3 class="wp-block-heading"><img alt="🚀" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f680.png" style="height: 1em;" /> Get Started in Minutes</h3>
<ol class="wp-block-list">
<li>Head over to the <a href="https://github.com/hneemann/Digital">Digital GitHub repository</a>.</li>
<li>Download the latest release (JAR file).</li>
<li>Run it using Java (Java 8 or higher required).</li>
<li>Start building your first circuit with just a few clicks.</li>
</ol>
<p>No complex installations. No licenses. No fees. Just pure learning and tinkering joy.</p>
<hr class="wp-block-separator has-alpha-channel-opacity" />
<h3 class="wp-block-heading"><img alt="❤" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/2764.png" style="height: 1em;" /> Final Thoughts</h3>
<p>In a world of expensive and overly complex simulation tools, <strong>Digital</strong> shines as a <strong>free, open-source</strong>, and <strong>educator-friendly</strong> alternative. It’s ideal for classrooms, home labs, and anyone curious about what happens beneath the silicon.</p>
<p>So if you’re ready to master digital logic — from basic gates to building your own CPU — it’s time to download <strong>Digital</strong> and start creating.</p>
<p><strong>Explore. Simulate. Learn. With Digital.</strong></p>
<p>The post <a href="https://hamradio.my/2025/07/digital-design-simulate-and-understand-logic-circuits-like-never-before/">Digital – Design, Simulate, and Understand Logic Circuits Like Never Before</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p></description>
<pubDate>Fri, 18 Jul 2025 16:05:45 +0000</pubDate>
</item>
<item>
<title>Salih Emin: uCareSystem v25.07.17: Stability and Integration in the best system maintenance tool for Debian & Ubuntu</title>
<guid isPermaLink="false">https://utappia.org/?p=49924</guid>
<link>https://utappia.org/2025/07/17/ucaresystem-v25-07-17-system-maintenance-tool-debian-ubuntu/</link>
<description><p>I am thrilled to announce a landmark new release of uCareSystem! Which you know it is THE best system maintenance tool Debian Ubuntu.</p>
<p>This isn’t just an incremental update; it’s a significant evolution of the tool, focusing on deep infrastructure improvements, professional-grade Debian packaging, and a smoother, more reliable user experience.</p>
<span id="more-49924"></span>
<p>This release represents a major milestone my journey to make uCareSystem the most robust and user-friendly system maintenance tool for Debian and Ubuntu-based systems. Let’s dive into what makes this update so special .</p>
<h3 class="wp-block-heading">A New Standard for Debian &amp; Ubuntu Integration</h3>
<p>The previous release was a huge improvement as it introduced <strong><a href="https://utappia.org/2025/06/06/ucaresystem-25-05-06-because-even-your-wsl-deserves-a-spa-day/">WSL support for uCareSystem</a></strong> The centerpiece of this release is a complete overhaul of the Debian packaging for <a href="https://utappia.org/download-ucaresystem/">uCareSystem</a> as a automated maintenance tool for Debian Ubuntu. I’ve restructured everything to be fully compliant with Debian standards. What does this mean for you?</p>
<ul class="wp-block-list">
<li><strong>Seamless Installation:</strong> A more unified and reliable installation experience for all Debian and Ubuntu based Linux distributions.</li>
<li><strong>Man Pages Included:</strong> For our terminal-loving users, you can now access detailed documentation directly from your command line with <br /><code>man ucaresystem</code>.</li>
<li><strong>Enhanced GPG Key Handling:</strong> The GPG key retrieval process more resilient. With multiple fallback keyservers and support for HTTPS, adding the repository is more reliable than ever.</li>
<li><strong>CI/CD Pipeline Enhancement:</strong> I’ve implemented a comprehensive CI/CD pipeline for building testing DEB release packages. This helps a ton in quickly testing every change that is implemented ensuring that no-braking bugs can slip to the end user. I’ve completely reorganized the file structure, creating dedicated directories for source code, Debian packaging files, and other assets. This makes the project more maintainable and easier for new contributors to get involved.</li>
<li><strong>Honoring Our Contributors:</strong> I’ve introduced a new system to track and formally honor the amazing contributors who make each release possible.</li>
</ul>
<h3 class="wp-block-heading">Bug Fixes &amp; Key Enhancements for the system maintenance </h3>
<p>A great release isn’t just about new features; it’s also about refinement. I’ve squashed several bugs and made some notable enhancements:</p>
<ul class="wp-block-list">
<li><strong>Fixed:</strong> An issue with <code>xargs</code> in the maintenance script that could cause errors.</li>
<li><strong>Fixed:</strong> Validation issues with the desktop file and application metadata.</li>
<li><strong>Enhanced:</strong> The help documentation now includes more detailed options and version information.</li>
<li><strong>Added:</strong> A new script timer to help track execution time. This way you will have an idea how long it took to complete the maintenance</li>
</ul>
<h3 class="wp-block-heading">By the Numbers</h3>
<p>This was a significant undertaking, reflected in the statistics for this release:</p>
<ul class="wp-block-list">
<li><strong>35 files changed</strong></li>
<li><strong>1,031 additions</strong></li>
<li><strong>200 deletions</strong></li>
</ul>
<p>Please take a look to a comprehensive Release note in the repository: <a href="https://github.com/Utappia/uCareSystem/releases/tag/v25.07.17">https://github.com/Utappia/uCareSystem/releases/tag/v25.07.17</a></p>
<p>This release is a testament to my commitment to quality and my vision for the future of uCareSystem as a one-stop system maintenance tool Debian Ubuntu. I am confident that I laid a stronger foundation that will allow for even more exciting features and faster development in the future.</p>
<p>Thank you for your continued support. ! Special thanks to the supporters of this development cycle:</p>
<ul class="wp-block-list">
<li>W. Schreinemachers</li>
<li>K. A. Gkountras (Jemadux)</li>
</ul>
<h2 class="wp-block-heading">Where can I download uCareSystem ?</h2>
<p>As always, I want to express my gratitude for your support over the past 15 years. I have received countless messages from inside and outside Greece about how useful they found the application. I hope you find the new version useful as well.</p>
<p>If you’ve found uCareSystem to be valuable and it has saved you time, consider showing your appreciation with a donation. You can contribute via PayPal or Debit/Credit Card by clicking on the banner.</p>
<table>
<thead>
<tr>
<th>Pay what you want</th>
<th>Maybe next time</th>
</tr>
</thead>
<tbody>
<tr>
<td>Click the donate button and enter the amount you want to donate. Then you will be navigated to the page with the latest version to download the installer</td>
<td>If you don’t want to Donate this time, just click the download icon to be navigated to the page with the latest version to download the installer</td>
</tr>
<tr>
<td><a href="https://www.paypal.com/donate/?hosted_button_id=SATQ6Y9S3UCSG" rel="attachment wp-att-2601"><img alt="btn_donateCC_LG" class="wp-image-2601 size-full aligncenter" height="47" src="http://utappiablog.wordpress.com/wp-content/uploads/2016/03/btn_donatecc_lg1.gif" width="147" /></a></td>
<td><a href="https://github.com/Utappia/uCareSystem/releases/latest" rel="attachment wp-att-2593"><img alt="ucare-system-download" class="size-full wp-image-2593 aligncenter" height="151" src="http://utappiablog.wordpress.com/wp-content/uploads/2016/03/ucare-system-download.png" width="151" /></a></td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
</tbody>
</table>
<p>Once installed, the updates for new versions will be installed along with your regular system updates.</p>
<p>The post <a href="https://utappia.org/2025/07/17/ucaresystem-v25-07-17-system-maintenance-tool-debian-ubuntu/">uCareSystem v25.07.17: Stability and Integration in the best system maintenance tool for Debian &amp; Ubuntu</a> appeared first on <a href="https://utappia.org">Utappia</a>.</p></description>
<pubDate>Thu, 17 Jul 2025 22:09:26 +0000</pubDate>
</item>
<item>
<title>Salih Emin: How to use an AI in terminal with free models</title>
<guid isPermaLink="false">https://utappia.org/?p=49917</guid>
<link>https://utappia.org/2025/07/10/ai-terminal-free/</link>
<description><p>How would you feel if you could have access to AI models, many of which are free, directly from the comfort of your terminal?</p>
<p>In this article, we will explore how you can achieve this using the OpenRouter.ai platform and a simple script I’ve prepared, called <code>ai.sh</code> (… very original… I know).</p>
<span id="more-49917"></span>
<h1 class="wp-block-heading">Free AI in your Terminal with OpenRouter and ai.sh</h1>
<p><code>ai.sh</code> is a simple <a href="https://utappia.org/tag/script/">terminal app</a> to use OpenRouter.ai with your personal API keys. Ask questions directly from your terminal and get AI responses instantly.</p>
<h2 class="wp-block-heading">Features of ai.sh</h2>
<ul class="wp-block-list">
<li><img alt="🚀" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f680.png" style="height: 1em;" /> Simple command-line interface</li>
<li><img alt="🔑" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f511.png" style="height: 1em;" /> Secure API key and model management with <code>.env</code> file</li>
<li><img alt="🎯" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f3af.png" style="height: 1em;" /> Clean output (only the AI response, no JSON clutter)</li>
<li><img alt="💬" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f4ac.png" style="height: 1em;" /> Natural language queries</li>
<li><img alt="🆓" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f193.png" style="height: 1em;" /> Uses free Mistral model by default</li>
<li><img alt="⚡" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/26a1.png" style="height: 1em;" /> Stateless design – each query is independent (no conversation history)</li>
</ul>
<h2 class="wp-block-heading">Important Note</h2>
<p>This tool is designed for <strong>single-question interactions</strong>. Each time you run the script, it sends an independent query to the AI model without any memory of previous conversations. If you need multi-turn conversations with context retention, consider using the OpenRouter web interface or building a more advanced wrapper that maintains conversation history.</p>
<h2 class="wp-block-heading">Prerequisites</h2>
<ul class="wp-block-list">
<li><code>curl</code> (usually pre-installed on most systems)</li>
<li><code>jq</code> for JSON parsing</li>
</ul>
<h3 class="wp-block-heading">Installing jq</h3>
<p><strong>Ubuntu/Debian:</strong></p>
<pre class="wp-block-code"><code>sudo apt install jq</code></pre>
<p><strong>CentOS/RHEL/Fedora:</strong></p>
<pre class="wp-block-code"><code>sudo yum install jq
# or for newer versions:
sudo dnf install jq</code></pre>
<p><strong>macOS:</strong></p>
<pre class="wp-block-code"><code>brew install jq</code></pre>
<p><strong>Windows (WSL):</strong></p>
<pre class="wp-block-code"><code>sudo apt install jq</code></pre>
<h2 class="wp-block-heading">Installation</h2>
<ol class="wp-block-list">
<li><strong>Clone or download this repository:</strong></li>
</ol>
<pre class="wp-block-code"><code> git clone https://github.com/SynergOps/openrouter.ai
cd openrouter.ai</code></pre>
<ol class="wp-block-list" start="2">
<li><strong>Ensure the script is executable:</strong></li>
</ol>
<pre class="wp-block-code"><code> chmod +x ai.sh</code></pre>
<ol class="wp-block-list" start="3">
<li><strong>Get your OpenRouter API key:</strong></li>
</ol>
<ul class="wp-block-list">
<li>Go to <a href="https://openrouter.ai/">OpenRouter.ai</a></li>
<li>Sign up with your Github account for a free account</li>
<li>Navigate to models and then the Mistral Small 3.2 24B (free)</li>
<li>Click API keys section</li>
<li>Generate a new API key</li>
</ul>
<ol class="wp-block-list" start="3">
<li><strong>Configure your API key and model:</strong></li>
</ol>
<ul class="wp-block-list">
<li>while you are in the openrouter folder, edit the <code>.env</code> file template and add your API key:</li>
</ul>
<pre class="wp-block-code"><code> vim .env</code></pre>
<ul class="wp-block-list">
<li>Add your API key and optionally configure the model:</li>
</ul>
<pre class="wp-block-code"><code> # OpenRouter API Configuration
OPENROUTER_API_KEY=sk-or-v1-your-actual-api-key-here
# OpenRouter Model Configuration (optional - leave empty for default)
OPENROUTER_MODEL=</code></pre>
<h2 class="wp-block-heading">Usage</h2>
<h3 class="wp-block-heading">Basic Usage</h3>
<pre class="wp-block-code"><code>./ai.sh your question here</code></pre>
<h3 class="wp-block-heading">Examples</h3>
<pre class="wp-block-code"><code># Ask a simple question
./ai.sh what is the meaning of life
# Ask for coding help
./ai.sh how do I create a function in Python
# Ask for a definition
./ai.sh define recursion
# Ask for a summary
./ai.sh summarize the plot of "The Hitchhiker's Guide to the Galaxy"</code></pre>
<h3 class="wp-block-heading">Sample Output</h3>
<pre class="wp-block-code"><code>$ ./ai.sh what is the meaning of 42
The number 42 is famously known as "The Answer to the Ultimate Question of Life, the Universe, and Everything" from Douglas Adams' science fiction series "The Hitchhiker's Guide to the Galaxy."</code></pre>
<h2 class="wp-block-heading">Creating a Terminal Alias (Recommended)</h2>
<p>For easier access, you can create an alias so you can use the script from anywhere without typing the full path:</p>
<p><strong>Option 1: Temporary alias (current session only)</strong></p>
<pre class="wp-block-code"><code>alias ai='/path/to/your/openrouter.ai/ai.sh'</code></pre>
<p><strong>Option 2: Permanent alias (recommended)</strong></p>
<ol class="wp-block-list">
<li><strong>For Bash users</strong> – Add to your <code>~/.bashrc</code> or <code>~/.bash_profile</code>:</li>
</ol>
<pre class="wp-block-code"><code> cd /path/to/your/openrouter.ai
echo "alias ai='$(pwd)/ai.sh'" &gt;&gt; ~/.bashrc
source ~/.bashrc</code></pre>
<ol class="wp-block-list" start="2">
<li><strong>For Zsh users</strong> – Add to your <code>~/.zshrc</code>:</li>
</ol>
<pre class="wp-block-code"><code> cd /path/to/your/openrouter.ai
echo "alias ai='$(pwd)/ai.sh'" &gt;&gt; ~/.zshrc
source ~/.zshrc</code></pre>
<ol class="wp-block-list" start="3">
<li><strong>Manual method</strong> – Edit your shell config file:</li>
</ol>
<pre class="wp-block-code"><code> # Open your shell config file
nano ~/.bashrc # or ~/.zshrc for Zsh users
# Add this line (replace with your actual path):
alias ai='/full/path/to/openrouter.ai/ai.sh'
# Reload your shell config
source ~/.bashrc # or source ~/.zshrc</code></pre>
<p><strong>After setting up the alias, you can use it from anywhere:</strong></p>
<pre class="wp-block-code"><code># Instead of ./ai.sh question
# Works from any directory
cd ~/Documents
ai explain machine learning</code></pre>
<h2 class="wp-block-heading">Configuration</h2>
<h3 class="wp-block-heading">Changing the AI Model</h3>
<p>You can change the AI model by editing the <code>OPENROUTER_MODEL</code> variable in your <code>.env</code> file:</p>
<pre class="wp-block-code"><code># Leave empty or unset to use the default model
OPENROUTER_MODEL=
# Or specify a different model
OPENROUTER_MODEL=qwen/qwq-32b:free</code></pre>
<p>Popular free models on OpenRouter include:</p>
<ul class="wp-block-list">
<li><code>mistralai/mistral-small-3.2-24b-instruct:free</code> (default)</li>
<li><code>qwen/qwq-32b:free</code></li>
<li><code>deepseek/deepseek-r1-0528:free</code></li>
<li><code>google/gemini-2.0-flash-exp:free</code></li>
</ul>
<p><strong>Note:</strong> If <code>OPENROUTER_MODEL</code> is not set or left empty, the script will use the default Mistral model.</p>
<h2 class="wp-block-heading">License</h2>
<p>This project is licensed under the <a href="https://github.com/SynergOps/openrouter.ai#Apache-2.0-1-ov-file">Apache-2.0 license</a> – see the <a href="https://utappia.org/feed/LICENSE">LICENSE</a> file for details.</p>
<h2 class="wp-block-heading">Support</h2>
<p>If you encounter any issues or have questions, please open <a href="https://github.com/SynergOps/openrouter.ai/issues">an issue on GitHub</a>.</p>
<p>Check also, my other projects in<a href="https://utappia.org/downloads/"> the download page</a></p>
<p>The post <a href="https://utappia.org/2025/07/10/ai-terminal-free/">How to use an AI in terminal with free models</a> appeared first on <a href="https://utappia.org">Utappia</a>.</p></description>
<pubDate>Thu, 10 Jul 2025 12:21:18 +0000</pubDate>
</item>
</channel>
</rss>
If you would like to create a banner that links to this page (i.e. this validation result), do the following:
Download the "valid RSS" banner.
Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)
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