CINXE.COM

Planet Ubuntu

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en"> <head> <title>Planet Ubuntu</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="robots" content="index,follow" /> <link rel="stylesheet" type="text/css" href="css/style.css" /> <link rel="alternate" type="application/rss+xml" href="http://planet.ubuntu.com/rss20.xml" title="Planet Ubuntu RSS" /> <link rel="stylesheet" href="stacktack.min.css" /> <link rel="shortcut icon" href="//assets.ubuntu.com/sites/ubuntu/latest/u/img/favicon.ico" /> <script src="//assets.ubuntu.com/sites/ubuntu/latest/u/js/plugins/yui-combined.min.js"></script> <script src="//assets.ubuntu.com/sites/ubuntu/latest/u/js/core.js"></script> <link rel="stylesheet" type="text/css" media="all" href="//fonts.googleapis.com/css?family=Ubuntu:300,400,400italic" /> <link rel="stylesheet" type="text/css" media="screen" href="//assets.ubuntu.com/sites/ubuntu/latest/u/css/global.css" /> <script src="//assets.ubuntu.com/sites/ubuntu/latest/u/js/global.js"></script> </head> <body class="blog"> <script type="text/javascript" src="stacktack.min.js"></script> <div id="wrapper" class="hfeed"> <div id="header"> <div id="orangeHeader"> <h1> <a href="http://planet.ubuntu.com/" title="Planet Ubuntu"><span>Planet Ubuntu</span></a> </h1> </div> </div> <div id="main"> <div id="container"> <div id="content"> <h3 id="todaysDate">March 27, 2025</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/design.png" alt=""> <h2 class="entry-title"><a href="https://ubuntu.com//blog/ubuntu-confidential-vms-now-available-on-google-cloud-a3-with-nvidia-h100-gpus" title="Ubuntu blog">Ubuntu Confidential VMs Now Available on Google Cloud A3 with NVIDIA H100 GPUs</a></h2> <h3>Ubuntu Blog</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <p>Organizations are racing to harness the transformative power of AI, but sensitive data privacy and model security remain critical roadblocks. What if you could unlock the full potential of AI without compromising your most valuable assets?</p> <p>Canonical is thrilled to announce the availability of Ubuntu Confidential VMs on Google Cloud’s accelerator-optimized A3 machine series, featuring the groundbreaking <a href="https://www.nvidia.com/en-us/data-center/h100/?ncid=so-link-915436-vt04#cid=hpc09_so-link_en-us">NVIDIA H100 Tensor Core GPUs</a>. This powerful combination brings a new level of secure and high-performance AI computing to the cloud, enabling you to confidently tackle previously impossible use cases.  <a href="https://console.cloud.google.com/compute/instancesAdd?imageId=736140715991925607&amp;imageProjectId=ubuntu-os-accelerator-images">Ubuntu</a> is the only operating system to support Confidential GPU on Google Cloud.</p> <h1 class="wp-block-heading"><strong>Why Confidential AI Matters</strong></h1> <p>As AI permeates every industry, the need to protect sensitive data and proprietary models becomes paramount. Whether it’s fine-tuning large language models (LLMs) with private customer data, collaborating with multiple untrusted parties on healthcare research, or deploying cutting-edge AI services while safeguarding intellectual property, traditional cloud environments simply fall short.</p> <p>Confidential AI, powered by the convergence of hardware-based Trusted Execution Environments (TEEs) and cutting-edge GPU technology, provides the answer. Ubuntu Confidential VMs on Google Cloud A3 extend this protection to the entire AI stack, ensuring data privacy and integrity throughout its lifecycle.</p> <figure class="wp-block-image size-full"><img alt="" height="397" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_683,h_397/https://ubuntu.com/wp-content/uploads/0abb/image.png" width="683" /></figure> <h1 class="wp-block-heading">How confidential AI works</h1> <p>Google Cloud’s Confidential AI architecture combines AMD SEV-SNP technology with NVIDIA H100 GPUs to create a robust, confidential computing environment. Data is protected in use, in transit, and at rest through the following mechanisms:</p> <ul> <li><strong>CPU-TEE (AMD SEV-SNP):</strong> Ubuntu confidential VMs running on AMD 4th Gen EPYC processors utilize SEV-SNP to encrypt and protect the entire VM memory space. Hardware-managed keys prevent unauthorized access or modification from outside the TEE.</li> <li><strong>GPU-TEE (NVIDIA H100):</strong> NVIDIA H100 Tensor Core GPUs extend the Trusted Execution Environment to GPU-accelerated computations, ensuring data security within the GPU.</li> <li><strong>Encrypted PCIe:</strong> All PCIe traffic between the VM and GPU is encrypted and integrity-protected, mitigating risks associated with hardware-level attacks.</li> <li><strong>Attestation:</strong> Provides cryptographic verification of the CPU and GPU TEEs, ensuring workload integrity and data processing adheres to specified policies.</li> </ul> <h1 class="wp-block-heading"><strong><strong>Ubuntu: The Secure Foundation</strong></strong></h1> <p>Our collaboration with Google Cloud and NVIDIA delivers a truly groundbreaking solution:</p> <ul> <li>Accelerator Optimized Ubuntu 24.04 LTS and Ubuntu 22.04 LTS, known for their security and stability, power these confidential VMs on Google Cloud, providing a trusted and reliable foundation for your sensitive AI applications.</li> <li>We recommend using <a href="https://ubuntu.com/gcp/pro">Ubuntu Pro</a> for its extended security maintenance of 12 years and additional enterprise-grade capabilities. These features ensure a more comprehensive security posture for your sensitive workloads.</li> </ul> <h1 class="wp-block-heading"><strong>Key Benefits:</strong></h1> <ul> <li><strong>Enhanced Security:</strong> Protect your sensitive data and proprietary models from unauthorized access, manipulation, or reverse engineering. </li> <li><strong>Expanded Use Cases:</strong> Unlock new opportunities for secure AI in regulated industries like healthcare, finance, and government.</li> <li><strong>Accelerated Innovation:</strong> Collaborate confidently with partners and competitors without compromising data privacy.</li> <li><strong>Simplified Compliance:</strong> Meet stringent regulatory requirements and demonstrate verifiable compliance with data protection laws.</li> <li><strong>Seamless Integration:</strong> The CUDA driver and GPU firmware handle encryption transparently, maintaining performance and ease of use. NVIDIA Blackwell architecture will provide nearly identical performance and be protected with NVIDIA Confidential Computing with strong guarantees.</li> </ul> <h1 class="wp-block-heading"><strong>Unlocking New Possibilities Across Industries</strong></h1> <p>Ubuntu Confidential VMs with NVIDIA H100 GPUs on Google Cloud A3 unlocks a wide range of use cases:</p> <ul> <li><strong>Healthcare:</strong> Securely train AI models on sensitive patient data to improve diagnoses and treatment outcomes.</li> <li><strong>Finance:</strong> Detect fraud and assess risk using AI while ensuring the confidentiality of financial data.</li> <li><strong>Drug Discovery:</strong> Collaborate securely with research partners to accelerate the development of new drugs and therapies.</li> <li><strong>AI Chatbots:</strong> Give chatbot users additional assurances that their queries are not visible to anyone besides themselves.</li> </ul> <h1 class="wp-block-heading">Getting Started Today</h1> <p>Ready to experience the power of Confidential AI with Ubuntu? <a href="https://ubuntu.com/gcp/contact-us">Contact us</a> today to explore how this transformative solution can help you unlock new possibilities while safeguarding your most valuable assets.</p> <h1 class="wp-block-heading">Further reading</h1> <ul> <li><a href="https://canonical.com/blog/what-is-confidential-computing-a-high-level-explanation-for-cisos">Read our blog post: “What is confidential computing? A high-level explanation for CISOs”</a></li> <li><a href="https://canonical.com/blog/confidential-computing-in-public-clouds-isolation-and-remote-attestation-explained">Read our blog post:“Confidential computing in public clouds: isolation and remote attestation explained</a></li> </ul> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://ubuntu.com//blog/ubuntu-confidential-vms-now-available-on-google-cloud-a3-with-nvidia-h100-gpus"> on March 27, 2025 10:50 PM</a></span> </div> </div><!-- .post --> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/lubuntublog.png" alt=""> <h2 class="entry-title"><a href="https://lubuntu.me/plucky-beta/" title="Lubuntu">Lubuntu Plucky Puffin Beta Released!</a></h2> <h3>Lubuntu Blog</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> Thanks to the hard work of our contributors, we are happy to announce the release of Lubuntu's Plucky Beta, which will become Lubuntu 25.04. This is a snapshot of the daily images. Approximately two months ago, we posted an Alpha-level update. While some information is duplicated below, that contains an accurate, concise technical summary of […] <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://lubuntu.me/plucky-beta/"> on March 27, 2025 09:02 PM</a></span> </div> </div><!-- .post --> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/kubuntu.png" alt=""> <h2 class="entry-title"><a href="https://kubuntu.org/news/kubuntu-plucky-puffin-25-04-beta-released/" title="News – Kubuntu">Kubuntu Plucky Puffin (25.04) Beta released</a></h2> <h3>Kubuntu General News</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <p id="block-14926ea1-8934-4a9d-a6d4-1e5a4dc2385c"><br />The beta of Kubuntu Plucky Puffin (to become 25.04 in April) has now been released, and is available for<strong> <a href="http://cdimage.ubuntu.com/kubuntu/releases/25.04/beta/">download</a>.</strong></p> <p id="block-340c98c0-df05-4300-9959-2a00031b46fe">This milestone features images for Kubuntu and other Ubuntu flavours.</p> <p id="block-57b1b111-6f2e-48ca-a632-948e4e380449">Pre-releases of Kubuntu Plucky Puffin are not recommended for:</p> <ul id="block-e87ca1d1-fc16-40e9-8488-783791f3d7c9"><li>Anyone needing a stable system</li><li>Regular users who are not aware of pre-release issues</li><li>Anyone in a production environment with data or workflows that need to be reliable</li></ul> <p id="block-a7ac8e5a-c0ea-40d6-9935-0801afa87167">They are, however, recommended for:</p> <ul id="block-8af94b9b-f227-43af-b378-0b6114aafd62"><li>Regular users who want to help us test by finding, reporting, and/or fixing bugs</li><li>Kubuntu, KDE, and Qt developers</li><li>Other Ubuntu flavour developers</li></ul> <p id="block-c7f67569-d2dd-4fb4-9bbf-9ea3cfb55d5a">The Beta includes some software updates that are ready for broader testing. However, it is an early set of images, so you should expect some bugs.</p> <p>Highlights include an update to KDE Plasma 6.3.</p> <p id="block-e835eb9d-3f0a-49c2-881a-9cd9def95d55"><strong>We STRONGLY advise testers to read the </strong><a href="https://wiki.ubuntu.com/PluckyPuffin/Beta/Kubuntu"><strong>Kubuntu 25.04 Beta release notes</strong></a><strong> before installing, and in particular the section on ‘<a href="https://wiki.ubuntu.com/PluckyPuffin/Beta/Kubuntu#Known_issues">Known issues’</a>.</strong></p> <p id="block-941105d9-2071-403f-ba5c-68b3cc0c2d65"></p> <p id="block-7fc1f52f-f0ff-4426-94c0-2e291f2e2793">You can also find more information about the entire 25.04 release (base, kernel, graphics etc) in the <a href="https://discourse.ubuntu.com/t/plucky-puffin-release-notes/48687">main Ubuntu Beta release notes</a> and <a href="https://lists.ubuntu.com/archives/ubuntu-announce/2025-March/000309.html">announcement.</a></p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://kubuntu.org/news/kubuntu-plucky-puffin-25-04-beta-released/"> on March 27, 2025 08:47 PM</a></span> </div> </div><!-- .post --> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/sgclark.png" alt=""> <h2 class="entry-title"><a href="https://www.scarlettgatelymoore.dev/kde-snap-updates-kubuntu-beta-testing-life-updates/" title="Open Source Software – Scarlett Gately Moore">KDE Snap updates, Kubuntu Beta testing, Life updates!</a></h2> <h3>Scarlett Gately Moore</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <figure class="wp-block-image size-large"><img alt="" class="wp-image-1857" height="640" src="https://www.scarlettgatelymoore.dev/wp-content/uploads/VirtualBox_Kubuntu-Plucky_27_03_2025_11_41_18-1024x640.png" width="1024" /></figure> <p>Help us Beta test Kubuntu Plucky Puffin!</p> <figure class="wp-block-embed is-type-wp-embed is-provider-kubuntu wp-block-embed-kubuntu"><div class="wp-block-embed__wrapper"> <blockquote class="wp-embedded-content" data-secret="LWNCw61e6C"><a href="https://kubuntu.org/news/kubuntu-plucky-puffin-25-04-beta-released/">Kubuntu Plucky Puffin (25.04) Beta released</a></blockquote> </div></figure> <p><strong>Kubuntu work:</strong></p> <p>Fixed an issue in apparmor preventing QT6 webengine applications from starting.</p> <p>Beta testing!</p> <p><strong>KDE Snaps:</strong></p> <p>Updated Qt6 to 6.8.2</p> <p>Updated Kf6 6.11.0</p> <p>Rolling out 25.04 RC applications! You can find them in the –candidate channel!</p> <p><strong>Life:</strong></p> <p>I have decided to strike out on my own. I can’t take any more rejections! Honestly, I don’t blame them, I wouldn’t want a one armed engineer either. However, I have persevered and accomplished quite a bit with my one arm! So I have decided to take a leap of faith and with your support for open source work and a resurrected side gig of web development I will survive. If you can help sponsor my work, anything at all, even a dollar! I would be eternally grateful. I have several methods to do so:</p> <ul class="wp-block-list"> <li><a href="https://gofund.me/561ae227" rel="noreferrer noopener" target="_blank">GoFundMe</a></li> <li><a href="https://www.patreon.com/c/sgmoore" rel="noreferrer noopener" target="_blank">Patreon</a></li> <li><a href="https://github.com/sponsors/ScarlettGatelyMoore?o=sd&amp;sc=t" rel="noreferrer noopener" target="_blank">Github</a></li> <li><a href="https://donorbox.org/open-source-survival-fund" rel="noreferrer noopener" target="_blank">Donorbox</a></li> </ul> <p>If you want your cool application packaged in a variety of formats please contact me!</p> <p>If you want focused help with an annoying bug, please contact me!</p> <p>Contact me for any and all kinds of help, if I can’t do it, I will say so.</p> <p>Do you need web work? Someone to maintain your website? I can do that too!</p> <p><a data-id="1853" data-type="page" href="https://www.scarlettgatelymoore.dev/portfolio/">Portfolio</a></p> <p>Thank you all for your support in this new adventure!</p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://www.scarlettgatelymoore.dev/kde-snap-updates-kubuntu-beta-testing-life-updates/"> on March 27, 2025 07:20 PM</a></span> </div> </div><!-- .post --> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/ubuntustudio.png" alt=""> <h2 class="entry-title"><a href="https://ubuntustudio.org/2025/03/ubuntu-studio-25-04-beta-released/" title="Planet Ubuntu – Ubuntu Studio">Ubuntu Studio 25.04 Beta Released</a></h2> <h3>Ubuntu Studio</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <div class="wp-block-image"><figure class="aligncenter is-resized"><img alt="" height="223" src="https://ubuntucommunity.s3.us-east-2.amazonaws.com/original/3X/3/e/3e23056a25237ecee946caf83510c35802d33c6c.jpeg" 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.04, codenamed “Plucky Puffin”.</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.04 is released on April 17, 2025.</p> <p>We encourage everyone to try this image and report bugs to improve our final release.</p> <h2 id="block-6ca66e3a-8d42-42a8-a0cf-a8ed86e6025f">Special Notes</h2> <p id="block-708043b1-523e-4fb9-92ca-720e3316371a">The Ubuntu Studio 25.04 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.04/beta/" rel="noreferrer noopener" target="_blank">https://cdimage.ubuntu.com/ubuntustudio/releases/25.0</a><a href="https://cdimage.ubuntu.com/ubuntustudio/releases/25.04/beta/" rel="noreferrer noopener" target="_blank">4/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-04-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.3</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.2.7</li><li>The <strong>Default Panel Icons</strong> are now back. The default panel now populates depending on which applications are available, so that there are never empty icons if you choose the minimal install, and then install one or more of our featured applications. This refresh to the default is done every reboot, so it’s not a live update. Additionally, it must be refreshed manually from the User side either by selecting the Global Theme or removing the panel and adding “Ubuntu Studio Default Panel”.</li><li>While not included in this Beta, <strong>Darktable</strong> will be upgraded to 5.0.0 before final release.</li></ul> <h2 id="block-c3e434c7-367a-4777-b799-a3fd6a35e1b3">Major Package Upgrades</h2> <ul id="block-e855e703-e523-4f63-940a-d1071d6b8dbf"><li><strong>Ardour</strong> version 8.12.0</li><li><strong>Qtractor</strong> version 1.5.3</li><li><strong>Audacity </strong>version 3.7.3</li><li><strong>digiKam</strong> version 8.5.0</li><li><strong>Kdenlive </strong>version 24.12.3</li><li><strong>Krita </strong>version 5.2.9</li><li><strong>GIMP</strong> version 3.0.0</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><a href="https://launchpad.net/bugs/2062402">The installer was supposed to be able to keep the screen from locking, </a>but this will still happen after 15 minutes. Please keep the screen active during installation. As a workaround if you know you will be keeping your machine unattended during installation, press Alt-Space to invoke Krunner (this even works from the Install Ubuntu Studio versus the Try Ubuntu Studio live environment) and type “System Settings”. From there, search for “Screen Locking” and deactivate “Lock automatically after…”.<br /><br />Another possible workaround is to click on “Switch User” and then re-login as “Live User” without a password if this happens.<br /></li><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>The Installer background and slideshow still show the Oracular Oriole mascot. This is work in progress, to be fixed in a daily release sometime between now and final release.</li></ul> <p id="block-cac00ac7-cbaa-4df0-a2b1-579dfba8e8a8">Official Ubuntu Studio release notes can be found at <a href="https://discourse.ubuntu.com/t/ubuntu-studio-25-04-release-notes/">https://discourse.ubuntu.com/t/ubuntu-studio-25-04-release-notes/</a></p> <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/PluckyPuffin/ReleaseNotes/Kubuntu">https://wiki.ubuntu.com/PluckyPuffin/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/plucky-puffin-release-notes/">https://discourse.ubuntu.com/t/plucky-puffin-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 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 this cycle in order for the maintainers to 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.<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. However, if Audacity returns to the Ubuntu repositories before final release, then you might end-up with a double-installation of Audacity. Removal instructions of one or the other will be made available in a future post.</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> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://ubuntustudio.org/2025/03/ubuntu-studio-25-04-beta-released/"> on March 27, 2025 06:28 PM</a></span> </div> </div><!-- .post --> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/faizul.png" alt=""> <h2 class="entry-title"><a href="https://hamradio.my/2025/03/how-to-install-the-latest-chirp-on-ubuntu/" title="ubuntu - Hamradio.my">How to Install the Latest CHIRP on Ubuntu</a></h2> <h3>Faizul "Piju" 9M2PJU</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <h1 class="wp-block-heading" id="h-"></h1> <p>CHIRP is a powerful open-source tool for programming amateur radios, supporting brands like Baofeng, Kenwood, and Yaesu. With the transition from <code>chirp-daily</code> to <code>chirp-next</code>, Ubuntu users need a new approach to install the latest version. This guide provides a step-by-step method to install CHIRP, configure dependencies, and troubleshoot common issues.</p> <hr class="wp-block-separator has-alpha-channel-opacity" /> <h2 class="wp-block-heading" id="h-step-1-install-required-dependencies"><strong>Step 1: Install Required Dependencies</strong></h2> <p>Before installing CHIRP, ensure your system has the necessary dependencies. Open a terminal and execute:</p> <pre class="wp-block-code"><code>sudo apt update &amp;&amp; sudo apt install python3-wxgtk4.0 pipx </code></pre> <ul class="wp-block-list"> <li><code>python3-wxgtk4.0</code>: Provides the graphical components for CHIRP.</li> <li><code>pipx</code>: Ensures a clean and isolated installation of CHIRP.</li> </ul> <hr class="wp-block-separator has-alpha-channel-opacity" /> <h2 class="wp-block-heading" id="h-step-2-download-the-latest-chirp-package"><strong>Step 2: Download the Latest CHIRP Package</strong></h2> <p>The latest CHIRP version is distributed as a Python wheel (<code>.whl</code>). Download it from the official CHIRP website:</p> <ol class="wp-block-list"> <li>Visit: <strong><a href="https://archive.chirpmyradio.com/chirp_next">https://archive.chirpmyradio.com/chirp_next</a></strong></li> <li>Download the most recent <code>chirp-YYYYMMDD-py3-none-any.whl</code> file.</li> <li>Save it to your <code>Downloads</code> folder for easy access.</li> </ol> <p>Alternatively, download it via <code>wget</code>:</p> <pre class="wp-block-code"><code>cd ~/Downloads wget https://archive.chirpmyradio.com/chirp_next/next-20250321/chirp-20250321-py3-none-any.whl </code></pre> <p>(Replace <code>20250321</code> with the latest available version.)</p> <hr class="wp-block-separator has-alpha-channel-opacity" /> <h2 class="wp-block-heading" id="h-step-3-install-chirp-using-pipx"><strong>Step 3: Install CHIRP Using Pipx</strong></h2> <p>With the <code>.whl</code> file downloaded, install CHIRP via <code>pipx</code>:</p> <pre class="wp-block-code"><code>pipx install --system-site-packages ~/Downloads/chirp-20250321-py3-none-any.whl </code></pre> <p>(Ensure you use the correct file name for your version.)</p> <p>After installation, CHIRP should be available system-wide.</p> <p>To add a shortcut for CHIRP to your application menu after installing it via <code>pipx</code>, first create a desktop entry file in the <code>~/.local/share/applications/</code> directory. Open a terminal and run <code>nano ~/.local/share/applications/chirp.desktop</code> to create a new file. In this file, add the following content:</p> <pre class="wp-block-preformatted"><code>[Desktop Entry]<br />Name=CHIRP<br />Comment=Open-source radio programming software<br />Exec=/home/<strong>YOUR_USERNAME</strong>/.local/bin/chirp<br />Icon=chirp<br />Terminal=false<br />Type=Application<br />Categories=Utility;HamRadio;<br /></code></pre> <p>Make sure to replace <code><code>/home/<strong>YOUR_USERNAME</strong>/.local/bin/chirp</code></code> with the correct path to the CHIRP executable. Once the file is created, save it and make it executable by running <code>chmod +x ~/.local/share/applications/chirp.desktop</code>. After that, refresh the application menu by running <code>update-desktop-database ~/.local/share/applications</code> or restarting your desktop environment. Your CHIRP application should now appear in the application menu, ready to launch with a custom shortcut.</p> <hr class="wp-block-separator has-alpha-channel-opacity" /> <h2 class="wp-block-heading" id="h-step-4-ensure-chirp-is-in-your-path"><strong>Step 4: Ensure CHIRP Is in Your PATH</strong></h2> <p>If CHIRP is not recognized as a command, update your PATH:</p> <pre class="wp-block-code"><code>pipx ensurepath </code></pre> <p>Restart your terminal or log out and log back in. You can now run CHIRP using:</p> <pre class="wp-block-code"><code>chirp </code></pre> <hr class="wp-block-separator has-alpha-channel-opacity" /> <h2 class="wp-block-heading" id="h-step-5-configure-serial-port-permissions"><strong>Step 5: Configure Serial Port Permissions</strong></h2> <p>If CHIRP cannot detect your radio, you may need to grant serial port access.</p> <ol class="wp-block-list"> <li>Identify your radio’s device name: <code>dmesg | grep ttyUSB</code> This should return something like <code>/dev/ttyUSB0</code>.</li> <li>Grant access to your user: <code>sudo usermod -a -G $(stat -c %G /dev/ttyUSB0) $USER</code></li> <li>Log out and back in or reboot your system for the changes to take effect.</li> </ol> <hr class="wp-block-separator has-alpha-channel-opacity" /> <p></p> <h2 class="wp-block-heading" id="h-updating-chirp"><strong>Updating CHIRP</strong></h2> <p>To update CHIRP in the future:</p> <ol class="wp-block-list"> <li>Download the latest <code>.whl</code> file.</li> <li>Uninstall the current version: <code>pipx uninstall chirp</code></li> <li>Reinstall using the latest <code>.whl</code> following <strong>Step 3</strong> above.</li> </ol> <hr class="wp-block-separator has-alpha-channel-opacity" /> <h2 class="wp-block-heading" id="h-troubleshooting-common-issues"><strong>Troubleshooting Common Issues</strong></h2> <h3 class="wp-block-heading" id="h-chirp-doesn-t-start">CHIRP Doesn’t Start</h3> <ul class="wp-block-list"> <li>Ensure <code>pipx ensurepath</code> has been executed.</li> <li>Restart your terminal or log out and back in.</li> </ul> <h3 class="wp-block-heading" id="h-serial-port-access-denied">Serial Port Access Denied</h3> <ul class="wp-block-list"> <li>Check user group permissions with: <code>ls -l /dev/ttyUSB0</code></li> <li>Add your user to the required group (e.g., <code>dialout</code> or <code>uucp</code>).</li> </ul> <h3 class="wp-block-heading" id="h-wxpython-or-python-issues">wxPython or Python Issues</h3> <ul class="wp-block-list"> <li>Verify Python version: <code>python3 --version</code></li> <li>Check wxPython installation: <code>python3 -c "import wx; print(wx.__version__)"</code></li> <li>If wxPython is missing or outdated, install it manually: <code>pip3 install -U -f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-20.04 wxPython</code></li> </ul> <figure class="wp-block-image size-large"><img alt="Screenshot-From-2025-03-27-21-34-25-1024x795 How to Install the Latest CHIRP on Ubuntu" class="wp-image-7267" height="795" src="https://hamradio.my/wp-content/uploads/2025/03/Screenshot-From-2025-03-27-21-34-25-1024x795.png" title="" width="1024" /></figure> <hr class="wp-block-separator has-alpha-channel-opacity" /> <h2 class="wp-block-heading" id="h-final-thoughts"><strong>Final Thoughts</strong></h2> <p>By following this guide, you’ll have the latest CHIRP version running smoothly on Ubuntu. Whether you’re programming Baofeng, Kenwood, or other compatible radios, CHIRP simplifies configuration and channel management.</p> <p>Happy radio programming! <img alt="🎙" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f399.png" style="height: 1em;" /><img alt="📡" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f4e1.png" style="height: 1em;" /></p> <p>The post <a href="https://hamradio.my/2025/03/how-to-install-the-latest-chirp-on-ubuntu/">How to Install the Latest CHIRP on Ubuntu</a> appeared first 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> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://hamradio.my/2025/03/how-to-install-the-latest-chirp-on-ubuntu/"> on March 27, 2025 01:39 PM</a></span> </div> </div><!-- .post --> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/design.png" alt=""> <h2 class="entry-title"><a href="https://ubuntu.com//blog/open-source-enterprise-application-security-remains-a-challenge-despite-greater-patching-efforts-idc-research-reveals" title="Ubuntu blog">Open source enterprise application security remains a challenge despite greater patching efforts, IDC research reveals</a></h2> <h3>Ubuntu Blog</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <p>The latest report from the International Data Corporation (IDC) co-sponsored by Canonical and Google Cloud  indicates that 36% of organizations adopt open source to improve development velocity, and 7 in 10 organizations see open source as extremely important to run mission critical workloads. However as open source adoption grows, organizations face increasing difficulty in securing and maintaining their software supply chains. These challenges are compounded by the complexity of modern cloud environments, skill gaps and stringent compliance requirements.</p> <p>The report features insights from 500 participants across the Americas, APAC, Europe, and Middle East, primarily in IT Manager and IT Security Manager/Director roles. The respondents were surveyed on open source security. The report explores how businesses can build resilience by reducing maintenance complexity and automating vulnerability management. In this blog, we will explore key takeaways from the report and how they relate to enterprise application security, offering possible solutions. </p> <a href="https://ubuntu.com/engage/2025-state-of-software-supply-chain"><p class="p-button--positive">Download the report now</p></a> <h2 class="wp-block-heading">Drivers for open source adoption </h2> <figure class="wp-block-image size-full"><img alt="" height="570" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1808,h_570/https://ubuntu.com/wp-content/uploads/6a28/IDC-blog-image-1.png" width="1808" /></figure> <p>Affordability, customizability, innovation, and security drive organizations to adopt open source.</p> <p><strong>Affordability</strong> – 44% of respondents claimed that using open source helps reduce their costs. Use of open source can reduce or eliminate licensing and support fees associated with proprietary software. </p> <p><strong>Customizability</strong> – Open source also allows organizations to modify and adapt the code to fit their specific needs, with 35% of participants recommending open source for customizability. </p> <p><strong>Development Velocity</strong> – With a global community contributing improvements, security patches, and optimizations, organizations can adopt cutting-edge technologies faster.</p> <p><strong>Improving security</strong> – Open source is more transparent than proprietary software, which is why 31% of organizations in the report see it as a means to improve security. As <a href="https://deviq.com/laws/linus-law">Linus’s famous law</a> explains, the more eyeballs you have on something, the more likely it is you’ll be able to spot flaws and security issues as well as collaborate on fixes. </p> <p>However, open source is naturally fragmented, and as a result, organizations consume it from a variety of projects and their dependencies, which come from many different sources. This fragmentation can compound enterprise security challenges, especially as the software stack complexity increases. Without the right auditing tools and governance framework, these challenges are difficult to tackle. </p> <h2 class="wp-block-heading">Enterprise challenges with application security </h2> <h4 class="wp-block-heading">Vulnerability and patching</h4> <p>Vulnerability and patch management has been cited as the number one challenge for software supply chains. 7 in 10 responsible teams spend more than 6 hours per week, on average, on security patching. However the investment is not paying dividends, with only 23% of teams being satisfied or mostly satisfied with their ability to fix vulnerabilities. </p> <p><br />Additionally, applications are often packaged with their dependencies in containers, to help ensure consistency across different environments –  like development, testing, production, etc. Organizations can use containers for their microservices architecture, cloud-native applications, or DevOps workflows. However, the dynamic and intricate nature of containers can also create security challenges in the software supply chain. Managing container security requires continuous monitoring, timely patching, and strict enforcement of best practices and regulations. Around 70% of organizations mandate vulnerability patching for containers within 24 hours of identification, but only 41% are confident in their ability to execute on this policy. Many organizations struggle with limited automation, fragmented tooling, and the sheer volume of security updates required to keep systems protected. Delays in patching leave critical applications exposed to potential exploits, increasing security risks and compliance challenges. </p> <h4 class="wp-block-heading">Compliance burdens</h4> <p>Speaking of compliance, 37% of organizations lack an understanding of how compliance regulations apply to their systems, technologies, and software components. Regulations like FedRAMP, GDPR, and HIPAA create additional complexity for enterprises. Without a clear compliance strategy, businesses risk regulatory fines, security vulnerabilities, and operational inefficiencies. </p> <h4 class="wp-block-heading">Skills shortages</h4> <p>40% of organizations cited a skills shortage as the reason why they lack confidence in securing their environments. As security threats get more complicated, many enterprises struggle to find and retain talent with the expertise needed to manage vulnerabilities, apply fixes, and ensure compliance with regulations. </p> <h4 class="wp-block-heading">Risk mitigation</h4> <p>To mitigate these risks, 9 out of 10 organizations would prefer sourcing software packages from their OS repositories. </p> <figure class="wp-block-image size-full"><img alt="" height="900" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1600,h_900/https://ubuntu.com/wp-content/uploads/2f96/Canonial-Chart_2.jpg" width="1600" /></figure> <p>In practice, however, many pull software from unverified and potentially unmaintained third-party sources – introducing additional security and dependency risks. The lack of a centralized approach to software sourcing increases exposure to supply chain attacks, outdated packages, and inconsistencies in security maintenance. </p> <p>Without proper controls, organizations risk integrating vulnerable components into their environments, making it difficult to ensure the integrity and security of their software stacks.</p> <h2 class="wp-block-heading">Tackling enterprise application security challenges the Ubuntu way</h2> <p>At Canonical, we have spent over 20 years maintaining open source. We understand these challenges and have developed a security maintenance offering around Ubuntu to alleviate these burdens for organizations: <strong>Ubuntu Pro</strong>. </p> <p>Ubuntu Pro is a comprehensive subscription that covers security for both the Operating System (OS) as well as thousands of packages in Ubuntu’s repositories, many of which are commonly used for software development, such as Python, Java, PHP and others. </p> <p>Organizations that develop on Ubuntu can do so with confidence, knowing the OS and the packages offered in Ubuntu are maintained for 10 years (or up to 12 with the Legacy Support add-on). Because we backport the fixes to previous versions of Ubuntu, organizations benefit from stability and fewer headaches when managing dependencies and issues resulting from forced upgrades.  </p> <p>Ubuntu Pro also covers security maintenance for both infrastructure and applications in Canonical’s open source portfolio. This includes OpenStack, Ceph Storage, the Kubernetes offering, and data solutions like Kafka and Postgres, meaning both the underlying infrastructure and applications are maintained. </p> <p>In addition to security maintenance, Ubuntu Pro offers automated patching, hardening and compliance profiles. By ensuring that critical vulnerabilities are addressed quickly and that software dependencies come from vetted sources, Ubuntu Pro helps businesses reduce their operational risk and enhance application security. Our goal is to make security maintenance easy,  just like we made Linux easy to use.</p> <a href="https://ubuntu.com/pro"><p class="p-button--positive">Learn more about Ubuntu Pro</p></a> <a href="https://ubuntu.com/pro/subscribe"><p class="p-button--positive">Get started with a free trial</p></a> <p>To get a summary of how Ubuntu Pro can help you address application security challenges, check out the table below. </p> <figure class="wp-block-table"><table><tbody><tr><td><strong>Challenge</strong></td><td><strong>Ubuntu Pro solution</strong></td></tr><tr><td><strong>Vulnerability management</strong></td><td>Security maintenance for the OS and 36,000+ open source packages, including Python, Php, Ruby, OpenJDK and others. Fast remediation for CVEs</td></tr><tr><td><strong>Patching automation</strong></td><td><strong>Livepatch</strong> for kernel patching while the system runs<strong>Landscape</strong> to automate patching across your estate</td></tr><tr><td><strong>Compliance</strong></td><td><strong>FIPS-certified cryptography</strong><strong>CIS hardening</strong><strong>Common Criteria</strong>Compliance reporting via <strong>Landscape</strong></td></tr><tr><td><strong>Skills shortage</strong></td><td><strong>12-year of </strong> security maintenance from Canonical experts.<strong>24/7 enterprise support with Ubuntu Pro + Support</strong>SLA-backed response times</td></tr></tbody></table>Application security challenges with their Ubuntu Pro solution</figure> <a href="https://ubuntu.com/engage/2025-state-of-software-supply-chain"><p class="p-button--positive">Download the report now</p></a> <h3 class="wp-block-heading">Any questions?</h3> <p><a href="https://ubuntu.com/contact-us/form?product=pro">Get in touch with us.</a></p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://ubuntu.com//blog/open-source-enterprise-application-security-remains-a-challenge-despite-greater-patching-efforts-idc-research-reveals"> on March 27, 2025 09:00 AM</a></span> </div> </div><!-- .post --> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/podcastubuntupt.png" alt=""> <h2 class="entry-title"><a href="https://podcastubuntuportugal.org/e341/" title="Podcast Ubuntu Portugal">E341 Microgramas De Ubuntu Pó</a></h2> <h3>Podcast Ubuntu Portugal</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <p>O Miguel passou a semana a ensebar um Magalhões com as suas mãos gordurosas num teclado peganhento; o Diogo não se lembra de nada do que fez e acordou numa banheira com gelo e um rim a menos. Falámos de compostos orgânicos voláteis, lançamento da Beta do Plucky Puffin, bonitos papéis de parede; os eventos da comunidade no Porto, Aveiro, Sintra e Lisboa; piadas foleiras com Rust, actualidades da Ubports, clientes de Matrix para Ubuntu Touch, bloqueio de navegadores alternativos fora dos grandes monopólios e modas de bigode foleiro.</p> <p>Já sabem: oiçam, subscrevam e partilhem!</p> <ul> <li><a href="https://odet.pt/festival/2025/quem-somos/">https://odet.pt/festival/2025/quem-somos/</a></li> <li><a href="https://www.ikea.com/pt/pt/p/vindstyrka-sensor-de-qualidade-do-ar-smart-00498231/">https://www.ikea.com/pt/pt/p/vindstyrka-sensor-de-qualidade-do-ar-smart-00498231/</a></li> <li><a href="https://pt.wikipedia.org/wiki/Material_particulado">https://pt.wikipedia.org/wiki/Material_particulado</a></li> <li><a href="https://pt.wikipedia.org/wiki/Composto_org%C3%A2nico_vol%C3%A1til">https://pt.wikipedia.org/wiki/Composto_org%C3%A2nico_vol%C3%A1til</a></li> <li><a href="https://pt.wikipedia.org/wiki/Mwene_Nzinga_Mbandi">https://pt.wikipedia.org/wiki/Mwene_Nzinga_Mbandi</a></li> <li><a href="https://discourse.ubuntu.com/t/plucky-puffin-25-04-wallpaper-competition/55539/9">https://discourse.ubuntu.com/t/plucky-puffin-25-04-wallpaper-competition/55539/9</a></li> <li><a href="https://digitalfreedoms.org/en/dfd">https://digitalfreedoms.org/en/dfd</a></li> <li><a href="https://ectl.pt/pt/schedule/2025/">https://ectl.pt/pt/schedule/2025/</a></li> <li><a href="https://clinica.centrolinux.pt">https://clinica.centrolinux.pt</a></li> <li><a href="https://discourse.ubuntu.com/t/ubuntu-desktop-25-04-part-1-the-plucky-roadmap/49621">https://discourse.ubuntu.com/t/ubuntu-desktop-25-04-part-1-the-plucky-roadmap/49621</a> <a href="https://discourse.ubuntu.com/t/ubuntu-25-04-mid-cycle-roadmap/55690">https://discourse.ubuntu.com/t/ubuntu-25-04-mid-cycle-roadmap/55690</a></li> <li><a href="https://ubuntu.com/blog/among-the-waves-plucky-puffin">https://ubuntu.com/blog/among-the-waves-plucky-puffin</a></li> <li><a href="https://discourse.ubuntu.com/t/plucky-puffin-release-schedule/36461">https://discourse.ubuntu.com/t/plucky-puffin-release-schedule/36461</a></li> <li><a href="https://discourse.ubuntu.com/t/carefully-but-purposefully-oxidising-ubuntu/56995">https://discourse.ubuntu.com/t/carefully-but-purposefully-oxidising-ubuntu/56995</a></li> <li><a href="https://discourse.ubuntu.com/t/ubuntu-server-gazette-issue-1-network-online-target-network-time-security-matrix-chat/56135">https://discourse.ubuntu.com/t/ubuntu-server-gazette-issue-1-network-online-target-network-time-security-matrix-chat/56135</a></li> <li><a href="https://lunahq.com/compare">https://lunahq.com/compare</a></li> <li><a href="https://open-store.io/app/cinny.danfro">https://open-store.io/app/cinny.danfro</a></li> <li><a href="https://ubports.com/en/blog/ubports-news-1/post/ubuntu-touch-ota-8-focal-release-3953">https://ubports.com/en/blog/ubports-news-1/post/ubuntu-touch-ota-8-focal-release-3953</a></li> <li><a href="https://www.theregister.com/2025/03/04/cloudflare_blocking_niche_browsers/">https://www.theregister.com/2025/03/04/cloudflare_blocking_niche_browsers/</a></li> <li>LoCo PT: <a href="https://loco.ubuntu.com/teams/ubuntu-pt/">https://loco.ubuntu.com/teams/ubuntu-pt/</a></li> <li>Nitrokey: <a href="https://shop.nitrokey.com/shop?aff_ref=3">https://shop.nitrokey.com/shop?aff_ref=3</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="apoios">Apoios</h3> <p>Podem apoiar o podcast usando os links de afiliados do Humble Bundle, porque ao usarem esses links para fazer uma compra, uma parte do valor que pagam reverte a favor do Podcast Ubuntu Portugal. E podem obter tudo isso com 15 dólares ou diferentes partes dependendo de pagarem 1, ou 8. Achamos que isto vale bem mais do que 15 dólares, pelo que se puderem paguem mais um pouco mais visto que têm a opção de pagar o quanto quiserem. Se estiverem interessados em outros bundles não listados nas notas usem o link <a href="https://www.humblebundle.com/?partner=PUP">https://www.humblebundle.com/?partner=PUP</a> e vão estar também a apoiar-nos.</p> <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>. 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.</p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://podcastubuntuportugal.org/e341/"> on March 27, 2025 12:00 AM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">March 24, 2025</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/fridge.png" alt=""> <h2 class="entry-title"><a href="https://fridge.ubuntu.com/2025/03/24/ubuntu-weekly-newsletter-issue-884/" title="Planet – Ubuntu Fridge">Ubuntu Weekly Newsletter Issue 884</a></h2> <h3>The Fridge</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <p>Welcome to the Ubuntu Weekly Newsletter, <strong>Issue 884 for the week of March 16 – 22, 2025</strong>. The full version of this issue is available <a href="https://discourse.ubuntu.com/t/ubuntu-weekly-newsletter-issue-884/57341">here</a>.</p> <p>In this issue we cover:</p> <ul><li>One Week until Plucky’s Beta</li><li>Ubuntu Stats</li><li>Hot in Support</li><li>LXD: Weekly news #387</li><li>Rocks Public Journal; 2025-03-21</li><li>Other Meeting Reports</li><li>Upcoming Meetings and Events</li><li>Fossasia Summit 2025</li><li>Ubuntu Nepal x Sandbox: Fostering Innovation and Inclusion at a National-Level Hackathon!</li><li>LoCo Events</li><li>Ubuntu Frame Security</li><li>The display bug we can’t fix</li><li>Implementation of ship-live within a squashfs</li><li>Ubuntu Cloud News</li><li>Canonical News</li><li>In the Blogosphere</li><li>In Other News</li><li>Featured Audio and Video</li><li>Updates and Security for Ubuntu 20.04, 22.04, 24.04, and 24.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>Din Mušić – LXD</li><li>Cristovao Cordeiro (cjdc) – Rocks</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/03/24/ubuntu-weekly-newsletter-issue-884/"></a>.</p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://fridge.ubuntu.com/2025/03/24/ubuntu-weekly-newsletter-issue-884/"> on March 24, 2025 08:59 PM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">March 23, 2025</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/faizul.png" alt=""> <h2 class="entry-title"><a href="https://hamradio.my/2025/03/linux-fixed-release-vs-rolling-release-distributions-which-one-is-right-for-you/" title="ubuntu - Hamradio.my">Linux Fixed Release vs. Rolling Release Distributions: Which One is Right for You?</a></h2> <h3>Faizul "Piju" 9M2PJU</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <h1 class="wp-block-heading" id="h-"></h1> <p>Linux distributions come in two main release models: <strong>fixed release</strong> and <strong>rolling release</strong>. Each has its own advantages and drawbacks, making the choice between them dependent on user needs, preferences, and use cases. In this article, we’ll dive into the history of Linux releases, explain both models in detail, provide examples of each, and help you determine which one suits you best.</p> <hr class="wp-block-separator has-alpha-channel-opacity" /> <h2 class="wp-block-heading" id="h-a-brief-history-of-linux-releases">A Brief History of Linux Releases</h2> <p>The Linux operating system was first developed by Linus Torvalds in 1991, and soon after, various distributions (distros) began emerging to make Linux more accessible to users. Early distributions followed a <strong>fixed release cycle</strong>, similar to traditional commercial software, providing stable versions with long-term support.</p> <p>As Linux usage grew, developers and power users sought an alternative release model that allowed them to receive continuous updates without waiting for major version upgrades. This led to the birth of the <strong>rolling release</strong> model, which delivers updates as soon as they are available, without the need for reinstalling or upgrading to a new version.</p> <hr class="wp-block-separator has-alpha-channel-opacity" /> <h2 class="wp-block-heading" id="h-what-is-a-fixed-release-distribution">What is a Fixed Release Distribution?</h2> <p>A <strong>fixed release</strong> distribution follows a structured development cycle, with periodic major releases that bundle all updates, improvements, and new features into one package. These releases are well-tested before being distributed to users.</p> <h3 class="wp-block-heading" id="h-examples-of-fixed-release-distros">Examples of Fixed Release Distros:</h3> <ul class="wp-block-list"> <li><strong>Ubuntu</strong> – Releases a new version every six months, with Long-Term Support (LTS) versions every two years.</li> <li><strong>Debian</strong> – Has three main branches: Stable (fixed release), Testing, and Unstable.</li> <li><strong>Fedora</strong> – Releases a new version approximately every six months.</li> <li><strong>openSUSE Leap</strong> – A stable release that is synchronized with SUSE Linux Enterprise.</li> <li><strong>Linux Mint</strong> – Based on Ubuntu LTS releases, focusing on stability and user-friendliness.</li> </ul> <h3 class="wp-block-heading" id="h-pros-of-fixed-release-distros">Pros of Fixed Release Distros:</h3> <p><img alt="✅" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/2705.png" style="height: 1em;" /> Stable and reliable: Thoroughly tested before release. </p> <p><img alt="✅" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/2705.png" style="height: 1em;" /> Long-term support (LTS versions): Security updates for many years. </p> <p><img alt="✅" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/2705.png" style="height: 1em;" /> Predictable update cycles: Users know when a new version will be available. </p> <p><img alt="✅" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/2705.png" style="height: 1em;" /> Ideal for production environments and enterprises.</p> <h3 class="wp-block-heading" id="h-cons-of-fixed-release-distros">Cons of Fixed Release Distros:</h3> <p><img alt="❌" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/274c.png" style="height: 1em;" /> Software can become outdated between releases. </p> <p><img alt="❌" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/274c.png" style="height: 1em;" /> Requires major upgrades to move to a new version. </p> <p><img alt="❌" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/274c.png" style="height: 1em;" /> May lack the latest features and improvements available in newer software.</p> <hr class="wp-block-separator has-alpha-channel-opacity" /> <h2 class="wp-block-heading" id="h-what-is-a-rolling-release-distribution">What is a Rolling Release Distribution?</h2> <p>A <strong>rolling release</strong> distribution continuously updates packages as soon as they are available, rather than waiting for a scheduled release. This means that the operating system is always up to date without needing periodic major upgrades.</p> <h3 class="wp-block-heading" id="h-examples-of-rolling-release-distros">Examples of Rolling Release Distros:</h3> <ul class="wp-block-list"> <li><strong>Arch Linux</strong> – A minimalist and highly customizable distribution.</li> <li><strong>openSUSE Tumbleweed</strong> – A rolling release counterpart to openSUSE Leap.</li> <li><strong>Gentoo Linux</strong> – Source-based rolling release with maximum flexibility.</li> <li><strong>EndeavourOS</strong> – A user-friendly Arch-based distro.</li> <li><strong>Manjaro</strong> – Based on Arch but with added stability and ease of use.</li> </ul> <h3 class="wp-block-heading" id="h-pros-of-rolling-release-distros">Pros of Rolling Release Distros:</h3> <p><img alt="✅" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/2705.png" style="height: 1em;" /> Always up to date: No need to wait for major releases. </p> <p><img alt="✅" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/2705.png" style="height: 1em;" /> Access to the latest software and kernel versions. </p> <p><img alt="✅" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/2705.png" style="height: 1em;" /> No system reinstallation required to upgrade. <img alt="✅" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/2705.png" style="height: 1em;" /> Ideal for developers and enthusiasts who want cutting-edge software.</p> <h3 class="wp-block-heading" id="h-cons-of-rolling-release-distros">Cons of Rolling Release Distros:</h3> <p><img alt="❌" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/274c.png" style="height: 1em;" /> Can be less stable due to frequent updates. </p> <p><img alt="❌" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/274c.png" style="height: 1em;" /> Updates may occasionally break the system if not managed carefully. </p> <p><img alt="❌" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/274c.png" style="height: 1em;" /> Requires more maintenance and troubleshooting knowledge.</p> <hr class="wp-block-separator has-alpha-channel-opacity" /> <h2 class="wp-block-heading" id="h-fixed-vs-rolling-release-which-one-should-you-choose">Fixed vs. Rolling Release: Which One Should You Choose?</h2> <p>Choosing between a fixed release and a rolling release distribution depends on your needs:</p> <figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Criteria</th><th>Fixed Release</th><th>Rolling Release</th></tr></thead><tbody><tr><td><strong>Stability</strong></td><td>More stable</td><td>Less stable (but up to date)</td></tr><tr><td><strong>Software updates</strong></td><td>Periodic major updates</td><td>Continuous updates</td></tr><tr><td><strong>Ease of use</strong></td><td>Easier, especially for beginners</td><td>Requires more maintenance</td></tr><tr><td><strong>Security</strong></td><td>Long-term security patches</td><td>Security updates arrive faster</td></tr><tr><td><strong>Ideal for</strong></td><td>Enterprises, production environments, beginners</td><td>Developers, power users, enthusiasts</td></tr></tbody></table></figure> <p>If you prefer a stable and predictable system with fewer maintenance requirements, a <strong>fixed release</strong> distribution like Ubuntu LTS, Debian Stable, or Linux Mint is a great choice.</p> <p>If you want cutting-edge software, continuous updates, and don’t mind occasional troubleshooting, a <strong>rolling release</strong> distribution like Arch Linux, Manjaro, or openSUSE Tumbleweed will suit you better.</p> <hr class="wp-block-separator has-alpha-channel-opacity" /> <h2 class="wp-block-heading" id="h-"></h2> <p>Both fixed and rolling release distributions have their place in the Linux ecosystem. Understanding their differences allows you to make an informed choice based on your workflow, experience level, and expectations. Whether you prioritize stability or cutting-edge software, there’s a Linux distribution that fits your needs.</p> <p>The post <a href="https://hamradio.my/2025/03/linux-fixed-release-vs-rolling-release-distributions-which-one-is-right-for-you/">Linux Fixed Release vs. Rolling Release Distributions: Which One is Right for You?</a> appeared first 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> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://hamradio.my/2025/03/linux-fixed-release-vs-rolling-release-distributions-which-one-is-right-for-you/"> on March 23, 2025 05:23 PM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">March 22, 2025</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/lfaraone.png" alt=""> <h2 class="entry-title"><a href="https://blog.luke.wf/2025/02/im-running-for-osi-board-maybe.html" title="Luke W. Faraone">I'm running for the OSI board... maybe</a></h2> <h3>Luke Faraone</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <p>The Open Source Initiative has two classes of board seats: Affiliate seats, and Individual Member seats. </p><p>In the upcoming election, each affiliate can nominate a candidate, and each affiliate can cast a vote for the Affiliate candidates, but there's only 1 Affiliate seat available. I initially expressed interest in being nominated as an Affiliate candidate via Debian. But since <a href="https://ebb.org/bkuhn/">Bradley Kuhn</a> is also running for an Affiliate seat with a similar platform to me, especially with regards to the OSAID, I decided to run as part of an aligned "ticket" as an Individual Member to avoid contention for the 1 Affiliate seat.</p><p>Bradley and I discussed running on a similar ticket around 8/9pm Pacific, and I submitted my candidacy around 9pm PT on 17 February. </p><p>I was dismayed when I received the following mail from <span style="white-space: normal;">Nick Vidal:</span></p><p></p><blockquote><span face="Arial, Helvetica, sans-serif" style="background-color: white; color: #222222; font-size: small;">Dear Luke,</span><br style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;" /><br style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;" /><span face="Arial, Helvetica, sans-serif" style="background-color: white; color: #222222; font-size: small;">Thank you for your interest in the OSI Board of Directors election. Unfortunately, we are unable to accept your application as it was submitted after the official deadline of Monday Feb 17 at 11:59 pm UTC. To ensure a fair process,<b> we must adhere to the deadline for all candidates.</b></span><br style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;" /><br style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;" /><span face="Arial, Helvetica, sans-serif" style="background-color: white; color: #222222; font-size: small;">We appreciate your enthusiasm and encourage you to stay engaged with OSI’s mission. We hope you’ll consider applying in the future or contributing in other meaningful ways.</span><br style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;" /><br style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;" /><span face="Arial, Helvetica, sans-serif" style="background-color: white; color: #222222; font-size: small;">Best regards,</span><br style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;" /><span face="Arial, Helvetica, sans-serif" style="background-color: white; color: #222222; font-size: small;">OSI Election Teams</span></blockquote><p>Nowhere on the <a href="https://opensource.org/blog/osis-board-of-directors-in-2025-details-about-the-elections">"OSI’s board of directors in 2025: details about the elections"</a> page do they list a timezone for closure of nominations; they simply list Monday 17 February. </p><p>The OSI's contact address is in California, so it seems arbitrary and capricious to retroactively define all of these processes as being governed by UTC.</p><p>I was not able to participate in the "potential board director" info sessions accordingly, but people who attended heard that the importance of accommodating differing TZ's was discussed during the info session, and that OSI representatives mentioned they try to accommodate TZ's of everyone. This seems in sharp contrast with the above policy. </p><p>I urge the OSI to reconsider this policy and allow me to stand for an Individual seat in the current cycle. </p><p><b>Upd</b>, N.B.: to people writing about this, I use they/them pronouns</p><p></p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://blog.luke.wf/2025/02/im-running-for-osi-board-maybe.html"> on March 22, 2025 04:30 PM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">March 20, 2025</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/podcastubuntupt.png" alt=""> <h2 class="entry-title"><a href="https://podcastubuntuportugal.org/e340/" title="Podcast Ubuntu Portugal">E340 PATA Na Poça</a></h2> <h3>Podcast Ubuntu Portugal</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <p>Depois de sobreviverem por milagre, os anfitriões voltam cheios de novidades. O Miguel descobriu o formato PATA-com-fitinha na dissecação de um Magalhães; continua a campanha de solidariedade «vamos ajudar o Miguel a descobrir uma Caixa Mágica» com bonitas canções; o Diogo voltou do ESPECTACULAR primeiro Festival de Tecnologia Popular, organizado pela Odet em Setúbal e traz-nos um relato do evento; e provavelmente vai dedicar-se à medicina veterinária, com a abertura de uma Clínica de Linux. E como não podia deixar de ser, malhámos forte e feio no Firefox e nas trapalhadas da Mozilla - vamos precisar do patrocínio de um remédio para a azia e inibidores de ácido gama-aminobutírico.</p> <p>Já sabem: oiçam, subscrevam e partilhem!</p> <ul> <li><a href="https://odet.pt/festival/2025/">https://odet.pt/festival/2025/</a></li> <li><a href="https://clinica.centrolinux.pt">https://clinica.centrolinux.pt</a></li> <li><a href="https://ectl.pt/pt/schedule/2025/">https://ectl.pt/pt/schedule/2025/</a></li> <li><a href="https://en.wikipedia.org/wiki/Parallel_ATA">https://en.wikipedia.org/wiki/Parallel_ATA</a></li> <li><a href="https://pleroma.envs.net/objects/4e303506-e2d4-4782-8bdc-a31c832fe410">https://pleroma.envs.net/objects/4e303506-e2d4-4782-8bdc-a31c832fe410</a></li> <li><a href="https://github.com/mozilla/bedrock/commit/d459addab846d8144b61939b7f4310eb80c5470e">https://github.com/mozilla/bedrock/commit/d459addab846d8144b61939b7f4310eb80c5470e</a></li> <li>LoCo PT: <a href="https://loco.ubuntu.com/teams/ubuntu-pt/">https://loco.ubuntu.com/teams/ubuntu-pt/</a></li> <li>Nitrokey: <a href="https://shop.nitrokey.com/shop?aff_ref=3">https://shop.nitrokey.com/shop?aff_ref=3</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="apoios">Apoios</h3> <p>Podem apoiar o podcast usando os links de afiliados do Humble Bundle, porque ao usarem esses links para fazer uma compra, uma parte do valor que pagam reverte a favor do Podcast Ubuntu Portugal. E podem obter tudo isso com 15 dólares ou diferentes partes dependendo de pagarem 1, ou 8. Achamos que isto vale bem mais do que 15 dólares, pelo que se puderem paguem mais um pouco mais visto que têm a opção de pagar o quanto quiserem. Se estiverem interessados em outros bundles não listados nas notas usem o link <a href="https://www.humblebundle.com/?partner=PUP">https://www.humblebundle.com/?partner=PUP</a> e vão estar também a apoiar-nos.</p> <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>. 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.</p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://podcastubuntuportugal.org/e340/"> on March 20, 2025 12:00 AM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">March 18, 2025</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/fridge.png" alt=""> <h2 class="entry-title"><a href="https://fridge.ubuntu.com/2025/03/17/welcome-to-the-ubuntu-weekly-newsletter-883/" title="Planet – Ubuntu Fridge">Ubuntu Weekly Newsletter Issue 883</a></h2> <h3>The Fridge</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <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 883 for the week of March 9 – 15, 2025</strong>. The full version of this issue is available <a href="https://discourse.ubuntu.com/t/ubuntu-weekly-newsletter-issue-883/56861">here</a>.</p> <p>In this issue we cover:</p> <ul><li>Ubuntu Stats</li><li>Hot in Support</li><li>LXD: Weekly news #386</li><li>Other Meeting Reports</li><li>Upcoming Meetings and Events</li><li>UbuCon Europe @ OpenSouthCode 2025</li><li>Day 1 Highlight and event report from FOSSASIA</li><li>LoCo Events</li><li>Carefully But Purposefully Oxidising Ubuntu</li><li>Waiting for a Linux system to be online</li><li>LXD 6.3 has been released</li><li>Among the waves: Plucky Puffin</li><li>Other Community News</li><li>Ubuntu Cloud News</li><li>Canonical News</li><li>In the Blogosphere</li><li>Featured Audio and Video</li><li>Updates and Security for Ubuntu 20.04, 22.04, 24.04, and 24.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>Din Mušić – LXD</li><li>Simon Quigley (tsimonq2)</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/03/17/welcome-to-the-ubuntu-weekly-newsletter-883/"></a>.</p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://fridge.ubuntu.com/2025/03/17/welcome-to-the-ubuntu-weekly-newsletter-883/"> on March 18, 2025 12:21 AM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">March 15, 2025</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/sgclark.png" alt=""> <h2 class="entry-title"><a href="https://www.scarlettgatelymoore.dev/kde-snaps-fixed-thank-you-for-your-support/" title="Open Source Software – Scarlett Gately Moore">KDE snaps fixed, Thank you for your support</a></h2> <h3>Scarlett Gately Moore</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <div class="wp-block-image"> <figure class="aligncenter size-full"><img alt="KDE Mascot" class="wp-image-232" height="500" src="https://www.scarlettgatelymoore.dev/wp-content/uploads/300px-Mascot_20140702_konqui-group.png" width="300" />KDE Mascot</figure></div> <p>Thank you everyone for keeping the lights on for a bit longer. KDE snaps have been restored. I also released 24.12.3! In addition, I have moved “most” snaps to core24. The remaining snaps need newer qt6/kf6, which is a WIP. “The Bad luck girl” has been hit once again with another loss, so with that, I will be reducing my hours on snaps while I consider my options for my future. I am still around, just a bit less. </p> <p>Thanks again everyone, if you can get me through one more ( lingering broken arm ) surgery I would be forever grateful! <a href="https://gofund.me/d5d59582">https://gofund.me/d5d59582</a></p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://www.scarlettgatelymoore.dev/kde-snaps-fixed-thank-you-for-your-support/"> on March 15, 2025 12:52 PM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">March 03, 2025</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/stgraber.png" alt=""> <h2 class="entry-title"><a href="https://stgraber.org/2025/03/03/announcing-incus-6-10/" title="Planet Ubuntu – Stéphane Graber's website">Announcing Incus 6.10</a></h2> <h3>St&eacute;phane Graber</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <p>The Incus team is pleased to announce the release of Incus 6.10!</p> <p>This release brings in an easier way to run Incus on a valid HTTPS certificate, a new way to send through provisioning data to VMs, a very welcome API enhancement and much more!</p> <figure class="wp-block-image size-full"><a href="https://linuxcontainers.org/incus/try-it/"><img alt="" class="wp-image-1713" height="280" src="https://stgraber.org/wp-content/uploads/2025/03/Screenshot-from-2025-02-28-12-20-26.png" width="659" /></a></figure> <p>The highlights for this release are:</p> <ul class="wp-block-list"> <li>ACME DNS-01 validation (Let’s Encrypt)</li> <li>API wide filtering support</li> <li>Support for SMBIOS11 provisioning in VMs</li> <li>IOMMU support in VMs</li> <li>VRF support for routed NICs</li> <li>Creating profiles in a project through preseed</li> <li>LZ4 support for backups and images</li> </ul> <p><strong>NOTE:</strong> A bugfix release has been made available fixing a few regressions from the original 6.10 release. This is available as 6.10.1.</p> <p>The full announcement and changelog can be <a href="https://discuss.linuxcontainers.org/t/incus-6-10-has-been-released/23077" 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> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://stgraber.org/2025/03/03/announcing-incus-6-10/"> on March 03, 2025 10:54 PM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">March 02, 2025</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/cjwatson.png" alt=""> <h2 class="entry-title"><a href="https://www.chiark.greenend.org.uk/~cjwatson/blog/activity-2025-02.html" title="Colin Watson's blog - planet-ubuntu">Free software activity in February 2025</a></h2> <h3>Colin Watson</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <p>Most 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>.</p> <h2>OpenSSH</h2> <p>OpenSSH upstream released <a href="https://www.openssh.com/releasenotes.html#9.9p2">9.9p2</a> with fixes for <span class="caps">CVE</span>-2025-26465 and <span class="caps">CVE</span>-2025-26466. I got a heads-up on this in advance from the Debian security team, and prepared updates for all of testing/unstable, bookworm (Debian 12), bullseye (Debian 11), buster (Debian 10, <span class="caps">LTS</span>), and stretch (Debian 9, <span class="caps">ELTS</span>). jessie (Debian 8) is also still in <span class="caps">ELTS</span> for a few more months, but wasn’t affected by either vulnerability.</p> <p>Although I’m not particularly active in the Perl team, I fixed a <a href="https://bugs.debian.org/1096245">libnet-ssleay-perl build failure</a> because it was blocking openssl from migrating to testing, which in turn was blocking the above openssh fixes.</p> <p>I also sent a minor <a href="https://bugzilla.mindrot.org/show_bug.cgi?id=3788"><code>sshd -T</code> fix</a> upstream, simplified a number of autopkgtests using the newish <a href="https://bugs.debian.org/906424"><code>Restrictions: needs-sudo</code></a> facility, and prepared for <a href="https://bugs.debian.org/1098760">removing the obsolete <code>slogin</code> symlink</a>.</p> <h2>PuTTY</h2> <p>I upgraded to the <a href="https://www.chiark.greenend.org.uk/~sgtatham/putty/">new upstream version 0.83</a>.</p> <h2><span class="caps">GCC</span> 15 build failures</h2> <p>I fixed build failures with <a href="https://gcc.gnu.org/gcc-15/porting_to.html"><span class="caps">GCC</span> 15</a> in a few packages:</p> <ul> <li><a href="https://bugs.debian.org/1096829">icoutils</a> (<a href="https://savannah.nongnu.org/bugs/index.php?66812">contributed upstream</a>)</li> <li><a href="https://bugs.debian.org/1096891">kali</a></li> <li><a href="https://bugs.debian.org/1097550">parted</a></li> <li><a href="https://bugs.debian.org/1097681">python-setproctitle</a></li> <li><a href="https://bugs.debian.org/1098064">vigor</a></li> </ul> <h2>Python team</h2> <p>A lot of my Python team work is driven by its <a href="https://udd.debian.org/dmd/?email1=team%2Bpython%40tracker.debian.org&amp;nosponsor1=on&amp;email2=&amp;email3=&amp;packages=&amp;ignpackages=&amp;format=html&amp;onlytesting=on">maintainer dashboard</a>. Now that we’ve finished the transition to Python 3.13 as the default version, and inspired by a recent <a href="https://lists.debian.org/debian-devel/2025/02/msg00134.html">debian-devel thread started by Santiago</a>, I thought it might be worth spending a bit of time on the “uscan error” section. <a href="https://wiki.debian.org/debian/watch"><code>uscan</code></a> is typically scraping upstream web sites to figure out whether new versions are available, and so it’s easy for its configuration to become outdated or broken. Most of this work is pretty boring, but it can often reveal situations where we didn’t even realize that a Debian package was out of date. I fixed these packages:</p> <ul> <li>cssutils (this in particular was very out of date due to a new and active upstream maintainer since 2021)</li> <li>django-assets</li> <li>django-celery-email</li> <li>django-sass</li> <li>django-yarnpkg</li> <li>json-tricks</li> <li>mercurial-extension-utils</li> <li>pydbus</li> <li>pydispatcher</li> <li>pylint-celery</li> <li>pyspread</li> <li>pytest-pretty</li> <li>python-apptools</li> <li>python-django-libsass (<a href="https://github.com/torchbox/django-libsass/pull/59">contributed a packaging fix upstream</a> in passing)</li> <li>python-django-postgres-extra</li> <li>python-django-waffle</li> <li>python-ephemeral-port-reserve</li> <li>python-ifaddr</li> <li>python-log-symbols</li> <li>python-msrest</li> <li>python-msrestazure</li> <li>python-netdisco</li> <li>python-pathtools</li> <li>python-user-agents</li> <li>sinntp</li> <li>wchartype</li> </ul> <p>I upgraded these packages to new upstream versions:</p> <ul> <li>cssutils (<a href="https://github.com/jaraco/cssutils/pull/62">contributed a packaging tweak upstream</a>)</li> <li>django-iconify</li> <li>django-sass</li> <li>domdf-python-tools</li> <li>extra-data (fixing a <a href="https://bugs.debian.org/1095343">numpy 2.0 failure</a>)</li> <li>flufl.i18n</li> <li>json-tricks</li> <li>jsonpickle</li> <li>mercurial-extension-utils</li> <li>mod-wsgi</li> <li>nbconvert</li> <li>orderly-set</li> <li>pydispatcher (<a href="https://github.com/mcfletch/pydispatcher/pull/9">contributed a Python 3.12 fix upstream</a>)</li> <li>pylint</li> <li>pytest-rerunfailures</li> <li>python-asyncssh</li> <li>python-box (<a href="https://github.com/cdgriffith/Box/pull/290">contributed a packaging fix upstream</a>)</li> <li>python-charset-normalizer</li> <li>python-django-constance</li> <li>python-django-guid</li> <li>python-django-pgtrigger</li> <li>python-django-waffle</li> <li>python-djangorestframework-simplejwt</li> <li>python-formencode</li> <li>python-holidays (<a href="https://github.com/vacanza/holidays/pull/2273">contributed a test fix upstream</a>)</li> <li>python-legacy-cgi</li> <li>python-marshmallow-polyfield (fixing a <a href="https://bugs.debian.org/1098600">test failure</a>)</li> <li>python-model-bakery</li> <li>python-mrcz (fixing a <a href="https://bugs.debian.org/1095373">numpy 2.0 failure</a>)</li> <li>python-netdisco</li> <li>python-npe2</li> <li>python-persistent</li> <li>python-pkginfo (fixing a <a href="https://bugs.debian.org/1098603">test failure</a>)</li> <li>python-proto-plus</li> <li>python-requests-ntlm</li> <li>python-roman</li> <li>python-semantic-release</li> <li>python-setproctitle</li> <li>python-stdlib-list</li> <li>python-trustme</li> <li>python-typeguard (fixing a <a href="https://bugs.debian.org/1098615">test failure</a>)</li> <li>python-tzlocal</li> <li>pyzmq</li> <li>setuptools-scm</li> <li>sqlfluff</li> <li>stravalib</li> <li>tomopy</li> <li>trove-classifiers</li> <li>xhtml2pdf (fixing <a href="https://bugs.debian.org/1084986"><span class="caps">CVE</span>-2024-25885</a>)</li> <li>xonsh</li> <li>zodbpickle</li> <li>zope.deprecation</li> <li>zope.testrunner</li> </ul> <p>In bookworm-backports, I updated python-django to 3:4.2.18-1 (issuing <a href="https://backports.debian.org/news/BSA-121_Security_Update_for_python-django/"><span class="caps">BSA</span>-121</a>) and added new backports of python-django-dynamic-fixture and python-django-pgtrigger, all of which are dependencies of <a href="https://freexian-team.pages.debian.net/debusine/">debusine</a>.</p> <p>I went through all the build failures related to python-click 8.2.0 (which was confusingly <a href="https://github.com/pallets/click/pull/2844">tagged but not fully released upstream</a> and posted an <a href="https://bugs.debian.org/1098507#17">analysis</a>.</p> <p>I fixed or helped to fix various other build/test failures:</p> <ul> <li><a href="https://bugs.debian.org/1095084">cython</a></li> <li><a href="https://bugs.debian.org/1095019">dask</a></li> <li><a href="https://bugs.debian.org/1095339">deepdish</a></li> <li><a href="https://bugs.debian.org/1094905">hickle</a> (<a href="https://github.com/telegraphic/hickle/pull/186">contributed upstream</a>)</li> <li><a href="https://bugs.debian.org/1095356">mdp</a> (<a href="https://github.com/mdp-toolkit/mdp-toolkit/pull/105">contributed upstream</a>)</li> <li><a href="https://bugs.debian.org/1098578">mypy</a></li> <li><a href="https://bugs.debian.org/1094040">pillow</a></li> <li><a href="https://bugs.debian.org/1098590">pynput</a></li> <li><a href="https://bugs.debian.org/1094085">python-fonticon-fontawesome6</a></li> <li><a href="https://bugs.debian.org/1098602">python-persistent</a> (<a href="https://github.com/zopefoundation/persistent/pull/214">contributed upstream</a>)</li> <li><a href="https://bugs.debian.org/1056874">python-srsly</a></li> </ul> <p>I <a href="https://github.com/zopefoundation/zope.testrunner/pull/192">dropped support for the old <code>setup.py ftest</code> command</a> from zope.testrunner upstream.</p> <p>I fixed various odds and ends of bugs:</p> <ul> <li><a href="https://bugs.debian.org/974455">django-memoize: autopkgtest must be marked superficial</a></li> <li><a href="https://bugs.debian.org/1035135">extra-data: extra-data: please add autopkgtests (to add coverage for python3-numpy)</a></li> <li><a href="https://bugs.debian.org/1094910">fpylll: missing dependency on numpy abi</a></li> <li><a href="https://bugs.debian.org/974492">python-box: autopkgtest must be marked superficial</a></li> <li><a href="https://bugs.debian.org/1095284">python-hdmedians: missing dependency on numpy abi</a></li> <li><a href="https://bugs.debian.org/1094317">python-legacy-cgi: missing requirement: openstack-pkg-tools</a></li> <li><a href="https://bugs.debian.org/1063372">python-tzlocal: doesn’t run any tests during the build or as autopkgtest</a></li> <li><a href="https://bugs.debian.org/1091503">requests: will <span class="caps">FTBFS</span> during trixie support period</a> (<a href="https://github.com/psf/requests/pull/6897">contributed supporting fix upstream</a>)</li> <li><a href="https://bugs.debian.org/1096004">setuptools-scm: project was renamed from <code>setuptools_scm</code> to <code>setuptools-scm</code></a></li> </ul> <h2>Installer team</h2> <p>Following up on <a href="https://www.chiark.greenend.org.uk/~cjwatson/blog/activity-2025-01.html">last month</a>, I merged and uploaded <a href="https://salsa.debian.org/installer-team/debian-installer-utils/-/merge_requests/11">Helmut’s <code>/usr</code>-move fix</a>.</p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://www.chiark.greenend.org.uk/~cjwatson/blog/activity-2025-02.html"> on March 02, 2025 01:49 PM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">February 23, 2025</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/cjwatson.png" alt=""> <h2 class="entry-title"><a href="https://www.chiark.greenend.org.uk/~cjwatson/blog/qalculate-time-hacks.html" title="Colin Watson's blog - planet-ubuntu">Qalculate time hacks</a></h2> <h3>Colin Watson</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <p>Anarcat recently <a href="https://anarc.at/blog/2025-02-08-qalculate-hacks/">wrote</a> about <a href="https://qalculate.github.io/">Qalculate</a>, and I think I’m a convert, even though I’ve only barely scratched the surface.</p> <p>The thing I almost immediately started using it for is time calculations. When I <a href="https://www.chiark.greenend.org.uk/~cjwatson/blog/task-management.html">started tracking my time</a>, I quickly found that <a href="https://timewarrior.net/">Timewarrior</a> was good at keeping all the data I needed, but I often found myself extracting bits of it and reprocessing it in variously clumsy ways. For example, I often don’t finish a task in one sitting; maybe I take breaks, or I switch back and forth between a couple of different tasks. The raw output of <code>timew summary</code> is a bit clumsy for this, as it shows each chunk of time spent as a separate row:</p> <pre class="m-console"><span class="gp">$ </span>timew<span class="w"> </span>summary<span class="w"> </span><span class="m">2025</span>-02-18<span class="w"> </span>Debian <span class="go">Wk Date Day Tags Start End Time Total</span> <span class="go">W8 2025-02-18 Tue CVE-2025-26465, Debian, 9:41:44 10:24:17 0:42:33</span> <span class="go"> next, openssh</span> <span class="go"> Debian, FTBFS with GCC-15, 10:24:17 10:27:12 0:02:55</span> <span class="go"> icoutils</span> <span class="go"> Debian, FTBFS with GCC-15, 11:50:05 11:57:25 0:07:20</span> <span class="go"> kali</span> <span class="go"> Debian, Upgrade to 0.67, 11:58:21 12:12:41 0:14:20</span> <span class="go"> python_holidays</span> <span class="go"> Debian, FTBFS with GCC-15, 12:14:15 12:33:19 0:19:04</span> <span class="go"> vigor</span> <span class="go"> Debian, FTBFS with GCC-15, 12:39:02 12:39:38 0:00:36</span> <span class="go"> python_setproctitle</span> <span class="go"> Debian, Upgrade to 1.3.4, 12:39:39 12:46:05 0:06:26</span> <span class="go"> python_setproctitle</span> <span class="go"> Debian, FTBFS with GCC-15, 12:48:28 12:49:42 0:01:14</span> <span class="go"> python_setproctitle</span> <span class="go"> Debian, Upgrade to 3.4.1, 12:52:07 13:02:27 0:10:20 1:44:48</span> <span class="go"> python_charset_normalizer</span> <span class="go"> 1:44:48</span></pre> <p>So I wrote this Python program to help me:</p> <pre class="m-code"><span class="ch">#! /usr/bin/python3</span> <span class="sd">"""</span> <span class="sd">Summarize timewarrior data, grouped and sorted by time spent.</span> <span class="sd">"""</span> <span class="kn">import</span> <span class="nn">json</span> <span class="kn">import</span> <span class="nn">subprocess</span> <span class="kn">from</span> <span class="nn">argparse</span> <span class="kn">import</span> <span class="n">ArgumentParser</span><span class="p">,</span> <span class="n">RawDescriptionHelpFormatter</span> <span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">defaultdict</span> <span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span><span class="p">,</span> <span class="n">timezone</span> <span class="kn">from</span> <span class="nn">operator</span> <span class="kn">import</span> <span class="n">itemgetter</span> <span class="kn">from</span> <span class="nn">rich</span> <span class="kn">import</span> <span class="n">box</span><span class="p">,</span> <span class="nb">print</span> <span class="kn">from</span> <span class="nn">rich.table</span> <span class="kn">import</span> <span class="n">Table</span> <span class="n">parser</span> <span class="o">=</span> <span class="n">ArgumentParser</span><span class="p">(</span> <span class="n">description</span><span class="o">=</span><span class="vm">__doc__</span><span class="p">,</span> <span class="n">formatter_class</span><span class="o">=</span><span class="n">RawDescriptionHelpFormatter</span> <span class="p">)</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"-t"</span><span class="p">,</span> <span class="s2">"--only-total"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"store_true"</span><span class="p">)</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span> <span class="s2">"range"</span><span class="p">,</span> <span class="n">nargs</span><span class="o">=</span><span class="s2">"?"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">":today"</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"Time range (usually a hint, e.g. :lastweek)"</span><span class="p">,</span> <span class="p">)</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"tag"</span><span class="p">,</span> <span class="n">nargs</span><span class="o">=</span><span class="s2">"*"</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"Tags to filter by"</span><span class="p">)</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span> <span class="n">entries</span><span class="p">:</span> <span class="n">defaultdict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">timedelta</span><span class="p">]</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="n">timedelta</span><span class="p">)</span> <span class="n">now</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">(</span><span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">)</span> <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">(</span> <span class="p">[</span><span class="s2">"timew"</span><span class="p">,</span> <span class="s2">"export"</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">range</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="o">.</span><span class="n">tag</span><span class="p">],</span> <span class="n">check</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">capture_output</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="p">)</span><span class="o">.</span><span class="n">stdout</span> <span class="p">):</span> <span class="n">start</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">entry</span><span class="p">[</span><span class="s2">"start"</span><span class="p">])</span> <span class="k">if</span> <span class="s2">"end"</span> <span class="ow">in</span> <span class="n">entry</span><span class="p">:</span> <span class="n">end</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">entry</span><span class="p">[</span><span class="s2">"end"</span><span class="p">])</span> <span class="k">else</span><span class="p">:</span> <span class="n">end</span> <span class="o">=</span> <span class="n">now</span> <span class="n">entries</span><span class="p">[</span><span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">entry</span><span class="p">[</span><span class="s2">"tags"</span><span class="p">])]</span> <span class="o">+=</span> <span class="n">end</span> <span class="o">-</span> <span class="n">start</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">args</span><span class="o">.</span><span class="n">only_total</span><span class="p">:</span> <span class="n">table</span> <span class="o">=</span> <span class="n">Table</span><span class="p">(</span><span class="n">box</span><span class="o">=</span><span class="n">box</span><span class="o">.</span><span class="n">SIMPLE</span><span class="p">,</span> <span class="n">highlight</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="n">table</span><span class="o">.</span><span class="n">add_column</span><span class="p">(</span><span class="s2">"Tags"</span><span class="p">)</span> <span class="n">table</span><span class="o">.</span><span class="n">add_column</span><span class="p">(</span><span class="s2">"Time"</span><span class="p">,</span> <span class="n">justify</span><span class="o">=</span><span class="s2">"right"</span><span class="p">)</span> <span class="k">for</span> <span class="n">tags</span><span class="p">,</span> <span class="n">time</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">entries</span><span class="o">.</span><span class="n">items</span><span class="p">(),</span> <span class="n">key</span><span class="o">=</span><span class="n">itemgetter</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span> <span class="n">table</span><span class="o">.</span><span class="n">add_row</span><span class="p">(</span><span class="n">tags</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">time</span><span class="p">))</span> <span class="nb">print</span><span class="p">(</span><span class="n">table</span><span class="p">)</span> <span class="n">total</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="n">entries</span><span class="o">.</span><span class="n">values</span><span class="p">(),</span> <span class="n">start</span><span class="o">=</span><span class="n">timedelta</span><span class="p">())</span> <span class="n">hours</span><span class="p">,</span> <span class="n">rest</span> <span class="o">=</span> <span class="nb">divmod</span><span class="p">(</span><span class="n">total</span><span class="p">,</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="mi">1</span><span class="p">))</span> <span class="n">minutes</span><span class="p">,</span> <span class="n">rest</span> <span class="o">=</span> <span class="nb">divmod</span><span class="p">(</span><span class="n">rest</span><span class="p">,</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">minutes</span><span class="o">=</span><span class="mi">1</span><span class="p">))</span> <span class="n">seconds</span> <span class="o">=</span> <span class="n">rest</span><span class="o">.</span><span class="n">seconds</span> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Total time: </span><span class="si">{</span><span class="n">hours</span><span class="si">:</span><span class="s2">02</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="n">minutes</span><span class="si">:</span><span class="s2">02</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="n">seconds</span><span class="si">:</span><span class="s2">02</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></pre> <pre class="m-console"><span class="gp">$ </span>summarize-time<span class="w"> </span><span class="m">2025</span>-02-18<span class="w"> </span>Debian <span class="go"> Tags Time</span> <span class="go"> ───────────────────────────────────────────────────────────────</span> <span class="go"> CVE-2025-26465, Debian, next, openssh 0:42:33</span> <span class="go"> Debian, FTBFS with GCC-15, vigor 0:19:04</span> <span class="go"> Debian, Upgrade to 0.67, python_holidays 0:14:20</span> <span class="go"> Debian, Upgrade to 3.4.1, python_charset_normalizer 0:10:20</span> <span class="go"> Debian, FTBFS with GCC-15, kali 0:07:20</span> <span class="go"> Debian, Upgrade to 1.3.4, python_setproctitle 0:06:26</span> <span class="go"> Debian, FTBFS with GCC-15, icoutils 0:02:55</span> <span class="go"> Debian, FTBFS with GCC-15, python_setproctitle 0:01:50</span> <span class="go">Total time: 01:44:48</span></pre> <p>Much nicer. But that only helps with some of my reporting. At the end of a month, I have to work out how much time to bill Freexian for and fill out a timesheet, and for various reasons those queries don’t correspond to single <code>timew</code> tags: they sometimes correspond to the sum of all time spent on multiple tags, or to the time spent on one tag minus the time spent on another tag, or similar. As a result I quite often have to do basic arithmetic on time intervals; but that’s surprisingly annoying! I didn’t previously have good tools for that, and was reduced to doing things like <code>str(timedelta(hours=..., minutes=..., seconds=...) + ...)</code> in Python, which gets old fast.</p> <p>Instead:</p> <pre class="m-console"><span class="gp">$ </span>qalc<span class="w"> </span><span class="s1">'62:46:30 - 51:02:42 to time'</span> <span class="gp gp-VirtualEnv">(225990 / 3600)</span> <span class="go">− (183762 / 3600) = 11:43:48</span></pre> <p>I also often want to work out how much of my time I’ve spent on Debian work this month so far, since Freexian pays me for <a href="https://www.freexian.com/about/debian-contributions/">up to 20% of my work time on Debian</a>; if I’m under that then I might want to prioritize more Debian projects, and if I’m over then I should be prioritizing more Freexian projects as otherwise I’m not going to get paid for that time.</p> <pre class="m-console"><span class="gp">$ </span>summarize-time<span class="w"> </span>-t<span class="w"> </span>:month<span class="w"> </span>Freexian <span class="go">Total time: 69:19:42</span> <span class="gp">$ </span>summarize-time<span class="w"> </span>-t<span class="w"> </span>:month<span class="w"> </span>Debian <span class="go">Total time: 24:05:30</span> <span class="gp">$ </span>qalc<span class="w"> </span><span class="s1">'24:05:30 / (24:05:30 + 69:19:42) to %'</span> <span class="gp gp-VirtualEnv">(86730 / 3600)</span> <span class="go">/ ((86730 / 3600) + (249582 / 3600)) ≈ 25.78855349%</span></pre> <p>I love it.</p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://www.chiark.greenend.org.uk/~cjwatson/blog/qalculate-time-hacks.html"> on February 23, 2025 08:00 PM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">February 20, 2025</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/ubuntustudio.png" alt=""> <h2 class="entry-title"><a href="https://ubuntustudio.org/2025/02/ubuntu-studio-24-04-2-lts-released-and-financial-help-needed/" title="Planet Ubuntu – Ubuntu Studio">Ubuntu Studio 24.04.2 LTS Released, and Financial Help Needed</a></h2> <h3>Ubuntu Studio</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <div class="wp-block-image"><figure class="aligncenter size-full is-resized"><img alt="" class="wp-image-2763" height="223" src="https://ubuntustudio.org/wp-content/uploads/2024/04/0a09/finalbanner.png" width="600" /></figure></div> <p>The Ubuntu Studio team is pleased to announce the release of Ubuntu Studio 24.04.2 LTS. This is a minor release which wraps-up the security and bug fixes into one .iso image, available for download now.</p> <p>Among the changes, we have updated the support and help links in the menu, fixed bugs in <a data-id="1972" data-type="page" href="https://ubuntustudio.org/ubuntu-studio-installer/">Ubuntu Studio Installer</a>, and more. As always, check the <a data-id="2745" data-type="page" href="https://ubuntustudio.org/ubuntu-studio-24-04-lts-release-notes/">Ubuntu Studio 24.04 LTS Release Notes</a> release notes for more information.</p> <h2>Please give financially to Ubuntu Studio!</h2> <p>Giving is down. We understand that some people may no longer be able to give financially to this project, and that’s OK. However, if you have never given to Ubuntu Studio for the hard work and dedication we put into this project, please consider a monetary contribution.</p> <p>Additionally, we would love to see more monthly contributions to this project. You can do so via PayPal, Liberapay, or Patreon. We would love to see more contributions!</p> <p>So don’t wait, and don’t wait for someone else to do it! Thank you in advance!</p> <table align="center" border="0" width="100%"><tbody><tr><td align="center" valign="center" width="33%">Donate using PayPal<br /><form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top"> <input name="cmd" type="hidden" value="_donations" /> <input name="business" type="hidden" value="4KAYVBRFDQPJW" /> <input name="item_name" type="hidden" value="Ubuntu Studio Donation" /> <input name="currency_code" type="hidden" value="USD" /> <input alt="Donate with PayPal button" border="0" name="submit" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" title="PayPal - The safer, easier way to pay online!" type="image" /> <img alt="" border="0" height="1" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" /></form>Donations are Monthly or One-Time</td><td align="center" valign="center" width="33%">Donate using Liberapay<br /><a href="https://liberapay.com/ubuntustudio/donate"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg" /></a><br />Donations are<br />Weekly, Monthly, or Annually</td><td align="center" valign="center" width="33%">Donate using Patreon<br /><a data-patreon-widget-type="become-patron-button" href="https://www.patreon.com/bePatron?u=43532738">Become a Patron!</a>Donations are<br />Monthly</td></tr></tbody></table><br /> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://ubuntustudio.org/2025/02/ubuntu-studio-24-04-2-lts-released-and-financial-help-needed/"> on February 20, 2025 06:45 PM</a></span> </div> </div><!-- .post --> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/paultag.png" alt=""> <h2 class="entry-title"><a href="https://notes.pault.ag/boot2kier/" title="Paul's Notes">boot2kier</a></h2> <h3>Paul Tagliamonte</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <p>I can’t remember exactly the joke I was making at the time in my <a href="https://zoo.dev">work’s</a> slack instance (I’m sure it wasn’t particularly funny, though; and not even worth re-reading the thread to work out), but it wound up with me writing a UEFI binary for the punchline. Not to spoil the ending but it worked - no pesky kernel, no messing around with “userland”. I guess the only part of this you really need to know for the setup here is that it was a <a href="https://en.wikipedia.org/wiki/Severance_(TV_series)">Severance</a> joke, which is some fantastic TV. If you haven’t seen it, this post will seem perhaps weirder than it actually is. I promise I haven’t joined any new cults. For those who have seen it, the payoff to my joke is that I wanted my machine to boot directly to an image of <a href="https://severance-tv.fandom.com/wiki/Kier_Eagan">Kier Eagan</a>.</p> <p>As for how to do it – I figured I’d give the <a href="https://docs.rs/uefi/latest/uefi/">uefi crate</a> a shot, and see how it is to use, since this is a low stakes way of trying it out. In general, this isn’t the sort of thing I’d usually post about – except this wound up being easier and way cleaner than I thought it would be. That alone is worth sharing, in the hopes someome comes across this in the future and feels like they, too, can write something fun targeting the UEFI.</p> <p>First thing’s first – gotta create a rust project (I’ll leave that part to you depending on your life choices), and to add the <code>uefi</code> crate to your <code>Cargo.toml</code>. You can either use <code>cargo add</code> or add a line like this by hand:</p> <div class="highlight"><pre><code class="language-toml" data-lang="toml"><span style="color: #a6e22e;">uefi</span> = { <span style="color: #a6e22e;">version</span> = <span style="color: #e6db74;">"0.33"</span>, <span style="color: #a6e22e;">features</span> = [<span style="color: #e6db74;">"panic_handler"</span>, <span style="color: #e6db74;">"alloc"</span>, <span style="color: #e6db74;">"global_allocator"</span>] } </code></pre></div><p>We also need to teach cargo about how to go about building for the UEFI target, so we need to create a <code>rust-toolchain.toml</code> with one (or both) of the UEFI targets we’re interested in:</p> <aside class="left"> I think there's a UEFI for riscv64 too, but I haven't found notes about it in Rust-land. </aside> <div class="highlight"><pre><code class="language-toml" data-lang="toml">[<span style="color: #a6e22e;">toolchain</span>] <span style="color: #a6e22e;">targets</span> = [<span style="color: #e6db74;">"aarch64-unknown-uefi"</span>, <span style="color: #e6db74;">"x86_64-unknown-uefi"</span>] </code></pre></div><p>Unfortunately, I wasn’t able to use the <a href="https://docs.rs/image/latest/image/">image</a> crate, since it won’t build against the <code>uefi</code> target. This looks like it’s because rustc had no way to compile the required floating point operations within the <code>image</code> crate without hardware floating point instructions specifically. Rust tends to punt a lot of that to <code>libm</code> usually, so this isnt entirely shocking given we’re <code>nostd</code> for a non-hardfloat target.</p> <aside class="right"> I didn't file any bugs or even track them down between the image crate and rustc, since I figured this isn't actionable for anyone involved aside from "implement soft floats in the compiler to backfill this target". </aside> <p>So-called “softening” requires a software floating point implementation that the compiler can use to “polyfill” (feels weird to use the term polyfill here, but I guess it’s spiritually right?) the lack of hardware floating point operations, which rust hasn’t implemented for this target yet. As a result, I changed tactics, and figured I’d use <code>ImageMagick</code> to pre-compute the pixels from a <code>jpg</code>, rather than doing it at runtime. A bit of a bummer, since I need to do more out of band pre-processing and hardcoding, and updating the image kinda sucks as a result – but it’s entirely manageable.</p> <div class="highlight"><pre><code class="language-sh" data-lang="sh">$ convert -resize 1280x900 kier.jpg kier.full.jpg $ convert -depth <span style="color: #ae81ff;">8</span> kier.full.jpg rgba:kier.bin </code></pre></div><p>This will take our input file (<code>kier.jpg</code>), resize it to get as close to the desired resolution as possible while maintaining aspect ration, then convert it from a <code>jpg</code> to a flat array of 4 byte <code>RGBA</code> pixels. Critically, it’s also important to remember that the size of the <code>kier.full.jpg</code> file may not actually be the requested size – it will not change the aspect ratio, so be sure to make a careful note of the resulting size of the <code>kier.full.jpg</code> file.</p> <p>Last step with the image is to compile it into our Rust bianary, since we don’t want to struggle with trying to read this off disk, which is thankfully real easy to do.</p> <div class="highlight"><pre><code class="language-rust" data-lang="rust"><span style="color: #66d9ef;">const</span> KIER: <span style="color: #66d9ef;">&amp;</span>[<span style="color: #66d9ef;">u8</span>] <span style="color: #f92672;">=</span> include_bytes<span style="color: #f92672;">!</span>(<span style="color: #e6db74;">"../kier.bin"</span>); <span style="color: #66d9ef;">const</span> KIER_WIDTH: <span style="color: #66d9ef;">usize</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">1280</span>; <span style="color: #66d9ef;">const</span> KIER_HEIGHT: <span style="color: #66d9ef;">usize</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">641</span>; <span style="color: #66d9ef;">const</span> KIER_PIXEL_SIZE: <span style="color: #66d9ef;">usize</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">4</span>; </code></pre></div><p>Remember to use the width and height from the final <code>kier.full.jpg</code> file as the values for <code>KIER_WIDTH</code> and <code>KIER_HEIGHT</code>. <code>KIER_PIXEL_SIZE</code> is 4, since we have 4 byte wide values for each pixel as a result of our conversion step into RGBA. We’ll only use RGB, and if we ever drop the alpha channel, we can drop that down to 3. I don’t entirely know why I kept alpha around, but I figured it was fine. My <code>kier.full.jpg</code> image winds up shorter than the requested height (which is also qemu’s default resolution for me) – which means we’ll get a semi-annoying black band under the image when we go to run it – but it’ll work.</p> <p>Anyway, now that we have our image as bytes, we can get down to work, and write the rest of the code to handle moving bytes around from in-memory as a flat block if pixels, and request that they be displayed using the <a href="https://wiki.osdev.org/GOP">UEFI GOP</a>. We’ll just need to hack up a container for the image pixels and teach it how to blit to the display.</p> <div class="highlight"><pre><code class="language-rust" data-lang="rust"><span style="color: #e6db74;">/// RGB Image to move around. This isn't the same as an </span><span style="color: #e6db74;">/// `image::RgbImage`, but we can associate the size of </span><span style="color: #e6db74;">/// the image along with the flat buffer of pixels. </span><span style="color: #e6db74;"></span><span style="color: #66d9ef;">struct</span> <span style="color: #a6e22e;">RgbImage</span> { <span style="color: #e6db74;">/// Size of the image as a tuple, as the </span><span style="color: #e6db74;"></span> <span style="color: #e6db74;">/// (width, height) </span><span style="color: #e6db74;"></span> size: (<span style="color: #66d9ef;">usize</span>, <span style="color: #66d9ef;">usize</span>), <span style="color: #e6db74;">/// raw pixels we'll send to the display. </span><span style="color: #e6db74;"></span> inner: Vec<span style="color: #f92672;">&lt;</span>BltPixel<span style="color: #f92672;">&gt;</span>, } <span style="color: #66d9ef;">impl</span> RgbImage { <span style="color: #e6db74;">/// Create a new `RgbImage`. </span><span style="color: #e6db74;"></span> <span style="color: #66d9ef;">fn</span> <span style="color: #a6e22e;">new</span>(width: <span style="color: #66d9ef;">usize</span>, height: <span style="color: #66d9ef;">usize</span>) -&gt; <span style="color: #a6e22e;">Self</span> { RgbImage { size: (width, height), inner: <span style="color: #a6e22e;">vec</span><span style="color: #f92672;">!</span>[BltPixel::new(<span style="color: #ae81ff;">0</span>, <span style="color: #ae81ff;">0</span>, <span style="color: #ae81ff;">0</span>); width <span style="color: #f92672;">*</span> height], } } <span style="color: #e6db74;">/// Take our pixels and request that the UEFI GOP </span><span style="color: #e6db74;"></span> <span style="color: #e6db74;">/// display them for us. </span><span style="color: #e6db74;"></span> <span style="color: #66d9ef;">fn</span> <span style="color: #a6e22e;">write</span>(<span style="color: #f92672;">&amp;</span>self, gop: <span style="color: #66d9ef;">&amp;</span><span style="color: #a6e22e;">mut</span> GraphicsOutput) -&gt; Result { gop.blt(BltOp::BufferToVideo { buffer: <span style="color: #66d9ef;">&amp;</span><span style="color: #a6e22e;">self</span>.inner, src: <span style="color: #a6e22e;">BltRegion</span>::Full, dest: (<span style="color: #ae81ff;">0</span>, <span style="color: #ae81ff;">0</span>), dims: <span style="color: #a6e22e;">self</span>.size, }) } } <span style="color: #66d9ef;">impl</span> Index<span style="color: #f92672;">&lt;</span>(<span style="color: #66d9ef;">usize</span>, <span style="color: #66d9ef;">usize</span>)<span style="color: #f92672;">&gt;</span> <span style="color: #66d9ef;">for</span> RgbImage { <span style="color: #66d9ef;">type</span> <span style="color: #a6e22e;">Output</span> <span style="color: #f92672;">=</span> BltPixel; <span style="color: #66d9ef;">fn</span> <span style="color: #a6e22e;">index</span>(<span style="color: #f92672;">&amp;</span>self, idx: (<span style="color: #66d9ef;">usize</span>, <span style="color: #66d9ef;">usize</span>)) -&gt; <span style="color: #66d9ef;">&amp;</span><span style="color: #a6e22e;">BltPixel</span> { <span style="color: #66d9ef;">let</span> (x, y) <span style="color: #f92672;">=</span> idx; <span style="color: #f92672;">&amp;</span>self.inner[y <span style="color: #f92672;">*</span> self.size.<span style="color: #ae81ff;">0</span> <span style="color: #f92672;">+</span> x] } } <span style="color: #66d9ef;">impl</span> IndexMut<span style="color: #f92672;">&lt;</span>(<span style="color: #66d9ef;">usize</span>, <span style="color: #66d9ef;">usize</span>)<span style="color: #f92672;">&gt;</span> <span style="color: #66d9ef;">for</span> RgbImage { <span style="color: #66d9ef;">fn</span> <span style="color: #a6e22e;">index_mut</span>(<span style="color: #f92672;">&amp;</span><span style="color: #66d9ef;">mut</span> self, idx: (<span style="color: #66d9ef;">usize</span>, <span style="color: #66d9ef;">usize</span>)) -&gt; <span style="color: #66d9ef;">&amp;</span><span style="color: #a6e22e;">mut</span> BltPixel { <span style="color: #66d9ef;">let</span> (x, y) <span style="color: #f92672;">=</span> idx; <span style="color: #f92672;">&amp;</span><span style="color: #66d9ef;">mut</span> self.inner[y <span style="color: #f92672;">*</span> self.size.<span style="color: #ae81ff;">0</span> <span style="color: #f92672;">+</span> x] } } </code></pre></div><p>We also need to do some basic setup to get a handle to the UEFI GOP via the UEFI crate (using <a href="https://docs.rs/uefi/latest/uefi/boot/fn.get_handle_for_protocol.html">uefi::boot::get_handle_for_protocol</a> and <a href="https://docs.rs/uefi/latest/uefi/boot/fn.open_protocol_exclusive.html">uefi::boot::open_protocol_exclusive</a> for the <a href="https://docs.rs/uefi/latest/uefi/proto/console/gop/struct.GraphicsOutput.html">GraphicsOutput</a> protocol), so that we have the object we need to pass to <code>RgbImage</code> in order for it to write the pixels to the display. The only trick here is that the display on the booted system can really be any resolution – so we need to do some capping to ensure that we don’t write more pixels than the display can handle. Writing fewer than the display’s maximum seems fine, though.</p> <div class="highlight"><pre><code class="language-rust" data-lang="rust"><span style="color: #66d9ef;">fn</span> <span style="color: #a6e22e;">praise</span>() -&gt; Result { <span style="color: #66d9ef;">let</span> gop_handle <span style="color: #f92672;">=</span> boot::get_handle_for_protocol::<span style="color: #f92672;">&lt;</span>GraphicsOutput<span style="color: #f92672;">&gt;</span>()<span style="color: #f92672;">?</span>; <span style="color: #66d9ef;">let</span> <span style="color: #66d9ef;">mut</span> gop <span style="color: #f92672;">=</span> boot::open_protocol_exclusive::<span style="color: #f92672;">&lt;</span>GraphicsOutput<span style="color: #f92672;">&gt;</span>(gop_handle)<span style="color: #f92672;">?</span>; <span style="color: #75715e;">// Get the (width, height) that is the minimum of </span><span style="color: #75715e;"></span> <span style="color: #75715e;">// our image and the display we're using. </span><span style="color: #75715e;"></span> <span style="color: #66d9ef;">let</span> (width, height) <span style="color: #f92672;">=</span> gop.current_mode_info().resolution(); <span style="color: #66d9ef;">let</span> (width, height) <span style="color: #f92672;">=</span> (width.min(KIER_WIDTH), height.min(KIER_HEIGHT)); <span style="color: #66d9ef;">let</span> <span style="color: #66d9ef;">mut</span> buffer <span style="color: #f92672;">=</span> RgbImage::new(width, height); <span style="color: #66d9ef;">for</span> y <span style="color: #66d9ef;">in</span> <span style="color: #ae81ff;">0</span>..height { <span style="color: #66d9ef;">for</span> x <span style="color: #66d9ef;">in</span> <span style="color: #ae81ff;">0</span>..width { <span style="color: #66d9ef;">let</span> idx_r <span style="color: #f92672;">=</span> ((y <span style="color: #f92672;">*</span> KIER_WIDTH) <span style="color: #f92672;">+</span> x) <span style="color: #f92672;">*</span> KIER_PIXEL_SIZE; <span style="color: #66d9ef;">let</span> pixel <span style="color: #f92672;">=</span> <span style="color: #f92672;">&amp;</span><span style="color: #66d9ef;">mut</span> buffer[(x, y)]; pixel.red <span style="color: #f92672;">=</span> KIER[idx_r]; pixel.green <span style="color: #f92672;">=</span> KIER[idx_r <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">1</span>]; pixel.blue <span style="color: #f92672;">=</span> KIER[idx_r <span style="color: #f92672;">+</span> <span style="color: #ae81ff;">2</span>]; } } buffer.write(<span style="color: #f92672;">&amp;</span><span style="color: #66d9ef;">mut</span> gop)<span style="color: #f92672;">?</span>; Ok(()) } </code></pre></div><p>Not so bad! A bit tedious – we could solve some of this by turning <code>KIER</code> into an <code>RgbImage</code> at compile-time using some clever <code>Cow</code> and <code>const</code> tricks and implement blitting a sub-image of the image – but this will do for now. This is a joke, after all, let’s not go nuts. All that’s left with our code is for us to write our <code>main</code> function and try and boot the thing!</p> <div class="highlight"><pre><code class="language-rust" data-lang="rust"><span style="color: #75715e;">#[entry]</span> <span style="color: #66d9ef;">fn</span> <span style="color: #a6e22e;">main</span>() -&gt; <span style="color: #a6e22e;">Status</span> { uefi::helpers::init().unwrap(); praise().unwrap(); boot::stall(<span style="color: #ae81ff;">100_000_000</span>); Status::SUCCESS } </code></pre></div><p>If you’re following along at home and so interested, the final source is over at <a href="https://gist.github.com/paultag/60334e9f6c06388cc4b1c2cf12d85085">gist.github.com</a>. We can go ahead and build it using <code>cargo</code> (as is our tradition) by targeting the UEFI platform.</p> <div class="highlight"><pre><code class="language-sh" data-lang="sh">$ cargo build --release --target x86_64-unknown-uefi </code></pre></div><h1 id="testing-the-uefi-blob">Testing the UEFI Blob</h1> <p>While I can definitely get my machine to boot these blobs to test, I figured I’d save myself some time by using QEMU to test without a full boot. If you’ve not done this sort of thing before, we’ll need two packages, <code>qemu</code> and <code>ovmf</code>. It’s a bit different than most invocations of qemu you may see out there – so I figured it’d be worth writing this down, too.</p> <aside class="left"> It's perhaps likely that you aren't using <code>doas</code> with Debian. Replace <code>doas</code> with <code>sudo</code> if that's your thing. </aside> <div class="highlight"><pre><code class="language-sh" data-lang="sh">$ doas apt install qemu-system-x86 ovmf </code></pre></div><p><code>qemu</code> has a nice feature where it’ll create us an EFI partition as a drive and attach it to the VM off a local directory – so let’s construct an EFI partition file structure, and drop our binary into the conventional location. If you haven’t done this before, and are only interested in running this in a VM, don’t worry too much about it, a lot of it is convention and this layout should work for you.</p> <div class="highlight"><pre><code class="language-sh" data-lang="sh">$ mkdir -p esp/efi/boot $ cp target/x86_64-unknown-uefi/release/*.efi <span style="color: #ae81ff;">\ </span><span style="color: #ae81ff;"></span> esp/efi/boot/bootx64.efi </code></pre></div><p>With all this in place, we can kick off <code>qemu</code>, booting it in UEFI mode using the <code>ovmf</code> firmware, attaching our EFI partition directory as a drive to our VM to boot off of.</p> <div class="highlight"><pre><code class="language-sh" data-lang="sh">$ qemu-system-x86_64 <span style="color: #ae81ff;">\ </span><span style="color: #ae81ff;"></span> -enable-kvm <span style="color: #ae81ff;">\ </span><span style="color: #ae81ff;"></span> -m <span style="color: #ae81ff;">2048</span> <span style="color: #ae81ff;">\ </span><span style="color: #ae81ff;"></span> -smbios type<span style="color: #f92672;">=</span>0,uefi<span style="color: #f92672;">=</span>on <span style="color: #ae81ff;">\ </span><span style="color: #ae81ff;"></span> -bios /usr/share/ovmf/OVMF.fd <span style="color: #ae81ff;">\ </span><span style="color: #ae81ff;"></span> -drive format<span style="color: #f92672;">=</span>raw,file<span style="color: #f92672;">=</span>fat:rw:esp </code></pre></div><p>If all goes well, soon you’ll be met with the all knowing gaze of Chosen One, Kier Eagan. The thing that really impressed me about all this is this program worked first try – it all went so boringly normal. Truly, kudos to the <code>uefi</code> crate maintainers, it’s incredibly well done.</p> <div> <img src="https://notes.pault.ag/boot2kier/boot2kier.png" /> </div> <h1 id="booting-a-live-system">Booting a live system</h1> <p>Sure, we <em>could</em> stop here, but anyone can open up an app window and see a picture of Kier Eagan, so I knew I needed to finish the job and boot a real machine up with this. In order to do that, we need to format a USB stick. <strong>BE SURE /dev/sda IS CORRECT IF YOU’RE COPY AND PASTING</strong>. All my drives are NVMe, so <strong>BE CAREFUL</strong> – if you use SATA, it may very well be your hard drive! Please do not destroy your computer over this.</p> <div class="highlight"><pre><code class="language-txt" data-lang="txt">$ doas fdisk /dev/sda Welcome to fdisk (util-linux 2.40.4). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): First sector (2048-4014079, default 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-4014079, default 4014079): Created a new partition 1 of type 'Linux' and of size 1.9 GiB. Command (m for help): t Selected partition 1 Hex code or alias (type L to list all): ef Changed type of partition 'Linux' to 'EFI (FAT-12/16/32)'. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. </code></pre></div><p>Once that looks good (depending on your flavor of <code>udev</code> you may or may not need to unplug and replug your USB stick), we can go ahead and format our new EFI partition (<strong>BE CAREFUL THAT /dev/sda IS YOUR USB STICK</strong>) and write our EFI directory to it.</p> <div class="highlight"><pre><code class="language-txt" data-lang="txt">$ doas mkfs.fat /dev/sda1 $ doas mount /dev/sda1 /mnt $ cp -r esp/efi /mnt $ find /mnt /mnt /mnt/efi /mnt/efi/boot /mnt/efi/boot/bootx64.efi </code></pre></div><p>Of course, naturally, devotion to Kier shouldn’t mean backdooring your system. Disabling Secure Boot runs counter to the Core Principals, such as Probity, and not doing this would surely run counter to Verve, Wit and Vision. This bit does require that you’ve taken the step to enroll a <a href="https://wiki.debian.org/SecureBoot#MOK_-_Machine_Owner_Key">MOK</a> and know how to use it, right about now is when we can use <code>sbsign</code> to sign our UEFI binary we want to boot from to continue enforcing Secure Boot. The details for how this command should be run specifically is likely something you’ll need to work out depending on how you’ve decided to manage your MOK.</p> <div class="highlight"><pre><code class="language-sh" data-lang="sh">$ doas sbsign <span style="color: #ae81ff;">\ </span><span style="color: #ae81ff;"></span> --cert /path/to/mok.crt <span style="color: #ae81ff;">\ </span><span style="color: #ae81ff;"></span> --key /path/to/mok.key <span style="color: #ae81ff;">\ </span><span style="color: #ae81ff;"></span> target/x86_64-unknown-uefi/release/*.efi <span style="color: #ae81ff;">\ </span><span style="color: #ae81ff;"></span> --output esp/efi/boot/bootx64.efi </code></pre></div><p>I figured I’d leave a signed copy of <code>boot2kier</code> at <code>/boot/efi/EFI/BOOT/KIER.efi</code> on my Dell XPS 13, with Secure Boot enabled and enforcing, just took a matter of going into my BIOS to add the right boot option, which was no sweat. I’m sure there is a way to do it using <code>efibootmgr</code>, but I wasn’t smart enough to do that quickly. I let ‘er rip, and it booted up and worked great!</p> <p>It was a bit hard to get a video of my laptop, though – but lucky for me, I have a Minisforum Z83-F sitting around (which, until a few weeks ago was running the annual http server to control my <a href="https://k3xec.com/christmas/">christmas tree</a> ) – so I grabbed it out of the christmas bin, wired it up to a video capture card I have sitting around, and figured I’d grab a video of me booting a physical device off the boot2kier USB stick.</p> <div> <img class="note-pad" src="https://notes.pault.ag/boot2kier/z83-boot2kier.gif" /> </div> <p>Attentive readers will notice the image of Kier is smaller then the qemu booted system – which just means our real machine has a larger GOP display resolution than qemu, which makes sense! We could write some fancy resize code (sounds annoying), center the image (can’t be assed but should be the easy way out here) or resize the original image (pretty hardware specific workaround). Additionally, you can make out the image being written to the display before us (the Minisforum logo) behind Kier, which is really cool stuff. If we were real fancy we could write blank pixels to the display before blitting Kier, but, again, I don’t think I care to do <em>that</em> much work.</p> <h1 id="but-now-i-must-away">But now I must away</h1> <p>If I wanted to keep this joke going, I’d likely try and find a copy of the original <a href="https://www.youtube.com/watch?v=U6EUG22elbs">video when Helly 100%s her file</a> and boot into that – or maybe play a terrible midi PC speaker rendition of <a href="https://www.youtube.com/watch?v=OsbxAsdR0QI">Kier, Chosen One, Kier</a> after rendering the image. I, unfortunately, don’t have any friends involved with production (yet?), so I reckon all that’s out for now. I’ll likely stop playing with this – the joke was done and I’m only writing this post because of how great everything was along the way.</p> <p>All in all, this reminds me so much of building a homebrew kernel to boot a system into – but like, <em>good</em>, though, and it’s a nice reminder of both how fun this stuff can be, and how far we’ve come. UEFI protocols are light-years better than how we did it in the dark ages, and the tooling for this is <em>SO</em> much more mature. Booting a custom UEFI binary is <em>miles</em> ahead of trying to boot your own kernel, and I can’t believe how good the <code>uefi</code> crate is specifically.</p> <p>Praise Kier! Kudos, to everyone involved in making this so delightful ❤️.</p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://notes.pault.ag/boot2kier/"> on February 20, 2025 02:40 PM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">February 18, 2025</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/rbalint.png" alt=""> <h2 class="entry-title"><a href="https://balintreczey.hu/blog/wireshark-on-ubuntu-stay-ahead-with-the-latest-releases-and-nightly-builds/" title="ubuntu – Obsessed with reality">Wireshark on Ubuntu: Stay Ahead with the Latest Releases and Nightly Builds</a></h2> <h3>Balint Reczey</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <div class="wp-block-media-text is-stacked-on-mobile"><figure class="wp-block-media-text__media"><img alt="" class="wp-image-1035 size-medium" height="300" src="https://balintreczey.hu/blog/wp-content/uploads/2025/02/Wireshark_icon_new-with-ubuntu-logo-300x300.png" width="300" /></figure><div class="wp-block-media-text__content"> <p>Wireshark is an essential tool for network analysis, and staying up to date with the latest releases ensures access to new features, security updates, and bug fixes. While Ubuntu’s official repositories provide stable versions, they are often not the most recent.</p> </div></div> <p>Wearing both WiresharkCore Developer and Debian/Ubuntu package maintainer hats, I’m happy to help the Wireshark team in providing updated packages for all supported Ubuntu versions through dedicated PPAs. This post outlines how you can install the latest stable and nightly Wireshark builds on Ubuntu.</p> <h2 class="wp-block-heading"><strong>Latest Stable Releases</strong></h2> <p>For users who want the most <strong>up-to-date stable</strong> Wireshark version, we maintain a PPA with backports of the latest releases:</p> <p><img alt="🔗" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f517.png" style="height: 1em;" /> <strong>Stable Wireshark PPA:</strong><br /><img alt="👉" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f449.png" style="height: 1em;" /> <a href="https://launchpad.net/~wireshark-dev/+archive/ubuntu/stable">https://launchpad.net/~wireshark-dev/+archive/ubuntu/stable</a></p> <h3 class="wp-block-heading"><strong>Installation Instructions</strong></h3> <p>To install the latest stable Wireshark version, add the PPA and update your package list:</p> <pre class="wp-block-preformatted">sudo add-apt-repository ppa:wireshark-dev/stable<br />sudo apt install wireshark</pre> <h2 class="wp-block-heading"><strong>Nightly Builds (Development Versions)</strong></h2> <p>For those who want to test new features before they are officially released, nightly builds are also available. These builds track the latest development code and you can watch them cooking on their <a href="https://code.launchpad.net/~wireshark-dev/+recipe/wireshark-daily-master">Launchpad recipe page</a>.</p> <p><img alt="🔗" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f517.png" style="height: 1em;" /> <strong>Nightly PPA:</strong><br /><img alt="👉" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f449.png" style="height: 1em;" /> <a href="https://code.launchpad.net/~wireshark-dev/+archive/ubuntu/nightly">https://code.launchpad.net/~wireshark-dev/+archive/ubuntu/nightly</a></p> <h3 class="wp-block-heading"><strong>Installation Instructions</strong></h3> <p>To install the latest development version of Wireshark, use the following commands:</p> <pre class="wp-block-preformatted">sudo add-apt-repository ppa:wireshark-dev/nightly<br />sudo apt install wireshark</pre> <p><strong>Note:</strong> Nightly builds may contain experimental features and are not guaranteed to be as stable as the official releases. Also it targets only Ubuntu 24.04 and later including the current development release.</p> <p>If you need to revert to the stable version later, remove the nightly PPA and reinstall Wireshark:</p> <pre class="wp-block-preformatted">sudo add-apt-repository --remove ppa:wireshark-dev/nightly<br />sudo apt install wireshark</pre> <p>Happy sniffing! 🙂</p> <p></p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://balintreczey.hu/blog/wireshark-on-ubuntu-stay-ahead-with-the-latest-releases-and-nightly-builds/"> on February 18, 2025 09:57 AM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">February 13, 2025</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/alanpope.png" alt=""> <h2 class="entry-title"><a href="https://popey.com/blog/2025/02/spotlighting-community-stories/" title="Posts on Alan Pope's blog">Spotlighting Community Stories</a></h2> <h3>Alan Pope</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <p>tl;dr I’m hosting a <a href="https://anchore.zoom.us/j/84874186657">Community Spotlight Webinar</a> today at <a href="https://anchore.com/">Anchore</a> featuring <a href="https://www.linkedin.com/in/nicolas-vuillamy/">Nicolas Vuilamy</a> from the <a href="https://megalinter.io/latest/">MegaLinter</a> project. <a href="https://anchore.zoom.us/j/84874186657">Register here</a>.</p> <hr /> <p>Throughout my career, I’ve had the privilege of working with organizations that create widely-used open source tools. The popularity of these tools is evident through their impressive download statistics, strong community presence, and engagement both online and at events.</p> <p>During my time at <a href="https://canonical.com/">Canonical</a>, we saw the tremendous reach of <a href="https://ubuntu.com/">Ubuntu</a>, along with tools like <a href="https://canonical.com/lxd">LXD</a>, <a href="https://cloud-init.io/">cloud-init</a>, and yes, even <a href="https://snapcraft.io/">Snapcraft</a>.</p> <p>At <a href="https://www.influxdata.com/">Influxdata</a>, I was part of the <a href="https://www.influxdata.com/time-series-platform/telegraf/">Telegraf</a> team, where we witnessed substantial adoption through downloads and active usage, reflected in our vibrant <a href="https://www.repotrends.com/influxdata/telegraf">bug tracker</a>.</p> <p>Now at <a href="https://anchore.com/">Anchore</a>, we see widespread adoption of <a href="https://github.com/anchore/syft">Syft</a> for <a href="https://anchore.com/sbom">SBOM</a> generation and <a href="https://github.com/anchore/grype">Grype</a> for <a href="https://anchore.com/container-vulnerability-scanning/">vulnerability</a> scanning.</p> <p>What makes Syft and Grype particularly exciting, beyond their permissive licensing, consistent release cycle, dedicated developer team, and <a href="https://en.wikipedia.org/wiki/List_of_computing_mascots#/media/File:Syft_mascot.svg">distinctive</a> <a href="https://en.wikipedia.org/wiki/List_of_computing_mascots#/media/File:Grype_mascot.svg">mascots</a>, is how they serve as building blocks for other tools and services.</p> <p>Syft isn’t just a standalone SBOM generator - it’s a library that developers can integrate into their own tools. Some organizations even build their own SBOM generators and vulnerability tools directly from our open source foundation!</p> <div class="highlight"><pre tabindex="0"><code class="language-bash" data-lang="bash"><span style="display: flex;"><span>$ docker-scout version </span></span><span style="display: flex;"><span> ⢀⢀⢀ ⣀⣀⡤⣔⢖⣖⢽⢝ </span></span><span style="display: flex;"><span> ⡠⡢⡣⡣⡣⡣⡣⡣⡢⡀ ⢀⣠⢴⡲⣫⡺⣜⢞⢮⡳⡵⡹⡅ </span></span><span style="display: flex;"><span> ⡜⡜⡜⡜⡜⡜⠜⠈⠈ ⠁⠙⠮⣺⡪⡯⣺⡪⡯⣺ </span></span><span style="display: flex;"><span> ⢘⢜⢜⢜⢜⠜ ⠈⠪⡳⡵⣹⡪⠇ </span></span><span style="display: flex;"><span> ⠨⡪⡪⡪⠂ ⢀⡤⣖⢽⡹⣝⡝⣖⢤⡀ ⠘⢝⢮⡚ _____ _ </span></span><span style="display: flex;"><span> ⠱⡱⠁ ⡴⡫⣞⢮⡳⣝⢮⡺⣪⡳⣝⢦ ⠘⡵⠁ / ____| Docker | | </span></span><span style="display: flex;"><span> ⠁ ⣸⢝⣕⢗⡵⣝⢮⡳⣝⢮⡺⣪⡳⣣ ⠁ | <span style="color: #f92672;">(</span>___ ___ ___ _ _| |_ </span></span><span style="display: flex;"><span> ⣗⣝⢮⡳⣝⢮⡳⣝⢮⡳⣝⢮⢮⡳ <span style="color: #ae81ff;">\_</span>__ <span style="color: #ae81ff;">\ </span>/ __/ _ <span style="color: #ae81ff;">\|</span> | | | __| </span></span><span style="display: flex;"><span> ⢀ ⢱⡳⡵⣹⡪⡳⣝⢮⡳⣝⢮⡳⡣⡏ ⡀ ____<span style="color: #f92672;">)</span> | <span style="color: #f92672;">(</span>_| <span style="color: #f92672;">(</span>_<span style="color: #f92672;">)</span> | |_| | |_ </span></span><span style="display: flex;"><span> ⢀⢾⠄ ⠫⣞⢮⡺⣝⢮⡳⣝⢮⡳⣝⠝ ⢠⢣⢂ |_____/ <span style="color: #ae81ff;">\_</span>__<span style="color: #ae81ff;">\_</span>__/ <span style="color: #ae81ff;">\_</span>_,_|<span style="color: #ae81ff;">\_</span>_| </span></span><span style="display: flex;"><span> ⡼⣕⢗⡄ ⠈⠓⠝⢮⡳⣝⠮⠳⠙ ⢠⢢⢣⢣ </span></span><span style="display: flex;"><span> ⢰⡫⡮⡳⣝⢦⡀ ⢀⢔⢕⢕⢕⢕⠅ </span></span><span style="display: flex;"><span> ⡯⣎⢯⡺⣪⡳⣝⢖⣄⣀ ⡀⡠⡢⡣⡣⡣⡣⡣⡃ </span></span><span style="display: flex;"><span>⢸⢝⢮⡳⣝⢮⡺⣪⡳⠕⠗⠉⠁ ⠘⠜⡜⡜⡜⡜⡜⡜⠜⠈ </span></span><span style="display: flex;"><span>⡯⡳⠳⠝⠊⠓⠉ ⠈⠈⠈⠈ </span></span><span style="display: flex;"><span> </span></span><span style="display: flex;"><span> </span></span><span style="display: flex;"><span> </span></span><span style="display: flex;"><span>version: v1.13.0 <span style="color: #f92672;">(</span>go1.22.5 - darwin/arm64<span style="color: #f92672;">)</span> </span></span><span style="display: flex;"><span>git commit: 7a85bab58d5c36a7ab08cd11ff574717f5de3ec2 </span></span><span style="display: flex;"><span> </span></span><span style="display: flex;"><span>$ syft /usr/local/bin/docker-scout | grep syft </span></span><span style="display: flex;"><span> ✔ Indexed file system /usr/local/bin/docker-scout </span></span><span style="display: flex;"><span> ✔ Cataloged contents f247ef0423f53cbf5172c34d2b3ef23d84393bd1d8e05f0ac83ec7d864396c1b </span></span><span style="display: flex;"><span> ├── ✔ Packages <span style="color: #f92672;">[</span><span style="color: #ae81ff;">274</span> packages<span style="color: #f92672;">]</span> </span></span><span style="display: flex;"><span> ├── ✔ File digests <span style="color: #f92672;">[</span><span style="color: #ae81ff;">1</span> files<span style="color: #f92672;">]</span> </span></span><span style="display: flex;"><span> ├── ✔ File metadata <span style="color: #f92672;">[</span><span style="color: #ae81ff;">1</span> locations<span style="color: #f92672;">]</span> </span></span><span style="display: flex;"><span> └── ✔ Executables <span style="color: #f92672;">[</span><span style="color: #ae81ff;">1</span> executables<span style="color: #f92672;">]</span> </span></span><span style="display: flex;"><span>github.com/anchore/syft v1.10.0 go-module </span></span></code></pre></div><p><em>(I find it delightfully meta to discover syft inside other tools using syft itself)</em></p> <center><a href="https://popey.com/blog/blog/images/2025-02-13/scooby-doo-meme.png"><img alt="A silly meme that isn't true at all :)" src="https://popey.com/blog/blog/images/2025-02-13/scooby-doo-meme.png" width="540" /></a></center> <p>This collaborative building upon existing tools mirrors how <a href="https://linuxmint.com/">Linux</a> distributions often build upon other <a href="http://ubuntu.com/">Linux distributions</a>. Like Ubuntu and Telegraf, we see countless individuals and organizations creating innovative solutions that extend beyond the core capabilities of Syft and Grype. It’s the essence of open source - a multiplier effect that comes from creating accessible, powerful tools.</p> <p>While we may not always know exactly how and where these tools are being used (and sometimes, rightfully so, it’s not our business), there are many cases where developers and companies want to share their innovative implementations.</p> <p>I’m particularly interested in these stories because they deserve to be shared. I’ve been exploring public repositories like the GitHub network dependents for <a href="https://github.com/anchore/syft/network/dependents">syft</a>, <a href="https://github.com/anchore/grype/network/dependents">grype</a>, <a href="https://github.com/anchore/sbom-action/network/dependents">sbom-action</a>, and <a href="https://github.com/anchore/scan-action/network/dependents">scan-action</a> to discover where our tools are making an impact.</p> <p>The adoption has been remarkable!</p> <p>I reached out to several open source projects to learn about their implementations, and <a href="https://www.linkedin.com/in/nicolas-vuillamy/">Nicolas Vuilamy</a> from <a href="https://megalinter.io/latest/">MegaLinter</a> was the first to respond - which brings us full circle.</p> <p>Today, I’m hosting our first <a href="https://anchore.zoom.us/j/84874186657">Community Spotlight Webinar</a> with Nicolas to share MegaLinter’s story. <a href="https://anchore.zoom.us/j/84874186657">Register here</a> to join us!</p> <p>If you’re building something interesting with <a href="https://github.com/anchore">Anchore Open Source</a> and would like to share your story, please <a href="https://popey.me/">get in touch</a>. 🙏</p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://popey.com/blog/2025/02/spotlighting-community-stories/"> on February 13, 2025 10:00 AM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">February 11, 2025</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/rbalint.png" alt=""> <h2 class="entry-title"><a href="https://balintreczey.hu/blog/supercharge-your-installs-with-apt-eatmydata-because-who-needs-crash-safety-anyway/" title="ubuntu – Obsessed with reality">Supercharge Your Installs with apt-eatmydata: Because Who Needs Crash Safety Anyway? 😈</a></h2> <h3>Balint Reczey</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <div class="wp-block-media-text is-stacked-on-mobile"><figure class="wp-block-media-text__media"><img alt="APT eatmydata super cow powers" class="wp-image-1015 size-full" height="768" src="https://balintreczey.hu/blog/wp-content/uploads/2025/02/apt-eatmydata-super-cow-powers.png" width="1024" /></figure><div class="wp-block-media-text__content"> <p>Tired of waiting for <code>apt</code> to finish installing packages? Wish there were a way to make your installations <em>blazingly fast</em> without caring about minor things like, oh, <strong>data integrity</strong>? Well, today is your lucky day! <img alt="🎉" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f389.png" style="height: 1em;" /></p> </div></div> <p>I’m thrilled to introduce <a href="https://tracker.debian.org/pkg/apt-eatmydata"><code>apt-eatmydata</code></a>, now available for <strong>Debian</strong> and <strong>all supported Ubuntu releases</strong>!</p> <h2 class="wp-block-heading">What Is apt-eatmydata?</h2> <p>If you’ve ever used <a><code>libeatmydata</code></a>, you know it’s a nifty little hack that disables <code>fsync()</code> and friends, making package installations <em>way</em> faster by skipping unnecessary disk writes. Normally, you’d have to remember to wrap <code>apt</code> commands manually, like this:</p> <pre class="wp-block-preformatted">eatmydata apt install texlive-full</pre> <p>But who has time for that? <code>apt-eatmydata</code> takes care of this <em>automagically</em> by integrating <code>eatmydata</code> seamlessly into <code>apt</code> itself! That means <strong>every</strong> package install is now turbocharged—no extra typing required. <img alt="🚀" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f680.png" style="height: 1em;" /></p> <h2 class="wp-block-heading">How to Get It</h2> <h3 class="wp-block-heading">Debian</h3> <p>If you’re on <strong>Debian unstable/testing</strong> (or possibly soon in stable-backports), you can install it directly with:</p> <pre class="wp-block-preformatted">sudo apt install apt-eatmydata</pre> <h3 class="wp-block-heading">Ubuntu</h3> <p>Ubuntu users already enjoy faster package installation thanks to <a data-id="https://balintreczey.hu/blog/hello-zstd-compressed-debs-in-ubuntu/" data-type="link" href="https://balintreczey.hu/blog/hello-zstd-compressed-debs-in-ubuntu/">zstd-compressed packages</a> and to switch to even higher gear I’ve backported <code>apt-eatmydata</code> to<strong> all supported Ubuntu releases</strong>. Just add <a href="https://launchpad.net/~firebuild/+archive/ubuntu/apt-eatmydata">this PPA</a> and install:</p> <pre class="wp-block-preformatted">sudo add-apt-repository ppa:firebuild/apt-eatmydata<br />sudo apt install apt-eatmydata</pre> <p>And boom! Your <code>apt install</code> times are getting <strong>serious</strong> upgrade. Let’s run some tests…</p> <pre class="wp-block-preformatted"># pre-download package to measure only the installation<br />$ sudo apt install -d linux-headers-6.8.0-53-lowlatency<br />...<br /># installation time is 9.35s without apt-eatmydata:<br />$ sudo time apt install linux-headers-6.8.0-53-lowlatency<br />...<br />2.30user 2.12system 0:09.35elapsed 47%CPU (0avgtext+0avgdata 174680maxresident)k<br />32inputs+1495216outputs (0major+196945minor)pagefaults 0swaps<br />$ sudo apt install apt-eatmydata<br />...<br />$ sudo apt purge linux-headers-6.8.0-53-lowlatency<br /># installation time is 3.17s with apt-eatmydata: <br />$ sudo time eatmydata apt install linux-headers-6.8.0-53-lowlatency<br />2.30user 0.88system 0:03.17elapsed 100%CPU (0avgtext+0avgdata 174692maxresident)k<br />0inputs+205664outputs (0major+198099minor)pagefaults 0swaps</pre> <p><code>apt-eatmydata</code> just made installing Linux headers <strong>3x faster</strong>!</p> <h2 class="wp-block-heading">But Wait, There’s More! <img alt="🎁" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f381.png" style="height: 1em;" /></h2> <p>If you’re automating CI builds, there’s even a <strong>GitHub Action</strong> to make your workflows faster essentially doing what <code>apt-eatmydata</code> does, just setting it up in less than a second! Check it out here:<br /><img alt="👉" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f449.png" style="height: 1em;" /> <a href="https://github.com/marketplace/actions/apt-eatmydata">GitHub Marketplace: apt-eatmydata</a></p> <h2 class="wp-block-heading">Should You Use It?</h2> <p><img alt="🚨" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f6a8.png" style="height: 1em;" /> <strong>Warning:</strong> <code>apt-eatmydata</code> <strong>is not for all production environments</strong>. If your system crashes mid-install, you <em>might</em> end up with a broken package database. But for throwaway VMs, containers, and CI pipelines? It’s an absolute <strong>game-changer</strong>. I use it on my laptop, too.</p> <p>So go forth and install <strong>recklessly fast</strong>! <img alt="🚀" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f680.png" style="height: 1em;" /></p> <p>If you run into any issues, feel free to file a bug or drop a comment. Happy hacking!</p> <p><em>(To accelerate your CI pipeline or local builds, check out <a data-id="https://balintreczey.hu/blog/how-to-speed-up-your-next-build-with-firebuild/" data-type="link" href="https://balintreczey.hu/blog/how-to-speed-up-your-next-build-with-firebuild/">Firebuild, that speeds up the builds</a>, too!)</em></p> <p></p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://balintreczey.hu/blog/supercharge-your-installs-with-apt-eatmydata-because-who-needs-crash-safety-anyway/"> on February 11, 2025 05:04 PM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">February 08, 2025</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/sil.png" alt=""> <h2 class="entry-title"><a href="https://www.kryogenix.org/days/2025/02/08/use-rss-to-read-newsletters/" title="as days pass by: a weblog by Stuart Langridge">Use RSS to read newsletters</a></h2> <h3>Stuart Langridge</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <p>Everyone's got a newsletter these days (like everyone's got a podcast). In general, I think this is OK: instead of going through a middleman publisher, have a direct connection from you to the people who want to read what you say, so that that audience can't be taken away from you.</p> <p>On the other hand, I don't actually <em>like</em> newsletters. I don't really like giving my email address to random people<sup id="sf-use-rss-to-read-newsletters-1-back"><a class="simple-footnote" href="http://feeds.feedburner.com/kryogenix#sf-use-rss-to-read-newsletters-1" title="despite how it's my business to do so and it's right there on the front page of the website, I know, I know">1</a></sup>, and frankly an email app is not a great way to read long-form text! There are many apps which are a lot better at this.</p> <p>There is a solution to this and the solution is called RSS. <a href="https://bell.bz/love-newsletters-youre-gonna-love-rss/">Andy Bell explains RSS</a> and this is exactly how I read newsletters. If I want to read someone's newsletter and it's on Substack, or ghost.io, or buttondown.email, what I actually do is subscribe to their newsletter <em>but</em> what I'm actually subscribing to is their RSS feed. This sections off newsletter stuff into a completely separate app that I can catch up on when I've got the time, it means that the newsletter owner (or the site they're using) can't decide to "upsell" me on other stuff they do that I'm not interested in, and it's a better, nicer reading experience than my mail app.<sup id="sf-use-rss-to-read-newsletters-2-back"><a class="simple-footnote" href="http://feeds.feedburner.com/kryogenix#sf-use-rss-to-read-newsletters-2" title="Is all of this doable in my mail client? Sure. I could set up filters, put newsletters into their own folders/labels, etc. But that's working around a problem rather than solving it">2</a></sup></p> <p>I use <a href="https://netnewswire.com/">NetNewsWire</a> on my iOS phone, but there are a bunch of other newsreader apps for every platform and you should choose whichever one you want. Andy lists a bunch, above.</p> <p>The question, of course, then becomes: how do you find the RSS feed for a thing you want to read?<sup id="sf-use-rss-to-read-newsletters-3-back"><a class="simple-footnote" href="http://feeds.feedburner.com/kryogenix#sf-use-rss-to-read-newsletters-3" title="I suggested to Andy that he ought to write this post explaining how to do this and then realised that I should do it myself and stop being such a lazy snipe, so here it is">3</a></sup> Well, it turns out... you don't have to.</p> <p>When you want to subscribe to a newsletter, you literally just put the web address of the newsletter itself into your RSS reader, and that reader will take care of finding the feed and subscribing to it, for you. It's magic. Hooray! I've tested this with substack, with ghost.io, with buttondown.email, and it works with all of them. You don't need to do anything.</p> <p>If that <em>doesn't</em> work, then there is one neat alternative you can try, though. <a href="https://kill-the-newsletter.com/">Kill The Newsletter</a> will give you an email address for any site you name, and provide the incoming emails to that <em>as an RSS feed</em>. So, if you've found a newsletter which <em>doesn't</em> exist on the web (boo hiss!) and doesn't provide an RSS feed, then you go to KTN, it gives you some randomly-generated email address, you subscribe to the intransigent newsletter <em>with that email address</em>, and then you can subscribe to the resultant feed in your RSS reader. It's dead handy.</p> <p>If you run a newsletter and it <em>doesn't</em> have an RSS feed and you want it to have, then have a look at whatever newsletter software you use; it will almost certainly provide a way to create one, and you might have to tick a box. (You might also want to complain to the software creators that that box wasn't ticked by default.) If you've got an RSS feed for the newsletter that you write, but putting your site's address into an RSS reader doesn't <em>find</em> that RSS feed, then what you need is <a href="https://www.rssboard.org/rss-autodiscovery">RSS autodiscovery</a>, which is the "magic" alluded to above; you add a line to your site's HTML in the <code>&lt;head&gt;</code> section which reads <code>&lt;link rel="alternate" type="application/rss+xml" title="RSS" href="https://URL/of/your/feed"&gt;</code> and then it'll work.</p> <p>I like this. Read newsletters at my pace, in my choice of app, on my terms. More of that sort of thing.</p><ol class="simple-footnotes"><li id="sf-use-rss-to-read-newsletters-1">despite how it's my business to do so and it's right there on the front page of the website, I know, I know <a class="simple-footnote-back" href="http://feeds.feedburner.com/kryogenix#sf-use-rss-to-read-newsletters-1-back">↩</a></li><li id="sf-use-rss-to-read-newsletters-2">Is all of this doable in my mail client? Sure. I could set up filters, put newsletters into their own folders/labels, etc. But that's working around a problem rather than solving it <a class="simple-footnote-back" href="http://feeds.feedburner.com/kryogenix#sf-use-rss-to-read-newsletters-2-back">↩</a></li><li id="sf-use-rss-to-read-newsletters-3">I <a href="https://bsky.app/profile/sil.kryogenix.org/post/3lhnuv42cqk2e">suggested to Andy</a> that he ought to write this post explaining how to do this and then realised that I should do it myself and stop being such a lazy snipe, so here it is <a class="simple-footnote-back" href="http://feeds.feedburner.com/kryogenix#sf-use-rss-to-read-newsletters-3-back">↩</a></li></ol> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://www.kryogenix.org/days/2025/02/08/use-rss-to-read-newsletters/"> on February 08, 2025 03:09 PM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">February 04, 2025</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/lubuntublog.png" alt=""> <h2 class="entry-title"><a href="https://lubuntu.me/plucky-alpha/" title="Lubuntu">Lubuntu Plucky Puffin Alpha Notes</a></h2> <h3>Lubuntu Blog</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> Lubuntu Plucky Puffin is the current development branch of Lubuntu, which will become 25.04. Since the release of 24.10, we have been hard at work polishing the experience and fixing bugs in the upcoming release. Below, we detail some of the changes you can look forward to in 25.04. Two Minute Minimal Install When installing […] <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://lubuntu.me/plucky-alpha/"> on February 04, 2025 08:32 PM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">February 03, 2025</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/sil.png" alt=""> <h2 class="entry-title"><a href="https://www.kryogenix.org/days/2025/02/03/blog-questions-challenge/" title="as days pass by: a weblog by Stuart Langridge">Blog Questions Challenge</a></h2> <h3>Stuart Langridge</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <p>The latest thing circulating around people still blogging is the Blog Questions Challenge; <a href="https://hicks.design/journal/blog-questions-challenge">Jon</a> did it (and <a href="https://mastodon.social/@jonhicks/113922089500368028">asked if I was</a>) and so have <a href="https://adactio.com/journal/21674">Jeremy</a> and <a href="https://ethanmarcotte.com/wrote/blog-questions-challenge/">Ethan</a> and a bunch of others, so clearly it is time I should get on board, fractionally late as ever.<sup id="sf-blog-questions-challenge-1-back"><a class="simple-footnote" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-1" title="In my defence, it was my birthday.">1</a></sup></p> <h3>Why did you start blogging in the first place?</h3> <p>Some other people I admired were doing it. I think the person I was most influenced by to start doing it was <a href="https://simonwillison.net">Simon Willison</a>, who is also still at it<sup id="sf-blog-questions-challenge-2-back"><a class="simple-footnote" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-2" title="although no longer at simon.incutio.com -- what even was Incutio?">2</a></sup>, but a whole bunch of people got on board at around that same time, back in the early days when you be a medium-sized fish in a small pool just by participating. Mark Pilgrim springs to mind as well -- that's a good example of having influence, when the "standard format" of permalinks got sort of hashed out collectively to be <code>/2025/02/03/blog-questions-challenge,</code> which a lot of places still adhere to (although it feels faintly quaint, these days).</p> <p>Interestingly, a lot of the early posts on this site are short two-sentence half-paragraph things, throwaway thoughts, and that all got sucked up by social media... but social media hadn't been invented, back in 2002.</p> <p>Also interestingly: the second post on this here blog<sup id="sf-blog-questions-challenge-3-back"><a class="simple-footnote" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-3" title="I resisted the word &quot;blog&quot; for a long time, calling it a &quot;weblog&quot;, and the activity being &quot;weblogging&quot;, because &quot;blog&quot; is such an ugly word. Like most of the fights I was picking in the mid 2000s, this also seems faintly antiquated and passé now. Sic transit gloria mundi and all that.">3</a></sup> was <a href="https://www.kryogenix.org/days/2002/04/21/release/">bitching at Mozilla about the Firefox release schedule</a>. Nothing new under the sun.<sup id="sf-blog-questions-challenge-4-back"><a class="simple-footnote" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-4" title="or &quot;nihil sub sole novum&quot;, since we're doing Latin quotes today">4</a></sup></p> <h3>What platform are you using to manage your blog and why did you choose it? Have you blogged on other platforms before?</h3> <p>Cor. When it started, this site was being run by <a href="https://www.kryogenix.org/code/castalian/">Castalian</a>, which was basically "classic ASP but Python instead of VBScript", a thing I built. This is because I was using ASP at work on Windows machines, so that was the model for "dynamic web pages" that I understood, but I wasn't on Windows<sup id="sf-blog-questions-challenge-5-back"><a class="simple-footnote" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-5" title="and Windows's relationship with Python has always been a bit unsteady, although it's better these days now that Microsoft are prepared to acknowledge that other people can have ideas">5</a></sup> and so I built it myself. No idea if it still works and I very much doubt it since it's old enough to buy all the drinks these days.</p> <p>After that it was <a href="https://en.wikipedia.org/wiki/Movable_Type">Movable Type</a> for a bit and then, because I'd discovered the idea of funky caching<sup id="sf-blog-questions-challenge-6-back"><a class="simple-footnote" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-6" title="you write the pages in an online form, but then a server process builds a static HTML version of them; the advanced version of this where pages were only built on request was called &quot;funky caching&quot; back then">6</a></sup> it was <a href="https://www.kryogenix.org/code/vellum/">Vellum</a>, that model (a) in Python and (b) written by me. <em>Then</em> for a while it was "Thort", which was based on CouchDB<sup id="sf-blog-questions-challenge-7-back"><a class="simple-footnote" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-7" title="if a disinterested observer were to consider this progression, they might unfairly but accurately conclude that whatever this site runs on is basically a half-arsed system I built based on the latest thing I'm interested in, mightn't they?">7</a></sup>, and then it was WordPress, and then in 2014 I <a href="https://www.kryogenix.org/days/2014/02/13/static-electricity/">switched from WP to a static build</a> based on <a href="https://getpelican.com/">Pelican</a>, which it still is to this day. Crikey, that was over ten years ago!<sup id="sf-blog-questions-challenge-8-back"><a class="simple-footnote" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-8" title="tempus fugit. OK, I'll stop now.">8</a></sup> I like static site generators: I even wrote <a href="https://websitesetup.org/best-static-site-generators/">10 Popular Static Site Generators</a> a few years ago for WebsiteSetup which I think is still pretty good.</p> <h3>How do you write your posts? For example, in a local editing tool, or in a panel/dashboard that’s part of your blog?</h3> <p>In my text editor, which is <a href="https://www.sublimetext.com/">Sublime Text</a>. The static setup is here on my machine; I write a post, I type <code>make kryogenix</code>, and it runs a whole little series of scripts which invoke Pelican to build the static HTML for the blog, do a few things that I've added (such as add footnote handling<sup id="sf-blog-questions-challenge-9-back"><a class="simple-footnote" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-9" title="like this!">9</a></sup>, make <code>og:image</code> links and images<sup id="sf-blog-questions-challenge-10-back"><a class="simple-footnote" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-10" title="an idea I stole shamelessly from Zach Leatherman">10</a></sup>, and sort of handle webmentions but that's broken at the moment) and then copy it up to my actual website (via git) to be published.</p> <p>It's all a bit lashed together, to be honest, but this whole website is like that. It is something like an ancient city, such as London or Rome; what this site is mostly built on is the ruins of the previous history of the city. Sometimes the older bits poke through because they're still actually OK, or they never got updated; sometimes they've been replaced with the new shiny. You should see the <code>.htaccess</code> file, which operates a bewildering set of redirects through about six different generations of URLs so <a href="https://www.w3.org/Provider/Style/URI">all the old links still work</a>.<sup id="sf-blog-questions-challenge-11-back"><a class="simple-footnote" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-11" title="Outgoing links are made to continue to work via unrot.link from the excellent Remy Sharp">11</a></sup></p> <h3>When do you feel most inspired to write?</h3> <p>When the muse seizes me. Sometimes that's a lot; sometimes not. I do quite a lot of <a href="https://www.kryogenix.org/books/">paid writing</a> as part of my various day jobs for others, and quite a lot of creative writing as part of running a <a href="https://www.youtube.com/@pbproleplaying3278">play-by-post D&amp;D campaign</a>, and that sucks up a reasonable amount of the writing energy, but there are things which just demand going on the website. Normally these days it's things where I want them to be a reference of some kind -- maybe of a useful tech thing, or some important thought, or something interesting -- for myself or for others. </p> <p>Alternatively you might think the answer is "while in the pub, which leads to making random notes in an email to myself from my phone and then writing a blog post when I get home" and while this is not true, it's not <em>not</em> true either. I do not want to do a histogram of posting times from this site because I am worried that I will find that the majority are at, like, 11.15pm.</p> <h3>Do you publish immediately after writing, or do you let it simmer a bit as a draft?</h3> <p>Always post immediately. I have discovered about myself that, for semi-ephemeral stuff like posts here or projects that I do for fun, that I need to get them done as part of that initial burst of inspiration and energy. If I don't get it done, then my enthusiasm will fade and they will linger half-finished for ever and never get completed. I don't necessarily <em>like</em> this, but I've learned to live with it. If I think of an idea for a post and write a note about it and then <em>don't</em> do it, when I rediscover the note a week later it will not seem anything like as compelling. So posts are mostly written as one long stream-of-consciousness to capitalise on the burning of the creative fire before it gets doused by time or work or everything going on in the world. Carpe diem, I guess.<sup id="sf-blog-questions-challenge-12-back"><a class="simple-footnote" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-12" title="I was lying about not doing this any more, obviously">12</a></sup></p> <h3>What’s your favourite post on your blog?</h3> <p>Maybe <a href="https://www.kryogenix.org/days/2012/02/04/it-s-cold-outside/">It's Cold Outside</a>, or <a href="https://www.kryogenix.org/days/2012/03/11/monkey-island-2-for-about-the-fifth-time/">Monkey Island 2, for about the fifth time</a>, or <a href="https://www.kryogenix.org/days/2017/10/15/charles-paget-wade-and-the-underthing/">Charles Paget Wade and the Underthing</a> for writing, although each of them have little burrs in the wording that I want to polish when I re-read them. The <a href="https://www.kryogenix.org/days/2025/01/30/forty-nine/">series of birthday posts</a> have been going on since the beginning, one every year, which probably wins for consistency. For technical stuff, maybe <a href="https://www.kryogenix.org/days/2014/05/13/some-thoughts-on-soonsnap-and-little-big-details/">Some thoughts on soonsnap and little big details</a> (now sadly defunct) or <a href="https://www.kryogenix.org/days/2013/06/06/the-thing-and-the-whole-of-the-thing-on-drm-in-html/">The thing and the whole of the thing: on DRM in HTML</a>. I like my own writing, mostly. Arrogant, I know.</p> <h3>Any future plans for your blog? Maybe a redesign, a move to another platform, or adding a new feature?</h3> <p>Not really at the moment, but, as above, these things tend to arrive in a blizzard of excitement and implementation and then linger forever once done. But right now... it all seems to work OK. Ask me when I get back from the pub.</p> <h3>Next?</h3> <p>Well, I should probably point back at some of the people who inspired me to do this or other things and keep doing so to this day. So <a href="https://simonwillison.net/">Simon</a>, <a href="https://remysharp.com/">Remy</a>, and <a href="https://brucelawson.co.uk/">Bruce</a>, perhaps!</p><ol class="simple-footnotes"><li id="sf-blog-questions-challenge-1">In my defence, it was <a href="https://www.kryogenix.org/days/2025/01/30/forty-nine/">my birthday</a>. <a class="simple-footnote-back" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-1-back">↩</a></li><li id="sf-blog-questions-challenge-2">although no longer at <code>simon.incutio.com</code> -- what even was Incutio? <a class="simple-footnote-back" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-2-back">↩</a></li><li id="sf-blog-questions-challenge-3">I resisted the word "blog" for a <em>long</em> time, calling it a "weblog", and the activity being "weblogging", because "blog" is such an ugly word. Like most of the fights I was picking in the mid 2000s, this also seems faintly antiquated and passé now. Sic transit gloria mundi and all that. <a class="simple-footnote-back" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-3-back">↩</a></li><li id="sf-blog-questions-challenge-4">or "nihil sub sole novum", since we're doing Latin quotes today <a class="simple-footnote-back" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-4-back">↩</a></li><li id="sf-blog-questions-challenge-5">and Windows's relationship with Python has always been a bit unsteady, although it's better these days now that Microsoft are prepared to acknowledge that other people can have ideas <a class="simple-footnote-back" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-5-back">↩</a></li><li id="sf-blog-questions-challenge-6">you write the pages in an online form, but then a server process builds a static HTML version of them; the advanced version of this where pages were only built on request was called "funky caching" back then <a class="simple-footnote-back" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-6-back">↩</a></li><li id="sf-blog-questions-challenge-7">if a disinterested observer were to consider this progression, they might unfairly but accurately conclude that whatever this site runs on is basically a half-arsed system I built based on the latest thing I'm interested in, mightn't they? <a class="simple-footnote-back" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-7-back">↩</a></li><li id="sf-blog-questions-challenge-8">tempus fugit. OK, I'll stop now. <a class="simple-footnote-back" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-8-back">↩</a></li><li id="sf-blog-questions-challenge-9">like this! <a class="simple-footnote-back" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-9-back">↩</a></li><li id="sf-blog-questions-challenge-10">an idea I stole <em>shamelessly</em> from <a href="https://www.zachleat.com/">Zach Leatherman</a> <a class="simple-footnote-back" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-10-back">↩</a></li><li id="sf-blog-questions-challenge-11"><em>Outgoing</em> links are made to continue to work via <a href="https://unrot.link/">unrot.link</a> from the excellent <a href="https://remysharp.com/">Remy Sharp</a> <a class="simple-footnote-back" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-11-back">↩</a></li><li id="sf-blog-questions-challenge-12">I was lying about not doing this any more, obviously <a class="simple-footnote-back" href="http://feeds.feedburner.com/kryogenix#sf-blog-questions-challenge-12-back">↩</a></li></ol> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://www.kryogenix.org/days/2025/02/03/blog-questions-challenge/"> on February 03, 2025 07:17 PM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">January 27, 2025</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/stgraber.png" alt=""> <h2 class="entry-title"><a href="https://stgraber.org/2025/01/27/announcing-incus-6-9/" title="Planet Ubuntu – Stéphane Graber's website">Announcing Incus 6.9</a></h2> <h3>St&eacute;phane Graber</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <p>The Incus team is pleased to announce the release of Incus 6.9!</p> <p>This is a bit of a lighter release given the holiday break, but it features some nice feature additions on top of the usual health dose of bugfixes.</p> <figure class="wp-block-image size-full"><a href="https://linuxcontainers.org/incus/try-it/"><img alt="" class="wp-image-1670" height="615" src="https://stgraber.org/wp-content/uploads/2025/01/image-1.png" width="987" /></a></figure> <p>The highlights for this release are:</p> <ul class="wp-block-list"> <li>Instance network ACLs on bridge networks</li> <li>Enhancements to QEMU scriptlet</li> <li>VM memory dumps</li> <li>Uplink addresses in OVN network state</li> <li>Creation of storage volumes through server preseed file</li> <li>Setting description in create commands</li> </ul> <p>The full announcement and changelog can be <a href="https://discuss.linuxcontainers.org/t/incus-6-9-has-been-released/22679" 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> <figure class="wp-block-image size-full"><a href="https://fosdem.org"><img alt="" class="wp-image-1643" height="302" src="https://stgraber.org/wp-content/uploads/2024/12/image-1.png" width="789" /></a></figure> <p>Some of the Incus maintainers will be present at FOSDEM 2025, helping run both the <a href="https://fosdem.org/2025/schedule/track/containers/">containers</a> and <a href="https://fosdem.org/2025/schedule/track/kernel/">kernel</a> devrooms. For those arriving in town early, there will be a “Friends of Incus” gathering sponsored by <a href="https://futurfusion.io">FuturFusion</a> on Thursday evening (January 30th), you can find the details of that <a href="https://discuss.linuxcontainers.org/t/friends-of-incus-gathering-in-brussels-belgium-fosdem-week/22281">here</a>.</p> <p></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> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://stgraber.org/2025/01/27/announcing-incus-6-9/"> on January 27, 2025 06:19 PM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">January 19, 2025</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/fossfreedom.png" alt=""> <h2 class="entry-title"><a href="https://ubuntubudgie.org/2025/01/a-quick-look-at-digitalocean/" title="Ubuntu Budgie">A Quick Look at DigitalOcean</a></h2> <h3>David Mohammed</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <p>For several years, DigitalOcean has been an important sponsor of Ubuntu Budgie. They provide the infrastructure we need to host our website at https://ubuntubudgie.org and our Discourse community forum at https://discourse.ubuntubudgie.org. Maybe you are familiar with them. Maybe you use them in your personal or professional life. Or maybe, like me, you didn’t really see how they would benefit you.</p> <p><a href="https://ubuntubudgie.org/2025/01/a-quick-look-at-digitalocean/" rel="nofollow">Source</a></p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://ubuntubudgie.org/2025/01/a-quick-look-at-digitalocean/"> on January 19, 2025 05:27 PM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">January 09, 2025</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="images/nobody.png" alt=""> <h2 class="entry-title"><a href="https://nobuto-m.github.io/post/2025/how-to-prevent-trackpoint-events-from-waking-up-thinkpad-t14-gen-5-amd-from-suspend/" title="Planet-Ubuntu | Nobuto Murata">How to prevent TrackPoint or touchpad events from waking up ThinkPad T14 Gen 5 AMD from suspend</a></h2> <h3>Nobuto Murata</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <h2 id="tldr">TL;DR</h2> <p>Try the following lines in your custom udev rules, e.g.<br /> <code>/etc/udev/rules.d/99-local-disable-wakeup-events.rules</code></p> <div class="highlight"><pre class="chroma" tabindex="0"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nv">KERNEL</span><span class="o">==</span><span class="s2">"i2c-ELAN0676:00"</span>, <span class="nv">SUBSYSTEM</span><span class="o">==</span><span class="s2">"i2c"</span>, <span class="nv">DRIVERS</span><span class="o">==</span><span class="s2">"i2c_hid_acpi"</span>, ATTR<span class="o">{</span>power/wakeup<span class="o">}=</span><span class="s2">"disabled"</span> </span></span><span class="line"><span class="cl"><span class="nv">KERNEL</span><span class="o">==</span><span class="s2">"PNP0C0E:00"</span>, <span class="nv">SUBSYSTEM</span><span class="o">==</span><span class="s2">"acpi"</span>, <span class="nv">DRIVERS</span><span class="o">==</span><span class="s2">"button"</span>, ATTRS<span class="o">{</span>path<span class="o">}==</span><span class="s2">"\_SB_.SLPB"</span>, ATTR<span class="o">{</span>power/wakeup<span class="o">}=</span><span class="s2">"disabled"</span> </span></span></code></pre></div> <details class="toc-inpage d-print-none " open="open"> Table of Contents <nav id="TableOfContents"> <ul> <li><a href="https://nobuto-m.github.io/tag/planet-ubuntu/index.xml#tldr">TL;DR</a></li> <li><a href="https://nobuto-m.github.io/tag/planet-ubuntu/index.xml#the-motivation">The motivation</a></li> <li><a href="https://nobuto-m.github.io/tag/planet-ubuntu/index.xml#disabling-touchpad-as-a-wakeup-source-on-t14-gen-5-amd">Disabling touchpad as a wakeup source on T14 Gen 5 AMD</a></li> <li><a href="https://nobuto-m.github.io/tag/planet-ubuntu/index.xml#disabling-trackpoint-as-a-wakeup-source-on-t14-gen-5-amd">Disabling TrackPoint as a wakeup source on T14 Gen 5 AMD</a></li> <li><a href="https://nobuto-m.github.io/tag/planet-ubuntu/index.xml#in-the-case-of-thinkpad-t14-gen-3-amd">In the case of ThinkPad T14 Gen 3 AMD</a></li> <li><a href="https://nobuto-m.github.io/tag/planet-ubuntu/index.xml#references">References</a></li> </ul> </nav> </details> <h2 id="the-motivation">The motivation</h2> <figure id="figure-whenever-something-touches-the-red-cap-the-system-wakes-up-from-suspends2idle"> <div class="d-flex justify-content-center"> <div class="w-100"><img alt="Whenever something touches the red cap, the system wakes up from suspend/s2idle." data-zoomable="data-zoomable" height="428" src="https://nobuto-m.github.io/post/2025/how-to-prevent-trackpoint-events-from-waking-up-thinkpad-t14-gen-5-amd-from-suspend/featured_hu236477c92f30afd096faecc971ed105b_216203_4c1c11344310bee682732078c26bf1f3.webp" width="760" /></div> </div> Whenever something touches the red cap, the system wakes up from suspend/s2idle. </figure> <p>I’ve used ThinkPad T14 Gen 3 AMD for 2 years, and I recently purchased T14 <strong>Gen 5</strong> AMD. The previous system as Gen 3 annoyed me so much because the laptop randomly woke up from suspend even inside a backpack on its own, heated up the confined air in it, and drained the battery pretty fast as a consequence. Basically it’s too sensitive to any events. For example, whenever a USB Type-C cable is plugged in as a power source or whenever something touches the TrackPoint <strong>even if a display on a closed lid slightly makes contact with the red cap, the system wakes up from suspend</strong>. It was uncontrollable.</p> <p>I was hoping that Gen 5 would make a difference, and it did when it comes to the power source event. However, frequent wakeups due to the TrackPoint event remained the same so I started to dig in.</p> <h2 id="disabling-touchpad-as-a-wakeup-source-on-t14-gen-5-amd">Disabling touchpad as a wakeup source on T14 Gen 5 AMD</h2> <p>Disabling touchpad events as a wakeup source is straightforward. The touchpad device, <code>ELAN0676:00 04F3:3195 Touchpad</code>, can be found in the udev device tree as follows.</p> <div class="highlight"><pre class="chroma" tabindex="0"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ udevadm info --tree </span></span><span class="line"><span class="cl">... </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> └─input/input12 </span></span><span class="line"><span class="cl"> ┆ P: /devices/platform/AMDI0010:01/i2c-1/i2c-ELAN0676:00/0018:04F3:3195.0001/input/input12 </span></span><span class="line"><span class="cl"> ┆ M: input12 </span></span><span class="line"><span class="cl"> ┆ R: <span class="m">12</span> </span></span><span class="line"><span class="cl"> ┆ U: input </span></span><span class="line"><span class="cl"> ┆ E: <span class="nv">DEVPATH</span><span class="o">=</span>/devices/platform/AMDI0010:01/i2c-1/i2c-ELAN0676:00/0018:04F3:3195.0001/input/input12 </span></span><span class="line"><span class="cl"> ┆ E: <span class="nv">SUBSYSTEM</span><span class="o">=</span>input </span></span><span class="line"><span class="cl"> ┆ E: <span class="nv">PRODUCT</span><span class="o">=</span>18/4f3/3195/100 </span></span><span class="line"><span class="cl"> ┆ E: <span class="nv">NAME</span><span class="o">=</span><span class="s2">"ELAN0676:00 04F3:3195 Touchpad"</span> </span></span><span class="line"><span class="cl"> ┆ E: <span class="nv">PHYS</span><span class="o">=</span><span class="s2">"i2c-ELAN0676:00"</span> </span></span></code></pre></div><p>And you can get all attributes including parent devices like the following.</p> <div class="highlight"><pre class="chroma" tabindex="0"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ udevadm info --attribute-walk -p /devices/platform/AMDI0010:01/i2c-1/i2c-ELAN0676:00/0018:04F3:3195.0001/input/input12 </span></span><span class="line"><span class="cl">... </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> looking at device <span class="s1">'/devices/platform/AMDI0010:01/i2c-1/i2c-ELAN0676:00/0018:04F3:3195.0001/input/input12'</span>: </span></span><span class="line"><span class="cl"> <span class="nv">KERNEL</span><span class="o">==</span><span class="s2">"input12"</span> </span></span><span class="line"><span class="cl"> <span class="nv">SUBSYSTEM</span><span class="o">==</span><span class="s2">"input"</span> </span></span><span class="line"><span class="cl"> <span class="nv">DRIVER</span><span class="o">==</span><span class="s2">""</span> </span></span><span class="line"><span class="cl"> ... </span></span><span class="line"><span class="cl"> ATTR<span class="o">{</span>name<span class="o">}==</span><span class="s2">"ELAN0676:00 04F3:3195 Touchpad"</span> </span></span><span class="line"><span class="cl"> ATTR<span class="o">{</span>phys<span class="o">}==</span><span class="s2">"i2c-ELAN0676:00"</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl">... </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> looking at parent device <span class="s1">'/devices/platform/AMDI0010:01/i2c-1/i2c-ELAN0676:00'</span>: </span></span><span class="line"><span class="cl"> <span class="nv">KERNELS</span><span class="o">==</span><span class="s2">"i2c-ELAN0676:00"</span> </span></span><span class="line"><span class="cl"> <span class="nv">SUBSYSTEMS</span><span class="o">==</span><span class="s2">"i2c"</span> </span></span><span class="line"><span class="cl"> <span class="nv">DRIVERS</span><span class="o">==</span><span class="s2">"i2c_hid_acpi"</span> </span></span><span class="line"><span class="cl"> ATTRS<span class="o">{</span>name<span class="o">}==</span><span class="s2">"ELAN0676:00"</span> </span></span><span class="line"><span class="cl"> ... </span></span><span class="line"><span class="cl"> ATTRS<span class="o">{</span>power/wakeup<span class="o">}==</span><span class="s2">"enabled"</span> </span></span></code></pre></div><p>The line I’m looking for is <code>ATTRS{power/wakeup}=="enabled"</code>. By using the identifiers of the parent device that has <code>ATTRS{power/wakeup}</code>, I can make sure that <code>/sys/devices/platform/AMDI0010:01/i2c-1/i2c-ELAN0676:00/power/wakeup</code> is always <code>disabled</code> with the custom udev rule as follows.</p> <div class="highlight"><pre class="chroma" tabindex="0"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nv">KERNEL</span><span class="o">==</span><span class="s2">"i2c-ELAN0676:00"</span>, <span class="nv">SUBSYSTEM</span><span class="o">==</span><span class="s2">"i2c"</span>, <span class="nv">DRIVERS</span><span class="o">==</span><span class="s2">"i2c_hid_acpi"</span>, ATTR<span class="o">{</span>power/wakeup<span class="o">}=</span><span class="s2">"disabled"</span> </span></span></code></pre></div><h2 id="disabling-trackpoint-as-a-wakeup-source-on-t14-gen-5-amd">Disabling TrackPoint as a wakeup source on T14 Gen 5 AMD</h2> <p>I’ve seen a pattern already as above so I <em>should</em> be able to apply the same method. The TrackPoint device, <code>TPPS/2 Elan TrackPoint</code>, can be found in the udev device tree.</p> <div class="highlight"><pre class="chroma" tabindex="0"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ udevadm info --tree </span></span><span class="line"><span class="cl">... </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> └─input/input5 </span></span><span class="line"><span class="cl"> ┆ P: /devices/platform/i8042/serio1/input/input5 </span></span><span class="line"><span class="cl"> ┆ M: input5 </span></span><span class="line"><span class="cl"> ┆ R: <span class="m">5</span> </span></span><span class="line"><span class="cl"> ┆ U: input </span></span><span class="line"><span class="cl"> ┆ E: <span class="nv">DEVPATH</span><span class="o">=</span>/devices/platform/i8042/serio1/input/input5 </span></span><span class="line"><span class="cl"> ┆ E: <span class="nv">SUBSYSTEM</span><span class="o">=</span>input </span></span><span class="line"><span class="cl"> ┆ E: <span class="nv">PRODUCT</span><span class="o">=</span>11/2/a/63 </span></span><span class="line"><span class="cl"> ┆ E: <span class="nv">NAME</span><span class="o">=</span><span class="s2">"TPPS/2 Elan TrackPoint"</span> </span></span><span class="line"><span class="cl"> ┆ E: <span class="nv">PHYS</span><span class="o">=</span><span class="s2">"isa0060/serio1/input0"</span> </span></span></code></pre></div><p>And the information of parent devices too.</p> <div class="highlight"><pre class="chroma" tabindex="0"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ udevadm info --attribute-walk -p /devices/platform/i8042/serio1/input/input5 </span></span><span class="line"><span class="cl">... </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> looking at device <span class="s1">'/devices/platform/i8042/serio1/input/input5'</span>: </span></span><span class="line"><span class="cl"> <span class="nv">KERNEL</span><span class="o">==</span><span class="s2">"input5"</span> </span></span><span class="line"><span class="cl"> <span class="nv">SUBSYSTEM</span><span class="o">==</span><span class="s2">"input"</span> </span></span><span class="line"><span class="cl"> <span class="nv">DRIVER</span><span class="o">==</span><span class="s2">""</span> </span></span><span class="line"><span class="cl"> ... </span></span><span class="line"><span class="cl"> ATTR<span class="o">{</span>name<span class="o">}==</span><span class="s2">"TPPS/2 Elan TrackPoint"</span> </span></span><span class="line"><span class="cl"> ATTR<span class="o">{</span>phys<span class="o">}==</span><span class="s2">"isa0060/serio1/input0"</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl">... </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> looking at parent device <span class="s1">'/devices/platform/i8042/serio1'</span>: </span></span><span class="line"><span class="cl"> <span class="nv">KERNELS</span><span class="o">==</span><span class="s2">"serio1"</span> </span></span><span class="line"><span class="cl"> <span class="nv">SUBSYSTEMS</span><span class="o">==</span><span class="s2">"serio"</span> </span></span><span class="line"><span class="cl"> <span class="nv">DRIVERS</span><span class="o">==</span><span class="s2">"psmouse"</span> </span></span><span class="line"><span class="cl"> ATTRS<span class="o">{</span>bind_mode<span class="o">}==</span><span class="s2">"auto"</span> </span></span><span class="line"><span class="cl"> ATTRS<span class="o">{</span>description<span class="o">}==</span><span class="s2">"i8042 AUX port"</span> </span></span><span class="line"><span class="cl"> ATTRS<span class="o">{</span>drvctl<span class="o">}==</span><span class="s2">"(not readable)"</span> </span></span><span class="line"><span class="cl"> ATTRS<span class="o">{</span>firmware_id<span class="o">}==</span><span class="s2">"PNP: LEN0321 PNP0f13"</span> </span></span><span class="line"><span class="cl"> ... </span></span><span class="line"><span class="cl"> ATTRS<span class="o">{</span>power/wakeup<span class="o">}==</span><span class="s2">"disabled"</span> </span></span></code></pre></div><p>I hit the wall here. <code>ATTRS{power/wakeup}=="disabled"</code> for the <code>i8042 AUX port</code> is already there but the TrackPoint still wakes up the system from suspend. I had to do bisecting for all remaining wakeup sources.</p> <details class="spoiler " id="spoiler-2"> The list of the remaining wakeup sources <p></p><div class="highlight"><pre class="chroma" tabindex="0"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ cat /proc/acpi/wakeup </span></span><span class="line"><span class="cl">Device S-state Status Sysfs node </span></span><span class="line"><span class="cl">GPP0 S0 *disabled </span></span><span class="line"><span class="cl">GPP2 S3 *disabled </span></span><span class="line"><span class="cl">GPP5 S0 *enabled pci:0000:00:02.1 </span></span><span class="line"><span class="cl">GPP6 S4 *enabled pci:0000:00:02.2 </span></span><span class="line"><span class="cl">GP11 S4 *enabled pci:0000:00:03.1 </span></span><span class="line"><span class="cl">SWUS S4 *disabled </span></span><span class="line"><span class="cl">GP12 S4 *enabled pci:0000:00:04.1 </span></span><span class="line"><span class="cl">SWUS S4 *disabled </span></span><span class="line"><span class="cl">XHC0 S3 *enabled pci:0000:c4:00.3 </span></span><span class="line"><span class="cl">XHC1 S4 *enabled pci:0000:c4:00.4 </span></span><span class="line"><span class="cl">XHC2 S4 *disabled pci:0000:c6:00.0 </span></span><span class="line"><span class="cl">NHI0 S3 *enabled pci:0000:c6:00.5 </span></span><span class="line"><span class="cl">XHC3 S3 *enabled pci:0000:c6:00.3 </span></span><span class="line"><span class="cl">NHI1 S4 *enabled pci:0000:c6:00.6 </span></span><span class="line"><span class="cl">XHC4 S3 *enabled pci:0000:c6:00.4 </span></span><span class="line"><span class="cl">LID S4 *enabled platform:PNP0C0D:00 </span></span><span class="line"><span class="cl">SLPB S3 *enabled platform:PNP0C0E:00 </span></span></code></pre></div><div class="highlight"><pre class="chroma" tabindex="0"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl"> Wakeup sources: </span></span><span class="line"><span class="cl"> │ [/sys/devices/platform/USBC000:00/power_supply/ucsi-source-psy-USBC000:001/wakeup66]: enabled </span></span><span class="line"><span class="cl"> │ [/sys/devices/platform/USBC000:00/power_supply/ucsi-source-psy-USBC000:002/wakeup67]: enabled </span></span><span class="line"><span class="cl"> │ ACPI Battery [PNP0C0A:00]: enabled </span></span><span class="line"><span class="cl"> │ ACPI Lid Switch [PNP0C0D:00]: enabled </span></span><span class="line"><span class="cl"> │ ACPI Power Button [PNP0C0C:00]: enabled </span></span><span class="line"><span class="cl"> │ ACPI Sleep Button [PNP0C0E:00]: enabled </span></span><span class="line"><span class="cl"> │ AT Translated Set 2 keyboard [serio0]: enabled </span></span><span class="line"><span class="cl"> │ Advanced Micro Devices, Inc. [AMD] ISA bridge [0000:00:14.3]: enabled </span></span><span class="line"><span class="cl"> │ Advanced Micro Devices, Inc. [AMD] Multimedia controller [0000:c4:00.5]: enabled </span></span><span class="line"><span class="cl"> │ Advanced Micro Devices, Inc. [AMD] PCI bridge [0000:00:02.1]: enabled </span></span><span class="line"><span class="cl"> │ Advanced Micro Devices, Inc. [AMD] PCI bridge [0000:00:02.2]: enabled </span></span><span class="line"><span class="cl"> │ Advanced Micro Devices, Inc. [AMD] PCI bridge [0000:00:03.1]: enabled </span></span><span class="line"><span class="cl"> │ Advanced Micro Devices, Inc. [AMD] PCI bridge [0000:00:04.1]: enabled </span></span><span class="line"><span class="cl"> │ Advanced Micro Devices, Inc. [AMD] USB controller [0000:c4:00.3]: enabled </span></span><span class="line"><span class="cl"> │ Advanced Micro Devices, Inc. [AMD] USB controller [0000:c4:00.4]: enabled </span></span><span class="line"><span class="cl"> │ Advanced Micro Devices, Inc. [AMD] USB controller [0000:c6:00.3]: enabled </span></span><span class="line"><span class="cl"> │ Advanced Micro Devices, Inc. [AMD] USB controller [0000:c6:00.4]: enabled </span></span><span class="line"><span class="cl"> │ Advanced Micro Devices, Inc. [AMD] USB controller [0000:c6:00.5]: enabled </span></span><span class="line"><span class="cl"> │ Advanced Micro Devices, Inc. [AMD] USB controller [0000:c6:00.6]: enabled </span></span><span class="line"><span class="cl"> │ Mobile Broadband host interface [mhi0]: enabled </span></span><span class="line"><span class="cl"> │ Plug-n-play Real Time Clock [00:01]: enabled </span></span><span class="line"><span class="cl"> │ Real Time Clock alarm timer [rtc0]: enabled </span></span><span class="line"><span class="cl"> │ Thunderbolt domain [domain0]: enabled </span></span><span class="line"><span class="cl"> │ Thunderbolt domain [domain1]: enabled </span></span><span class="line"><span class="cl"> │ USB4 host controller [0-0]: enabled </span></span><span class="line"><span class="cl"> └─USB4 host controller [1-0]: enabled </span></span></code></pre></div><p></p> </details> <p>Somehow, disabling <code>SLPB</code> “ACPI Sleep Button” stopped undesired wakeups by the TrackPoint.</p> <div class="highlight"><pre class="chroma" tabindex="0"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"> looking at parent device <span class="s1">'/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00'</span>: </span></span><span class="line"><span class="cl"> <span class="nv">KERNELS</span><span class="o">==</span><span class="s2">"PNP0C0E:00"</span> </span></span><span class="line"><span class="cl"> <span class="nv">SUBSYSTEMS</span><span class="o">==</span><span class="s2">"acpi"</span> </span></span><span class="line"><span class="cl"> <span class="nv">DRIVERS</span><span class="o">==</span><span class="s2">"button"</span> </span></span><span class="line"><span class="cl"> ATTRS<span class="o">{</span>hid<span class="o">}==</span><span class="s2">"PNP0C0E"</span> </span></span><span class="line"><span class="cl"> ATTRS<span class="o">{</span>path<span class="o">}==</span><span class="s2">"\_SB_.SLPB"</span> </span></span><span class="line"><span class="cl"> ... </span></span><span class="line"><span class="cl"> ATTRS<span class="o">{</span>power/wakeup<span class="o">}==</span><span class="s2">"enabled"</span> </span></span></code></pre></div><p>The final udev rule is the following. It also disables wakeup events from the keyboard as a side effect, but opening the lid or pressing the power button can still wake up the system so it works for me.</p> <div class="highlight"><pre class="chroma" tabindex="0"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nv">KERNEL</span><span class="o">==</span><span class="s2">"PNP0C0E:00"</span>, <span class="nv">SUBSYSTEM</span><span class="o">==</span><span class="s2">"acpi"</span>, <span class="nv">DRIVERS</span><span class="o">==</span><span class="s2">"button"</span>, ATTRS<span class="o">{</span>path<span class="o">}==</span><span class="s2">"\_SB_.SLPB"</span>, ATTR<span class="o">{</span>power/wakeup<span class="o">}=</span><span class="s2">"disabled"</span> </span></span></code></pre></div><h2 id="in-the-case-of-thinkpad-t14-gen-3-amd">In the case of ThinkPad T14 Gen 3 AMD</h2> <p>After solving the headache of frequent wakeups for T14 Gen5 AMD. I was curious if I could apply the same to Gen 3 AMD retrospectively. Gen 3 has the following wakeup sources active out of the box.</p> <div class="highlight"><pre class="chroma" tabindex="0"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl"> Wakeup sources: </span></span><span class="line"><span class="cl"> │ ACPI Battery [PNP0C0A:00]: enabled </span></span><span class="line"><span class="cl"> │ ACPI Lid Switch [PNP0C0D:00]: enabled </span></span><span class="line"><span class="cl"> │ ACPI Power Button [LNXPWRBN:00]: enabled </span></span><span class="line"><span class="cl"> │ ACPI Power Button [PNP0C0C:00]: enabled </span></span><span class="line"><span class="cl"> │ ACPI Sleep Button [PNP0C0E:00]: enabled </span></span><span class="line"><span class="cl"> │ AT Translated Set 2 keyboard [serio0]: enabled </span></span><span class="line"><span class="cl"> │ Advanced Micro Devices, Inc. [AMD] ISA bridge [0000:00:14.3]: enabled </span></span><span class="line"><span class="cl"> │ Advanced Micro Devices, Inc. [AMD] PCI bridge [0000:00:02.1]: enabled </span></span><span class="line"><span class="cl"> │ Advanced Micro Devices, Inc. [AMD] PCI bridge [0000:00:02.2]: enabled </span></span><span class="line"><span class="cl"> │ Advanced Micro Devices, Inc. [AMD] USB controller [0000:04:00.3]: enabled </span></span><span class="line"><span class="cl"> │ Advanced Micro Devices, Inc. [AMD] USB controller [0000:04:00.4]: enabled </span></span><span class="line"><span class="cl"> │ Advanced Micro Devices, Inc. [AMD] USB controller [0000:05:00.0]: enabled </span></span><span class="line"><span class="cl"> │ Advanced Micro Devices, Inc. [AMD] USB controller [0000:05:00.3]: enabled </span></span><span class="line"><span class="cl"> │ Advanced Micro Devices, Inc. [AMD] USB controller [0000:05:00.4]: enabled </span></span><span class="line"><span class="cl"> │ ELAN0678:00 04F3:3195 Mouse [i2c-ELAN0678:00]: enabled </span></span><span class="line"><span class="cl"> │ Mobile Broadband host interface [mhi0]: enabled </span></span><span class="line"><span class="cl"> │ Plug-n-play Real Time Clock [00:01]: enabled </span></span><span class="line"><span class="cl"> └─Real Time Clock alarm timer [rtc0]: enabled </span></span></code></pre></div><p>Disabling the touchpad event was straightforward. The only difference from Gen 5 was the ID of the device.</p> <div class="highlight"><pre class="chroma" tabindex="0"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nv">KERNEL</span><span class="o">==</span><span class="s2">"i2c-ELAN0678:00"</span>, <span class="nv">SUBSYSTEM</span><span class="o">==</span><span class="s2">"i2c"</span>, <span class="nv">DRIVERS</span><span class="o">==</span><span class="s2">"i2c_hid_acpi"</span>, ATTR<span class="o">{</span>power/wakeup<span class="o">}=</span><span class="s2">"disabled"</span> </span></span></code></pre></div><p>When it comes to the TrackPoint or power source event, nothing was able to stop it from waking up the system even after disabling all wakeup sources. I came across a hidden gem named <code>amd_s2idle.py</code>. The <a href="https://gitlab.freedesktop.org/drm/amd/-/blob/master/scripts/amd_s2idle.py" rel="noopener" target="_blank">“S0i3/s2idle analysis script for AMD systems”</a> is full with the domain knowledge of s2idle like where to look in <code>/proc</code> or <code>/sys</code> or how to enable debug and what part of the logs is important.</p> <p>By running the script, I got the following output around the unexpected wakeup.</p> <div class="highlight"><pre class="chroma" tabindex="0"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">$ sudo python3 ./amd_s2idle.py --debug-ec --duration 30 </span></span><span class="line"><span class="cl">Debugging script for s2idle on AMD systems </span></span><span class="line"><span class="cl">💻 LENOVO 21CF21CFT1 (ThinkPad T14 Gen 3) running BIOS 1.56 (R23ET80W (1.56 )) released 10/28/2024 and EC 1.32 </span></span><span class="line"><span class="cl">🐧 Ubuntu 24.04.1 LTS </span></span><span class="line"><span class="cl">🐧 Kernel 6.11.0-12-generic </span></span><span class="line"><span class="cl">🔋 Battery BAT0 (Sunwoda ) is operating at 90.91% of design </span></span><span class="line"><span class="cl">Checking prerequisites for s2idle </span></span><span class="line"><span class="cl">✅ Logs are provided via systemd </span></span><span class="line"><span class="cl">✅ AMD Ryzen 7 PRO 6850U with Radeon Graphics (family 19 model 44) </span></span><span class="line"><span class="cl">... </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl">Suspending system in 0:00:02 </span></span><span class="line"><span class="cl">Suspending system in 0:00:01 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl">Started at 2025-01-04 00:46:53.063495 (cycle finish expected @ 2025-01-04 00:47:27.063532) </span></span><span class="line"><span class="cl">Collecting data in 0:00:02 </span></span><span class="line"><span class="cl">Collecting data in 0:00:01 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl">Results from last s2idle cycle </span></span><span class="line"><span class="cl">💤 Suspend count: 1 </span></span><span class="line"><span class="cl">💤 Hardware sleep cycle count: 1 </span></span><span class="line"><span class="cl">○ GPIOs active: ['0'] </span></span><span class="line"><span class="cl">🥱 Wakeup triggered from IRQ 9: ACPI SCI </span></span><span class="line"><span class="cl">🥱 Wakeup triggered from IRQ 7: GPIO Controller </span></span><span class="line"><span class="cl">🥱 Woke up from IRQ 7: GPIO Controller </span></span><span class="line"><span class="cl">❌ Userspace suspended for 0:00:14.031448 (&lt; minimum expected 0:00:27) </span></span><span class="line"><span class="cl">💤 In a hardware sleep state for 0:00:10.566894 (75.31%) </span></span><span class="line"><span class="cl">🔋 Battery BAT0 lost 10000 µWh (0.02%) [Average rate 2.57W] </span></span><span class="line"><span class="cl">Explanations for your system </span></span><span class="line"><span class="cl">🚦 Userspace wasn't asleep at least 0:00:30 </span></span><span class="line"><span class="cl"> The system was programmed to sleep for 0:00:30, but woke up prematurely. </span></span><span class="line"><span class="cl"> This typically happens when the system was woken up from a non-timer based source. </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> If you didn't intentionally wake it up, then there may be a kernel or firmware bug </span></span></code></pre></div><p>I compared all the logs generated between the events of power button, power source, TrackPoint, and touchpad. But except for the touchpad event, everything else was coming from GPIO pin #0 and there was no more information of how to distinguish those wakeup triggers. I ended up with a drastic approach of ignoring wakeup triggers from the GPIO pin #0 completely with the following kernel option.</p> <div class="highlight"><pre class="chroma" tabindex="0"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">gpiolib_acpi.ignore_wake<span class="o">=</span>AMDI0030:00@0 </span></span></code></pre></div><p>And I get the line on each boot.</p> <div class="highlight"><pre class="chroma" tabindex="0"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">kernel: amd_gpio AMDI0030:00: Ignoring wakeup on pin <span class="m">0</span> </span></span></code></pre></div><p>That comes with obvious downsides. The system doesn’t wake up frequently any longer, that is good. However, nothing can wake it up after getting into suspend. Opening the lid, pressing the power button or any key is simply ignored since all are going to GPIO pin #0. In the end, I had to enable the touchpad back as a wakeup source explicitly so the system can wakeup by tapping the touchpad. It’s far from ideal, but the touchpad is less sensitive than the TrackPoint so I will keep it that way.</p> <div class="highlight"><pre class="chroma" tabindex="0"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nv">KERNEL</span><span class="o">==</span><span class="s2">"i2c-ELAN0678:00"</span>, <span class="nv">SUBSYSTEM</span><span class="o">==</span><span class="s2">"i2c"</span>, <span class="nv">DRIVERS</span><span class="o">==</span><span class="s2">"i2c_hid_acpi"</span>, ATTR<span class="o">{</span>power/wakeup<span class="o">}=</span><span class="s2">"enabled"</span> </span></span></code></pre></div><p>I guess the limitation is coming from a firmware more or less, but at the same time I don’t expect fixes for the few year old model.</p> <h2 id="references">References</h2> <ul> <li><a href="https://gitlab.freedesktop.org/drm/amd/-/blob/master/scripts/amd_s2idle.py" rel="noopener" target="_blank">scripts/amd_s2idle.py · master · drm / amd · GitLab</a></li> <li><a href="https://gitlab.freedesktop.org/drm/amd/-/issues/2405" rel="noopener" target="_blank">Cannot disable wakeup sources on Yellow Carp / Rembrandt 6850U w/ kernels 6.0 and 6.1 (#2405) · Issues · drm / amd · GitLab</a></li> <li><a href="https://github.com/torvalds/linux/blob/v6.11/drivers/gpio/gpiolib-acpi.c#L31-L41" rel="noopener" target="_blank">ignore_wake, ignore_interrupt linux/drivers/gpio/gpiolib-acpi.c at v6.11 · torvalds/linux</a></li> <li><a href="https://github.com/torvalds/linux/blob/v6.11/drivers/gpio/gpiolib-acpi.c#L1518-L1700" rel="noopener" target="_blank">gpiolib_acpi_quirks linux/drivers/gpio/gpiolib-acpi.c at v6.11 · torvalds/linux</a></li> <li><a href="https://wiki.archlinux.org/title/Lenovo_ThinkPad_T14_%28AMD%29_Gen_3" rel="noopener" target="_blank">Lenovo ThinkPad T14 (AMD) Gen 3 - ArchWiki</a></li> <li><a href="https://github.com/systemd/systemd/issues/27077" rel="noopener" target="_blank">Introduce concept of suspend/resume with dark screen on wakeup · Issue #27077 · systemd/systemd</a></li> </ul> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://nobuto-m.github.io/post/2025/how-to-prevent-trackpoint-events-from-waking-up-thinkpad-t14-gen-5-amd-from-suspend/"> on January 09, 2025 02:50 PM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">December 31, 2024</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/foursixnine.jpg" alt=""> <h2 class="entry-title"><a href="https://foursixnine.io//blog/systemd/linux/hacks/2024/12/31/quickhowtoforsystemdinhibit.html" title="foursixnine's lair">Quick howto for systemd-inhibit</a></h2> <h3>Santiago Zarate</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <h1 id="bit-of-the-why">Bit of the why</h1> <p>So often I come across the need to avoid my system to block forever, or until a process finishes, I can’t recall how did I came across systemd inhibit, but here’s my approach and a bit of motivation</p> <h2 id="motivation">Motivation</h2> <p>I noticed that the <a href="https://ubuntuhandbook.org/index.php/2024/07/setup-media-server-ubuntu/">Gnome Settings</a>, come with <a href="https://gnome.pages.gitlab.gnome.org/rygel/#developer-features">Rygel</a></p> <p>After some fiddling (not much really), it starts directly once I login and I will be using it instead of a fully fledged plex or the like, I just want to stream some videos from time to time from my home pc over my ipad :D using VLC.</p> <h1 id="the-hack">The Hack</h1> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>systemd-inhibit --who=foursixnine --why="maybe there be dragons" --mode block \ bash -c 'while $(systemctl --user is-active -q rygel.service); do sleep 1h; done' </code></pre></div></div> <p>One can also use waitpid and more.</p> <p>Thank you for comming to my ted talk.</p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://foursixnine.io//blog/systemd/linux/hacks/2024/12/31/quickhowtoforsystemdinhibit.html"> on December 31, 2024 12:00 AM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">December 21, 2024</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/mako.png" alt=""> <h2 class="entry-title"><a href="https://mako.cc/copyrighteous/thug-life" title="copyrighteous">Thug Life</a></h2> <h3>Benjamin Mako Hill</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <p>My current playlist is this diorama of <a href="https://luluthepiggy.com/">Lulu the Piggy</a> <a href="https://www.youtube.com/watch?v=5gLoEBbZNis">channeling Tupac Shakur</a> in a toy vending machine in the basement of <a href="https://www.newworldmallny.com/">New World Mall</a> in Flushing Chinatown.</p> <figure class="wp-block-image size-large"><a href="https://mako.cc/copyrighteous/wp-content/uploads/2024/12/lulu_the_piggy_god_judge-20240204_225841670.jpg"><img alt="" class="wp-image-3263" height="768" src="https://mako.cc/copyrighteous/wp-content/uploads/2024/12/lulu_the_piggy_god_judge-20240204_225841670-1024x768.jpg" width="1024" /></a></figure> <p></p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://mako.cc/copyrighteous/thug-life"> on December 21, 2024 11:06 PM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">December 19, 2024</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/mako.png" alt=""> <h2 class="entry-title"><a href="https://mako.cc/copyrighteous/i-am" title="copyrighteous">Being a bread torus</a></h2> <h3>Benjamin Mako Hill</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <p>A <a href="https://mika.im/">concerned nutritional epidemiologist</a> in Tokyo realizes that if you are what you eat, that means…</p> <figure class="wp-block-image size-large"><a href="https://mako.cc/copyrighteous/wp-content/uploads/2024/12/signal-2024-10-04-174020_002.jpeg"><img alt="" class="wp-image-3257" height="1024" src="https://mako.cc/copyrighteous/wp-content/uploads/2024/12/signal-2024-10-04-174020_002-768x1024.jpeg" width="768" /></a></figure> <p>It’s a similar situation in Seoul, albeit with less oil and more confidence. </p> <figure class="wp-block-image size-large"><a href="https://mako.cc/copyrighteous/wp-content/uploads/2024/12/signal-2024-10-04-180227_002.jpeg"><img alt="" class="wp-image-3258" height="1024" src="https://mako.cc/copyrighteous/wp-content/uploads/2024/12/signal-2024-10-04-180227_002-768x1024.jpeg" width="768" /></a></figure> <p></p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://mako.cc/copyrighteous/i-am"> on December 19, 2024 02:49 AM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">December 18, 2024</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/colin-king.png" alt=""> <h2 class="entry-title"><a href="http://smackerelofopinion.blogspot.com/2024/12/c-void-return-gotcha.html" title="A Smackerel of Opinion">C void return gotcha</a></h2> <h3>Colin King</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <p>Last week I was bitten by a interesting C feature. The following terminate function was expected to exit if okay was zero (false) however it exited when zero was passed to it. The reason is the missing semicolon after the return function.<br /></p><p style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5XsE4Yu_I1eR6AWu2lqrFg8fxaCPSapkZB6zAdASbARwqGZuoqE80Eqm97Hm7biYIZ7rjcgJtpwPMUniOKms_bcOqtRVO07JSno8Im1z9y5qgPkQ-I-Zl5Pwe0WerXyHBzevSbEHAu7s9m_YonDxEpwxZ3B47wxnKdsGSaP58iuoc5w7Ef0q5ozMdSAYt/s354/void-return.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="354" data-original-width="341" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5XsE4Yu_I1eR6AWu2lqrFg8fxaCPSapkZB6zAdASbARwqGZuoqE80Eqm97Hm7biYIZ7rjcgJtpwPMUniOKms_bcOqtRVO07JSno8Im1z9y5qgPkQ-I-Zl5Pwe0WerXyHBzevSbEHAu7s9m_YonDxEpwxZ3B47wxnKdsGSaP58iuoc5w7Ef0q5ozMdSAYt/s320/void-return.png" width="308" /></a></p><p style="text-align: left;">The interesting part this that is compiles fine because the void function terminate is allowed to return the void return value, in this case the void return from exit(). <br /></p><p style="text-align: left;"> <br /></p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="http://smackerelofopinion.blogspot.com/2024/12/c-void-return-gotcha.html"> on December 18, 2024 05:43 PM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">December 14, 2024</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="images/nobody.png" alt=""> <h2 class="entry-title"><a href="https://s3hh.wordpress.com/2024/12/14/atomfs-presented-at-oci-weekly-discussion/" title="S3hh's Blog">Atomfs presented at OCI weekly discussion</a></h2> <h3>Serge Hallyn</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> OCI (open container initiative) images are the standard format based on<br />the original docker format. Each container image is represented as an<br />array of ‘layers’, each of which is a .tar.gz. To unpack the container<br />image, untar the first, then untar the second on top of the first, etc.<br /><br />Several years ago, while we were working on a product which ships its<br />root filesystem (and of course containers) as OCI layers, Tycho Andersen<br />(<a href="https://tycho.pizza/" rel="nofollow">https://tycho.pizza/</a>) came up with the idea of ‘atomfs’ as a way to<br />avoid some of the deficiencies of tar<br />(<a href="https://www.cyphar.com/blog/post/20190121-ociv2-images-i-tar" rel="nofollow">https://www.cyphar.com/blog/post/20190121-ociv2-images-i-tar</a>). In<br />‘atomfs’, the .tar.gz layers are replaced by squashfs (now optionally<br />erofs) filesystems with dm-verity root hashes specified. Mounting an<br />image now consists of mounting each squashfs, then merging them with<br />overlay. Since we have the dmverity root hash, we can ensure that the<br />filesystem has not been corrupted without having to checksum the files<br />before mounting, and there is no tar unpacking step.<br /><br />This past week, Ram Chinchani presented atomfs at the OCI weekly<br />discussion, which you can see here<br /><a href="https://www.youtube.com/watch?v=CUyH319O9hM" rel="nofollow">https://www.youtube.com/watch?v=CUyH319O9hM</a> starting at about 28<br />minutes. He showed a full use cycle, starting with a Dockerfile,<br />building atomfs images using stacker, mounting them using atomfs, and<br />then executing a container with lxc. Ram mentioned his goal is to have<br />a containerd snapshotter for atomfs soon. I’m excited to hear that, as<br />it will make it far easier to integrate into e.g. kubernetes.<br /><br />Exciting stuff!<br /> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://s3hh.wordpress.com/2024/12/14/atomfs-presented-at-oci-weekly-discussion/"> on December 14, 2024 03:52 AM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">December 11, 2024</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/salihemin.png" alt=""> <h2 class="entry-title"><a href="https://utappiablog.wordpress.com/2024/12/11/ucaresystem-24-12-11-more-color-and-better-messaging/" title="Utappia">uCareSystem 24.12.11 | More Color and better messaging</a></h2> <h3>Salih Emin</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> I’m pleased to introduce uCareSystem 24.12.11, the latest version of the all-in-one system maintenance tool for Ubuntu, Linux Mint, Debian and its derivatives. This release brings some major changes in UI, fixes and improvements under the hood. Continuing on the path of the earlier release, in this release after many many … many … did […] <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://utappiablog.wordpress.com/2024/12/11/ucaresystem-24-12-11-more-color-and-better-messaging/"> on December 11, 2024 01:10 PM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">December 03, 2024</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/launchpad-heading.png" alt=""> <h2 class="entry-title"><a href="https://blog.launchpad.net/general/introducing-launchpad-bug-templates" title="Launchpad blog">Introducing Launchpad Bug Templates</a></h2> <h3>Launchpad News</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <p>The new feature bug templates in Launchpad aims to streamline the bug reporting process, making it more efficient for both users and project maintainers.</p> <p>In the past, Launchpad provided only a basic description field for filling bug reports. This often led to incomplete or vague submissions, as users may not include essential details or steps to reproduce an issue. This could slow down the debugging process when fixing bugs. </p> <p>To improve this, we are introducing bug templates. These allow project maintainers to guide users when reporting bugs. By offering a structured template, users are prompted to provide all the necessary information, which helps to speed up the development process.</p> <p>To start using bug templates in your project, simply follow these steps:</p> <ul><li>Access your project’s bug page view.</li><li>Select ‘Configure bugs’.</li><li>A field showing the bug template will prompt you to fill in your desired template.</li><li>Save the changes. The template will now be available to users when they report a new bug for your project.</li></ul> <p>For now, only a default bug template can be set per project. Looking ahead, the idea is to expand this by introducing multiple bug templates per project, as well as templates for other content types such as merge proposals or answers. This will allow project maintainers to define various templates for different purposes, making the open-source collaboration process even more efficient.</p> <p>Additionally, we will introduce Markdown support, allowing maintainers to create structured and visually clear templates using features such as headings, lists, or code blocks.</p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://blog.launchpad.net/general/introducing-launchpad-bug-templates"> on December 03, 2024 12:58 PM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">November 17, 2024</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/salihemin.png" alt=""> <h2 class="entry-title"><a href="https://utappiablog.wordpress.com/2024/11/17/ucaresystem-24-11-17-minimalism-and-more-descriptive-options/" title="Utappia">uCareSystem 24.11.17 | Minimalism and more descriptive options</a></h2> <h3>Salih Emin</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> I’m pleased to introduce uCareSystem 24.11.17, the latest version of the all-in-one system maintenance tool. This release brings some minor fixes and improvements with visual changes that you will love. I’m excited to share the details of the latest update to uCareSystem! With this release, the focus is on refining the user experience and modernizing […] <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://utappiablog.wordpress.com/2024/11/17/ucaresystem-24-11-17-minimalism-and-more-descriptive-options/"> on November 17, 2024 12:18 AM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">November 12, 2024</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/paultag.png" alt=""> <h2 class="entry-title"><a href="https://notes.pault.ag/complex-for-whom/" title="Paul's Notes">Complex for Whom?</a></h2> <h3>Paul Tagliamonte</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <p>In basically every engineering organization I’ve ever regarded as particularly high functioning, I’ve sat through one specific recurring conversation which is not – a conversation about “complexity”. Things are good or bad because they are or aren’t complex, architectures needs to be redone because it’s too complex – some refactor of whatever it is won’t work because it’s too complex. You may have even been a part of some of these conversations – or even been the one advocating for simple light-weight solutions. I’ve done it. Many times.</p> <aside class="right"> When I was writing this, I had a flash-back to a over-10 year old post by <code>mjg59</code> about <a href="https://mjg59.dreamwidth.org/2414.html">LightDM</a>. It would be a mistake not to link it here. </aside> <p>Rarely, if ever, do we talk about complexity within its rightful context – complexity <strong>for whom</strong>. <u>Is a solution complex because it’s complex for the end user? Is it complex if it’s complex for an API consumer? Is it complex if it’s complex for the person maintaining the API service? Is it complex if it’s complex for someone outside the team maintaining it to understand?</u> Complexity within a problem domain I’ve come to believe, is fairly zero-sum – there’s a fixed amount of complexity in the problem to be solved, and you can choose to either solve it, or leave it for those downstream of you to solve that problem on their own.</p> <aside class="left"> Although I believe there is a fixed amount of complexity in the lower bound of a problem, you always have the option to change the problem you're solving! </aside> <p>That being said, while I believe there is a <em>lower</em> bound in complexity to contend with for a problem, I do not believe there is an <em>upper</em> bound to the complexity of solutions possible. It is always possible, and in fact, very likely that teams create problems for themselves while trying to solve a problem. The rest of this post is talking to the lower bound. When getting feedback on an early draft of this blog post, I’ve been informed that Fred Brooks coined a term for what I call “lower bound complexity” – “Essential Complexity”, in the paper “<a href="https://www.cs.unc.edu/techreports/86-020.pdf">No Silver Bullet—Essence and Accident in Software Engineering</a>”, which is a better term and can be used interchangeably.</p> <h1 id="complexity-culture">Complexity Culture</h1> <p>In a large enough organization, where the team is high functioning enough to have and maintain trust amongst peers, members of the team will specialize. People will begin to engage with subsets of the work to be done, and begin to have their efficacy measured against that part of the organization’s problems. Incentives shift, and over time it becomes increasingly likely that two engineers may have two very different priorities when working on the same system together. Someone accountable for uptime and tasked with responding to outages will begin to resist changes. Someone accountable for rapidly delivering features will resist gates between them and their users. Companies (either wittingly or unwittingly) will deal with this by tasking engineers with both production (feature development) and operational tasks (maintenance), so the difference in incentives isn’t usually as bad as it <em>could</em> be.</p> <aside class="left"> The events depicted in this movie are fictitious. Any similarity to any person living or dead is merely coincidental. </aside> <p>When we get a bunch of folks from far-flung corners of an organization in a room, fire up a slide deck and throw up some aspirational to-be architecture diagram in order to get a sign-off to solve some problem (be it someone needs a credible promotion packet, new feature needs to get delivered, or the system has begun to fail and needs fixing), the initial reaction will, more often than I’d like, start to devolve into a discussion of how this is going to introduce a bunch of complexity, going to be hard to maintain, why can’t you make it <em>less complex</em>?</p> <aside class="right"> In a high functioning environment, this is a mostly healthy impulse, coming from a good place, and genuinely intended to prevent problems for the whole organization by reducing non-essental complexity. That is good. I'm talking about a conversation discussing removing lower-limit complexity. </aside> <p>Right around here is when I start to try and contextualize the conversation happening around me – understand what complexity is that being discussed, and understand who is taking on that burden. Think about who <em>should</em> be owning that problem, and work through the tradeoffs involved. Is it best solved here, or left to consumers (be them other systems, developers, or users). Should something become an API call’s optional param, taking on all the edge-cases and on, or should users have to implement the logic using the data you return (leaving everyone else to take on all the edge-cases and maintenance)? Should you process the data, or require the user to preprocess it for you?</p> <aside class="left"> <a href="https://layeraleph.com/">Carla Geisser</a> described this as being reminicent of the technique outlined in "<a href="https://web.mit.edu/saltzer/www/publications/endtoend/endtoend.pdf">end to end arguments in system design</a>", which she uses to think about where complexity winds up in a system. It's an extremely good parallel. </aside> <p>Frequently it’s right to make an active and explicit decision to simplify and leave problems to be solved downstream, since they may not actually need to be solved – or perhaps you expect consumers will want to own the specifics of <em>how</em> the problem is solved, in which case you leave lots of documentation and examples. Many other times, especially when it’s something downstream consumers are likely to hit, it’s best solved internal to the system, since the only thing that can come of leaving it unsolved are bugs, frustration and half-correct solutions. This is a grey-space of tradeoffs, not a clear decision tree. No one wants the software manifestation of a katamari ball or a junk drawer, nor does anyone want a half-baked service unable to handle the simplest use-case.</p> <h1 id="head-in-sand-as-a-service">Head-in-sand as a Service</h1> <p>Popoffs about how complex something is, are, to a first approximation, best understood as meaning “complicated for the person making comments”. A lot of the <code>#thoughtleadership</code> believe that an AWS hosted EKS <code>k8s</code> cluster running images built by CI talking to an AWS hosted PostgreSQL RDS is not complex. They’re right. Mostly right. This is less complex – less complex <em>for them</em>. It’s not, however, without complexity and its own tradeoffs – it’s just complexity that <strong>they do not have to deal with</strong>. Now they don’t have to maintain machines that have pesky operating systems or hard drive failures. They don’t have to deal with updating the version of <code>k8s</code>, nor ensuring the backups work. No one has to push some artifact to prod manually. Deployments happen unattended. You click a button and get a cluster.</p> <p>On the other hand, developers outside the ops function need to deal with troubleshooting CI, debugging access control rules encoded in turing complete YAML, permissions issues inside the cluster due to whatever the fuck a service mesh is, everyone needs to learn how to use some <code>k8s</code> tools they only actually use during a bad day, likely while doing some <code>x.509</code> troubleshooting to connect to the cluster (an internal only endpoint; just port forward it) – not to mention all sorts of rules to route packets to their project (a single repo’s binary being run in 3 containers on a single vm host).</p> <aside class="right"> Truly I'm not picking on k8s here; I do genuinely believe it when I say EKS is less complex for me to operate well; that's kinda the whole point. </aside> <p>Beyond that, there’s the invisible complexity – complexity on the interior of a service you depend on. I think about the dozens of teams maintaining the EKS service (which is either run on EC2 instances, or alternately, EC2 instances in a trench coat, moustache and even more shell scripts), the RDS service (also EC2 and shell scripts, but this time accounting for redundancy, backups, availability zones), scores of hypervisors pulled off the shelf (<code>xen</code>, <code>kvm</code>) smashed together with the ones built in-house (<code>firecracker</code>, <code>nitro</code>, etc) running on hardware that has to be refreshed and maintained continuously. Every request processed by network ACL rules, AWS IAM rules, security group rules, using IP space announced to the internet wired through IXPs directly into ISPs. I don’t even want to begin to think about the complexity inherent in how those switches are designed. <em>Shitloads</em> of complexity to solve problems you may or may not have, or even know you had.</p> <aside class="left"> Do I care about invisible complexity? Generally, no. I don't. It's not my problem and they don't show up to my meetings. </aside> <p><strong>What’s more complex? An app running in an in-house 4u server racked in the office’s telco closet in the back running off the office Verizon line, or an app running four hypervisors deep in an AWS datacenter? Which is more complex <em>to you</em>? What about <em>to your organization</em>? <em>In total</em>? Which is more prone to failure? Which is more secure? Is the complexity good or bad? What type of Complexity can you manage effectively? Which threaten the system? Which threaten your users?</strong></p> <h1 id="complexivibes">COMPLEXIVIBES</h1> <p>This extends beyond Engineering. Decisions regarding “what tools are we able to use” – be them existing contracts with cloud providers, CIO mandated SaaS products, a list of the only permissible open source projects – will incur costs in terms of expressed “complexity”. Pinning open source projects to a fixed set makes SBOM production “less complex”. Using only one SaaS provider’s product suite (even if its terrible, because it has all the types of tools you need) makes accreditation “less complex”. If all you have is a contract with <em>Pauly T’s lowest price technically acceptable artisinal cloudary and haberdashery</em>, the way you pay for your compute is “less complex” for the CIO shop, though you will find yourself building your own hosted database template, mechanism to spin up a k8s cluster, and all the operational and technical burden that comes with it. Or you won’t and make it everyone else’s problem in the organization. Nothing you can do will solve for the fact that you <em>must</em> now deal with this problem <em>somewhere</em> because it was less complicated for the business to put the workloads on the existing contract with a cut-rate vendor.</p> <p>Suddenly, the decision to “reduce complexity” because of an existing contract vehicle has resulted in a huge amount of technical risk and maintenance burden being onboarded. Complexity you would otherwise externalize has now been taken on internally. With large enough organizations (specifically, in this case, I’m talking about you, bureaucracies), this is largely ignored or accepted as normal since the personnel cost is understood to be free to everyone involved. Doing it this way is more expensive, more work, less reliable and less maintainable, and yet, somehow, is, in a lot of ways, “less complex” to the organization. It’s particularly bad with bureaucracies, since screwing up a contract will get you into much more trouble than delivering a broken product, leaving basically no reason for anyone to care to fix this.</p> <p>I can’t shake the feeling that for every story of <a href="https://mjw.wtf/weaver-a-tale-of-technical-policy.html">technical mandates gone awry</a>, somewhere just out of sight there’s a decisionmaker optimizing for what they believe to be the least amount of complexity – least hassle, fewest unique cases, most consistency – as they can. They freely offload complexity from their accreditation and risk acceptance functions through mandates. They will never have to deal with it. That does not change the fact that <em>someone does</em>.</p> <h1 id="tcdr-too-complex-didnt-review">TC;DR (TOO COMPLEX; DIDN’T REVIEW)</h1> <p>We wish to rid ourselves of systemic Complexity – after all, complexity is bad, simplicity is good. Removing upper-bound own-goal complexity (“accidental complexity” in Brooks’s terms) is important, but once you hit the lower bound complexity, the tradeoffs become zero-sum. Removing complexity from one part of the system means that somewhere else - maybe outside your organization or in a non-engineering function - must grow it back. Sometimes, the opposite is the case, such as when a previously manual business processes is automated. Maybe that’s a good idea. Maybe it’s not. All I know is that what doesn’t help the situation is conflating complexity with everything we don’t like – legacy code, maintenance burden or toil, cost, delivery velocity.</p> <ul> <li><strong>Complexity is not the same as proclivity to failure.</strong> The most reliable systems I’ve interacted with are unimaginably complex, with layers of internal protection to prevent complete failure. This has its own set of costs which other people <a href="https://how.complexsystems.fail/">have written about extensively</a>.</li> <li><strong>Complexity is not cost.</strong> Sometimes the cost of taking all the complexity in-house is less, for whatever value of cost you choose to use.</li> <li><strong>Complexity is not absolute.</strong> Something simple from one perspective may be wildly complex from another. The impulse to burn down complex sections of code is helpful to have generally, but <a href="https://en.wiktionary.org/wiki/Chesterton%27s_fence">sometimes things are complicated for a reason</a>, even if that reason exists outside your codebase or organization.</li> <li><strong>Complexity is not something you can remove without introducing complexity elsewhere.</strong> Just as not making a decision is a decision itself; choosing to require someone else to deal with a problem rather than dealing with it internally is a choice that needs to be considered in its full context.</li> </ul> <aside class="left"> After reviewing an early draft of this post, <a href="https://layeraleph.com/">Mikey Dickerson</a> described what I was trying to say here back to me as "if you squeeze one part of the water balloon it goes somewhere else", which is a metaphor I've become attached to. </aside> <aside class="right"> Mikey also described these asides as being a Dr. Bronner's label, which I'll own. </aside> <p>Next time you’re sitting through a discussion and someone starts to talk about all the complexity about to be introduced, I want to pop up in the back of your head, politely asking <em>what does complex mean in this context</em>? Is it lower bound complexity? Is this complexity desirable? Is what they’re saying mean something along the lines of I don’t understand the problems being solved, or does it mean something along the lines of this problem <em>should</em> be solved elsewhere? Do they believe this will result in more work for them in a way that you don’t see? Should this not solved at all by changing the bounds of what we should accept or redefine the understood limits of this system? Is the perceived complexity a result of a decision elsewhere? Who’s taking this complexity on, or more to the point, is failing to address complexity required by the problem leaving it to others? Does it impact others? How specifically? What are you not seeing?</p> <p>What <em>can</em> change?</p> <p><em>What should change</em>?</p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://notes.pault.ag/complex-for-whom/"> on November 12, 2024 08:21 PM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">October 20, 2024</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="images/nobody.png" alt=""> <h2 class="entry-title"><a href="https://bryanquigley.com/posts/memory-usage/2024-livecd-memory-usage-compare.html" title="Bryan Quigley">2024 LiveCD Memory Usage Compare</a></h2> <h3>Bryan Quigley</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <p>I am using pretty much the exact same setup I did in <a href="https://bryanquigley.com/posts/memory-usage/2020-livecd-memory-usage-compare.html">2020</a>. Let's see who is more efficient in a live session!</p> <p>But first let's take a look at the image sizes:</p> <p> <svg class="pygal-chart" id="chart-fd9d356f-473a-4959-afc1-0e8913ab09e8" viewBox="0 0 800 600" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs>&gt;&gt;</defs><title>Image size (in G)</title><g class="graph bar-graph vertical"><rect class="background" height="600" width="800" x="0" y="0"></rect><g class="plot" transform="translate(62, 46)"><rect class="background" height="474.74909936110373" width="602.6842626068292" x="0" y="0"></rect><g class="axis y always_show"><g class="guides"><path class="axis major line" d="M0.000000 465.619309 h602.684263"></path><text class="major" x="-5" y="469.11930898877483">0</text><title>0</title></g><g class="guides"><path class="guide line" d="M0.000000 386.914220 h602.684263"></path><text class="" x="-5" y="390.4142195721462">1</text><title>1</title></g><g class="guides"><path class="guide line" d="M0.000000 308.209130 h602.684263"></path><text class="" x="-5" y="311.7091301555176">2</text><title>2</title></g><g class="guides"><path class="guide line" d="M0.000000 229.504041 h602.684263"></path><text class="" x="-5" y="233.004040738889">3</text><title>3</title></g><g class="guides"><path class="guide line" d="M0.000000 150.798951 h602.684263"></path><text class="" x="-5" y="154.2989513222604">4</text><title>4</title></g><g class="guides"><path class="major guide line" d="M0.000000 72.093862 h602.684263"></path><text class="major" x="-5" y="75.5938619056318">5</text><title>5</title></g></g><g class="axis x"><path class="line" d="M0.000000 0.000000 v474.749099"></path><g class="guides"><path class="guide line" d="M40.565287 0.000000 v474.749099"></path><text class="" transform="rotate(20 40.565287 489.749099)" x="40.56528690622889" y="489.74909936110373">Ubuntu</text></g><g class="guides"><path class="guide line" d="M98.515697 0.000000 v474.749099"></path><text class="" transform="rotate(20 98.515697 489.749099)" x="98.51569677227015" y="489.74909936110373">Xubuntu</text></g><g class="guides"><path class="guide line" d="M156.466107 0.000000 v474.749099"></path><text class="" transform="rotate(20 156.466107 489.749099)" x="156.46610663831143" y="489.74909936110373">Xubuntu-minimal</text></g><g class="guides"><path class="guide line" d="M214.416517 0.000000 v474.749099"></path><text class="" transform="rotate(20 214.416517 489.749099)" x="214.41651650435267" y="489.74909936110373">Kubuntu</text></g><g class="guides"><path class="guide line" d="M272.366926 0.000000 v474.749099"></path><text class="" transform="rotate(20 272.366926 489.749099)" x="272.36692637039397" y="489.74909936110373">Lubuntu</text></g><g class="guides"><path class="guide line" d="M330.317336 0.000000 v474.749099"></path><text class="" transform="rotate(20 330.317336 489.749099)" x="330.3173362364352" y="489.74909936110373">Ubuntu Mate</text></g><g class="guides"><path class="guide line" d="M388.267746 0.000000 v474.749099"></path><text class="" transform="rotate(20 388.267746 489.749099)" x="388.2677461024765" y="489.74909936110373">Manjaro 24.1 (KDE)</text></g><g class="guides"><path class="guide line" d="M446.218156 0.000000 v474.749099"></path><text class="" transform="rotate(20 446.218156 489.749099)" x="446.21815596851775" y="489.74909936110373">Linux Mint 22 (Cinnamon)</text></g><g class="guides"><path class="guide line" d="M504.168566 0.000000 v474.749099"></path><text class="" transform="rotate(20 504.168566 489.749099)" x="504.16856583455893" y="489.74909936110373">Fedora 40 (Gnome)</text></g><g class="guides"><path class="guide line" d="M562.118976 0.000000 v474.749099"></path><text class="" transform="rotate(20 562.118976 489.749099)" x="562.1189757006002" y="489.74909936110373">Endless OS 6</text></g></g><g class="series serie-0 color-0"><g class="bars"><g class="bar"><rect class="rect reactive tooltip-trigger" height="456.4895186164459" rx="0" ry="0" width="44.876797400262355" x="18.126888206097707" y="9.129790372328955"></rect><desc class="value">5.8</desc><desc class="x centered">40.565286906228884</desc><desc class="y centered">237.3745496805519</desc><desc class="x_label">Ubuntu</desc></g><g class="bar"><rect class="rect reactive tooltip-trigger" height="306.9498487248516" rx="0" ry="0" width="44.876797400262355" x="76.07729807213899" y="158.6694602639232"></rect><desc class="value">3.9</desc><desc class="x centered">98.51569677227016</desc><desc class="y centered">312.14438462634905</desc><desc class="x_label">Xubuntu</desc></g><g class="bar"><rect class="rect reactive tooltip-trigger" height="196.76272354157152" rx="0" ry="0" width="44.876797400262355" x="134.02770793818024" y="268.8565854472033"></rect><desc class="value">2.5</desc><desc class="x centered">156.46610663831143</desc><desc class="y centered">367.2379472179891</desc><desc class="x_label">Xubuntu-minimal</desc></g><g class="bar"><rect class="rect reactive tooltip-trigger" height="322.69086660817726" rx="0" ry="0" width="44.876797400262355" x="191.9781178042215" y="142.92844238059757"></rect><desc class="value">4.1</desc><desc class="x centered">214.4165165043527</desc><desc class="y centered">304.27387568468623</desc><desc class="x_label">Kubuntu</desc></g><g class="bar"><rect class="rect reactive tooltip-trigger" height="243.98577719154872" rx="0" ry="0" width="44.876797400262355" x="249.9285276702628" y="221.6335317972261"></rect><desc class="value">3.1</desc><desc class="x centered">272.36692637039397</desc><desc class="y centered">343.62642039300044</desc><desc class="x_label">Lubuntu</desc></g><g class="bar"><rect class="rect reactive tooltip-trigger" height="314.82035766651444" rx="0" ry="0" width="44.876797400262355" x="307.8789375363041" y="150.7989513222604"></rect><desc class="value">4</desc><desc class="x centered">330.31733623643527</desc><desc class="y centered">308.20913015551764</desc><desc class="x_label">Ubuntu Mate</desc></g><g class="bar"><rect class="rect reactive tooltip-trigger" height="306.9498487248516" rx="0" ry="0" width="44.876797400262355" x="365.8293474023453" y="158.6694602639232"></rect><desc class="value">3.9</desc><desc class="x centered">388.2677461024765</desc><desc class="y centered">312.14438462634905</desc><desc class="x_label">Manjaro 24.1 (KDE)</desc></g><g class="bar"><rect class="rect reactive tooltip-trigger" height="220.37425036656012" rx="0" ry="0" width="44.876797400262355" x="423.77975726838656" y="245.2450586222147"></rect><desc class="value">2.8</desc><desc class="x centered">446.21815596851775</desc><desc class="y centered">355.4321838054948</desc><desc class="x_label">Linux Mint 22 (Cinnamon)</desc></g><g class="bar"><rect class="rect reactive tooltip-trigger" height="173.151196716583" rx="0" ry="0" width="44.876797400262355" x="481.7301671344279" y="292.46811227219183"></rect><desc class="value">2.2</desc><desc class="x centered">504.1685658345591</desc><desc class="y centered">379.04371063048336</desc><desc class="x_label">Fedora 40 (Gnome)</desc></g><g class="bar"><rect class="rect reactive tooltip-trigger" height="306.9498487248516" rx="0" ry="0" width="44.876797400262355" x="539.6805770004692" y="158.6694602639232"></rect><desc class="value">3.9</desc><desc class="x centered">562.1189757006003</desc><desc class="y centered">312.14438462634905</desc><desc class="x_label">Endless OS 6</desc></g></g></g></g><g class="titles"><text class="title plot_title" x="400.0" y="26">Image size (in G)</text></g><g class="plot overlay" transform="translate(62, 46)"><g class="series serie-0 color-0"></g></g><g class="plot text-overlay" transform="translate(62, 46)"><g class="series serie-0 color-0"></g></g><g class="plot tooltip-overlay" transform="translate(62, 46)"><g class="tooltip" transform="translate(0 0)"><rect class="tooltip-box" height="0" rx="0" ry="0" width="0"></rect><g class="text"></g></g></g><g class="legends" transform="translate(10, 56)"><g class="legend reactive activate-serie" id="activate-serie-0"><rect class="color-0 reactive" height="12" width="12" x="0.0" y="1.0"></rect><text x="17.0" y="11.2"></text></g></g><g class="legends" transform="translate(674, 56)"></g></g></svg></p> <p><a href="https://www.youtube.com/watch?v=UXqq0ZvbOnk">Charge Open Movie</a> is what I viewed if I can make it to YouTube.</p> <p>I decided to be more selective and remove those that did very porly at 1.5G, which was most.</p> <ul> <li>Ubuntu - booted but desktop not stable, took 1.5 minutes to load Firefox</li> <li>Xubuntu-minimal - does not include a web browser so can't further test. Snap is preinstaled even though no apps are - but trying to install a web browser worked but couldn't start.</li> <li>Manjaro KDE - Desktop loads, but browser doesn't</li> <li>Xubuntu - laggy when Firefox is opened, can't load sites</li> <li>Ubuntu Mate -laggy when Firefox is opened, can't load sites</li> <li>Kubuntu - laggy when Firefox is opened, can't load sites</li> <li>Linux Mint 22 - desktop loads, browsers isn't responsive</li> </ul> <p> <svg class="pygal-chart" id="chart-ce7ca372-0ca4-4a62-afb1-cde580bd1b3f" viewBox="0 0 800 600" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs>&gt;&gt;</defs><title>Memory usage compared (in G)</title><g class="graph bar-graph vertical"><rect class="background" height="600" width="800" x="0" y="0"></rect><g class="plot" transform="translate(48, 46)"><rect class="background" height="450.27030796064383" width="673.0658198539837" x="0" y="0"></rect><g class="axis y always_show"><g class="guides"><path class="axis major line" d="M0.000000 441.611264 h673.065820"></path><text class="major" x="-5" y="445.1112635767853">0</text><title>0</title></g><g class="guides"><path class="guide line" d="M0.000000 410.686105 h673.065820"></path><text class="" x="-5" y="414.1861050630048">0.1</text><title>0.1</title></g><g class="guides"><path class="guide line" d="M0.000000 379.760947 h673.065820"></path><text class="" x="-5" y="383.26094654922434">0.2</text><title>0.2</title></g><g class="guides"><path class="guide line" d="M0.000000 348.835788 h673.065820"></path><text class="" x="-5" y="352.33578803544384">0.3</text><title>0.3</title></g><g class="guides"><path class="guide line" d="M0.000000 317.910630 h673.065820"></path><text class="" x="-5" y="321.41062952166334">0.4</text><title>0.4</title></g><g class="guides"><path class="major guide line" d="M0.000000 286.985471 h673.065820"></path><text class="major" x="-5" y="290.4854710078829">0.5</text><title>0.5</title></g><g class="guides"><path class="guide line" d="M0.000000 256.060312 h673.065820"></path><text class="" x="-5" y="259.5603124941024">0.6</text><title>0.6</title></g><g class="guides"><path class="guide line" d="M0.000000 225.135154 h673.065820"></path><text class="" x="-5" y="228.63515398032192">0.7</text><title>0.7</title></g><g class="guides"><path class="guide line" d="M0.000000 194.209995 h673.065820"></path><text class="" x="-5" y="197.7099954665414">0.8</text><title>0.8</title></g><g class="guides"><path class="guide line" d="M0.000000 163.284837 h673.065820"></path><text class="" x="-5" y="166.78483695276094">0.9</text><title>0.9</title></g><g class="guides"><path class="major guide line" d="M0.000000 132.359678 h673.065820"></path><text class="major" x="-5" y="135.85967843898044">1</text><title>1</title></g><g class="guides"><path class="guide line" d="M0.000000 101.434520 h673.065820"></path><text class="" x="-5" y="104.93451992519994">1.1</text><title>1.1</title></g><g class="guides"><path class="guide line" d="M0.000000 70.509361 h673.065820"></path><text class="" x="-5" y="74.00936141141949">1.2</text><title>1.2</title></g><g class="guides"><path class="guide line" d="M0.000000 39.584203 h673.065820"></path><text class="" x="-5" y="43.08420289763893">1.3</text><title>1.3</title></g><g class="guides"><path class="guide line" d="M0.000000 8.659044 h673.065820"></path><text class="" x="-5" y="12.159044383858543">1.4</text><title>1.4</title></g></g><g class="axis x"><path class="line" d="M0.000000 0.000000 v450.270308"></path><g class="guides"><path class="guide line" d="M120.806686 0.000000 v450.270308"></path><text class="" transform="rotate(20 120.806686 465.270308)" x="120.80668561481758" y="465.27030796064383">Lubuntu</text></g><g class="guides"><path class="guide line" d="M336.532910 0.000000 v450.270308"></path><text class="" transform="rotate(20 336.532910 465.270308)" x="336.53290992699186" y="465.27030796064383">Endless OS 6.0</text></g><g class="guides"><path class="guide line" d="M552.259134 0.000000 v450.270308"></path><text class="" transform="rotate(20 552.259134 465.270308)" x="552.2591342391661" y="465.27030796064383">Fedora 40</text></g></g><g class="series serie-0 color-0"><g class="bars"><g class="bar"><rect class="rect reactive tooltip-trigger" height="139.1632133120122" rx="0" ry="0" width="55.68612936911592" x="29.683928465355176" y="302.4480502647731"></rect><desc class="value">0.45</desc><desc class="x centered">57.52699314991314</desc><desc class="y centered">372.0296569207792</desc><desc class="x_label">Lubuntu</desc></g><g class="bar"><rect class="rect reactive tooltip-trigger" height="309.25158513780485" rx="0" ry="0" width="55.68612936911592" x="245.41015277752942" y="132.35967843898044"></rect><desc class="value">1</desc><desc class="x centered">273.2532174620874</desc><desc class="y centered">286.9854710078829</desc><desc class="x_label">Endless OS 6.0</desc></g><g class="bar"><rect class="rect reactive tooltip-trigger" height="216.47610959646337" rx="0" ry="0" width="55.68612936911592" x="461.1363770897037" y="225.13515398032192"></rect><desc class="value">0.7</desc><desc class="x centered">488.97944177426166</desc><desc class="y centered">333.3732087785536</desc><desc class="x_label">Fedora 40</desc></g></g></g><g class="series serie-1 color-1"><g class="bars"><g class="bar"><rect class="rect reactive tooltip-trigger" height="278.32642662402435" rx="0" ry="0" width="55.68612936911592" x="92.96362093025964" y="163.28483695276094"></rect><desc class="value">0.9</desc><desc class="x centered">120.8066856148176</desc><desc class="y centered">302.4480502647731</desc><desc class="x_label">Lubuntu</desc></g><g class="bar"><rect class="rect reactive tooltip-trigger" height="309.25158513780485" rx="0" ry="0" width="55.68612936911592" x="308.6898452424339" y="132.35967843898044"></rect><desc class="value">1</desc><desc class="x centered">336.5329099269918</desc><desc class="y centered">286.9854710078829</desc><desc class="x_label">Endless OS 6.0</desc></g><g class="bar"><rect class="rect reactive tooltip-trigger" height="340.17674365158535" rx="0" ry="0" width="55.68612936911592" x="524.4160695546082" y="101.43451992519994"></rect><desc class="value">1.1</desc><desc class="x centered">552.2591342391661</desc><desc class="y centered">271.5228917509926</desc><desc class="x_label">Fedora 40</desc></g></g></g><g class="series serie-2 color-2"><g class="bars"><g class="bar"><rect class="rect reactive tooltip-trigger" height="340.17674365158535" rx="0" ry="0" width="55.68612936911592" x="156.24331339516405" y="101.43451992519994"></rect><desc class="value">1.1</desc><desc class="x centered">184.086378079722</desc><desc class="y centered">271.5228917509926</desc><desc class="x_label">Lubuntu</desc></g><g class="bar"><rect class="rect reactive tooltip-trigger" height="402.02706067914636" rx="0" ry="0" width="55.68612936911592" x="371.96953770733836" y="39.58420289763893"></rect><desc class="value">1.3</desc><desc class="x centered">399.81260239189635</desc><desc class="y centered">240.5977332372121</desc><desc class="x_label">Endless OS 6.0</desc></g><g class="bar"><rect class="rect reactive tooltip-trigger" height="432.95221919292675" rx="0" ry="0" width="55.68612936911592" x="587.6957620195126" y="8.659044383858543"></rect><desc class="value">1.4</desc><desc class="x centered">615.5388267040705</desc><desc class="y centered">225.13515398032192</desc><desc class="x_label">Fedora 40</desc></g></g></g></g><g class="titles"><text class="title plot_title" x="400.0" y="26">Memory usage compared (in G)</text></g><g class="plot overlay" transform="translate(48, 46)"><g class="series serie-0 color-0"></g><g class="series serie-1 color-1"></g><g class="series serie-2 color-2"></g></g><g class="plot text-overlay" transform="translate(48, 46)"><g class="series serie-0 color-0"></g><g class="series serie-1 color-1"></g><g class="series serie-2 color-2"></g></g><g class="plot tooltip-overlay" transform="translate(48, 46)"><g class="tooltip" transform="translate(0 0)"><rect class="tooltip-box" height="0" rx="0" ry="0" width="0"></rect><g class="text"></g></g></g><g class="legends" transform="translate(58, 545)"><g class="legend reactive activate-serie" id="activate-serie-0"><rect class="color-0 reactive" height="12" width="12" x="0.0" y="1.0"></rect><text x="17.0" y="11.2">Desktop responsive</text></g><g class="legend reactive activate-serie" id="activate-serie-1"><rect class="color-1 reactive" height="12" width="12" x="336.53290992699186" y="1.0"></rect><text x="353.53290992699186" y="11.2">Web browser loads simple site</text></g><g class="legend reactive activate-serie" id="activate-serie-2"><rect class="color-2 reactive" height="12" width="12" x="0.0" y="22.0"></rect><text x="17.0" y="32.2">YouTube worked fullscreen</text></g></g></g></svg></p> <p>Fedora video is a bit laggy, but watchable.. EndlessOS with Chromium is the most smooth and resonsive watching YouTube.</p> <p>For fun let's look at startup time with 2GB (with me hitting buttons as needed to open a folder)</p> <p> <svg class="pygal-chart" id="chart-c3ebc6bb-6049-45dc-a6f8-27d562992133" viewBox="0 0 800 600" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs>&gt;&gt;</defs><title>Startup time (Seconds)</title><g class="graph bar-graph vertical"><rect class="background" height="600" width="800" x="0" y="0"></rect><g class="plot" transform="translate(122, 46)"><rect class="background" height="495.27030796064383" width="598.2658198539837" x="0" y="0"></rect><g class="axis y always_show"><g class="guides"><path class="axis major line" d="M0.000000 485.745879 h598.265820"></path><text class="major" x="-5" y="489.2458789614007">0</text><title>0</title></g><g class="guides"><path class="guide line" d="M0.000000 434.539271 h598.265820"></path><text class="" x="-5" y="438.03927143858806">10</text><title>10</title></g><g class="guides"><path class="guide line" d="M0.000000 383.332664 h598.265820"></path><text class="" x="-5" y="386.8326639157754">20</text><title>20</title></g><g class="guides"><path class="guide line" d="M0.000000 332.126056 h598.265820"></path><text class="" x="-5" y="335.62605639296277">30</text><title>30</title></g><g class="guides"><path class="guide line" d="M0.000000 280.919449 h598.265820"></path><text class="" x="-5" y="284.4194488701501">40</text><title>40</title></g><g class="guides"><path class="major guide line" d="M0.000000 229.712841 h598.265820"></path><text class="major" x="-5" y="233.21284134733753">50</text><title>50</title></g><g class="guides"><path class="guide line" d="M0.000000 178.506234 h598.265820"></path><text class="" x="-5" y="182.00623382452488">60</text><title>60</title></g><g class="guides"><path class="guide line" d="M0.000000 127.299626 h598.265820"></path><text class="" x="-5" y="130.79962630171218">70</text><title>70</title></g><g class="guides"><path class="guide line" d="M0.000000 76.093019 h598.265820"></path><text class="" x="-5" y="79.59301877889959">80</text><title>80</title></g><g class="guides"><path class="guide line" d="M0.000000 24.886411 h598.265820"></path><text class="" x="-5" y="28.386411256086944">90</text><title>90</title></g></g><g class="axis x"><path class="line" d="M0.000000 0.000000 v495.270308"></path><g class="guides"><path class="guide line" d="M107.381045 0.000000 v495.270308"></path><text class="" transform="rotate(20 107.381045 510.270308)" x="107.38104458917654" y="510.27030796064383">Lubuntu</text></g><g class="guides"><path class="guide line" d="M299.132910 0.000000 v495.270308"></path><text class="" transform="rotate(20 299.132910 510.270308)" x="299.13290992699183" y="510.27030796064383">Endless OS 6.0</text></g><g class="guides"><path class="guide line" d="M490.884775 0.000000 v495.270308"></path><text class="" transform="rotate(20 490.884775 510.270308)" x="490.88477526480716" y="510.27030796064383">Fedora 40</text></g></g><g class="series serie-0 color-0"><g class="bars"><g class="bar"><rect class="rect reactive tooltip-trigger" height="168.9818048252817" rx="0" ry="0" width="148.49264451760416" x="33.13472233037448" y="316.764074136119"></rect><desc class="value">33</desc><desc class="x centered">107.38104458917655</desc><desc class="y centered">401.2549765487598</desc><desc class="x_label">Lubuntu</desc></g><g class="bar"><rect class="rect reactive tooltip-trigger" height="476.2214499621575" rx="0" ry="0" width="148.49264451760416" x="224.88658766818975" y="9.524428999243185"></rect><desc class="value">93</desc><desc class="x centered">299.13290992699183</desc><desc class="y centered">247.63515398032195</desc><desc class="x_label">Endless OS 6.0</desc></g><g class="bar"><rect class="rect reactive tooltip-trigger" height="230.42973385265688" rx="0" ry="0" width="148.49264451760416" x="416.638453006005" y="255.31614510874383"></rect><desc class="value">45</desc><desc class="x centered">490.8847752648071</desc><desc class="y centered">370.53101203507225</desc><desc class="x_label">Fedora 40</desc></g></g></g></g><g class="titles"><text class="title plot_title" x="400.0" y="26">Startup time (Seconds)</text></g><g class="plot overlay" transform="translate(122, 46)"><g class="series serie-0 color-0"></g></g><g class="plot text-overlay" transform="translate(122, 46)"><g class="series serie-0 color-0"></g></g><g class="plot tooltip-overlay" transform="translate(122, 46)"><g class="tooltip" transform="translate(0 0)"><rect class="tooltip-box" height="0" rx="0" ry="0" width="0"></rect><g class="text"></g></g></g><g class="legends" transform="translate(10, 56)"><g class="legend reactive activate-serie" id="activate-serie-0"><rect class="color-0 reactive" height="12" width="12" x="0.0" y="1.0"></rect><text x="17.0" y="11.2">Seconds</text></g></g><g class="legends" transform="translate(731, 56)"></g></g></svg></p> <h2>Conclusion</h2> <ul> <li>Lubuntu lowered it's memory usage from 2020 for loading a desktop 585M to 450M! Kudos to Lubuntu team! </li> <li>Both Fedora and Endless desktops worked in lower memory then 2020 too!</li> <li>Lubuntu, Fedora and Endless all used Zram.</li> <li>Chromium has definitely improved it's memory usage as last time Endless got dinged for using it. Now it appears to work better then Firefox.</li> </ul> <p>Notes:</p> <ul> <li>qemu-system-x86_64 -enable-kvm -cdrom lubuntu-24.04.1-desktop-amd64.iso -m 1.5G -smp 4 -cpu host -vga virtio --full-screen</li> <li>Screen size was set to 1080p/60Hz.</li> <li>I tried to reproduce 585M on Lubuntu 20.04 build, but it failed on anything below 1G.</li> <li>Getting out of full screen on YouTube apparently is an intensive task. Dropped testing that.</li> <li>All Ubuntu was 24.04.1 LTS.</li> </ul> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://bryanquigley.com/posts/memory-usage/2024-livecd-memory-usage-compare.html"> on October 20, 2024 12:54 AM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">October 15, 2024</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="images/nobody.png" alt=""> <h2 class="entry-title"><a href="https://blog.slyon.de/2024/10/15/waiting-for-a-linux-system-to-be-online/" title="Ubuntu – SlyBlog">Waiting for a Linux system to be online</a></h2> <h3>Lukas Märdian</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <div class="wp-block-image"> <figure class="aligncenter size-large"><a href="https://blog.slyon.de/wp-content/uploads/2024/10/gradient-network-connection-background_23-2148874050.avif"><img alt="" class="wp-image-2424" height="569" src="https://blog.slyon.de/wp-content/uploads/2024/10/gradient-network-connection-background_23-2148874050-1024x569.avif" width="1024" /></a>Designed by <a href="https://www.freepik.com">Freepik</a></figure></div> <h2 class="wp-block-heading">What is an “online” system?</h2> <p>Networking is a complex topic, and there is lots of confusion around the definition of an “online” system. Sometimes the boot process gets delayed up to two minutes, because the system still waits for one or more network interfaces to be ready. Systemd provides the <a href="https://systemd.io/NETWORK_ONLINE/"><strong>network-online.target</strong></a> that other service units can rely on, if they are deemed to require network connectivity. But what does “online” actually mean in this context, is a link-local IP address enough, do we need a routable gateway and how about DNS name resolution?</p> <p>The requirements for an “online” network interface depend very much on the services using an interface. For some services it might be good enough to reach their local network segment (e.g. to announce Zeroconf services), while others need to reach domain names (e.g. to mount a NFS share) or reach the global internet to run a web server. On the other hand, the implementation of <strong>network-online.target</strong> varies, depending on which networking daemon is in use, e.g. <strong>systemd-networkd-wait-online.service</strong> or <strong>NetworkManager-wait-online.service</strong>. For Ubuntu, we created a <a href="https://discourse.ubuntu.com/t/spec-definition-of-an-online-system/27838">specification</a> that describes what we as a distro expect an “online” system to be. Having a definition in place, we are able to tackle the <a href="https://bugs.launchpad.net/ubuntu/+bugs?field.searchtext=&amp;orderby=-importance&amp;field.status%3Alist=NEW&amp;field.status%3Alist=OPINION&amp;field.status%3Alist=INVALID&amp;field.status%3Alist=WONTFIX&amp;field.status%3Alist=EXPIRED&amp;field.status%3Alist=CONFIRMED&amp;field.status%3Alist=TRIAGED&amp;field.status%3Alist=INPROGRESS&amp;field.status%3Alist=FIXCOMMITTED&amp;field.status%3Alist=FIXRELEASED&amp;field.status%3Alist=INCOMPLETE_WITH_RESPONSE&amp;field.status%3Alist=INCOMPLETE_WITHOUT_RESPONSE&amp;assignee_option=any&amp;field.assignee=&amp;field.bug_reporter=&amp;field.bug_commenter=&amp;field.subscriber=&amp;field.structural_subscriber=&amp;field.component-empty-marker=1&amp;field.tag=network-online-ordering&amp;field.tags_combinator=ANY&amp;field.status_upstream-empty-marker=1&amp;field.has_cve.used=&amp;field.omit_dupes.used=&amp;field.omit_dupes=on&amp;field.affects_me.used=&amp;field.has_no_package.used=&amp;field.has_patch.used=&amp;field.has_branches.used=&amp;field.has_branches=on&amp;field.has_no_branches.used=&amp;field.has_no_branches=on&amp;field.has_blueprints.used=&amp;field.has_blueprints=on&amp;field.has_no_blueprints.used=&amp;field.has_no_blueprints=on&amp;search=Search">network-online-ordering</a> issues that got reported over the years and can work out solutions to avoid <a href="https://bugs.launchpad.net/netplan/+bug/2060311">delayed boot</a> times on Ubuntu systems.</p> <p>In essence, we want systems to reach the following networking state to be considered online:</p> <ol class="wp-block-list"> <li>Do not wait for “optional” interfaces to receive network configuration</li> <li>Have IPv6 and/or IPv4 “link-local” addresses on every network interface</li> <li>Have at least one interface with a globally routable connection</li> <li>Have functional domain name resolution on any routable interface</li> </ol> <h2 class="wp-block-heading">A common implementation</h2> <p><strong>NetworkManager</strong> and <strong>systemd-networkd</strong> are two very common networking daemons used on modern Linux systems. But they originate from different contexts and therefore show different behaviours in certain scenarios, such as <strong>wait-online</strong>. Luckily, on Ubuntu we already have <a href="https://ubuntu.com/blog/a-declarative-approach-to-linux-networking-with-netplan"><strong>Netplan</strong></a> as a unification layer on top of those networking daemons, that allows for common network configuration, and can also be used to tweak the <strong>wait-online</strong> logic.</p> <p>With the recent release of <a href="https://blog.slyon.de/2024/08/14/netplan-v1-1-released/">Netplan v1.1</a> we introduced initial functionality to tweak the behaviour of the <strong>systemd-networkd-wait-online.service</strong>, as used on Ubuntu Server systems. When <strong>Netplan</strong> is used to drive the <strong>systemd-networkd</strong> backend, it will emit an override configuration file in <strong>/run/systemd/system/systemd-networkd-wait-online.service.d/10-netplan.conf</strong>, listing the specific <a href="https://github.com/canonical/netplan/pull/456">non-optional interfaces that should receive link-local IP configuration</a>. In parallel to that, it defines a list of network interfaces that Netplan detected to be potential global connections, and waits for any of those <a href="https://github.com/canonical/netplan/pull/482">interfaces to reach a globally routable state</a>.</p> <p>Such override config file might look like this:</p> <pre class="wp-block-preformatted"><code>[Unit]<br />ConditionPathIsSymbolicLink=/run/systemd/generator/network-online.target.wants/systemd-networkd-wait-online.service<br /><br />[Service]<br />ExecStart=<br />ExecStart=/lib/systemd/systemd-networkd-wait-online -i eth99.43:carrier -i lo:carrier -i eth99.42:carrier -i eth99.44:degraded -i bond0:degraded<br />ExecStart=/lib/systemd/systemd-networkd-wait-online --any -o routable -i eth99.43 -i eth99.45 -i bond0</code></pre> <p></p> <p>In addition to the new features implemented in Netplan, we reached out to upstream systemd, proposing an <a href="https://github.com/systemd/systemd/pull/34640">enhancement to the <strong>systemd-networkd-wait-online</strong> service</a>, integrating it with <strong>systemd-resolved</strong> to check for the availability of DNS name resolution. Once this is implemented upstream, we’re able to fully control the <strong>systemd-networkd</strong> backend on Ubuntu Server systems, to behave consistently and according to the definition of an “online” system that was lined out above.</p> <h2 class="wp-block-heading">Future work</h2> <p>The story doesn’t end there, because Ubuntu Desktop systems are using <strong>NetworkManager</strong> as their networking backend. This daemon provides its very own <strong>nm-online</strong> utility, utilized by the <strong>NetworkManager-wait-online</strong> systemd service. It implements a much higher-level approach, looking at the networking daemon in general instead of the individual network interfaces. By default, it considers a system to be online once every “autoconnect” profile got activated (or failed to activate), meaning that either a IPv4 or IPv6 address got assigned.</p> <p>There are considerable enhancements to be implemented to this tool, for it to be controllable in a fine-granular way similar to <strong>systemd-networkd-wait-online</strong>, so that it can be instructed to wait for specific networking states on selected interfaces.</p> <h2 class="wp-block-heading">A note of caution</h2> <p>Making a service depend on <strong>network-online.target</strong> is considered an antipattern in most cases. This is because networking on Linux systems is very dynamic and the systemd target can only ever reflect the networking state at a single point in time. It cannot guarantee this state to be remained over the uptime of your system and has the potentially to delay the boot process considerably. Cables can be unplugged, wireless connectivity can drop, or remote routers can go down at any time, affecting the connectivity state of your local system. Therefore, “instead of wondering what to do about network.target, please just fix your program to be friendly to dynamically changing network configuration.” [<a href="https://systemd.io/NETWORK_ONLINE/#should-network-onlinetarget-be-used">source</a>].</p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://blog.slyon.de/2024/10/15/waiting-for-a-linux-system-to-be-online/"> on October 15, 2024 07:33 AM</a></span> </div> </div><!-- .post --> <h3 id="todaysDate">October 10, 2024</h3> <div class="hentry post"> <div class="postHeader"> <img class="face" src="heads/bluesabre.png" alt=""> <h2 class="entry-title"><a href="https://bluesabre.org/2024/10/10/xubuntu-24-10-released/" title="Xubuntu Archives - Sean Davis">Xubuntu 24.10 Released</a></h2> <h3>Sean Davis</h3> <div class="clearBoth"></div> </div> <div class="entry-content"> <p>Xubuntu 24.10, "Oracular Oriole," is now available, featuring many updated applications from Xfce (4.18 and 4.19), GNOME (46 and 47), and MATE (1.26).</p> <p>The post <a href="https://bluesabre.org/2024/10/10/xubuntu-24-10-released/">Xubuntu 24.10 Released</a> appeared first on <a href="https://bluesabre.org">Sean Davis</a>.</p> <div class="clearBoth"></div> </div> <div class="entry-utility"> <span class="cat-links"><a href="https://bluesabre.org/2024/10/10/xubuntu-24-10-released/"> on October 10, 2024 09:19 PM</a></span> </div> </div><!-- .post --> </div><!-- #content --> </div><!-- #container --> <div id="secondary" class="aside main-aside"> <ul class="xoxo"> <li class="widgetcontainer widget_text"> <h3 class="widgettitle">About Planet Ubuntu</h3> <p>Planet Ubuntu is a window into the world, work and lives of Ubuntu developers and contributors.</p> <p>If you are an Ubuntu Member, and would like your blog aggregated here, please see the <a href="http://wiki.ubuntu.com/PlanetUbuntu">PlanetUbuntu</a> wiki page.</p> </li> <li class="widgetcontainer widget_extended-categories"> <h3 class="widgettitle">Feeds</h3> <ul> <li> <a href="https://arraybolt3.substack.com/feed" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://arraybolt3.substack.com" title="Arraybolt's Archives">Aaron Rainbolt</a> </li> <li> <a href="https://daker.me/feed-ubuntuplanet.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://daker.me" title="Adnane Belmadiaf's Blog - R&amp;D engineer">Adnane Belmadiaf</a> </li> <li> <a href="http://foss-boss.blogspot.com/feeds/posts/default/-/ubuntu-planet" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://foss-boss.blogspot.com/search/label/ubuntu-planet" title="FOSS Boss">Ahmed Kamal</a> </li> <li> <a href="https://popey.com/blog/post/index.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://popey.com/blog/post/" title="Posts on Alan Pope's blog">Alan Pope</a> </li> <li> <a href="https://albertomilone.com/blog/?feed=rss2" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://albertomilone.com/blog" title="Alberto Milone's Home">Alberto Milone</a> </li> <li> <a href="http://en.alessiotreglia.com/feed" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="http status 503">Alessio Treglia</a> </li> <li> <a href="https://allisonrandal.com/category/ubuntu/feed" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://allisonrandal.com" title="ubuntu – Allison Randal">Allison Randal</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="408: request timeout">Andi Darmawan</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="http status 503">Andre Noel</a> </li> <li> <a href="https://andrea.corbellini.name/ubuntu.rss" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://andrea.corbellini.name/" title="Andrea Corbellini">Andrea Corbellini</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Andres Rodriguez</a> </li> <li> <a href="http://blog.andrew.net.au/planetubuntu/index.rss" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://blog.andrew.net.au" class="message" title="408: request timeout">Andrew Pollock</a> </li> <li> <a href="https://blog.andrewsomething.com/feeds/all.atom.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://blog.andrewsomething.com/" title="asb@ubuntu:~$">Andrew SB</a> </li> <li> <a href="http://awhitcroft.blogspot.com/feeds/posts/default/-/planet%20ubuntu" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://awhitcroft.blogspot.com/search/label/planet%20ubuntu" title="~apw">Andy Whitcroft</a> </li> <li> <a href="https://ivoks.com/category/ubuntu/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://ivoks.com" title="Ubuntu – Ante Karamatić">Ante Karamatić</a> </li> <li> <a href="https://antoniosanchez.wordpress.com/category/planet-ubuntu/feed/atom/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://antoniosanchez.wordpress.com" title="Planet Ubuntu – Repositorio de Antonio Sánchez">Antonio Sánchez</a> </li> <li> <a href="https://blogs.gnome.org/happyaron/category/ubuntu/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://blogs.gnome.org/happyaron" title="Ubuntu – True EDGE">Aron Xu</a> </li> <li> <a href="https://balintreczey.hu/blog/tag/ubuntu/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://balintreczey.hu/blog" title="ubuntu – Obsessed with reality">Balint Reczey</a> </li> <li> <a href="https://unbrokenspectrum.wordpress.com/category/planet-ubuntu/feed/?mrss=off" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://unbrokenspectrum.wordpress.com" title="Planet Ubuntu – The broken spectrum">Barneedhar</a> </li> <li> <a href="https://dindafoss.wordpress.com/category/ubuntu/feed/?mrss=off" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://dindafoss.wordpress.com" title="ubuntu – Dinda's Foss Blog">Belinda Lopez</a> </li> <li> <a href="http://www.blogger.com/feeds/6653558328125881331/posts/default/-/ubuntu" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://ben-collins.blogspot.com/search/label/ubuntu" title="Ben Collins">Ben Collins</a> </li> <li> <a href="https://overbenny.wordpress.com/category/planet-ubuntu/feed/atom/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://overbenny.wordpress.com" title="Planet Ubuntu – Overbenny's Blog">Benjamin Drung</a> </li> <li> <a href="https://mako.cc/copyrighteous/feed" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://mako.cc/copyrighteous" title="copyrighteous">Benjamin Mako Hill</a> </li> <li> <a href="http://brendanperrine.com/rss.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="http status 503">Brendan Perrine</a> </li> <li> <a href="http://www.murraytwins.com/blog/feed/?cat=8" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://www.murraytwins.com/blog" title="| Just another WordPress site">Brian Murray</a> </li> <li> <a href="https://bryanquigley.com/rss.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://bryanquigley.com/" title="Bryan Quigley">Bryan Quigley</a> </li> <li> <a href="http://www.bryceharrington.org/wordpress/category/ubuntu/feed" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Bryce Harrington</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Canonical</a> </li> <li> <a href="https://carla-sella.blogspot.it/feeds/posts/default?alt=rss" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://carla-sella.blogspot.com/" title="Carla Sella (Letozaf_ )">Carla Sella</a> </li> <li> <a href="http://blog.diener.li/feed" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://blog.diener.li" title="emonkey">Carlos Diener - emonkey</a> </li> <li> <a href="https://cesarsevilla.wordpress.com/category/ubuntu/feed/?mrss=off" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://cesarsevilla.wordpress.com" title="Ubuntu">Cesar Sevilla</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="410: gone">Charlene Tessier</a> </li> <li> <a href="https://www.chriscoulson.me.uk/blog/?feed=rss2&amp;cat=3" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://chriscoulson.me.uk/blog" title="Ubuntu – Chris Coulson’s blog">Chris Coulson</a> </li> <li> <a href="http://www.linuxsouls.com/taxonomy/term/6/feed" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="no data">Chris Crisafulli</a> </li> <li> <a href="https://tribaal.io/feeds/ubuntu" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://tribaal.io/" title="Tribaal's blog - ubuntu">Chris Glass</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Chris J Arges</a> </li> <li> <a href="http://chrisjohnston.org/category/ubuntu-planet/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://elook.ai" class="message" title="http status 503">Chris Johnston</a> </li> <li> <a href="https://itigloo.com/category/planet-ubuntu/feed/atom/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://itigloo.com" title="planet-ubuntu – IT Igloo">Chris Woollard</a> </li> <li> <a href="https://magicalforest.net/~nafallo/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="http status 503">Christian Bjälevik</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Christopher James Halse Rogers</a> </li> <li> <a href="http://claydoh.com/category/planetubuntu/feed/atom" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="408: request timeout">Clay Weber</a> </li> <li> <a href="http://www.blogger.com/feeds/1016709139053396535/posts/default?redirect=false" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://smackerelofopinion.blogspot.com/" title="A Smackerel of Opinion">Colin King</a> </li> <li> <a href="https://www.chiark.greenend.org.uk/~cjwatson/blog/feeds/tag/planet-ubuntu.atom.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://www.chiark.greenend.org.uk/~cjwatson/blog/" title="Colin Watson's blog - planet-ubuntu">Colin Watson</a> </li> <li> <a href="http://collinp.com/rss" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="no data">Collin Pruitt</a> </li> <li> <a href="https://wrestlingpenguins.wordpress.com/category/ubuntu/feed/?mrss=off" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://wrestlingpenguins.wordpress.com" title="ubuntu – wrestling penguins">Corey Bryant</a> </li> <li> <a href="http://www.advogato.org/person/Burgundavia/rss.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://www.advogato.org/person/Burgundavia/" class="message" title="internal server error">Corey Burger</a> </li> <li> <a href="https://costales.github.io/tags/planet/index.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://costales.github.io/tags/planet/" title="planet on Marcos Costales">Costales</a> </li> <li> <a href="https://daniel.holba.ch/blog/index.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://daniel.holba.ch/blog/" class="message" title="404: not found">Daniel Holbach</a> </li> <li> <a href="http://drowninginbugs.blogspot.com/feeds/posts/default/-/ubuntu" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://drowninginbugs.blogspot.com/search/label/ubuntu" title="Musings on maintaining Ubuntu">Daniel T Chen</a> </li> <li> <a href="http://davmor2.blogspot.com/rss.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://davmor2.blogspot.com/" title="Morley's blog page">Dave Morley</a> </li> <li> <a href="http://blog.daviey.com/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="408: request timeout">Dave Walker</a> </li> <li> <a href="https://dmtechtalk.wordpress.com/category/ubuntu-2/feed/atom/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://dmtechtalk.wordpress.com" title="ubuntu – dmtechtalk">David Mandala</a> </li> <li> <a href="https://ubuntubudgie.org/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://ubuntubudgie.org" title="Ubuntu Budgie">David Mohammed</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">David Murphy</a> </li> <li> <a href="https://davidplanella.wordpress.com/category/english/ubuntu/feed/atom/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://davidplanella.wordpress.com" title="Ubuntu – Benvinguts, passeu passeu">David Planella</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="http status 521">David Rubin</a> </li> <li> <a href="http://blog.knightlust.com/?cat=4&amp;feed=rss2" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="http status 503">Dax Solomon Umaming</a> </li> <li> <a href="https://didrocks.fr/tags/pu/index.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://didrocks.fr/tags/pu/" title="Pu on ~DidRocks">Didier Roche</a> </li> <li> <a href="http://blog.diegoturcios.com/feeds/posts/default/-/planet-ubuntu" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://blog.diegoturcios.com/search/label/planet-ubuntu" title="El Blog de Diego">Diego Turcios</a> </li> <li> <a href="http://www.blogger.com/feeds/347582618045055410/posts/default?redirect=false" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://blog.surgut.co.uk/" title="Surgut">Dimitri John Ledkov</a> </li> <li> <a href="https://mitya57.me/weblog/feeds/planet.atom.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://mitya57.me/weblog/" title="mitya57’s weblog - Planet">Dmitry Shachnev</a> </li> <li> <a href="https://dougiewougie.com/category/linux/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://dougiewougie.com" title="Linux – Dougie Richardson">Dougie Richardson</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Duncan McGreggor</a> </li> <li> <a href="http://blog.dustinkirkland.com/feeds/posts/default/-/Ubuntu" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://blog.dustinkirkland.com/search/label/Ubuntu" title="From the Canyon Edge">Dustin Kirkland</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">El Acheche Anis</a> </li> <li> <a href="https://princessleia.com/journal/category/planet/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://princessleia.com/journal" title="ubuntu planet – pleia2's blog">Elizabeth K. Joseph</a> </li> <li> <a href="https://alestic.com/tags/planetubuntu/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://alestic.com/tags/planetubuntu/" title="PlanetUbuntu on Alestic.com - A Personal AWS Blog by Eric Hammond">Eric Hammond</a> </li> <li> <a href="https://ericheickmeyer.com/category/planet-ubuntu/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://ericheickmeyer.com" title="Planet Ubuntu – Erich Eickmeyer">Erich Eickmeyer</a> </li> <li> <a href="https://magicfab.ca/carnet/blog/category/tech/linux/ubuntu/ubuntu-planet/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://magicfab.ca" title="Commentaires sur :">Fabián Rodríguez</a> </li> <li> <a href="https://hamradio.my/category/ubuntu/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://hamradio.my/category/ubuntu/" title="ubuntu - Hamradio.my">Faizul "Piju" 9M2PJU</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Full Circle Magazine</a> </li> <li> <a href="http://fabric-janitor.blogspot.com/feeds/posts/default/-/planet" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://fabric-janitor.blogspot.com/search/label/planet" title="Fabric janitor = sysadmin">Fumihito YOSHIDA</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Gustavo Silva</a> </li> <li> <a href="https://mizuno-as.hatenadiary.org/feed" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://mizuno-as.hatenadiary.org/" title="-*- Mode: Ubuntu -*-">Hajime MIZUNO</a> </li> <li> <a href="https://apachelog.wordpress.com/category/kde/feed/?mrss=off&amp;category_name=ubuntu" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://apachelog.wordpress.com" title="ubuntu – 💺 Blog">Harald Sitter</a> </li> <li> <a href="http://www.blogger.com/feeds/3272651/posts/default?redirect=false" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://blog.harisfazillah.info/" title="Today Notes Blog About Linux Open Source Computer Internet">Harisfazillah Jamel</a> </li> <li> <a href="https://blogs.gnome.org/laney/category/planetubuntu/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://blogs.gnome.org/laney" title="planetubuntu – bits and bobs">Iain Lane</a> </li> <li> <a href="http://cheesehead-techblog.blogspot.com/feeds/posts/default/-/planet-ubuntu" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://cheesehead-techblog.blogspot.com/search/label/planet-ubuntu" title="Ian's TechBlog">Ian Weisser</a> </li> <li> <a href="https://noskcaj10.wordpress.com/category/ubuntu/feed/?mrss=off" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://noskcaj10.wordpress.com" title="Ubuntu – Noskcaj's blog">Jackson Doak</a> </li> <li> <a href="https://armyofminions.com/feeds/planet_ubuntu.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://armyofminions.com" title="Army of Minions | James Gifford - Planet Ubuntu">James Gifford</a> </li> <li> <a href="https://javacruft.wordpress.com/category/ubuntu/feed/?mrss=off" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://javacruft.wordpress.com" title="Ubuntu – JavaCruft">James Page</a> </li> <li> <a href="https://blog.strandboge.com/category/ubuntu/feed/?mrss=off" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://blog.strandboge.com" title="ubuntu – Blog: jdstrand">Jamie Strandboge</a> </li> <li> <a href="https://www.jelmer.uk/feeds/tag/ubuntu.atom.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://www.jelmer.uk/" class="message" title="internal server error">Jelmer Vernooij</a> </li> <li> <a href="https://jeremy.bicha.net/category/ubuntu/feed/?mrss=off" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://jeremy.bicha.net" title="Ubuntu – Just Jeremy">Jeremy Bicha</a> </li> <li> <a href="https://jhosman.com/en/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://jhosman.com/en" title="Jhosman.com [English]">Jhosman Lizarazo</a> </li> <li> <a href="https://apebox.org/wordpress/tag/ubuntu/feed" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://apebox.org/wordpress" title="ubuntu – APEBOX.ORG">Jo Shields</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="http status 503">Joey Stanford</a> </li> <li> <a href="http://www.baablogic.net/drupal/taxonomy/term/1/feed" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://www.baablogic.net/drupal/taxonomy/term/1" title="Planet Ubuntu">John Baab</a> </li> <li> <a href="https://jonathancarter.org/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://jonathancarter.org" title="Jonathan Carter">Jonathan Carter</a> </li> <li> <a href="https://jriddell.org/feed/?tag=planetubuntu" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://jriddell.org" title="Planet Ubuntu – Jonathan Riddell's Diary">Jonathan Riddell</a> </li> <li> <a href="https://blogs.kde.org/blog/57/feed" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://blogs.kde.org/blogs/jriddell" class="message" title="404: not found">Jonathan Riddell</a> </li> <li> <a href="http://werghdf.blogspot.co.uk/feeds/posts/default" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://werghdf.blogspot.com/" title="Kubuntu">Jonathan Riddell</a> </li> <li> <a href="https://joseeantonior.wordpress.com/category/planet-ubuntu/feed/atom/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://joseeantonior.wordpress.com" title="Planet Ubuntu – joseeantonior">Jos&eacute; Antonio Rey</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Josh Powers</a> </li> <li> <a href="http://blog.xtremeghost.com/feeds/posts/default/-/planet" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://blog.xtremeghost.com/search/label/planet" title="As seen through my eyes">Juan Negron</a> </li> <li> <a href="https://desentropia.com/tags/ubuntu/index.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://desentropia.com/tags/ubuntu/" title="Ubuntu on desentropia">Julian Alarcon</a> </li> <li> <a href="https://blog.jak-linux.org/post/index.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://blog.jak-linux.org/post/" title="Posts on Blog of Julian Andres Klode">Julian Andres Klode</a> </li> <li> <a href="https://gilir.wordpress.com/tag/planet-ubuntu/feed/atom/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://gilir.wordpress.com" title="Planet-Ubuntu – Informatique de Julien">Julien Lavergne</a> </li> <li> <a href="http://www.tm-travolta.net/cat/ubuntu/feed" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="internal server error">Jussi Kekkonen</a> </li> <li> <a href="http://jussi01.com/?cat=16&amp;feed=rss2" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="http status 503">Jussi Schultink</a> </li> <li> <a href="https://outflux.net/blog/archives/category/ubuntu/feed" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://outflux.net/blog" title="Ubuntu – codeblog">Kees Cook</a> </li> <li> <a href="https://blogs.gnome.org/kenvandine/category/ubuntu/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://blogs.gnome.org/kenvandine" title="ubuntu – ken’s blog">Ken VanDine</a> </li> <li> <a href="http://blog.fenris.my/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://blog.fenris.my" title=".:: mY Life JoUrNeY ::.">Khairul Aizat Kamarudzzaman</a> </li> <li> <a href="https://kubuntu.org/news/feed/atom/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://kubuntu.org" title="News – Kubuntu">Kubuntu General News</a> </li> <li> <a href="https://blogs.gnome.org/mneptok/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://blogs.gnome.org/mneptok" title="the indian wind along the telegraph lines">Kurt von Finck</a> </li> <li> <a href="https://blog.launchpad.net/feed" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://blog.launchpad.net" title="Launchpad blog">Launchpad News</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">LoCo Ubuntu PT</a> </li> <li> <a href="https://lubuntu.me/feed/?mrss=off" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://lubuntu.me" title="Lubuntu">Lubuntu Blog</a> </li> <li> <a href="https://dktrkranz.wordpress.com/category/planet-ubuntu/feed/atom/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://dktrkranz.wordpress.com" title="Planet Ubuntu – Kranz Korner">Luca Falavigna</a> </li> <li> <a href="https://blogs.gnome.org/lferrett/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://blogs.gnome.org/lferrett" title="Partially Skimmed">Luca Ferretti</a> </li> <li> <a href="https://blog.slyon.de/category/ubuntu/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://blog.slyon.de" title="Ubuntu – SlyBlog">Lukas Märdian</a> </li> <li> <a href="https://blog.luke.wf/feeds/posts/default/-/ubuntu-planet" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://blog.luke.wf/search/label/ubuntu-planet" title="Luke W. Faraone">Luke Faraone</a> </li> <li> <a href="https://ubuntumug.wordpress.com/category/planet-ubuntu/feed/?mrss=off" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://ubuntumug.wordpress.com" title="planet-ubuntu – a mug of ubuntu">László Torma</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="http status 503">Mahyuddin Susanto</a> </li> <li> <a href="http://my-ubuntu-day.blogspot.com/feeds/posts/default?alt=rss" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://my-ubuntu-day.blogspot.com/" title="my-ubuntu-day">Maia Grotepass</a> </li> <li> <a href="http://mdeslaur.blogspot.com/feeds/posts/default/-/ubuntu-planet" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://mdeslaur.blogspot.com/search/label/ubuntu-planet" title="mdeslaur">Marc Deslauriers</a> </li> <li> <a href="http://blog.3v1n0.net/tag/planet-ubuntu/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://blog.3v1n0.net" title="Ubuntu Planet – Treviño's Blog">Marco Trevisan (Treviño)</a> </li> <li> <a href="http://supermario-world.blogspot.com/feeds/posts/default" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://supermario-world.blogspot.com/" title="Mario's adventures in geekery">Mario Limonciello</a> </li> <li> <a href="http://www.markshuttleworth.com/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://www.markshuttleworth.com" class="message" title="no data">Mark Shuttleworth</a> </li> <li> <a href="http://blog.markvdb.be/feeds/posts/full/-/english/ubuntu" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://blog.markvdb.be/search/label/english" title="Mark Van den Borre">Mark Van den Borre</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Martin Meredith</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Martin Pitt</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Martin Wimpress</a> </li> <li> <a href="http://q-funk.blogspot.com/feeds/posts/default/-/Ubuntu" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://q-funk.blogspot.com/search/label/Ubuntu" title="Funkyware: ITCetera">Martin-&Eacute;ric Racine</a> </li> <li> <a href="http://blog.mathiaz.net/feeds/posts/default/-/ubuntu" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://blog.mathiaz.net/search/label/ubuntu" title="Mathias' thoughts...">Mathias Gug</a> </li> <li> <a href="http://blog.cyphermox.net/feeds/posts/default/-/planet-ubuntu" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://blog.cyphermox.net/search/label/planet-ubuntu" title="Matt's blog">Mathieu Trudel</a> </li> <li> <a href="https://blog.tenstral.net/category/planet/planet-ubuntu/feed" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://blog.tenstral.net" title="Ubuntu – Ximions Blog">Matthias Klumpp</a> </li> <li> <a href="http://www.deshack.net/ubuntu/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="http status 503">Mattia Migliorini</a> </li> <li> <a href="http://geekosophical.net/?feed=rss2" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a title="">Melissa Draper</a> </li> <li> <a href="http://ncommander.blogspot.com/feeds/posts/default" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://ncommander.blogspot.com/" title="Notes from Underground ...">Michael Casadevall</a> </li> <li> <a href="https://mhall119.com/blog/category/planet-ubuntu/feeds/rss/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://mhall119.com/blog/" title="Michael Hall">Michael Hall</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Michael Terry</a> </li> <li> <a href="https://mvogt.wordpress.com/category/ubuntu/feed/?mrss=off" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://mvogt.wordpress.com" title="Ubuntu – Michael Vogt's blog">Michael Vogt</a> </li> <li> <a href="http://notyetthere.org/feed/?cat=5" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://notyetthere.org" class="message" title="404: not found">Michael Zanetti</a> </li> <li> <a href="http://www.mikesplanet.net/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="no data">Mike Basinger</a> </li> <li> <a href="https://leftyfb.com/category/ubuntu/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://leftyfb.com" title="ubuntu – leftyfb's Blog">Mike Rushton</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="http status 503">Milo Casagrande</a> </li> <li> <a href="https://www.mirkopizii.com/category/ubuntu-com-planet/feed/?mrss=off%3Fmrss%3Doff" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://www.mirkopizii.com" title="Ubuntu.com Planet – Mirko Pizii | Developer, Blogger, Maker">Mirko Pizii</a> </li> <li> <a href="https://coderstalk.blogspot.com/feeds/posts/default/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://coderstalk.blogspot.com/" title="Coder's Talk">Muhammad Fauzilkamil Zainuddin</a> </li> <li> <a href="https://kipas.wordpress.com/category/ubuntu/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://kipas.wordpress.com" title="ubuntu – KIPAS">Muhammad Takdir</a> </li> <li> <a href="https://mgunes.wordpress.com/tag/planet-ubuntu/feed/atom/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://mgunes.wordpress.com" title="planet-ubuntu – mg's temporary blog">Murat Güneş</a> </li> <li> <a href="https://blogs.fsfe.org/myriam/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://blogs.fsfe.org/myriam" title="Myriam's blog">Myriam Schweingruber</a> </li> <li> <a href="https://www.nhaines.com/feed.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://www.nhaines.com/" title="nhaines.com">Nathan Haines</a> </li> <li> <a href="http://nhandler.com/blog/feed.ubuntu.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://nhandler.com" title="nhandler.github.io - Ubuntu">Nathan Handler</a> </li> <li> <a href="http://2buntu.com/accounts/rss/6/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://2buntu.com/accounts/6/nathan-osman/" class="message" title="404: not found">Nathan Osman</a> </li> <li> <a href="http://kalon33.blogspot.com/feeds/posts/default" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://kalon33.blogspot.com/" title="And this is just the beginning...">Nicolas Derive</a> </li> <li> <a href="http://blog.nizarus.org/topics/planet-ubuntu/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="http status 503">Nizar Kerkeni</a> </li> <li> <a href="https://nobuto-m.github.io/tag/planet-ubuntu/index.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://nobuto-m.github.io/tag/planet-ubuntu/" title="Planet-Ubuntu | Nobuto Murata">Nobuto Murata</a> </li> <li> <a href="https://thepcspy.com/feeds/ubuntu.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://thepcspy.com/" title="Oli Warner's blog">Oli Warner</a> </li> <li> <a href="https://ograblog.wordpress.com/feed/atom/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://ograblog.wordpress.com" title="Ogra's blog">Oliver Grawert</a> </li> <li> <a href="https://people.ubuntu.com/~olivier.fraysse/index.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://people.ubuntu.com/~olivier.fraysse/index.xml" title="0LlVE Ubuntu blog">Olivier Fraysse</a> </li> <li> <a href="https://open.knome.fi/category/ubuntu/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://open.knome.fi" title="Ubuntu – It's free.">Pasi Lallinaho</a> </li> <li> <a href="https://blog.pault.ag/rss" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://blog.pault.ag/" title="Paul Tagliamonte">Paul Tagliamonte</a> </li> <li> <a href="https://notes.pault.ag/index.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://notes.pault.ag/" title="Paul's Notes">Paul Tagliamonte</a> </li> <li> <a href="https://philroche.net/category/ubuntu/feed/index.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://philroche.net/" title="Ubuntu – The musing of Philip Roche">Phil Roche</a> </li> <li> <a href="https://philipballew.wordpress.com/feed/?mrss=off" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://philipballew.wordpress.com" title="Adventures in Foss">Philip Ballew</a> </li> <li> <a href="https://www.blogger.com/feeds/5048890463514304208/posts/default/-/planet-ubuntu?alt=rss" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://debblog.philkern.de/search/label/planet-ubuntu" title="Philipp Kern's Debian blog">Philipp Kern</a> </li> <li> <a href="https://podcastubuntuportugal.org/feed/podcast/index.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://podcastubuntuportugal.org/" title="Podcast Ubuntu Portugal">Podcast Ubuntu Portugal</a> </li> <li> <a href="http://rachidbm.com/category/planet-ubuntu/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Rachid BM</a> </li> <li> <a href="https://rafalcieslak.wordpress.com/category/ubuntu/feed/?mrss=off" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://rafalcieslak.wordpress.com" title="Ubuntu – Rafał Cieślak's blog">Rafał Cieślak</a> </li> <li> <a href="http://rafiiik.blogspot.com/feeds/posts/default/-/Ubuntu" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://rafiiik.blogspot.com/search/label/Ubuntu" title="rafikapebe">Rafik Ouerchefani</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Raphaël Hertzog</a> </li> <li> <a href="https://rhonda.deb.at/blog/?flav=rss&amp;lang=en" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://rhonda.deb.at/blog/" title="Rhonda's Blog">Rhonda D&#39;Vine</a> </li> <li> <a href="https://dendrobates.wordpress.com/category/Ubuntu/feed/atom/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://dendrobates.wordpress.com" title="Ubuntu – Deprecation">Rick Clark</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Rik Goldman</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="410: gone">Robbie Williamson</a> </li> <li> <a href="http://bobthegnome.blogspot.com/feeds/posts/default" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://bobthegnome.blogspot.com/" title="Bob's development blog">Robert Ancell</a> </li> <li> <a href="https://web.archive.org/sry" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="http status 503">Robert Collins</a> </li> <li> <a href="http://www.justgohome.co.uk/blog/feeds/tag/planet-ubuntu.atom.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://www.justgohome.co.uk/blog/" title="A Pelican Blog">Robie Basak</a> </li> <li> <a href="https://rossgammon68.wordpress.com/category/open-source/ubuntu/ubuntu-planet/feed/?mrss=off" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://rossgammon68.wordpress.com" title="Ubuntu Planet – Ross Gammon's Blog">Ross Gammon</a> </li> <li> <a href="https://russelljohn.net/journal/category/linux/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://russelljohn.net/journal/category/linux/" title="Linux Archives – Cyber Kingdom of Russell John">Russell John</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="internal server error">Ryan Kavanagh</a> </li> <li> <a href="https://utappiablog.wordpress.com/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://utappiablog.wordpress.com" title="Utappia">Salih Emin</a> </li> <li> <a href="https://www.en.salvatorepalma.net/category/planet-ubuntu/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://www.en.salvatorepalma.net" class="message" title="http status 503">Salvatore Palma</a> </li> <li> <a href="https://foursixnine.io/atom.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://foursixnine.io/" title="foursixnine's lair">Santiago Zarate</a> </li> <li> <a href="https://www.scarlettgatelymoore.dev/category/open-source-software/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://www.scarlettgatelymoore.dev" title="Open Source Software – Scarlett Gately Moore">Scarlett Gately Moore</a> </li> <li> <a href="http://ltspthinclient.blogspot.com/atom.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://ltspthinclient.blogspot.com/" title="Careful with that axe, Eugene">Scott Balneaves</a> </li> <li> <a href="https://skitterman.wordpress.com/category/Ubuntu/feed/atom/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://skitterman.wordpress.com" title="Ubuntu – ScottK might have something to say …">Scott Kitterman</a> </li> <li> <a href="https://smoser.github.io/feed/by_tag/ubuntu.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://smoser.github.io//" title="smoser’s thoughts">Scott Moser</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Scott Ritchie</a> </li> <li> <a href="https://www.bluesabre.org/tag/xubuntu/rss/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://bluesabre.org/tag/xubuntu/" title="Xubuntu Archives - Sean Davis">Sean Davis</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Sebastian K&uuml;gler</a> </li> <li> <a href="https://blogs.gnome.org/seb128/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://blogs.gnome.org/seb128" title="seb128's blog">Sebastien Bacher</a> </li> <li> <a href="https://s3hh.wordpress.com/feed/?mrss=off" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://s3hh.wordpress.com" title="S3hh's Blog">Serge Hallyn</a> </li> <li> <a href="https://blog.sergiodj.net/tags/ubuntu/atom.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://blog.sergiodj.net/tags/ubuntu/" title="Ubuntu on Yet Another Me">Sergio Durigan Junior</a> </li> <li> <a href="http://blog.sergiusens.org/categories/ubuntu/index.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://blog.sergiusens.org/categories/ubuntu/" title="ubuntu on">Sergio Schvezov</a> </li> <li> <a href="https://primes2h.wordpress.com/category/english/feed/?mrss=off" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://primes2h.wordpress.com" title="English – Primes2h's Weblog">Sergio Zanchetta</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Shane Fagan</a> </li> <li> <a href="https://medium.com/@tsimonq2/feed" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://medium.com/@tsimonq2?source=rss-abe8950a00ea------2" title="Stories by Simon Quigley on Medium">Simon Quigley</a> </li> <li> <a href="https://blog.simos.info/category/planet-ubuntu/feed/?mrss=off" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://blog.simos.info" title="Planet Ubuntu – Mi blog lah!">Simos Xenitellis</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="internal server error">Soren Hansen</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="http status 503">Sri Ramadoss|ஸ்ரீ ராமதாஸ்</a> </li> <li> <a href="https://stgraber.org/category/planet-ubuntu/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://stgraber.org" title="Planet Ubuntu – Stéphane Graber's website">St&eacute;phane Graber</a> </li> <li> <a href="http://askstefano.blogspot.com/feeds/posts/default/-/ubuntu" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://askstefano.blogspot.com/search/label/ubuntu" title="Ask Stefano">Stefano Palazzo</a> </li> <li> <a href="http://tumbleweed.org.za/tags/ubuntu/feed" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://tumbleweed.org.za/taxonomy/term/7/0" title="Tumbleweed Rants - ubuntu">Stefano Rivera</a> </li> <li> <a href="https://steveire.wordpress.com/feed/?mrss=off" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://steveire.wordpress.com" title="Steveire's Blog">Stephen Kelly</a> </li> <li> <a href="http://web.dodds.net/~vorlon/wiki/ubuntu/index.rss" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://web.dodds.net/~vorlon/wiki/ubuntu/" title="ubuntu">Steve Langasek</a> </li> <li> <a href="http://feeds.feedburner.com/kryogenix" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://www.kryogenix.org/days/" title="as days pass by: a weblog by Stuart Langridge">Stuart Langridge</a> </li> <li> <a href="https://svij.org/tags/ubuntu-planet/index.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://svij.org/tags/ubuntu-planet/" title="Ubuntu-Planet on svij | Sujeevan Vijayakumaran">Sujeevan Vijayakumaran</a> </li> <li> <a href="https://senseopenness.com/categories/ubuntu/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Svetlana Belkin</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="http status 503">Terence Simpson</a> </li> <li> <a href="https://fridge.ubuntu.com/category/planet/feed/atom/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://fridge.ubuntu.com" title="Planet – Ubuntu Fridge">The Fridge</a> </li> <li> <a href="https://ttx.re/feeds/open-source.atom.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://ttx.re/" title="ttx:reloaded - Open source">Thierry Carrez</a> </li> <li> <a href="https://toabctl.wordpress.com/category/planet-ubuntu/feed/?mrss=off" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://toabctl.wordpress.com" title="planet-ubuntu – toabctl's blog">Thomas Bechtold</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="408: request timeout">Thomas Ward</a> </li> <li> <a href="https://tjaalton.wordpress.com/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://tjaalton.wordpress.com" title="Timo Aaltonen’s Weblog">Timo Aaltonen</a> </li> <li> <a href="https://losca.blogspot.com/feeds/posts/default/-/ubuntu?alt=rss" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://losca.blogspot.com/search/label/ubuntu" title="Losca">Timo Jyrinki</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Tony Whitmore</a> </li> <li> <a href="https://torstenfranz.wordpress.com/category/planet-ubuntu/feed/?mrss=off" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://torstenfranz.wordpress.com" title="planet-ubuntu – Torstens Blog">Torsten Franz</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Tyler Hicks</a> </li> <li> <a href="https://sintra2019.ubucon.org/category/planet/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Ubucon Europe 2019</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Ubuntu App Developer Blog</a> </li> <li> <a href="https://ubuntu.com//blog/feed" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://ubuntu.com//blog/feed" title="Ubuntu blog">Ubuntu Blog</a> </li> <li> <a href="https://ubuntuclassroom.wordpress.com/feed/?mrss=off" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://ubuntuclassroom.wordpress.com" title="Ubuntu Classroom Blog">Ubuntu Classroom</a> </li> <li> <a href="https://ubuntugnome.org/feed/?mrss=off" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://ubuntugnome.org" title="Ubuntu GNOME">Ubuntu GNOME</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="http status 503">Ubuntu Kernel Team</a> </li> <li> <a href="https://ubuntu-mate.org/rss.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://ubuntu-mate.org/" title="Ubuntu MATE">Ubuntu MATE</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="http status 503">Ubuntu Server blog</a> </li> <li> <a href="https://ubuntustudio.org/category/planetubuntu/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://ubuntustudio.org" title="Planet Ubuntu – Ubuntu Studio">Ubuntu Studio</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="http status 503">Ubuntu Women</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Utkarsh Gupta</a> </li> <li> <a href="http://linuxgrandma.blogspot.com/feeds/posts/default" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://linuxgrandma.blogspot.com/" title="Linux Grandma">Valorie Zimmerman</a> </li> <li> <a href="https://www.vuntz.net/journal/feed/en/rss2" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://www.vuntz.net/journal/en" title="mon journal - par Vincent">Vincent Untz</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Vincent-Xavier JUMEL</a> </li> <li> <a href="https://polka.bike/blog/category/planet-ubuntu/feed/index.xml" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="http://polka.bike/blog" title="polka dot blog">Walter Lapchynski</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="http status 503">Wesley Stessens</a> </li> <li> <a href="" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a class="message" title="404: not found">Will Cooke</a> </li> <li> <a href="https://xubuntu.org/feed/" title="subscribe"><img src="images/feed-icon-10x10.png" alt="(feed)" /></a> <a href="https://xubuntu.org" title="Xubuntu">Xubuntu</a> </li> </ul> </li> </ul> </div><!-- #secondary .aside --> <div class="clearBoth"></div> </div><!-- #main --> </div><!-- #wrapper .hfeed --> <div id="footer"> <div id="siteinfo"> <p> Blog entries aggregated on this page are owned by, and represent the opinion of the author.<br /> &copy; 2010 <a href="http://www.canonical.com">Canonical Ltd.</a> Ubuntu, Kubuntu, Edubuntu and Canonical are trademarks of Canonical Ltd.<br /> Powered by <a href="http://github.com/rubys/venus/">Planet Venus</a> on Ubuntu &mdash; <a href="http://www.ubuntu.com/legal">Legal</a> </p> </div><!-- #siteinfo --> </div><!-- #footer --> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10