Congratulations!

[Valid RSS] This is a valid RSS feed.

Recommendations

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

Source: http://planet.ubuntu.com/rss20.xml

  1. <?xml version="1.0"?>
  2. <rss version="2.0">
  3.  
  4. <channel>
  5. <title>Planet Ubuntu</title>
  6. <link>http://planet.ubuntu.com/</link>
  7. <language>en</language>
  8. <description>Planet Ubuntu - http://planet.ubuntu.com/</description>
  9.  
  10. <item>
  11. <title>The Fridge: Ubuntu 24.10 (Oracular Oriole) reached End of Life on 10th July 2025</title>
  12. <guid isPermaLink="false">https://fridge.ubuntu.com/?p=10562</guid>
  13. <link>https://fridge.ubuntu.com/2025/07/10/ubuntu-24-10-oracular-oriole-reached-end-of-life-on-10th-july-2025/</link>
  14. <description>&lt;p&gt;This is a follow-up to the End of Life warning sent earlier to confirm that as of 10th July 2025, Ubuntu 24.10 is no longer supported. No more package updates will be accepted to 24.10, and it will be archived to old-releases.ubuntu.com in the coming weeks.&lt;/p&gt;
  15. &lt;p&gt;Additionally, Ubuntu Security Notices will no longer include information or updated packages for Ubuntu 24.10.&lt;/p&gt;
  16. &lt;p&gt;The supported upgrade path from Ubuntu 24.10 is to Ubuntu 25.04. Instructions and caveats for the upgrade may be found at:&lt;/p&gt;
  17. &lt;p style=&quot;text-indent: 20px;&quot;&gt;&lt;a href=&quot;https://help.ubuntu.com/community/PluckyUpgrades&quot;&gt;https://help.ubuntu.com/community/PluckyUpgrades&lt;/a&gt;&lt;/p&gt;
  18. &lt;p&gt;Ubuntu 25.04 continues to be actively supported with security updates and select high-impact bug fixes. Announcements of security updates for Ubuntu releases are sent to the ubuntu-security-announce mailing list, information about which may be found at:&lt;/p&gt;
  19. &lt;p style=&quot;text-indent: 20px;&quot;&gt;&lt;a href=&quot;https://lists.ubuntu.com/mailman/listinfo/ubuntu-security-announce&quot;&gt;https://lists.ubuntu.com/mailman/listinfo/ubuntu-security-announce&lt;/a&gt;&lt;/p&gt;
  20. &lt;p&gt;Since its launch in October 2004, Ubuntu has become one of the most highly regarded Linux distributions with millions of users in homes, schools, businesses and governments around the world. Ubuntu is Open Source software, costs nothing to download, and users are free to customise or alter their software in order to meet their needs.&lt;/p&gt;
  21.  
  22.  
  23. &lt;p&gt;&lt;em&gt;Originally posted to the &lt;a href=&quot;https://lists.ubuntu.com/archives/ubuntu-announce/2025-July/000314.html&quot;&gt;ubuntu-announce mailing list&lt;/a&gt; on Thu Jul 10 20:46:06 UTC 2025 by Utkarsh Gupta on behalf of the Ubuntu Release Team&lt;/em&gt;&lt;/p&gt;</description>
  24. <pubDate>Thu, 10 Jul 2025 22:50:35 +0000</pubDate>
  25. </item>
  26. <item>
  27. <title>Ubuntu Blog: In pursuit of quality: UX for documentation authors</title>
  28. <guid isPermaLink="true">https://ubuntu.com//blog/in-pursuit-of-quality-ux-for-documentation-authors</guid>
  29. <link>https://ubuntu.com//blog/in-pursuit-of-quality-ux-for-documentation-authors</link>
  30. <description>&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;540&quot; src=&quot;https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_960,h_540/https://ubuntu.com/wp-content/uploads/9f03/in-pursuit-of-quality.jpg&quot; width=&quot;960&quot; /&gt;&lt;/figure&gt;
  31. &lt;p&gt;Canonical’s Platform Engineering team has been hard at work crafting documentation in Rockcraft and Charmcraft around &lt;a href=&quot;https://canonical-12-factor-app-support.readthedocs-hosted.com/latest/&quot;&gt;native support for web app frameworks like Flask and Django&lt;/a&gt;. It’s all part of Canonical’s aim to write high quality documentation and continuously improve it over time through &lt;a href=&quot;https://ubuntu.com/blog/documentation-development-and-design-for-technical-authors&quot;&gt;design and development processes&lt;/a&gt;. One way we improve our documentation is by engaging with our team members and the external community. Their perspectives and feedback provide valuable insight into our product design, clarify any confusing explanations, and enhance the user experience (UX) of the tooling.&lt;/p&gt;
  32. &lt;p&gt;We’ve focused on making this documentation user-friendly – but how do we ensure that our documentation truly benefits our readers?&lt;/p&gt;
  33. &lt;p&gt;Since last November, we’ve been testing tutorials for the various frameworks we support, conducting a total of 24 UX sessions (so far!). These participants spent their valuable time and energy working their way through our tutorial, allowing us to observe their attempts and collect their feedback on the instructions and explanations.&lt;/p&gt;
  34. &lt;h2 class=&quot;wp-block-heading&quot;&gt;How we chose participants&lt;/h2&gt;
  35. &lt;p&gt;We created the web app framework support as an approachable introduction to Canonical products through a familiar entry point for most users: web app development. Our goal was to attract a wide variety of users, from seasoned engineers to newcomers. To do so, we collaborated with our internal teams, like Web, who use Canonical products every day, as well as reaching out to external developers through online communities and conferences. To make sure our documentation met real-world needs, we actively sought feedback from those who were unfamiliar with Canonical. We even tested the experience with university students, to confirm it would be accessible across all skill levels.&lt;/p&gt;
  36. &lt;h2 class=&quot;wp-block-heading&quot;&gt;The sessions&lt;/h2&gt;
  37. &lt;p&gt;After recruiting each participant, we began the most important phase: the sessions themselves. We carefully crafted these sessions to provide a consistent, comfortable experience for the participant, encouraging their honest feedback about anything – and everything! – in the tutorial.&lt;/p&gt;
  38. &lt;p&gt;A typical session begins with a few quick questions to understand each participant’s background, so we could contextualize their experiences. Then, we begin the tutorial. We observe what the participant notices, how they interpret the instructions, and what obstacles they run into. After they complete the tutorial, we ask a set of post-session questions to collect their overall feedback, and explore if the tooling meets their expectations of the upstream framework.&lt;/p&gt;
  39. &lt;h2 class=&quot;wp-block-heading&quot;&gt;What we learned about documentation UX&lt;/h2&gt;
  40. &lt;p&gt;I’ve felt the full spectrum of human emotions over the course of the 24 sessions. First, there’s a huge deal of helplessness that comes from writing and publishing documentation – as soon as the documentation is out in the world, I’m powerless to help my readers! I found it surprisingly difficult to watch users run into problems that I couldn’t help them solve. Thankfully the engineers were there to provide some aid, although even that wasn’t enough at some points. The sessions have been a learning opportunity for me to accept the helplessness that comes with the author role.&lt;/p&gt;
  41. &lt;p&gt;Along with helplessness, there were also plenty of moments where I felt panic. There’s an element of risk associated with documentation: Sometimes, I would argue for documentation changes, thinking that they would provide better UX or mitigate confusion, only for those changes to blow up in my face in real time. I’ve learned to keep a straight face, and I accept any criticism or feedback directed at the changes I pushed for. New ideas (at least in documentation) are definitely worth trying, but they only become &lt;em&gt;quality &lt;/em&gt;ideas once proven through UX.&lt;/p&gt;
  42. &lt;p&gt;Most of the time, the sessions were silent, and I struggled to keep my attention on the participants and their actions. There are many points in the tutorials where the user has to wait – for software to download, for rocks and charms to pack, for their apps to deploy, and so on. It’s very tempting to look away in those moments and focus on other activities, but as I learned, important observations and details can emerge at any time and stage. Paying attention, even in the most innocuous moments, is a vital part of understanding the participant’s experience and their feedback.&lt;/p&gt;
  43. &lt;p&gt;The participants provided insightful feedback about both the tooling and the documentation. Here are some of the most common themes we noticed:&lt;/p&gt;
  44. &lt;ul&gt;
  45. &lt;li&gt;When testing with university students, we found that these participants became stuck when they were asked to create a new text file from the terminal. This session marked their very first time using a terminal text editor, and we hadn’t accounted for this momentous occasion in our instructions. (I felt quite a bit of panic in these moments, too!)&lt;/li&gt;
  46. &lt;li&gt;Participants working on ARM64 machines commented about the incomplete experience, as later parts of the tutorial were only compatible for AMD64 machines.&lt;/li&gt;
  47. &lt;li&gt;We found some common places where participants would miss an instruction, causing them to experience issues down the line. The participants noted that the instructions felt “buried” in the text and wished the tutorial better highlighted their significance and impact.&lt;/li&gt;
  48. &lt;li&gt;External participants asked for more explanations of Canonical products and how the tooling works – they were curious and interested in digging into the “why” behind the tutorial.&lt;/li&gt;
  49. &lt;/ul&gt;
  50. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Prioritizing and acting on feedback&lt;/h2&gt;
  51. &lt;p&gt;For each of the sessions, we culminated all observations into individual documents. Then we collected all the direct feedback and suggestions into a main document; for the Flask tutorial, the main feedback document spans 16 pages. From there, the project lead, UX designer, technical author (myself!), and the engineers discuss the feedback to determine how we will incorporate it. While prioritizing feedback, we account for the following considerations:&lt;/p&gt;
  52. &lt;ul&gt;
  53. &lt;li&gt;&lt;strong&gt;Blocking issues&lt;/strong&gt;: Prioritize feedback pointing out major issues.&lt;/li&gt;
  54. &lt;li&gt;&lt;strong&gt;Isolated incidents&lt;/strong&gt;: Identify feedback where more research is needed.&lt;/li&gt;
  55. &lt;li&gt;&lt;strong&gt;Design trade-offs&lt;/strong&gt;: Respond to feedback based on specific design choices made.&lt;/li&gt;
  56. &lt;/ul&gt;
  57. &lt;p&gt;We incorporate feedback in small batches over time, prioritizing major blockers and typos. This way, we can resolve issues quicker, meaning our readers reap the benefits right away!&lt;/p&gt;
  58. &lt;p&gt;We’ve found that the changes proposed by earlier UX sessions have improved the quality and outcome of later sessions. Common pitfalls in the first couple of sessions are no longer an issue. Questions about how the tooling works come up less. And – some of you will be glad to hear – users with ARM64 machines can go through the entire tutorial.&lt;/p&gt;
  59. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Get involved: help us improve&lt;/h2&gt;
  60. &lt;p&gt;There are always improvements to make in our documentation, and these UX sessions are a great way for us to include our community members and make our documentation more accessible. If you’re interested in getting involved, please reach out to us on our &lt;a href=&quot;https://matrix.to/#/#12-factor-charms:ubuntu.com&quot;&gt;public Matrix channel&lt;/a&gt;!&lt;/p&gt;</description>
  61. <pubDate>Thu, 10 Jul 2025 15:01:21 +0000</pubDate>
  62. </item>
  63. <item>
  64. <title>Salih Emin: How to use an AI in terminal with free models</title>
  65. <guid isPermaLink="false">https://utappia.org/?p=49917</guid>
  66. <link>https://utappia.org/2025/07/10/ai-terminal-free/</link>
  67. <description>&lt;p&gt;How would you feel if you could have access to AI models, many of which are free, directly from the comfort of your terminal?&lt;/p&gt;
  68.  
  69.  
  70.  
  71. &lt;p&gt;In this article, we will explore how you can achieve this using the OpenRouter.ai platform and a simple script I’ve prepared, called &lt;code&gt;ai.sh&lt;/code&gt; (… very original… I know).&lt;/p&gt;
  72.  
  73.  
  74.  
  75. &lt;span id=&quot;more-49917&quot;&gt;&lt;/span&gt;
  76.  
  77.  
  78.  
  79. &lt;h1 class=&quot;wp-block-heading&quot;&gt;Free AI in your Terminal with OpenRouter and ai.sh&lt;/h1&gt;
  80.  
  81.  
  82.  
  83. &lt;p&gt;&lt;code&gt;ai.sh&lt;/code&gt; is a simple &lt;a href=&quot;https://utappia.org/tag/script/&quot;&gt;terminal app&lt;/a&gt; to use OpenRouter.ai with your personal API keys. Ask questions directly from your terminal and get AI responses instantly.&lt;/p&gt;
  84.  
  85.  
  86.  
  87. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Features of ai.sh&lt;/h2&gt;
  88.  
  89.  
  90.  
  91. &lt;ul class=&quot;wp-block-list&quot;&gt;
  92. &lt;li&gt;&lt;img alt=&quot;🚀&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f680.png&quot; style=&quot;height: 1em;&quot; /&gt; Simple command-line interface&lt;/li&gt;
  93.  
  94.  
  95.  
  96. &lt;li&gt;&lt;img alt=&quot;🔑&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f511.png&quot; style=&quot;height: 1em;&quot; /&gt; Secure API key and model management with &lt;code&gt;.env&lt;/code&gt; file&lt;/li&gt;
  97.  
  98.  
  99.  
  100. &lt;li&gt;&lt;img alt=&quot;🎯&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f3af.png&quot; style=&quot;height: 1em;&quot; /&gt; Clean output (only the AI response, no JSON clutter)&lt;/li&gt;
  101.  
  102.  
  103.  
  104. &lt;li&gt;&lt;img alt=&quot;💬&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f4ac.png&quot; style=&quot;height: 1em;&quot; /&gt; Natural language queries&lt;/li&gt;
  105.  
  106.  
  107.  
  108. &lt;li&gt;&lt;img alt=&quot;🆓&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f193.png&quot; style=&quot;height: 1em;&quot; /&gt; Uses free Mistral model by default&lt;/li&gt;
  109.  
  110.  
  111.  
  112. &lt;li&gt;&lt;img alt=&quot;⚡&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/26a1.png&quot; style=&quot;height: 1em;&quot; /&gt; Stateless design – each query is independent (no conversation history)&lt;/li&gt;
  113. &lt;/ul&gt;
  114.  
  115.  
  116.  
  117. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Important Note&lt;/h2&gt;
  118.  
  119.  
  120.  
  121. &lt;p&gt;This tool is designed for &lt;strong&gt;single-question interactions&lt;/strong&gt;. Each time you run the script, it sends an independent query to the AI model without any memory of previous conversations. If you need multi-turn conversations with context retention, consider using the OpenRouter web interface or building a more advanced wrapper that maintains conversation history.&lt;/p&gt;
  122.  
  123.  
  124.  
  125. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Prerequisites&lt;/h2&gt;
  126.  
  127.  
  128.  
  129. &lt;ul class=&quot;wp-block-list&quot;&gt;
  130. &lt;li&gt;&lt;code&gt;curl&lt;/code&gt; (usually pre-installed on most systems)&lt;/li&gt;
  131.  
  132.  
  133.  
  134. &lt;li&gt;&lt;code&gt;jq&lt;/code&gt; for JSON parsing&lt;/li&gt;
  135. &lt;/ul&gt;
  136.  
  137.  
  138.  
  139. &lt;h3 class=&quot;wp-block-heading&quot;&gt;Installing jq&lt;/h3&gt;
  140.  
  141.  
  142.  
  143. &lt;p&gt;&lt;strong&gt;Ubuntu/Debian:&lt;/strong&gt;&lt;/p&gt;
  144.  
  145.  
  146.  
  147. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;sudo apt install jq&lt;/code&gt;&lt;/pre&gt;
  148.  
  149.  
  150.  
  151. &lt;p&gt;&lt;strong&gt;CentOS/RHEL/Fedora:&lt;/strong&gt;&lt;/p&gt;
  152.  
  153.  
  154.  
  155. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;sudo yum install jq
  156. # or for newer versions:
  157. sudo dnf install jq&lt;/code&gt;&lt;/pre&gt;
  158.  
  159.  
  160.  
  161. &lt;p&gt;&lt;strong&gt;macOS:&lt;/strong&gt;&lt;/p&gt;
  162.  
  163.  
  164.  
  165. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;brew install jq&lt;/code&gt;&lt;/pre&gt;
  166.  
  167.  
  168.  
  169. &lt;p&gt;&lt;strong&gt;Windows (WSL):&lt;/strong&gt;&lt;/p&gt;
  170.  
  171.  
  172.  
  173. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;sudo apt install jq&lt;/code&gt;&lt;/pre&gt;
  174.  
  175.  
  176.  
  177. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Installation&lt;/h2&gt;
  178.  
  179.  
  180.  
  181. &lt;ol class=&quot;wp-block-list&quot;&gt;
  182. &lt;li&gt;&lt;strong&gt;Clone or download this repository:&lt;/strong&gt;&lt;/li&gt;
  183. &lt;/ol&gt;
  184.  
  185.  
  186.  
  187. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;   git clone https://github.com/SynergOps/openrouter.ai
  188.   cd openrouter.ai&lt;/code&gt;&lt;/pre&gt;
  189.  
  190.  
  191.  
  192. &lt;ol class=&quot;wp-block-list&quot; start=&quot;2&quot;&gt;
  193. &lt;li&gt;&lt;strong&gt;Ensure the script is executable:&lt;/strong&gt;&lt;/li&gt;
  194. &lt;/ol&gt;
  195.  
  196.  
  197.  
  198. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;   chmod +x ai.sh&lt;/code&gt;&lt;/pre&gt;
  199.  
  200.  
  201.  
  202. &lt;ol class=&quot;wp-block-list&quot; start=&quot;3&quot;&gt;
  203. &lt;li&gt;&lt;strong&gt;Get your OpenRouter API key:&lt;/strong&gt;&lt;/li&gt;
  204. &lt;/ol&gt;
  205.  
  206.  
  207.  
  208. &lt;ul class=&quot;wp-block-list&quot;&gt;
  209. &lt;li&gt;Go to &lt;a href=&quot;https://openrouter.ai/&quot;&gt;OpenRouter.ai&lt;/a&gt;&lt;/li&gt;
  210.  
  211.  
  212.  
  213. &lt;li&gt;Sign up with your Github account for a free account&lt;/li&gt;
  214.  
  215.  
  216.  
  217. &lt;li&gt;Navigate to models and then the Mistral Small 3.2 24B (free)&lt;/li&gt;
  218.  
  219.  
  220.  
  221. &lt;li&gt;Click API keys section&lt;/li&gt;
  222.  
  223.  
  224.  
  225. &lt;li&gt;Generate a new API key&lt;/li&gt;
  226. &lt;/ul&gt;
  227.  
  228.  
  229.  
  230. &lt;ol class=&quot;wp-block-list&quot; start=&quot;3&quot;&gt;
  231. &lt;li&gt;&lt;strong&gt;Configure your API key and model:&lt;/strong&gt;&lt;/li&gt;
  232. &lt;/ol&gt;
  233.  
  234.  
  235.  
  236. &lt;ul class=&quot;wp-block-list&quot;&gt;
  237. &lt;li&gt;while you are in the openrouter folder, edit the &lt;code&gt;.env&lt;/code&gt; file template and add your API key:&lt;/li&gt;
  238. &lt;/ul&gt;
  239.  
  240.  
  241.  
  242. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;   vim .env&lt;/code&gt;&lt;/pre&gt;
  243.  
  244.  
  245.  
  246. &lt;ul class=&quot;wp-block-list&quot;&gt;
  247. &lt;li&gt;Add your API key and optionally configure the model:&lt;/li&gt;
  248. &lt;/ul&gt;
  249.  
  250.  
  251.  
  252. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;   # OpenRouter API Configuration
  253.   OPENROUTER_API_KEY=sk-or-v1-your-actual-api-key-here
  254.   # OpenRouter Model Configuration (optional - leave empty for default)
  255.   OPENROUTER_MODEL=&lt;/code&gt;&lt;/pre&gt;
  256.  
  257.  
  258.  
  259. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Usage&lt;/h2&gt;
  260.  
  261.  
  262.  
  263. &lt;h3 class=&quot;wp-block-heading&quot;&gt;Basic Usage&lt;/h3&gt;
  264.  
  265.  
  266.  
  267. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;./ai.sh your question here&lt;/code&gt;&lt;/pre&gt;
  268.  
  269.  
  270.  
  271. &lt;h3 class=&quot;wp-block-heading&quot;&gt;Examples&lt;/h3&gt;
  272.  
  273.  
  274.  
  275. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;# Ask a simple question
  276. ./ai.sh what is the meaning of life
  277.  
  278. # Ask for coding help
  279. ./ai.sh how do I create a function in Python
  280.  
  281. # Ask for a definition
  282. ./ai.sh define recursion
  283.  
  284. # Ask for a summary
  285. ./ai.sh summarize the plot of &quot;The Hitchhiker's Guide to the Galaxy&quot;&lt;/code&gt;&lt;/pre&gt;
  286.  
  287.  
  288.  
  289. &lt;h3 class=&quot;wp-block-heading&quot;&gt;Sample Output&lt;/h3&gt;
  290.  
  291.  
  292.  
  293. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;$ ./ai.sh what is the meaning of 42
  294. The number 42 is famously known as &quot;The Answer to the Ultimate Question of Life, the Universe, and Everything&quot; from Douglas Adams' science fiction series &quot;The Hitchhiker's Guide to the Galaxy.&quot;&lt;/code&gt;&lt;/pre&gt;
  295.  
  296.  
  297.  
  298. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Creating a Terminal Alias (Recommended)&lt;/h2&gt;
  299.  
  300.  
  301.  
  302. &lt;p&gt;For easier access, you can create an alias so you can use the script from anywhere without typing the full path:&lt;/p&gt;
  303.  
  304.  
  305.  
  306. &lt;p&gt;&lt;strong&gt;Option 1: Temporary alias (current session only)&lt;/strong&gt;&lt;/p&gt;
  307.  
  308.  
  309.  
  310. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;alias ai='/path/to/your/openrouter.ai/ai.sh'&lt;/code&gt;&lt;/pre&gt;
  311.  
  312.  
  313.  
  314. &lt;p&gt;&lt;strong&gt;Option 2: Permanent alias (recommended)&lt;/strong&gt;&lt;/p&gt;
  315.  
  316.  
  317.  
  318. &lt;ol class=&quot;wp-block-list&quot;&gt;
  319. &lt;li&gt;&lt;strong&gt;For Bash users&lt;/strong&gt; – Add to your &lt;code&gt;~/.bashrc&lt;/code&gt; or &lt;code&gt;~/.bash_profile&lt;/code&gt;:&lt;/li&gt;
  320. &lt;/ol&gt;
  321.  
  322.  
  323.  
  324. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;   cd /path/to/your/openrouter.ai
  325.   echo &quot;alias ai='$(pwd)/ai.sh'&quot; &amp;gt;&amp;gt; ~/.bashrc
  326.   source ~/.bashrc&lt;/code&gt;&lt;/pre&gt;
  327.  
  328.  
  329.  
  330. &lt;ol class=&quot;wp-block-list&quot; start=&quot;2&quot;&gt;
  331. &lt;li&gt;&lt;strong&gt;For Zsh users&lt;/strong&gt; – Add to your &lt;code&gt;~/.zshrc&lt;/code&gt;:&lt;/li&gt;
  332. &lt;/ol&gt;
  333.  
  334.  
  335.  
  336. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;   cd /path/to/your/openrouter.ai
  337.   echo &quot;alias ai='$(pwd)/ai.sh'&quot; &amp;gt;&amp;gt; ~/.zshrc
  338.   source ~/.zshrc&lt;/code&gt;&lt;/pre&gt;
  339.  
  340.  
  341.  
  342. &lt;ol class=&quot;wp-block-list&quot; start=&quot;3&quot;&gt;
  343. &lt;li&gt;&lt;strong&gt;Manual method&lt;/strong&gt; – Edit your shell config file:&lt;/li&gt;
  344. &lt;/ol&gt;
  345.  
  346.  
  347.  
  348. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;   # Open your shell config file
  349.   nano ~/.bashrc  # or ~/.zshrc for Zsh users
  350.  
  351.   # Add this line (replace with your actual path):
  352.   alias ai='/full/path/to/openrouter.ai/ai.sh'
  353.  
  354.   # Reload your shell config
  355.   source ~/.bashrc  # or source ~/.zshrc&lt;/code&gt;&lt;/pre&gt;
  356.  
  357.  
  358.  
  359. &lt;p&gt;&lt;strong&gt;After setting up the alias, you can use it from anywhere:&lt;/strong&gt;&lt;/p&gt;
  360.  
  361.  
  362.  
  363. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;# Instead of ./ai.sh question
  364. # Works from any directory
  365. cd ~/Documents
  366. ai explain machine learning&lt;/code&gt;&lt;/pre&gt;
  367.  
  368.  
  369.  
  370. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Configuration&lt;/h2&gt;
  371.  
  372.  
  373.  
  374. &lt;h3 class=&quot;wp-block-heading&quot;&gt;Changing the AI Model&lt;/h3&gt;
  375.  
  376.  
  377.  
  378. &lt;p&gt;You can change the AI model by editing the &lt;code&gt;OPENROUTER_MODEL&lt;/code&gt; variable in your &lt;code&gt;.env&lt;/code&gt; file:&lt;/p&gt;
  379.  
  380.  
  381.  
  382. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;# Leave empty or unset to use the default model
  383. OPENROUTER_MODEL=
  384.  
  385. # Or specify a different model
  386. OPENROUTER_MODEL=qwen/qwq-32b:free&lt;/code&gt;&lt;/pre&gt;
  387.  
  388.  
  389.  
  390. &lt;p&gt;Popular free models on OpenRouter include:&lt;/p&gt;
  391.  
  392.  
  393.  
  394. &lt;ul class=&quot;wp-block-list&quot;&gt;
  395. &lt;li&gt;&lt;code&gt;mistralai/mistral-small-3.2-24b-instruct:free&lt;/code&gt; (default)&lt;/li&gt;
  396.  
  397.  
  398.  
  399. &lt;li&gt;&lt;code&gt;qwen/qwq-32b:free&lt;/code&gt;&lt;/li&gt;
  400.  
  401.  
  402.  
  403. &lt;li&gt;&lt;code&gt;deepseek/deepseek-r1-0528:free&lt;/code&gt;&lt;/li&gt;
  404.  
  405.  
  406.  
  407. &lt;li&gt;&lt;code&gt;google/gemini-2.0-flash-exp:free&lt;/code&gt;&lt;/li&gt;
  408. &lt;/ul&gt;
  409.  
  410.  
  411.  
  412. &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If &lt;code&gt;OPENROUTER_MODEL&lt;/code&gt; is not set or left empty, the script will use the default Mistral model.&lt;/p&gt;
  413.  
  414.  
  415.  
  416. &lt;h2 class=&quot;wp-block-heading&quot;&gt;License&lt;/h2&gt;
  417.  
  418.  
  419.  
  420. &lt;p&gt;This project is licensed under the &lt;a href=&quot;https://github.com/SynergOps/openrouter.ai#Apache-2.0-1-ov-file&quot;&gt;Apache-2.0 license&lt;/a&gt; – see the &lt;a href=&quot;http://utappia.org/feed/LICENSE&quot;&gt;LICENSE&lt;/a&gt; file for details.&lt;/p&gt;
  421.  
  422.  
  423.  
  424. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Support&lt;/h2&gt;
  425.  
  426.  
  427.  
  428. &lt;p&gt;If you encounter any issues or have questions, please open &lt;a href=&quot;https://github.com/SynergOps/openrouter.ai/issues&quot;&gt;an issue on GitHub&lt;/a&gt;.&lt;/p&gt;
  429.  
  430.  
  431.  
  432. &lt;p&gt;Check also, my other projects in&lt;a href=&quot;https://utappia.org/downloads/&quot;&gt; the download page&lt;/a&gt;&lt;/p&gt;
  433. &lt;p&gt;The post &lt;a href=&quot;https://utappia.org/2025/07/10/ai-terminal-free/&quot;&gt;How to use an AI in terminal with free models&lt;/a&gt; appeared first on &lt;a href=&quot;https://utappia.org&quot;&gt;Utappia&lt;/a&gt;.&lt;/p&gt;</description>
  434. <pubDate>Thu, 10 Jul 2025 12:21:18 +0000</pubDate>
  435. </item>
  436. <item>
  437. <title>Ubuntu Studio: Ubuntu Studio 24.10 Has Reached End-Of-Life (EOL)</title>
  438. <guid isPermaLink="false">https://ubuntustudio.org/?p=3006</guid>
  439. <link>https://ubuntustudio.org/2025/07/ubuntu-studio-24-10-has-reached-end-of-life-eol/</link>
  440. <description>&lt;p&gt;As of July 10, 2025, all flavors of Ubuntu 24.10, including Ubuntu Studio 24.10, codenamed “Oracular Oriole”, have reached end-of-life (EOL). There will be no more updates of any kind, including security updates, for this release of Ubuntu.&lt;/p&gt;
  441.  
  442.  
  443.  
  444. &lt;p&gt;If you have not already done so, please upgrade to Ubuntu Studio 25.10 via the instructions &lt;a href=&quot;https://discourse.ubuntu.com/t/ubuntu-studio-25-04-release-notes/53099#p-132280-upgrading-to-ubuntu-studio-2504&quot;&gt;provided here&lt;/a&gt;. If you do not do so as soon as possible, you will lose the ability without additional advanced configuration.&lt;/p&gt;
  445.  
  446.  
  447.  
  448. &lt;p&gt;No single release of any operating system can be supported indefinitely, and Ubuntu Studio has no exception to this rule.&lt;/p&gt;
  449.  
  450.  
  451.  
  452. &lt;p&gt;Regular Ubuntu releases, meaning those that are between the Long-Term Support releases, are supported for 9 months and users are expected to upgrade after every release with a 3-month buffer following each release.&lt;/p&gt;
  453.  
  454.  
  455.  
  456. &lt;p&gt;Long-Term Support releases are identified by an even numbered year-of-release and a month-of-release of April (04). Hence, the most recent Long-Term Support release is 24.04 (YY.MM = 2024.April), and the next Long-Term Support release will be 26.04 (2026.April). LTS releases for official Ubuntu flavors (not Desktop or Server which are supported for five years) are three years, meaning LTS users are expected to upgrade after every LTS release with a one-year buffer.&lt;/p&gt;</description>
  457. <pubDate>Thu, 10 Jul 2025 12:00:00 +0000</pubDate>
  458. </item>
  459. <item>
  460. <title>Ubuntu Blog: Canonical announces Charmed Feast: A production-grade feature store for your open source MLOps stack</title>
  461. <guid isPermaLink="true">https://ubuntu.com//blog/charmed-feast-feature-store-launch</guid>
  462. <link>https://ubuntu.com//blog/charmed-feast-feature-store-launch</link>
  463. <description>&lt;p&gt;&lt;strong&gt;July 10, 2025: Today, Canonical announced the release of Charmed Feast, an enterprise solution for feature management with seamless integration with Charmed Kubeflow, Canonical’s distribution of the popular open source MLOps platform. Charmed Feast provides the full breadth of the upstream Feast capabilities, adding multi-cloud capabilities, and comprehensive support.&lt;/strong&gt;&lt;/p&gt;
  464. &lt;p&gt;&lt;a href=&quot;https://feast.dev/&quot;&gt;Feast&lt;/a&gt; is an open source operational data system for managing and serving machine learning (ML) features to models during both training and inference. It acts as a bridge between data engineering and machine learning, enabling consistent access to feature data in real-time and batch environments. Feast simplifies the process of building, versioning, and deploying features so teams can reuse features across workflows and reduce duplication of effort which helps to scale their machine learning initiatives more efficiently and deliver intelligent applications faster and with greater consistency.&lt;/p&gt;
  465. &lt;p class=&quot;has-text-align-right&quot;&gt;&lt;em&gt;Feature stores play a critical role in the AI/ML lifecycle. From model development and fine tuning to serving data in production for inference—a Feature store is a critical tool for production AI. Feast bridges the gap between Data Scientists, Data Engineers, MLOps Engineers, and Software Engineers to give users tooling to take their software to production.  Building on its deep integration with Kubeflow, Feast is now charting an even brighter future with investments in generative AI and retrieval-augmented generation (RAG).&lt;/em&gt;&lt;/p&gt;
  466. &lt;p class=&quot;has-text-align-right&quot;&gt;&lt;em&gt;Francisco Javier Arceo&lt;/em&gt;&lt;br /&gt;&lt;em&gt;Feast Maintainer &amp;amp; Kubeflow Steering Committee member&lt;/em&gt;&lt;/p&gt;
  467. &lt;p&gt;&lt;strong&gt;Charmed Feast&lt;/strong&gt; is a fully supported, production-grade distribution of &lt;strong&gt;Feast&lt;/strong&gt;. Designed to seamlessly integrate with &lt;strong&gt;Charmed Kubeflow &lt;/strong&gt;and the rest of &lt;a href=&quot;https://ubuntu.com/ai/mlops&quot;&gt;Canonical’s MLOps and big data ecosystem&lt;/a&gt; (which also includes MLFlow, OpenSearch, and Spark), Charmed Feast simplifies feature engineering and delivery, enabling teams to reproducibly manage features and serve them to models in production with ease. With Charmed Feast, organizations get the power of open source, backed by Canonical’s operational excellence and security guarantees, with long-term support, regular security updates, and optional 24/7 enterprise-grade SLAs.&lt;/p&gt;
  468. &lt;p&gt;&lt;strong&gt;Built-in integration with Charmed Kubeflow and the Canonical MLOps ecosystem&lt;br /&gt;&lt;/strong&gt;Effortless deployment and seamless integration with Charmed Kubeflow enables teams to serve consistent features to both training and production environments within Kubeflow pipelines, minimize retraining inefficiencies and prevent performance drops. Charmed Feast can run on the same Kubernetes cluster as Charmed Kubeflow, serving as a unified source of feature data for pipelines and model serving. Data teams can manage, version, and serve features from a single platform, reducing training-serving skew and accelerating deployment cycles while maintaining reliability.&lt;/p&gt;
  469. &lt;p&gt;&lt;strong&gt;Operationalizing ML pipelines at scale&lt;br /&gt;&lt;/strong&gt;As a new addition to Canonical’s growing &lt;a href=&quot;https://ubuntu.com/ai/mlops&quot;&gt;MLOps and big data portfolio&lt;/a&gt; , Charmed Feast helps unify and operationalize the full machine learning lifecycle. Charmed Feast is delivered as a Juju charm (charmed operator), making installation and management highly automated and portable. With a single Juju command, teams can deploy Charmed Feast on any infrastructure – from the public cloud to an on-premises Kubernetes cluster. This model-driven approach simplifies scaling and lifecycle management: the charm encapsulates best practices for configuring Feast, handling updates, and integrating with other services. As a result, data engineers get a consistent deployment experience across environments, and can easily move feature store workloads between clouds or data centers without retooling.&lt;/p&gt;
  470. &lt;p&gt;&lt;strong&gt;Strengthening the open source community&lt;/strong&gt;&lt;br /&gt;Feast has long been a first-class add-on in the Kubeflow ecosystem, with both communities working closely to ensure a smooth and robust integration experience for users. Canonical actively contributes to the Kubeflow project and maintains a strong relationship with the Feast community. By packaging Feast as a charm and including it in our supported MLOps platform, we help amplify upstream innovation while making it more accessible and enterprise-ready. This approach enables users to adopt open standards confidently, with the peace of mind that comes from Canonical’s engineering support.&lt;/p&gt;
  471. &lt;p&gt;&lt;strong&gt;Additional benefits of Charmed Feast&lt;/strong&gt;&lt;/p&gt;
  472. &lt;ul&gt;
  473. &lt;li&gt;&lt;strong&gt;Simple, per-node pricing&lt;/strong&gt;: Charmed Feast is part of Canonical’s data and AI portfolio. Customers can subscribe to enterprise support through Ubuntu Pro + Support on a predictable per-node basis. This subscription covers the full suite of Canonical’s charmed applications – including Charmed Kubeflow, MLFlow, Spark, OpenSearch, PostgreSQL, MongoDB, and Kafka – without additional software license fees. This makes budgeting and financial planning straightforward, while giving teams the freedom to deploy integrated solutions like Charmed Feast at no extra cost.&lt;/li&gt;
  474. &lt;li&gt;&lt;strong&gt;Long-term security and support&lt;/strong&gt;: Canonical provides up to 10 years of security maintenance and CVE patching for Charmed Feast. Optional 24/7 enterprise support ensures high availability and stability for production workloads, so you can confidently operate mission-critical feature management services.&lt;/li&gt;
  475. &lt;li&gt;&lt;strong&gt;Fully managed option available&lt;/strong&gt;: Canonical’s Managed MLOps service offers automation, scalability, availability, observability integration, and hands-on support from trusted experts. This option helps teams reduce operational complexity and concentrate on building data-driven applications instead of maintaining infrastructure.&lt;/li&gt;
  476. &lt;/ul&gt;
  477. &lt;p&gt;&lt;strong&gt;Start building with Charmed Feast today&lt;/strong&gt; &lt;br /&gt;With Charmed Feast, you can bring order to your feature engineering workflows, reduce inconsistencies across environments, and deploy ML pipelines with greater speed and reliability. Whether you’re just getting started or scaling enterprise workloads, Charmed Feast offers the right balance of open source flexibility and production-grade assurance.&lt;br /&gt;To get started with Charmed Feast, refer to the &lt;a href=&quot;https://documentation.ubuntu.com/charmed-feast/&quot;&gt;documentation&lt;/a&gt;. For more information, visit &lt;a href=&quot;https://canonical.com/mlops/feast&quot;&gt;https://canonical.com/mlops/feast&lt;/a&gt;. &lt;strong&gt;&lt;br /&gt;&lt;br /&gt;About Canonical&lt;/strong&gt;&lt;br /&gt;Canonical, the publisher of Ubuntu, provides open source security, support and services. Our portfolio covers critical systems, from the smallest devices to the largest clouds, from the kernel to containers, from databases to AI. With customers that include top tech brands, emerging startups, governments and home users, Canonical delivers trusted open source for everyone. &lt;/p&gt;
  478. &lt;p&gt;Learn more at &lt;a href=&quot;https://canonical.com/&quot;&gt;https://canonical.com/&lt;/a&gt; &lt;/p&gt;</description>
  479. <pubDate>Thu, 10 Jul 2025 09:00:00 +0000</pubDate>
  480. </item>
  481. <item>
  482. <title>Podcast Ubuntu Portugal: E355 Mil E Uma Receitas</title>
  483. <guid isPermaLink="false">https://hub.podcastubuntuportugal.org/s/4zd4ccxy7ZFKAtd/download/e355.mp3</guid>
  484. <link>https://podcastubuntuportugal.org/e355/</link>
  485. <description>&lt;p&gt;O Diogo ficou sem voz por culpa do bacalhau, o Miguel matou um transformador, a Canonical matou o Oriole (e tem muitas receitas) e o Multipass está todo aberto. Neste episódio o Diogo conspurcou as suas mãos ao usar Chato Gê-Petas, ficámos a saber onde fica a ilha de Malta e Gozo, como os Jogos Sem Fronteiras podem salvar os Jogos de Vídeo e ainda como não ter medo de ir falar à Festa do Software Livre. Estão a usar o Ubuntu 24.10? Temos más notícias e boas notícias - quais é que querem ouvir primeiro?…&lt;/p&gt;
  486. &lt;p&gt;Já sabem: oiçam, subscrevam e partilhem!&lt;/p&gt;
  487. &lt;ul&gt;
  488. &lt;li&gt;Obsoleto Fernandez: &lt;a href=&quot;https://www.youtube.com/channel/UCbPqi74p4HjtSHkrO3hZoaQ&quot;&gt;https://www.youtube.com/channel/UCbPqi74p4HjtSHkrO3hZoaQ&lt;/a&gt;&lt;/li&gt;
  489. &lt;li&gt;Transmissor AM: &lt;a href=&quot;https://pt.aliexpress.com/item/1005005885331540.html&quot;&gt;https://pt.aliexpress.com/item/1005005885331540.html&lt;/a&gt;&lt;/li&gt;
  490. &lt;li&gt;Tela de tinta electrónica: &lt;a href=&quot;https://pt.aliexpress.com/item/32838268395.html&quot;&gt;https://pt.aliexpress.com/item/32838268395.html&lt;/a&gt;&lt;/li&gt;
  491. &lt;li&gt;Receitas da Canonical: &lt;a href=&quot;https://www.phoronix.com/news/Canonical-2024-Annual-Report&quot;&gt;https://www.phoronix.com/news/Canonical-2024-Annual-Report&lt;/a&gt;&lt;/li&gt;
  492. &lt;li&gt;Fim de Vida para 24.10: &lt;a href=&quot;https://www.omgubuntu.co.uk/2025/06/ubuntu-24-10-oracular-oriole-eol-july-2025&quot;&gt;https://www.omgubuntu.co.uk/2025/06/ubuntu-24-10-oracular-oriole-eol-july-2025&lt;/a&gt;&lt;/li&gt;
  493. &lt;li&gt;Multipass Todo Open Source: &lt;a href=&quot;https://www.phoronix.com/news/Multipass-Fully-Open-Source&quot;&gt;https://www.phoronix.com/news/Multipass-Fully-Open-Source&lt;/a&gt;&lt;/li&gt;
  494. &lt;li&gt;Stop Killing Games: &lt;a href=&quot;https://www.stopkillinggames.com/&quot;&gt;https://www.stopkillinggames.com/&lt;/a&gt;&lt;/li&gt;
  495. &lt;li&gt;LibreOffice na Dinamarca: &lt;a href=&quot;https://blog.documentfoundation.org/blog/2025/07/08/danish-ministry-switching-from-microsoft-office-365-to-libreoffice/&quot;&gt;https://blog.documentfoundation.org/blog/2025/07/08/danish-ministry-switching-from-microsoft-office-365-to-libreoffice/&lt;/a&gt;&lt;/li&gt;
  496. &lt;li&gt;Festa do Software Livre, em vídeo: &lt;a href=&quot;https://youtube.com/playlist?list=PL9yk9tkJGhrMTT2ZwFW4U2uppcAODCtCY&quot;&gt;https://youtube.com/playlist?list=PL9yk9tkJGhrMTT2ZwFW4U2uppcAODCtCY&lt;/a&gt;&lt;/li&gt;
  497. &lt;li&gt;Komunix: &lt;a href=&quot;https://tuxvermelho.blogspot.com/2007/09/komunix-4-um-linux-verde.html&quot;&gt;https://tuxvermelho.blogspot.com/2007/09/komunix-4-um-linux-verde.html&lt;/a&gt;&lt;/li&gt;
  498. &lt;li&gt;Carvalhesa: &lt;a href=&quot;https://youtu.be/31NmLxK0brM&quot;&gt;https://youtu.be/31NmLxK0brM&lt;/a&gt;&lt;/li&gt;
  499. &lt;li&gt;Avante Camarada, 1967: &lt;a href=&quot;https://youtu.be/4cldK3X8Ghk&quot;&gt;https://youtu.be/4cldK3X8Ghk&lt;/a&gt;&lt;/li&gt;
  500. &lt;li&gt;Festa do Software Livre 2025, Porto, 3 a 5 de Outubro: &lt;a href=&quot;https://festa2025.softwarelivre.eu/pt/&quot;&gt;https://festa2025.softwarelivre.eu/pt/&lt;/a&gt;&lt;/li&gt;
  501. &lt;li&gt;Ubuntu Summit 2025, Londres, 23-24 de Outubro: &lt;a href=&quot;https://ubuntu.com/blog/ubuntu-summit-25-10-is-coming-to-your-circle-of-friends-from-london&quot;&gt;https://ubuntu.com/blog/ubuntu-summit-25-10-is-coming-to-your-circle-of-friends-from-london&lt;/a&gt;&lt;/li&gt;
  502. &lt;li&gt;LoCo PT: &lt;a href=&quot;https://loco.ubuntu.com/teams/ubuntu-pt/&quot;&gt;https://loco.ubuntu.com/teams/ubuntu-pt/&lt;/a&gt;&lt;/li&gt;
  503. &lt;li&gt;Mastodon: &lt;a href=&quot;https://masto.pt/@pup&quot;&gt;https://masto.pt/@pup&lt;/a&gt;&lt;/li&gt;
  504. &lt;li&gt;Youtube: &lt;a href=&quot;https://youtube.com/PodcastUbuntuPortugal&quot;&gt;https://youtube.com/PodcastUbuntuPortugal&lt;/a&gt;&lt;/li&gt;
  505. &lt;/ul&gt;
  506. &lt;h3 id=&quot;atribuição-e-licenças&quot;&gt;Atribuição e licenças&lt;/h3&gt;
  507. &lt;p&gt;Este episódio foi produzido por Diogo Constantino, Miguel e Tiago Carrondo e editado pelo &lt;a href=&quot;https://senhorpodcast.pt/&quot;&gt;Senhor Podcast&lt;/a&gt;.
  508. O website é produzido por Tiago Carrondo e o &lt;a href=&quot;https://gitlab.com/podcastubuntuportugal/website&quot;&gt;código aberto&lt;/a&gt; está licenciado nos termos da &lt;a href=&quot;https://gitlab.com/podcastubuntuportugal/website/main/LICENSE&quot;&gt;Licença MIT&lt;/a&gt;. (&lt;a href=&quot;https://creativecommons.org/licenses/by/4.0/)&quot;&gt;https://creativecommons.org/licenses/by/4.0/)&lt;/a&gt;. A música do genérico é: “Won’t see it comin’ (Feat Aequality &amp;amp; N’sorte d’autruche)”, por Alpha Hydrae e está licenciada nos termos da &lt;a href=&quot;https://creativecommons.org/publicdomain/zero/1.0/&quot;&gt;CC0 1.0 Universal License&lt;/a&gt;.
  509. Os separadores de péssima qualidade foram tocados ao vivo pelo Miguel, pelo que pedimos desculpa pelos incómodos causados.
  510. Este episódio e a imagem utilizada estão licenciados nos termos da licença: &lt;a href=&quot;https://creativecommons.org/licenses/by-nc-nd/4.0/&quot;&gt;Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)&lt;/a&gt;, &lt;a href=&quot;https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode&quot;&gt;cujo texto integral pode ser lido aqui&lt;/a&gt;. Estamos abertos a licenciar para permitir outros tipos de utilização, &lt;a href=&quot;https://podcastubuntuportugal.org/contactos&quot;&gt;contactem-nos&lt;/a&gt; para validação e autorização.
  511. A arte de episódio foi criada por encomenda pela Shizamura - artista, ilustradora e autora de BD. Podem ficar a conhecer melhor a &lt;a href=&quot;https://ciberlandia.pt/@shizamura&quot;&gt;Shizamura na Ciberlândia&lt;/a&gt; e no &lt;a href=&quot;https://sarilho.net/&quot;&gt;seu sítio web&lt;/a&gt;.&lt;/p&gt;</description>
  512. <pubDate>Thu, 10 Jul 2025 00:00:00 +0000</pubDate>
  513.        <enclosure url="https://hub.podcastubuntuportugal.org/s/4zd4ccxy7ZFKAtd/download/e355.mp3" length="31052801" type="audio/mpeg"/>
  514. </item>
  515. <item>
  516. <title>Scarlett Gately Moore: KDE Applications snaps 25.04.3 released, plus new snaps and fixes!</title>
  517. <guid isPermaLink="false">https://www.scarlettgatelymoore.dev/?p=2096</guid>
  518. <link>https://www.scarlettgatelymoore.dev/kde-applications-snaps-25-04-3-released-plus-new-snaps-and-fixes/</link>
  519. <description>&lt;figure class=&quot;wp-block-image aligncenter size-full&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1816&quot; height=&quot;600&quot; src=&quot;https://www.scarlettgatelymoore.dev/wp-content/uploads/424px-Mascot_konqi-dev-kde.png&quot; width=&quot;424&quot; /&gt;&lt;/figure&gt;
  520.  
  521.  
  522.  
  523. &lt;p&gt;I have released 25.04.3 I have upgraded the QT6 content snap to 6.9! Fixed a bug in kde-neon* extensions with cmake prefix path.&lt;/p&gt;
  524.  
  525.  
  526.  
  527. &lt;p&gt;New snaps!&lt;/p&gt;
  528.  
  529.  
  530.  
  531. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-2097&quot; height=&quot;690&quot; src=&quot;https://www.scarlettgatelymoore.dev/wp-content/uploads/audex-1024x690.webp&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;
  532.  
  533.  
  534.  
  535. &lt;p&gt;Audex: A CD ripping application.&lt;/p&gt;
  536.  
  537.  
  538.  
  539. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-2098&quot; height=&quot;640&quot; src=&quot;https://www.scarlettgatelymoore.dev/wp-content/uploads/gcompris-1024x640.png&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;
  540.  
  541.  
  542.  
  543. &lt;p&gt;GCompris – An excellent childrens education application&lt;/p&gt;
  544.  
  545.  
  546.  
  547. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-2099&quot; height=&quot;643&quot; src=&quot;https://www.scarlettgatelymoore.dev/wp-content/uploads/labplot-1024x643.webp&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;
  548.  
  549.  
  550.  
  551. &lt;p&gt;Labplot – Scientific plotting&lt;/p&gt;
  552.  
  553.  
  554.  
  555. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-2100&quot; height=&quot;696&quot; src=&quot;https://www.scarlettgatelymoore.dev/wp-content/uploads/digikam-1024x696.webp&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;
  556.  
  557.  
  558.  
  559. &lt;p&gt;Digikam – 8.7.0 with exiftool bug fixed &lt;a href=&quot;https://bugs.kde.org/show_bug.cgi?id=501424&quot;&gt;https://bugs.kde.org/show_bug.cgi?id=501424&lt;/a&gt;&lt;/p&gt;
  560.  
  561.  
  562.  
  563. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-2102&quot; height=&quot;639&quot; src=&quot;https://www.scarlettgatelymoore.dev/wp-content/uploads/krita-1024x639.webp&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;
  564.  
  565.  
  566.  
  567. &lt;p&gt;Krita – 5.2.11 – Excellent Graphic art platform ( compares to Photoshop )&lt;/p&gt;
  568.  
  569.  
  570.  
  571. &lt;p&gt;kgraphviewer – Graphiz .dot file viewer&lt;/p&gt;
  572.  
  573.  
  574.  
  575. &lt;p&gt;I am happy to report my arm is mostly functional! Unfortunately, maintaining all these snaps is an enormous amount of work, with time I don’t have! Please consider a donation for the time I should be spending job hunting / getting a website business off the ground. Thank you for your consideration!&lt;/p&gt;
  576.  
  577.  
  578.  
  579. &lt;ul class=&quot;wp-block-list&quot;&gt;
  580. &lt;li&gt;&lt;strong&gt;GoFundMe &lt;/strong&gt;&lt;a href=&quot;https://gofund.me/d59a74ce&quot;&gt;Donate&lt;/a&gt;&lt;/li&gt;
  581.  
  582.  
  583.  
  584. &lt;li&gt;&lt;strong&gt;Patreon &lt;/strong&gt;&lt;a href=&quot;https://www.patreon.com/c/sgmoore&quot;&gt;Donate&lt;/a&gt;&lt;/li&gt;
  585.  
  586.  
  587.  
  588. &lt;li&gt;&lt;strong&gt;GitHub&lt;/strong&gt; &lt;a href=&quot;https://github.com/sponsors/ScarlettGatelyMoore?o=sd&amp;amp;sc=t&quot;&gt;Donate&lt;/a&gt;&lt;/li&gt;
  589.  
  590.  
  591.  
  592. &lt;li&gt;&lt;strong&gt;DonorBox &lt;/strong&gt;&lt;a href=&quot;https://donorbox.org/open-source-survival-fund&quot;&gt;Donate&lt;/a&gt;&lt;/li&gt;
  593. &lt;/ul&gt;</description>
  594. <pubDate>Tue, 08 Jul 2025 15:25:05 +0000</pubDate>
  595. </item>
  596. <item>
  597. <title>Stuart Langridge: Making a Discord activity with PHP</title>
  598. <guid isPermaLink="false">tag:www.kryogenix.org,2025-07-08:/days/2025/07/08/making-a-discord-activity-with-php/</guid>
  599. <link>https://www.kryogenix.org/days/2025/07/08/making-a-discord-activity-with-php/</link>
  600. <description>&lt;p&gt;Another post in what is slowly becoming a series, after describing &lt;a href=&quot;https://www.kryogenix.org/days/2024/01/14/making-a-discord-bot-with-php/&quot;&gt;how to make a Discord bot with PHP&lt;/a&gt;; today we're looking at how to make a Discord activity the same way.&lt;/p&gt;
  601. &lt;p&gt;An activity is simpler than a bot; Discord activities are basically a web page which loads in an iframe, and can do what it likes in there. You're supposed to use them for games and the like, but I suspect that it might be useful to do quite a few bot-like tasks with activities instead; they take up more of your screen while you're using them, but it's much, much easier to create a user-friendly experience with an activity than it is with a bot. The user interface for bots tends to look a lot like the command line, which appeals to nerds, but having to type &lt;code&gt;!mybot -opt 1 -opt 2&lt;/code&gt; is incomprehensible gibberish to real people. Build a little web UI, you know it makes sense.&lt;/p&gt;
  602. &lt;p&gt;Anyway, I have not yet actually published one of these activities, and I suspect that there is a whole bunch of complexity around that which I'm not going to get into yet. So this will get you up and running with a Discord activity that you can test, yourself. Making it available to others is step 2: keep an eye out for a post on that.&lt;/p&gt;
  603. &lt;p&gt;There are lots of &quot;frameworks&quot; out there for building Discord activities, most of which are all about &quot;use React!&quot; and &quot;have this complicated build environment!&quot; and &quot;deploy a node.js server!&quot;, when all you &lt;em&gt;actually&lt;/em&gt; need is an SPA web page&lt;sup id=&quot;sf-making-a-discord-activity-with-php-1-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;http://feeds.feedburner.com/kryogenix#sf-making-a-discord-activity-with-php-1&quot; title=&quot;it's gotta be an SPA. Discord does not like it when the page navigates around&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, a JS library, a small PHP file, and that's it. No build step required, no deploying a node.js server, just host it in any web space that does PHP (i.e., all of them). Keep it simple, folks. Much nicer.&lt;/p&gt;
  604. &lt;h2&gt;Step 1: set up a Discord app&lt;/h2&gt;
  605. &lt;p&gt;To have an activity, it's gotta be tied to a Discord app. Get one of these as follows:&lt;/p&gt;
  606. &lt;ul&gt;
  607. &lt;li&gt;Create an application at &lt;a href=&quot;https://discord.com/developers/applications&quot;&gt;discord.com/developers/applications&lt;/a&gt;. Call it whatever you want&lt;/li&gt;
  608. &lt;li&gt;Copy the &quot;Application ID&quot; from &quot;General Information&quot; and make a &lt;code&gt;secrets.php&lt;/code&gt; file; add the application ID as &lt;code&gt;$clientid = &quot;whatever&quot;;&lt;/code&gt;&lt;/li&gt;
  609. &lt;li&gt;In &quot;OAuth2&quot;, &quot;Reset Secret&quot; under Client Secret and store it in &lt;code&gt;secrets.php&lt;/code&gt; as $clientsecret&lt;/li&gt;
  610. &lt;li&gt;In &quot;OAuth2&quot;, &quot;Add Redirect&quot;: this URL doesn't get used but there has to be one, so fill it in as some URL you like (&lt;code&gt;http://127.0.0.1&lt;/code&gt; works fine)&lt;/li&gt;
  611. &lt;li&gt;Get the URL of your activity web app (let's say it's &lt;code&gt;https://myserver/myapp/&lt;/code&gt;). Under URL Mappings, add &lt;code&gt;myserver/myapp&lt;/code&gt; (no &lt;code&gt;https://&lt;/code&gt;) as the Root Mapping. This tells Discord where your activity is&lt;/li&gt;
  612. &lt;li&gt;Under Settings, tick Enable Activities. (Also tick &quot;iOS&quot; and &quot;Android&quot; if you want it to work in the phone app)&lt;/li&gt;
  613. &lt;li&gt;Under Installation &amp;gt; Install Link, copy the Discord Provided Link. Open it in a browser. This will switch to the Discord desktop app. Add this app to the server of your choice (not to everywhere), and choose the server you want to add it to&lt;/li&gt;
  614. &lt;li&gt;In the Discord desktop client, click the Activities button (it looks like a playstation controller, at the end of the message entry textbox). Your app should now be in &quot;Apps in this Server&quot;. Choose it and say Launch. Confirm that you're happy to trust it because you're running it for the first time&lt;/li&gt;
  615. &lt;/ul&gt;
  616. &lt;p&gt;And this will then launch your activity in a window in your Discord app. It won't do anything yet because you haven't written it, but it's now loading.&lt;/p&gt;
  617. &lt;h2&gt;Step 2: write an activity&lt;/h2&gt;
  618. &lt;ul&gt;
  619. &lt;li&gt;You'll need the Discord Embedded SDK JS library. Go off to &lt;a href=&quot;https://www.jsdelivr.com/package/npm/@discord/embedded-app-sdk&quot;&gt;jsdelivr&lt;/a&gt; and see the URL it wants you to use (at time of writing this is &lt;code&gt;https://cdn.jsdelivr.net/npm/@discord/embedded-app-sdk@2.0.0/+esm&lt;/code&gt; but check). Download this URL to get a JS file, which you should call discordsdk.js. (Note: do not link to this directly. Discord activities can't download external resources without some semi-complex setup. Just download the JS file)&lt;/li&gt;
  620. &lt;li&gt;Now write the home page for your app -- index.php is likely to be ideal for this, because you need the client ID that you put in &lt;code&gt;secrets.php&lt;/code&gt;. A very basic one, which works out who the user is, looks something like this:&lt;/li&gt;
  621. &lt;/ul&gt;
  622. &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;x&quot;&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
  623. &lt;span class=&quot;x&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
  624. &lt;span class=&quot;x&quot;&gt;I am an activity! You are &amp;lt;output id=&quot;username&quot;&amp;gt;...?&amp;lt;/output&amp;gt;&lt;/span&gt;
  625. &lt;span class=&quot;x&quot;&gt;&amp;lt;scr ipt type=&quot;module&quot;&amp;gt;&lt;/span&gt;
  626. &lt;span class=&quot;x&quot;&gt;import {DiscordSDK} from './discordsdk.js';&lt;/span&gt;
  627. &lt;span class=&quot;x&quot;&gt;const clientid = '&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;?php&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$clientid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;span class=&quot;x&quot;&gt;';&lt;/span&gt;
  628. &lt;span class=&quot;x&quot;&gt;async function setup() {&lt;/span&gt;
  629. &lt;span class=&quot;x&quot;&gt;  const discordSdk = new DiscordSDK(clientid);&lt;/span&gt;
  630. &lt;span class=&quot;x&quot;&gt;  // Wait for READY payload from the discord client&lt;/span&gt;
  631. &lt;span class=&quot;x&quot;&gt;  await discordSdk.ready();&lt;/span&gt;
  632. &lt;span class=&quot;x&quot;&gt;  // Pop open the OAuth permission modal and request for access to scopes listed in scope array below&lt;/span&gt;
  633. &lt;span class=&quot;x&quot;&gt;  const {code} = await discordSdk.commands.authorize({&lt;/span&gt;
  634. &lt;span class=&quot;x&quot;&gt;    client_id: clientid,&lt;/span&gt;
  635. &lt;span class=&quot;x&quot;&gt;    response_type: 'code',&lt;/span&gt;
  636. &lt;span class=&quot;x&quot;&gt;    state: '',&lt;/span&gt;
  637. &lt;span class=&quot;x&quot;&gt;    prompt: 'none',&lt;/span&gt;
  638. &lt;span class=&quot;x&quot;&gt;    scope: ['identify'],&lt;/span&gt;
  639. &lt;span class=&quot;x&quot;&gt;  });&lt;/span&gt;
  640. &lt;span class=&quot;x&quot;&gt;  const response = await fetch('/.proxy/token.php?code=' + code);&lt;/span&gt;
  641. &lt;span class=&quot;x&quot;&gt;  const {access_token} = await response.json();&lt;/span&gt;
  642. &lt;span class=&quot;x&quot;&gt;  const auth = await discordSdk.commands.authenticate({access_token});&lt;/span&gt;
  643.  
  644. &lt;span class=&quot;x&quot;&gt;  document.getElementById(&quot;username&quot;).textContent = auth.user.username;&lt;/span&gt;
  645. &lt;span class=&quot;x&quot;&gt;  /* other properties you may find useful:&lt;/span&gt;
  646. &lt;span class=&quot;x&quot;&gt;     server ID: discordSdk.guildId&lt;/span&gt;
  647. &lt;span class=&quot;x&quot;&gt;     user ID: auth.user.id&lt;/span&gt;
  648. &lt;span class=&quot;x&quot;&gt;     channel ID: discordSdk.channelId */&lt;/span&gt;
  649. &lt;span class=&quot;x&quot;&gt;}&lt;/span&gt;
  650. &lt;span class=&quot;x&quot;&gt;setup()&lt;/span&gt;
  651. &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  652.  
  653. &lt;p&gt;You will see that in the middle of this, we call &lt;code&gt;token.php&lt;/code&gt; to get an access token from the &lt;code&gt;code&lt;/code&gt; that &lt;code&gt;discordSdk.commands.authorize&lt;/code&gt; gives you. While the URL is &lt;code&gt;/.proxy/token.php&lt;/code&gt;, that's just a &lt;code&gt;token.php&lt;/code&gt; file right next to &lt;code&gt;index.php&lt;/code&gt;; the &lt;code&gt;.proxy&lt;/code&gt; stuff is because Discord puts all your requests through their proxy, which is OK. So you need this file to exist. Following the &lt;a href=&quot;https://discord.com/developers/docs/activities/building-an-activity#step-5-authorizing-authenticating-users&quot;&gt;Discord instructions for authenticating users with OAuth&lt;/a&gt;, it should look something like this:&lt;/p&gt;
  654. &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;?php&lt;/span&gt;
  655. &lt;span class=&quot;k&quot;&gt;require_once&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;secrets.php&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  656.  
  657. &lt;span class=&quot;nv&quot;&gt;$postdata&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;http_build_query&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
  658.    &lt;span class=&quot;k&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
  659.        &lt;span class=&quot;s2&quot;&gt;&quot;client_id&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$clientid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  660.        &lt;span class=&quot;s2&quot;&gt;&quot;client_secret&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$clientsecret&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  661.        &lt;span class=&quot;s2&quot;&gt;&quot;grant_type&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;authorization_code&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  662.        &lt;span class=&quot;s2&quot;&gt;&quot;code&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$_GET&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;code&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
  663.    &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  664. &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  665.  
  666. &lt;span class=&quot;nv&quot;&gt;$opts&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'http'&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt;
  667.    &lt;span class=&quot;k&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
  668.        &lt;span class=&quot;s1&quot;&gt;'method'&lt;/span&gt;  &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'POST'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  669.        &lt;span class=&quot;s1&quot;&gt;'header'&lt;/span&gt;  &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
  670.            &lt;span class=&quot;s1&quot;&gt;'Content-Type: application/x-www-form-urlencoded'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  671.            &lt;span class=&quot;s1&quot;&gt;'User-Agent: mybot/1.00'&lt;/span&gt;
  672.        &lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
  673.        &lt;span class=&quot;s1&quot;&gt;'content'&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$postdata&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  674.        &lt;span class=&quot;s1&quot;&gt;'ignore_errors'&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;true&lt;/span&gt;
  675.    &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  676. &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  677.  
  678. &lt;span class=&quot;nv&quot;&gt;$context&lt;/span&gt;  &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;stream_context_create&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$opts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  679.  
  680. &lt;span class=&quot;nv&quot;&gt;$result_json&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;file_get_contents&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'https://discord.com/api/oauth2/token'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  681. &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$result_json&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FALSE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  682.    &lt;span class=&quot;k&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;json_encode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;no response&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
  683.    &lt;span class=&quot;k&quot;&gt;die&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
  684. &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
  685.  
  686. &lt;span class=&quot;nv&quot;&gt;$result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;json_decode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$result_json&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  687. &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;array_key_exists&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;access_token&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  688.    &lt;span class=&quot;nb&quot;&gt;error_log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Got JSON response from /token without access_token &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$result_json&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  689.    &lt;span class=&quot;k&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;json_encode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;no token&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
  690.    &lt;span class=&quot;k&quot;&gt;die&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
  691. &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
  692. &lt;span class=&quot;nv&quot;&gt;$access_token&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;access_token&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
  693. &lt;span class=&quot;k&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;json_encode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;access_token&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$access_token&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
  694. &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  695.  
  696. &lt;p&gt;And... that's all. At this point, if you Launch your activity from Discord, it should load, and should work out who the running user is (and which channel and server they're in) and that's pretty much all you need. Hopefully that's a relatively simple way to get started.&lt;/p&gt;&lt;ol class=&quot;simple-footnotes&quot;&gt;&lt;li id=&quot;sf-making-a-discord-activity-with-php-1&quot;&gt;it's gotta be an SPA. Discord does not like it when the page navigates around &lt;a class=&quot;simple-footnote-back&quot; href=&quot;http://feeds.feedburner.com/kryogenix#sf-making-a-discord-activity-with-php-1-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</description>
  697. <pubDate>Tue, 08 Jul 2025 07:11:00 +0000</pubDate>
  698. </item>
  699. <item>
  700. <title>The Fridge: Ubuntu Weekly Newsletter Issue 899</title>
  701. <guid isPermaLink="false">https://fridge.ubuntu.com/?p=10559</guid>
  702. <link>https://fridge.ubuntu.com/2025/07/07/ubuntu-weekly-newsletter-issue-899/</link>
  703. <description>&lt;figure class=&quot;wp-block-image&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://fridge.ubuntu.com/wp-content/uploads/2020/02/c9d7/header.png&quot; /&gt;&lt;/figure&gt;
  704.  
  705.  
  706.  
  707. &lt;p&gt;Welcome to the Ubuntu Weekly Newsletter, &lt;strong&gt;Issue 899 for the week of June 29 – July 5, 2025&lt;/strong&gt;. The full version of this issue is available &lt;a href=&quot;https://discourse.ubuntu.com/t/ubuntu-weekly-newsletter-issue-899/63714&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  708.  
  709.  
  710.  
  711. &lt;p&gt;In this issue we cover:&lt;/p&gt;
  712.  
  713.  
  714.  
  715. &lt;ul&gt;&lt;li&gt;Ubuntu 24.10 (Oracular Oriole) reaches End of Life on 10th July 2025&lt;/li&gt;&lt;li&gt;Ubuntu Stats&lt;/li&gt;&lt;li&gt;Hot in Support&lt;/li&gt;&lt;li&gt;LXD: Weekly news #401&lt;/li&gt;&lt;li&gt;Other Meeting Reports&lt;/li&gt;&lt;li&gt;Upcoming Meetings and Events&lt;/li&gt;&lt;li&gt;Ubuntu Nepal : UbuCon Asia 2025 Meetup&lt;/li&gt;&lt;li&gt;LoCo Events&lt;/li&gt;&lt;li&gt;Introducing Debcrafters&lt;/li&gt;&lt;li&gt;Ubucon Latin America 2025, Call for papers&lt;/li&gt;&lt;li&gt;Listening to contributors (code, documentation, translation, testing, etc.): participate in a feedback session&lt;/li&gt;&lt;li&gt;Call for Testing: Multipass 1.16.0 Release Candidate&lt;/li&gt;&lt;li&gt;How to get a job at Canonical&lt;/li&gt;&lt;li&gt;Other Community News&lt;/li&gt;&lt;li&gt;Canonical News&lt;/li&gt;&lt;li&gt;In the Press&lt;/li&gt;&lt;li&gt;In the Blogosphere&lt;/li&gt;&lt;li&gt;Featured Audio and Video&lt;/li&gt;&lt;li&gt;Updates and Security for Ubuntu 22.04, 24.04, 24.10, and 25.04&lt;/li&gt;&lt;li&gt;And much more!&lt;/li&gt;&lt;/ul&gt;
  716.  
  717.  
  718.  
  719. &lt;p&gt;&lt;strong&gt;The Ubuntu Weekly Newsletter is brought to you by:&lt;/strong&gt;&lt;/p&gt;
  720.  
  721.  
  722.  
  723. &lt;ul&gt;&lt;li&gt;Krytarik Raido&lt;/li&gt;&lt;li&gt;Bashing-om&lt;/li&gt;&lt;li&gt;Chris Guiver&lt;/li&gt;&lt;li&gt;Wild Man&lt;/li&gt;&lt;li&gt;Din Mušić – LXD&lt;/li&gt;&lt;li&gt;And many others&lt;/li&gt;&lt;/ul&gt;
  724.  
  725.  
  726.  
  727. &lt;p&gt;If you have a story idea for the Weekly Newsletter, join the &lt;a href=&quot;https://lists.ubuntu.com/mailman/listinfo/Ubuntu-news-team&quot;&gt;Ubuntu News Team mailing list&lt;/a&gt; and submit it. Ideas can also be added to the &lt;a href=&quot;https://discourse.ubuntu.com/t/ubuntu-weekly-newsletter-ideas/40053&quot;&gt;wiki&lt;/a&gt;!&lt;/p&gt;
  728.  
  729.  
  730.  
  731. &lt;div class=&quot;wp-block-image&quot;&gt;&lt;figure class=&quot;alignleft&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://fridge.ubuntu.com/wp-content/uploads/2015/05/ab28/CCL.png&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  732.  
  733.  
  734.  
  735. &lt;p&gt;&lt;a href=&quot;https://fridge.ubuntu.com/2025/07/07/ubuntu-weekly-newsletter-issue-899/&quot;&gt;&lt;/a&gt;.&lt;/p&gt;</description>
  736. <pubDate>Mon, 07 Jul 2025 22:08:13 +0000</pubDate>
  737. </item>
  738. <item>
  739. <title>St&amp;eacute;phane Graber: Year two of freelancing</title>
  740. <guid isPermaLink="false">https://stgraber.org/?p=1752</guid>
  741. <link>https://stgraber.org/2025/07/07/year-two-of-freelancing/</link>
  742. <description>&lt;h1 class=&quot;wp-block-heading&quot;&gt;Introduction&lt;/h1&gt;
  743.  
  744.  
  745.  
  746. &lt;p&gt;It was exactly two years ago today that I &lt;a data-id=&quot;1378&quot; data-type=&quot;post&quot; href=&quot;https://stgraber.org/2023/07/10/time-to-move-on/&quot;&gt;left my day job as Engineering Manager of LXD at Canonical&lt;/a&gt; and went freelance. I wrote about the &lt;a data-id=&quot;1605&quot; data-type=&quot;post&quot; href=&quot;https://stgraber.org/2024/07/07/one-year-of-freelancing/&quot;&gt;one year experience&lt;/a&gt; last year, so here’s another update for what happened since!&lt;/p&gt;
  747.  
  748.  
  749.  
  750. &lt;h1 class=&quot;wp-block-heading&quot;&gt;Zabbly&lt;/h1&gt;
  751.  
  752.  
  753.  
  754. &lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;a href=&quot;https://zabbly.com&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1608&quot; height=&quot;192&quot; src=&quot;https://stgraber.org/wp-content/uploads/2024/07/zabbly.png&quot; width=&quot;576&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  755.  
  756.  
  757.  
  758. &lt;p&gt;As a reminder, &lt;a href=&quot;https://zabbly.com&quot;&gt;Zabbly&lt;/a&gt; is the company I created for my freelance work. Most of it is Incus related these days, though I also make and publish some &lt;a href=&quot;https://github.com/zabbly/linux&quot;&gt;mainline kernel builds&lt;/a&gt;, &lt;a href=&quot;https://github.com/zabbly/zfs&quot;&gt;ZFS&lt;/a&gt; packages and &lt;a href=&quot;https://github.com/zabbly/ovn&quot;&gt;OVS/OVN&lt;/a&gt; packages! &lt;/p&gt;
  759.  
  760.  
  761.  
  762. &lt;p&gt;On top of that, Zabbly also owns my various ARIN resources (ASN, allocations, …) as well as my hosting/datacenter contracts.&lt;/p&gt;
  763.  
  764.  
  765.  
  766. &lt;p&gt;Through Zabbly I offer a mix of by-the-hour consultation with varying prices depending on the urgency of the work (basic consultation, support, emergency support) as well as fixed-cost services, mostly &lt;a href=&quot;https://zabbly.com/incus&quot;&gt;related to Incus&lt;/a&gt; (infrastructure review, migration from LXD, remote or on-site trainings, …).&lt;/p&gt;
  767.  
  768.  
  769.  
  770. &lt;p&gt;Zabbly is also the legal entity for donations related to my open source work, currently supporting:&lt;/p&gt;
  771.  
  772.  
  773.  
  774. &lt;ul class=&quot;wp-block-list&quot;&gt;
  775. &lt;li&gt;Github Sponsors: &lt;a href=&quot;https://github.com/sponsors/stgraber&quot;&gt;https://github.com/sponsors/stgraber&lt;/a&gt;&lt;/li&gt;
  776.  
  777.  
  778.  
  779. &lt;li&gt;Ko-fi: &lt;a href=&quot;https://ko-fi.com/stgraber&quot;&gt;https://ko-fi.com/stgraber&lt;/a&gt;&lt;/li&gt;
  780.  
  781.  
  782.  
  783. &lt;li&gt;Patreon: &lt;a href=&quot;https://patreon.com/stgraber&quot;&gt;https://patreon.com/stgraber&lt;/a&gt;&lt;/li&gt;
  784. &lt;/ul&gt;
  785.  
  786.  
  787.  
  788. &lt;p&gt;And lastly, Zabbly also runs a &lt;a href=&quot;https://www.youtube.com/@TheZabbly&quot;&gt;Youtube channel&lt;/a&gt; covering the various projects I’m involved with.&lt;br /&gt;That part grew quite a bit over the past year, with subscriber count up 75%, frequent live streams and release videos. The channel is now part of the YouTube Partner program.&lt;/p&gt;
  789.  
  790.  
  791.  
  792. &lt;h1 class=&quot;wp-block-heading&quot;&gt;FuturFusion&lt;/h1&gt;
  793.  
  794.  
  795.  
  796. &lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;a href=&quot;https://futurfusion.io&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1753&quot; height=&quot;640&quot; src=&quot;https://stgraber.org/wp-content/uploads/2025/07/image.png&quot; style=&quot;width: 114px; height: auto;&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  797.  
  798.  
  799.  
  800. &lt;p&gt;In addition to the work I’m doing through Zabbly. I’m also the CTO and co-founder of &lt;a href=&quot;https://futurfusion.io&quot;&gt;FuturFusion&lt;/a&gt;.&lt;/p&gt;
  801.  
  802.  
  803.  
  804. &lt;p&gt;FuturFusion is focused on providing a full private cloud solution to enterprise customers, primarily those looking for an alternative to VMware. The solution is comprised of:&lt;/p&gt;
  805.  
  806.  
  807.  
  808. &lt;ul class=&quot;wp-block-list&quot;&gt;
  809. &lt;li&gt;Incus clusters&lt;/li&gt;
  810.  
  811.  
  812.  
  813. &lt;li&gt;Hypervisor OS (based on Incus OS)&lt;/li&gt;
  814.  
  815.  
  816.  
  817. &lt;li&gt;&lt;a href=&quot;https://github.com/futurfusion/operations-center&quot;&gt;Operations Center&lt;/a&gt; (provisioning, global inventory, update management, ..)&lt;/li&gt;
  818.  
  819.  
  820.  
  821. &lt;li&gt;&lt;a href=&quot;https://github.com/futurfusion/migration-manager&quot;&gt;Migration Manager&lt;/a&gt; (seamless VMware to Incus migrations)&lt;/li&gt;
  822. &lt;/ul&gt;
  823.  
  824.  
  825.  
  826. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://stgraber.org/wp-content/uploads/2025/07/image-1.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1754&quot; height=&quot;512&quot; src=&quot;https://stgraber.org/wp-content/uploads/2025/07/image-1-1024x512.png&quot; width=&quot;1024&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  827.  
  828.  
  829.  
  830. &lt;p&gt;While Zabbly is just a one person show, FuturFusion has a global team and offers 24/7 support.&lt;/p&gt;
  831.  
  832.  
  833.  
  834. &lt;p&gt;All components of the FuturFusion Cloud suite are fully open-source (Apache 2.0).&lt;br /&gt;FuturFusion customers get access to fully tested and supported builds of the software stack.&lt;/p&gt;
  835.  
  836.  
  837.  
  838. &lt;h1 class=&quot;wp-block-heading&quot;&gt;Incus&lt;/h1&gt;
  839.  
  840.  
  841.  
  842. &lt;figure class=&quot;wp-block-image&quot;&gt;&lt;a href=&quot;https://linuxcontainers.org/incus/&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://lh7-rt.googleusercontent.com/slidesz/AGV_vUf8ZNmDSJ7LjUhFQC4nmTzR7Dm0FnwvO6UXfEJqFxliHGKVfRZLfm1Y_TCM-d8MYtzBGIo-1RjcZ1mMzc0NFR6QUDgJxQJxlMv9qPuE71zD8yd3O--akOSBFp6c6kegY9JhxWD9uA=s2048?key=1Cxf5_LmuCtmQZkqX76p2vEA&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  843.  
  844.  
  845.  
  846. &lt;p&gt;A lot has been going on with Incus over the past year!&lt;br /&gt;&lt;br /&gt;Some of the main feature highlights are:&lt;/p&gt;
  847.  
  848.  
  849.  
  850. &lt;ul class=&quot;wp-block-list&quot;&gt;
  851. &lt;li&gt;OCI application containers support&lt;/li&gt;
  852.  
  853.  
  854.  
  855. &lt;li&gt;Automatic cluster re-balancing&lt;/li&gt;
  856.  
  857.  
  858.  
  859. &lt;li&gt;Windows support for the VM agent&lt;/li&gt;
  860.  
  861.  
  862.  
  863. &lt;li&gt;Linstor storage driver&lt;/li&gt;
  864.  
  865.  
  866.  
  867. &lt;li&gt;Network address sets&lt;/li&gt;
  868.  
  869.  
  870.  
  871. &lt;li&gt;A lot of OVN improvements (native client, ECMP for interconnect, load-balancer monitoring, ability to run isolated networks, inclusion of physical interfaces into OVN, …)&lt;/li&gt;
  872.  
  873.  
  874.  
  875. &lt;li&gt;A lot of VM improvements (OS reporting, baseline CPU calculation, console history, import of existing QCOW2/VMDK/OVA images, live-migration of VM storage, screenshot API, IOMMU support, USB virtual devices, memory hotplug, …)&lt;/li&gt;
  876. &lt;/ul&gt;
  877.  
  878.  
  879.  
  880. &lt;p&gt;We also acquired (through Zabbly) our own MAC address prefix and transitioned all our projects over to that!&lt;/p&gt;
  881.  
  882.  
  883.  
  884. &lt;p&gt;The University of Texas in Austin once again decided to actively contribute to Incus, leading to dozens of contributions by students, clearing quite a bit of our feature request backlog.&lt;/p&gt;
  885.  
  886.  
  887.  
  888. &lt;p&gt;And I can’t talk about recent Incus work without talking about &lt;a href=&quot;https://github.com/lxc/incus-os&quot;&gt;Incus OS&lt;/a&gt;. This is recent initiative to build our own immutable OS image, just to run Incus. It’s designed to be as safe as possible and easy to operate at large scale. I recently traveled to the Linux Security Summit to talk about it.&lt;/p&gt;
  889.  
  890.  
  891.  
  892. &lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
  893.  
  894. &lt;/div&gt;&lt;/figure&gt;
  895.  
  896.  
  897.  
  898. &lt;p&gt;Two more things also happened that are definitely worth mentioning, the first is the decision by &lt;a href=&quot;https://www.truenas.com/truenas-community-edition/&quot;&gt;TrueNAS Scale&lt;/a&gt; to use Incus as the built-in virtualization solution. This has introduced Incus to a LOT of new people and we’re looking forward to some exciting integration work &lt;a href=&quot;https://github.com/lxc/incus/pull/2157&quot;&gt;coming very soon&lt;/a&gt;!&lt;/p&gt;
  899.  
  900.  
  901.  
  902. &lt;p&gt;The other is a significant investment from the &lt;a href=&quot;https://www.sovereign.tech/&quot;&gt;Sovereign Tech Fund&lt;/a&gt;, funding quite a bit of Incus work this year, from our work on LTS bugfix releases to the aforementioned Windows agent and a major refresh of our development lab!&lt;/p&gt;
  903.  
  904.  
  905.  
  906. &lt;h1 class=&quot;wp-block-heading&quot;&gt;NorthSec&lt;/h1&gt;
  907.  
  908.  
  909.  
  910. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://nsec.io&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1755&quot; height=&quot;682&quot; src=&quot;https://stgraber.org/wp-content/uploads/2025/07/image-2-1024x682.png&quot; width=&quot;1024&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  911.  
  912.  
  913.  
  914. &lt;p&gt;&lt;a href=&quot;https://nsec.io&quot;&gt;NorthSec&lt;/a&gt; is a yearly cybersecurity conference, CTF and training provider, usually happening in late May in Montreal, Canada. It’s been operating since 2013 and is now one of the largest on-site CTF events in the world along with having a pretty sizable conference too.&lt;/p&gt;
  915.  
  916.  
  917.  
  918. &lt;p&gt;There are two main Incus-related highlights for NorthSec this year.&lt;/p&gt;
  919.  
  920.  
  921.  
  922. &lt;p&gt;First, all the on-site routing and compute was running on Incus OS.&lt;br /&gt;This was still extremely early days with this being (as far as I know) the first deployment of Incus OS on real server hardware, but it all went off without a hitch!&lt;/p&gt;
  923.  
  924.  
  925.  
  926. &lt;p&gt;The second is that we leaned very hard on Infrastructure As Code this year, especially on the CTF part of the event. All challenges this year were published through a combination of Terraform and Ansible, using their respective providers/plugins for Incus. The entire CTF could be re-deployed from scratch in less than an hour and we got to also benefit from pretty extensive CI through Github Actions.&lt;/p&gt;
  927.  
  928.  
  929.  
  930. &lt;p&gt;For the next edition we’re looking at moving more of the infrastructure over to Incus OS and make sure that all our Incus cluster configuration and objects are tracked in Terraform.&lt;/p&gt;
  931.  
  932.  
  933.  
  934. &lt;h1 class=&quot;wp-block-heading&quot;&gt;Conferences&lt;/h1&gt;
  935.  
  936.  
  937.  
  938. &lt;p&gt;Similar to last year, I’ve been keeping conference travel to a lower amount than I was once used to &lt;img alt=&quot;🙂&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f642.png&quot; style=&quot;height: 1em;&quot; /&gt;&lt;/p&gt;
  939.  
  940.  
  941.  
  942. &lt;p&gt;But I still managed to make it to:&lt;/p&gt;
  943.  
  944.  
  945.  
  946. &lt;ul class=&quot;wp-block-list&quot;&gt;
  947. &lt;li&gt;Linux Plumbers Conference 2024 (in Vienna, Austria)
  948. &lt;ul class=&quot;wp-block-list&quot;&gt;
  949. &lt;li&gt;Ran the containers &amp;amp; checkpoint/restore micro-conference and talked about immutable process tags&lt;/li&gt;
  950. &lt;/ul&gt;
  951. &lt;/li&gt;
  952.  
  953.  
  954.  
  955. &lt;li&gt;FOSDEM 2025 (in Brussels, Belgium)
  956. &lt;ul class=&quot;wp-block-list&quot;&gt;
  957. &lt;li&gt;Ran the containers devroom on Saturday and &lt;a href=&quot;https://www.youtube.com/watch?v=A-cW5XyCjFk&quot;&gt;presented Incus OCI support&lt;/a&gt;&lt;/li&gt;
  958.  
  959.  
  960.  
  961. &lt;li&gt;Ran the kernel devroom on Sunday&lt;/li&gt;
  962. &lt;/ul&gt;
  963. &lt;/li&gt;
  964.  
  965.  
  966.  
  967. &lt;li&gt;Linux Storage, Filesystem, Memory Management &amp;amp; BPF Summit (in Montreal, Canada)&lt;/li&gt;
  968.  
  969.  
  970.  
  971. &lt;li&gt;Linux Security Summit 2025 (in Denver, Colorado)
  972. &lt;ul class=&quot;wp-block-list&quot;&gt;
  973. &lt;li&gt;Presented our work on &lt;a href=&quot;https://www.youtube.com/watch?v=d4Wx08pKNBo&quot;&gt;Incus OS&lt;/a&gt;&lt;/li&gt;
  974. &lt;/ul&gt;
  975. &lt;/li&gt;
  976. &lt;/ul&gt;
  977.  
  978.  
  979.  
  980. &lt;p&gt;This will likely be it as far as conference travel for 2025 as I don’t expect to make it in person to Linux Plumbers this year, though I intend to still handle the CFP for the containers/checkpoint-restore micro-conference and attend the event remotely.&lt;/p&gt;
  981.  
  982.  
  983.  
  984. &lt;h1 class=&quot;wp-block-heading&quot;&gt;What’s next&lt;/h1&gt;
  985.  
  986.  
  987.  
  988. &lt;p&gt;I expect the coming year to be just as busy as this past year!&lt;/p&gt;
  989.  
  990.  
  991.  
  992. &lt;p&gt;Incus OS is getting close to its first beta, opening it up to wider usage and with it, more feature requests and tweaks! We’ve been focusing on its use for large customers that get centrally provisioned and managed, but the intent is for Incus OS to also be a great fit for the homelab environment and we have exciting plans to make that as seamless as possible!&lt;/p&gt;
  993.  
  994.  
  995.  
  996. &lt;p&gt;Incus itself also keeps getting better. We have some larger new features coming up, like the ability to run OCI images in virtual machines, the aforementioned TrueNAS storage driver, a variety of OVN improvements and more!&lt;/p&gt;
  997.  
  998.  
  999.  
  1000. &lt;p&gt;And of course, working with my customers, both through Zabbly and at FuturFusion to support their needs and to plan for the future!&lt;/p&gt;</description>
  1001. <pubDate>Mon, 07 Jul 2025 05:11:10 +0000</pubDate>
  1002. </item>
  1003. <item>
  1004. <title>Podcast Ubuntu Portugal: E354 Emíl.IA</title>
  1005. <guid isPermaLink="false">https://hub.podcastubuntuportugal.org/s/EL2kLxK9gRdSj7t/download/e354.mp3</guid>
  1006. <link>https://podcastubuntuportugal.org/e354/</link>
  1007. <description>&lt;p&gt;Não tivemos tempo de gravar esta semana, mas…este é o episódio que VAI REVOLUCIONAR A INDÚSTRIA DOS PAPAGAIOS ESTOCÁSTICOS! Uma revelação em primeira mão e em exclusivo explosivo.&lt;/p&gt;
  1008. &lt;p&gt;Já sabem: oiçam, subscrevam e partilhem!&lt;/p&gt;
  1009. &lt;ul&gt;
  1010. &lt;li&gt;Festa do Software Livre 2025, Porto, 3 a 5 de Outubro: &lt;a href=&quot;https://festa2025.softwarelivre.eu/pt/&quot;&gt;https://festa2025.softwarelivre.eu/pt/&lt;/a&gt;&lt;/li&gt;
  1011. &lt;li&gt;FOSS4G Europe 2025: &lt;a href=&quot;https://2025.europe.foss4g.org/&quot;&gt;https://2025.europe.foss4g.org/&lt;/a&gt;&lt;/li&gt;
  1012. &lt;li&gt;Ubuntu Summit 2025, Londres, 23-24 de Outubro: &lt;a href=&quot;https://ubuntu.com/blog/ubuntu-summit-25-10-is-coming-to-your-circle-of-friends-from-london&quot;&gt;https://ubuntu.com/blog/ubuntu-summit-25-10-is-coming-to-your-circle-of-friends-from-london&lt;/a&gt;&lt;/li&gt;
  1013. &lt;li&gt;LoCo PT: &lt;a href=&quot;https://loco.ubuntu.com/teams/ubuntu-pt/&quot;&gt;https://loco.ubuntu.com/teams/ubuntu-pt/&lt;/a&gt;&lt;/li&gt;
  1014. &lt;li&gt;Mastodon: &lt;a href=&quot;https://masto.pt/@pup&quot;&gt;https://masto.pt/@pup&lt;/a&gt;&lt;/li&gt;
  1015. &lt;li&gt;Youtube: &lt;a href=&quot;https://youtube.com/PodcastUbuntuPortugal&quot;&gt;https://youtube.com/PodcastUbuntuPortugal&lt;/a&gt;&lt;/li&gt;
  1016. &lt;/ul&gt;
  1017. &lt;h3 id=&quot;atribuição-e-licenças&quot;&gt;Atribuição e licenças&lt;/h3&gt;
  1018. &lt;p&gt;Este episódio foi produzido por Diogo Constantino, Miguel e Tiago Carrondo e editado pelo &lt;a href=&quot;https://senhorpodcast.pt/&quot;&gt;Senhor Podcast&lt;/a&gt;.
  1019. O website é produzido por Tiago Carrondo e o &lt;a href=&quot;https://gitlab.com/podcastubuntuportugal/website&quot;&gt;código aberto&lt;/a&gt; está licenciado nos termos da &lt;a href=&quot;https://gitlab.com/podcastubuntuportugal/website/main/LICENSE&quot;&gt;Licença MIT&lt;/a&gt;. (&lt;a href=&quot;https://creativecommons.org/licenses/by/4.0/)&quot;&gt;https://creativecommons.org/licenses/by/4.0/)&lt;/a&gt;. A música do genérico é: “Won’t see it comin’ (Feat Aequality &amp;amp; N’sorte d’autruche)”, por Alpha Hydrae e está licenciada nos termos da &lt;a href=&quot;https://creativecommons.org/publicdomain/zero/1.0/&quot;&gt;CC0 1.0 Universal License&lt;/a&gt;.
  1020. Os efeitos sonoros deste episódio possuem as seguintes licenças: Exclusivo Explosivo: Countdown-Boom.mp3 by Russintheus – &lt;a href=&quot;https://freesound.org/s/165089/&quot;&gt;https://freesound.org/s/165089/&lt;/a&gt; – License: Creative Commons 0; Estática: Computer noise, VHF Ham radio 146.67 MHZ.wav by kb7clx – &lt;a href=&quot;https://freesound.org/s/347524/&quot;&gt;https://freesound.org/s/347524/&lt;/a&gt; – License: Creative Commons 0; Geringonça: Sci-Fi Computer Ambience - Pure Data Patch by cryanrautha – &lt;a href=&quot;https://freesound.org/s/333777/&quot;&gt;https://freesound.org/s/333777/&lt;/a&gt; – License: Creative Commons 0; Processamento da Emília: mechanical_calculator_looped_01 by joedeshon – &lt;a href=&quot;https://freesound.org/s/714228/&quot;&gt;https://freesound.org/s/714228/&lt;/a&gt; – License: Creative Commons 0.
  1021. Este episódio e a imagem utilizada estão licenciados nos termos da licença: &lt;a href=&quot;https://creativecommons.org/licenses/by-nc-nd/4.0/&quot;&gt;Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)&lt;/a&gt;, &lt;a href=&quot;https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode&quot;&gt;cujo texto integral pode ser lido aqui&lt;/a&gt;. Estamos abertos a licenciar para permitir outros tipos de utilização, &lt;a href=&quot;https://podcastubuntuportugal.org/contactos&quot;&gt;contactem-nos&lt;/a&gt; para validação e autorização.
  1022. A arte de episódio foi criada por encomenda pela Shizamura - artista, ilustradora e autora de BD. Podem ficar a conhecer melhor a &lt;a href=&quot;https://ciberlandia.pt/@shizamura&quot;&gt;Shizamura na Ciberlândia&lt;/a&gt; e no &lt;a href=&quot;https://sarilho.net/&quot;&gt;seu sítio web&lt;/a&gt;.&lt;/p&gt;</description>
  1023. <pubDate>Fri, 04 Jul 2025 00:00:00 +0000</pubDate>
  1024.        <enclosure url="https://hub.podcastubuntuportugal.org/s/EL2kLxK9gRdSj7t/download/e354.mp3" length="5557824" type="audio/mpeg"/>
  1025. </item>
  1026. <item>
  1027. <title>Stuart Langridge: A (limited) defence of footnotes</title>
  1028. <guid isPermaLink="false">tag:www.kryogenix.org,2025-07-03:/days/2025/07/03/a-limited-defence-of-footnotes/</guid>
  1029. <link>https://www.kryogenix.org/days/2025/07/03/a-limited-defence-of-footnotes/</link>
  1030. <description>&lt;p&gt;So, Jake Archibald wrote that we should &quot;&lt;a href=&quot;https://jakearchibald.com/2025/give-footnotes-the-boot/&quot;&gt;give footnotes the boot&lt;/a&gt;&quot;, and... I do not wholly agree. So, here are some arguments against, or at least perpendicular to. Whether this is in grateful thanks of or cold-eyed revenge about him making me drink a limoncello and Red Bull last week can remain a mystery.&lt;/p&gt;
  1031. &lt;p&gt;Commentary about footnotes on the web tends to boil down into two categories: that they're foot, and that they're notes. Everybody&lt;sup id=&quot;sf-a-limited-defence-of-footnotes-1-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;http://feeds.feedburner.com/kryogenix#sf-a-limited-defence-of-footnotes-1&quot; title=&quot;sensible&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; agrees that being foot is a problem. Having a meaningless little symbol in some text which you then have to scroll down to the end of a document to understand is stupid. But, and here's the point, &lt;em&gt;nobody does this&lt;/em&gt;. Unless a document on the web was straight up machine-converted from its prior life as a printed thing, any &quot;footnotes&quot; therein will have had some effort made to conceptually locate the content of the footnote inline with the text that it's footnoting. That might be a link which jumps you down to the bottom, or it might be placed at the side, or it might appear inline when clicked on, or it might appear in a popover, but the content of a &quot;footnote&quot; can be reached without your thread of attention being diverted from the point where you were previously&lt;sup id=&quot;sf-a-limited-defence-of-footnotes-2-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;http://feeds.feedburner.com/kryogenix#sf-a-limited-defence-of-footnotes-2&quot; title=&quot;for good implementations, anyway; if you make your footnotes a link down to the end of the document, and then don't provide a link back via either the footnote marker or by adding it to the end, then you are a bad web author and I condemn you to constantly find unpaired socks, forever&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
  1032. &lt;p&gt;He's right about the numbers&lt;sup id=&quot;sf-a-limited-defence-of-footnotes-3-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;http://feeds.feedburner.com/kryogenix#sf-a-limited-defence-of-footnotes-3&quot; title=&quot;or, ye gods and little fishes, a selection of mad typographic symbols which most people can't even type and need to be copied from the web search results for &amp;quot;that little squiggly section thingy&amp;quot;&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; being meaningless, though, and that they're bad link text; the number &quot;3&quot; gives no indication of what's hidden behind it, and the analogy with &quot;click here&quot; as link text is a good one. We'll come back to this, but it is a correct objection.&lt;/p&gt;
  1033. &lt;h3&gt;What is a footnote, anyway?&lt;/h3&gt;
  1034. &lt;p id=&quot;footnotes-being-set-off&quot;&gt;The issue with footnotes being set off this way (that is: that they're notes) isn't, though, that it's bad (which it is), it's that the alternatives are worse, at least in some situations. A footnote is an extra bit of information which is relevant to what you're reading, but not important enough that you &lt;em&gt;need&lt;/em&gt; to read it right now. That might be because it's explanatory (that is: it expands and enlarges on the main point being made, but isn't directly required), or because it's a reference (a citation, or a link out to where this information was found so it can be looked up later and to prove that the author didn't just make this up), or because it's commentary (where you don't want to disrupt the text that's written with additions inline, maybe because you didn't write it). Or, and this is important, because it's funnier to set it off like this. A footnote used this way is like the voice of the narrator in The Perils of Penelope Pitstop being funny about the situation. Look, I'll choose a random book from my bookshelf&lt;sup id=&quot;sf-a-limited-defence-of-footnotes-4-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;http://feeds.feedburner.com/kryogenix#sf-a-limited-defence-of-footnotes-4&quot; title=&quot;alright, I chose a random Terry Pratchett book to make the point, I admit; I'm not stupid. But it really was the closest one to hand; I didn't spend extra time looking for particularly good examples&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;, &lt;em&gt;Reaper Man&lt;/em&gt; by Terry Pratchett.&lt;/p&gt;
  1035.  
  1036. &lt;p&gt;&lt;img alt=&quot;A photograph of a book page. Most of the text is a little blurred to distract attention from it. Midway down the page, unblurred text reads: 'Even the industrial-grade crystal ball was only there as a sop to her customers. Mrs Cake could actually read the future in a bowl of porridge.¹ She could have a revelation in a panful of frying bacon.' At the bottom of the page is the text referenced by the footnote marker, which reads: '¹ It would say, for example, that you would shortly undergo a painful bowel movement.'&quot; src=&quot;https://kryogenix.org/images/pratchett-footnote-example.jpg&quot; /&gt;&lt;/p&gt;
  1037. &lt;p&gt;This is done because it's funny. Alternatives... would not be funny.&lt;sup id=&quot;sf-a-limited-defence-of-footnotes-5-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;http://feeds.feedburner.com/kryogenix#sf-a-limited-defence-of-footnotes-5&quot; title=&quot;This is basically &amp;quot;explaining the joke&amp;quot;, something which squashes all the humour out of it like grapes in a press. Sorry, PTerry.&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
  1038. &lt;p&gt;If this read:&lt;/p&gt;
  1039. &lt;blockquote&gt;Even the industrial-grade crystal ball was only there as a sop to her customers. Mrs Cake could actually read the future in a bowl of porridge. (It would say, for example, that you would shortly undergo a painful bowel movement.) She could have a revelation in a panful of frying bacon.&lt;/blockquote&gt;
  1040.  
  1041. &lt;p&gt;then it's too distracting, isn't it? That's giving the thing too much prominence; it derails the point and then you have to get back on board after reading it. Similarly with making it a long note via &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; or via making it &lt;code&gt;&amp;lt;section role=&quot;aside&quot;&amp;gt;&lt;/code&gt;, and Jake does make the point that that's for longer notes.&lt;/p&gt;
  1042. &lt;blockquote&gt;&lt;p&gt;Even the industrial-grade crystal ball was only there as a sop to her customers. Mrs Cake could actually read the future in a bowl of porridge.&lt;/p&gt;
  1043. &lt;details&gt;NoteIt would say, for example, that you would shortly undergo a painful bowel movement.&lt;/details&gt;
  1044. &lt;p&gt;She could have a revelation in a panful of frying bacon.&lt;/p&gt;&lt;/blockquote&gt;
  1045.  
  1046. &lt;p&gt;Now, admittedly, half the reason Pratchett's footnotes are funny is because they're imitating the academic use. But the other half is that there is a place for that &quot;voice of the narrator&quot; to make snarky asides, and we don't really have a better way to do it.&lt;/p&gt;
  1047. &lt;p&gt;Sometimes the parenthesis is the best way to do it. Look at the explanations of &quot;explanatory&quot;, &quot;reference&quot;, and &quot;commentary&quot; in &lt;a href=&quot;http://feeds.feedburner.com/kryogenix#footnotes-being-set-off&quot;&gt;the paragraph above about what a footnote is&lt;/a&gt;. They needed to be inline; the definition of what I mean by &quot;explanatory&quot; should be read along with the word, and you need to understand my definition to understand why I think it's important. It's directly relevant. So it's inline; you must not proceed without having read it. It's not a footnote. But that's not always the case; sometimes you want to expand on what's been written without requiring the reader to read that expansion in order to proceed. It's a help; an addition; something relevant but not &lt;em&gt;too&lt;/em&gt; relevant. (I think this is behind the convention that footnotes are in smaller text, personally; it's a typographic convention that this represents the niggling or snarky or helpful &quot;voice in your head&quot;, annotating the ongoing conversation. But I haven't backed this up with research or anything.)&lt;/p&gt;
  1048. &lt;h3&gt;What's the alternative?&lt;/h3&gt;
  1049. &lt;p&gt;See, this is the point. Assume for the moment that I'm right&lt;sup id=&quot;sf-a-limited-defence-of-footnotes-6-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;http://feeds.feedburner.com/kryogenix#sf-a-limited-defence-of-footnotes-6&quot; title=&quot;I always do&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; and that there is some need for this type of annotation -- something which is important enough to be referenced here but not important enough that you must read it to proceed. How do we represent that in a document?&lt;/p&gt;
  1050. &lt;p&gt;Jake's approaches are all reasonable in some situations. A note section (a &quot;sidebar&quot;, I think newspaper people would call it?) works well for long clarifying paragraphs, little biographies of a person you've referenced, or whatever. If that content is less obviously relevant then hiding it behind a collapsed revealer triangle is even better. Short stuff which is that smidge more relevant gets promoted to be entirely inline and put in brackets. Stuff which is entirely reference material (citations, for example) doesn't really need to be in text in the document at all; don't footnote your point and then make a citation which links to the source, just link the text you wrote directly to the source. That certainly is a legacy of print media. There are annoying problems with most of the alternatives (a &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; can't go in a &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; even if inline, which is massively infuriating; sidenotes are great on wide screens but you still need to solve this problem on narrow, so they can't be the answer alone.) You can even put the footnote text in a tooltip as well, which helps people with mouse pointers or (maybe) keyboard navigation, and is what I do right here on this site.&lt;/p&gt;
  1051. &lt;p&gt;But... if you've got a point which isn't important enough to be inline and isn't long enough to get its own box off to the side, then it's gotta go &lt;em&gt;somewhere&lt;/em&gt;, and if that somewhere isn't &quot;right there inline&quot; then it's gotta be somewhere &lt;em&gt;else&lt;/em&gt;, and... that's what a footnote &lt;em&gt;is&lt;/em&gt;, right? Some text elsewhere that you link to.&lt;/p&gt;
  1052. &lt;p&gt;We can certainly take advantage of being a digital document to display the annotation inline if the user chooses to (by clicking on it or similar), or to show a popover (which paper can't do). But if the text isn't displayed to you up front, then you have to click on something to show it, and that thing you click on must not itself be distracting. That means the thing you click on must be small, and not contentful. Numbers (or little symbols) are not too bad an approach, in that light. The technical issues here are dispensed with easily enough, as &lt;a href=&quot;https://front-end.social/@leaverou/114784950642671149&quot;&gt;Lea Verou&lt;/a&gt; points out: yes, put a bigger hit target around your little undistracting numbers so they're not too hard to tap on, that's important.&lt;/p&gt;
  1053. &lt;p&gt;But as Lea goes on to say, and Jake mentioned above... how do we deal with the idea that &quot;3&quot; needs to be both &quot;small and undistracting&quot; but also &quot;give context so it's not just a meaningless number&quot;? This is a real problem; pretty much by definition, if your &quot;here is something which will show you extra information&quot; marker gives you context about what that extra information &lt;em&gt;is&lt;/em&gt;, then it's long enough that you actually have to &lt;em&gt;read&lt;/em&gt; it to understand the context, and therefore it's distracting.&lt;sup id=&quot;sf-a-limited-defence-of-footnotes-7-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;http://feeds.feedburner.com/kryogenix#sf-a-limited-defence-of-footnotes-7&quot; title=&quot;I've seen people do footnote markers which are little words rather than numbers, and it's dead annoying. I get what they're trying to do, which is to solve this context problem, but it's worse&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; This isn't really a circle that can be squared: these two requirements are in opposition, and so a compromise is needed.&lt;/p&gt;
  1054. &lt;p&gt;Lea makes the same point with &quot;How to provide context without increasing prominence? Wrapping part of the text with a link could be a better anchor, but then how to distinguish from actual links? Perhaps we need a convention.&quot; And I agree. I think we need a convention for this. But... I think we've already &lt;em&gt;got&lt;/em&gt; a convention, no? A little superscript number or symbol means &quot;this is a marker for additional information, which you need to interact with&lt;sup id=&quot;sf-a-limited-defence-of-footnotes-8-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;http://feeds.feedburner.com/kryogenix#sf-a-limited-defence-of-footnotes-8&quot; title=&quot;you might 'interact' with this marker by clicking on it in a digital document, or by looking it up at the bottom of the page in a print doc, but it's all interaction&quot;&gt;8&lt;/a&gt;&lt;/sup&gt; to get that additional information&quot;. Is it a perfect convention? No: the numbers are semantically meaningless. Is there a &lt;em&gt;better&lt;/em&gt; convention? I'm not sure there is.&lt;/p&gt;
  1055. &lt;h3&gt;An end on't&lt;/h3&gt;
  1056. &lt;p&gt;So, Jake's right: a whole bunch of things that are currently presented on the web as &quot;here's a little (maybe clickable) number, click it to jump to the end of the document to read a thing&quot; could be presented much better with a little thought. We web authors could do better at this. But should footnotes go away? I don't think so. Once all the cases of things that should be done better &lt;em&gt;are&lt;/em&gt; done better, there'll still be some left. I don't hate footnotes. I do hate limoncello and Red Bull, though.&lt;/p&gt;&lt;ol class=&quot;simple-footnotes&quot;&gt;&lt;li id=&quot;sf-a-limited-defence-of-footnotes-1&quot;&gt;sensible &lt;a class=&quot;simple-footnote-back&quot; href=&quot;http://feeds.feedburner.com/kryogenix#sf-a-limited-defence-of-footnotes-1-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-a-limited-defence-of-footnotes-2&quot;&gt;for good implementations, anyway; if you make your footnotes a link down to the end of the document, and then &lt;em&gt;don't&lt;/em&gt; provide a link &lt;em&gt;back&lt;/em&gt; via either the footnote marker or by adding it to the end, then you are a bad web author and I condemn you to constantly find unpaired socks, forever &lt;a class=&quot;simple-footnote-back&quot; href=&quot;http://feeds.feedburner.com/kryogenix#sf-a-limited-defence-of-footnotes-2-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-a-limited-defence-of-footnotes-3&quot;&gt;or, ye gods and little fishes, a selection of mad typographic symbols which most people can't even type and need to be copied from the web search results for &quot;&lt;a href=&quot;https://nerdtechy.com/how-to-type-double-s-vertical-symbol&quot;&gt;that little squiggly section thingy&lt;/a&gt;&quot; &lt;a class=&quot;simple-footnote-back&quot; href=&quot;http://feeds.feedburner.com/kryogenix#sf-a-limited-defence-of-footnotes-3-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-a-limited-defence-of-footnotes-4&quot;&gt;alright, I chose a random &lt;em&gt;Terry Pratchett&lt;/em&gt; book to make the point, I admit; I'm not stupid. But it really was the closest one to hand; I didn't spend extra time looking for particularly good examples &lt;a class=&quot;simple-footnote-back&quot; href=&quot;http://feeds.feedburner.com/kryogenix#sf-a-limited-defence-of-footnotes-4-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-a-limited-defence-of-footnotes-5&quot;&gt;This is basically &quot;explaining the joke&quot;, something which squashes all the humour out of it like grapes in a press. Sorry, PTerry. &lt;a class=&quot;simple-footnote-back&quot; href=&quot;http://feeds.feedburner.com/kryogenix#sf-a-limited-defence-of-footnotes-5-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-a-limited-defence-of-footnotes-6&quot;&gt;I always do &lt;a class=&quot;simple-footnote-back&quot; href=&quot;http://feeds.feedburner.com/kryogenix#sf-a-limited-defence-of-footnotes-6-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-a-limited-defence-of-footnotes-7&quot;&gt;I've seen people do footnote markers which are little words rather than numbers, and it's dead annoying. I get what they're trying to do, which is to solve this context problem, but it's worse &lt;a class=&quot;simple-footnote-back&quot; href=&quot;http://feeds.feedburner.com/kryogenix#sf-a-limited-defence-of-footnotes-7-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-a-limited-defence-of-footnotes-8&quot;&gt;you might 'interact' with this marker by clicking on it in a digital document, or by looking it up at the bottom of the page in a print doc, but it's all interaction &lt;a class=&quot;simple-footnote-back&quot; href=&quot;http://feeds.feedburner.com/kryogenix#sf-a-limited-defence-of-footnotes-8-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</description>
  1057. <pubDate>Thu, 03 Jul 2025 06:12:00 +0000</pubDate>
  1058. </item>
  1059. <item>
  1060. <title>Colin Watson: Free software activity in June 2025</title>
  1061. <guid isPermaLink="false">tag:www.chiark.greenend.org.uk,2025-07-01:/~cjwatson/blog/activity-2025-06.html</guid>
  1062. <link>https://www.chiark.greenend.org.uk/~cjwatson/blog/activity-2025-06.html</link>
  1063. <description>&lt;p&gt;My Debian contributions this month were all
  1064. &lt;a href=&quot;https://www.freexian.com/about/debian-contributions/&quot;&gt;sponsored&lt;/a&gt; by
  1065. Freexian.  This was a very light month; I did a few things that were easy or
  1066. that seemed urgent for the upcoming trixie release, but otherwise most of my
  1067. energy went into
  1068. &lt;a href=&quot;https://salsa.debian.org/freexian-team/debusine&quot;&gt;Debusine&lt;/a&gt;.  I’ll be giving
  1069. a talk about that at DebConf in a couple of weeks; this is the first DebConf
  1070. I’ll have managed to make it to in over a decade, so I’m pretty excited.&lt;/p&gt;
  1071. &lt;p&gt;You can also support my work directly via
  1072. &lt;a href=&quot;https://liberapay.com/cjwatson&quot;&gt;Liberapay&lt;/a&gt; or &lt;a href=&quot;https://github.com/sponsors/cjwatson&quot;&gt;GitHub
  1073. Sponsors&lt;/a&gt;.&lt;/p&gt;
  1074. &lt;h2&gt;PuTTY&lt;/h2&gt;
  1075. &lt;p&gt;After reading a bunch of recent discourse about X11 and Wayland, I decided
  1076. to try switching my laptop (a Framework 13 &lt;span class=&quot;caps&quot;&gt;AMD&lt;/span&gt; running Debian trixie with
  1077. &lt;span class=&quot;caps&quot;&gt;GNOME&lt;/span&gt;) over to Wayland.  I don’t remember why it was running X; I think I
  1078. must have either inherited some configuration from my previous laptop (in
  1079. which case it could have been due to anything up to ten years ago or so), or
  1080. else I had some initial problem while setting up my new laptop and failed to
  1081. make a note of it.  Anyway, the switch was hardly noticeable, which was great.&lt;/p&gt;
  1082. &lt;p&gt;One problem I did notice is that my preferred terminal emulator, &lt;code&gt;pterm&lt;/code&gt;,
  1083. crashed after the upgrade.  I run a slightly-modified version from git to
  1084. make some small terminal emulation changes that I really must either get
  1085. upstream or work out how to live without one of these days, so it took me a
  1086. while to notice that it only crashed when running from the packaged version,
  1087. because the crash was in code that only runs when &lt;code&gt;pterm&lt;/code&gt; has a set-id bit.
  1088. I reported this upstream, they &lt;a href=&quot;https://git.tartarus.org/?p=simon/putty.git;a=commitdiff;h=26a8ef376daf5f50c441a65691b84f87df49db9b&quot;&gt;quickly fixed
  1089. it&lt;/a&gt;,
  1090. and I
  1091. &lt;a href=&quot;https://salsa.debian.org/ssh-team/putty/-/commit/14d65a6b00f559295e3174f09e233888da4b125c&quot;&gt;backported&lt;/a&gt;
  1092. it to the Debian package.&lt;/p&gt;
  1093. &lt;h2&gt;groff&lt;/h2&gt;
  1094. &lt;p&gt;&lt;a href=&quot;https://savannah.gnu.org/bugs/index.php?67169&quot;&gt;Upstream bug #67169&lt;/a&gt;
  1095. reported URLs being dropped from &lt;span class=&quot;caps&quot;&gt;PDF&lt;/span&gt; output in some cases.  I &lt;a href=&quot;https://bugs.debian.org/1107068&quot;&gt;investigated
  1096. the history&lt;/a&gt; both upstream and in Debian,
  1097. identified the &lt;a href=&quot;https://cgit.git.savannah.gnu.org/cgit/groff.git/commit/?id=d9e90209725a716dff23807ffffda403c58020c9&quot;&gt;correct upstream patch to
  1098. backport&lt;/a&gt;,
  1099. and uploaded a fix.&lt;/p&gt;
  1100. &lt;h2&gt;libfido2&lt;/h2&gt;
  1101. &lt;p&gt;I upgraded libfido2 to 1.16.0 in experimental.&lt;/p&gt;
  1102. &lt;h2&gt;Python team&lt;/h2&gt;
  1103. &lt;p&gt;I upgraded pydantic-extra-types to a new upstream version, and &lt;a href=&quot;https://salsa.debian.org/python-team/packages/pendulum/-/commit/76ddf2d9a665a57f28867179cad43818545496aa&quot;&gt;fixed some
  1104. resulting fallout in
  1105. pendulum&lt;/a&gt;.&lt;/p&gt;
  1106. &lt;p&gt;I updated python-typing-extensions in bookworm-backports, to help fix
  1107. &lt;a href=&quot;https://bugs.debian.org/1107980&quot;&gt;python3-tango: python3-pytango from bookworm-backports does not work
  1108. (10.0.2-1~bpo12+1)&lt;/a&gt;.&lt;/p&gt;
  1109. &lt;p&gt;I upgraded twisted to a new upstream version in experimental.&lt;/p&gt;
  1110. &lt;p&gt;I fixed or helped to fix a few release-critical bugs:&lt;/p&gt;
  1111. &lt;ul&gt;
  1112. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1107304&quot;&gt;pdfarranger: Fails to start: RuntimeError: context has already been set&lt;/a&gt;&lt;/li&gt;
  1113. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1107410&quot;&gt;python-covdefaults: &lt;span class=&quot;caps&quot;&gt;FTBFS&lt;/span&gt;: E AttributeError: type object ‘Plugins’ has no
  1114.  attribute ‘load_plugins’&lt;/a&gt;&lt;/li&gt;
  1115. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1107782&quot;&gt;python-jq: &lt;span class=&quot;caps&quot;&gt;FTBFS&lt;/span&gt;: E ValueError: jq: error: syntax error, unexpected INVALID_CHARACTER&lt;/a&gt;&lt;/li&gt;
  1116. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1106442&quot;&gt;python-returns: &lt;span class=&quot;caps&quot;&gt;FTBFS&lt;/span&gt;: &lt;span class=&quot;caps&quot;&gt;FAILED&lt;/span&gt;
  1117.  returns/future.py::returns.future.Future.do&lt;/a&gt;
  1118.  (fixed in python3.13, closed with no action)&lt;/li&gt;
  1119. &lt;/ul&gt;</description>
  1120. <pubDate>Mon, 30 Jun 2025 23:30:51 +0000</pubDate>
  1121. </item>
  1122. <item>
  1123. <title>St&amp;eacute;phane Graber: Announcing Incus 6.14</title>
  1124. <guid isPermaLink="false">https://stgraber.org/?p=1747</guid>
  1125. <link>https://stgraber.org/2025/06/30/announcing-incus-6-14/</link>
  1126. <description>&lt;p&gt;The Incus team is pleased to announce the release of Incus 6.14!&lt;br /&gt;&lt;/p&gt;
  1127.  
  1128.  
  1129.  
  1130. &lt;p&gt;This is a lighter release with quite a few welcome bugfixes and performance improvements, wrapping up some of the work with the University of Texas students and adding a few smaller features.&lt;/p&gt;
  1131.  
  1132.  
  1133.  
  1134. &lt;p&gt;It also fixes a couple of security issues affecting those using network ACLs on bridge networks using nftables and network isolation.&lt;/p&gt;
  1135.  
  1136.  
  1137.  
  1138. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://linuxcontainers.org/incus/try-it/&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1748&quot; height=&quot;391&quot; src=&quot;https://stgraber.org/wp-content/uploads/2025/06/image-1-1024x391.png&quot; width=&quot;1024&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  1139.  
  1140.  
  1141.  
  1142. &lt;p&gt;The highlights for this release are:&lt;/p&gt;
  1143.  
  1144.  
  1145.  
  1146. &lt;ul class=&quot;wp-block-list&quot;&gt;
  1147. &lt;li&gt;S3 upload of instance and volume backups&lt;/li&gt;
  1148.  
  1149.  
  1150.  
  1151. &lt;li&gt;Customizable expiry on snapshot creation&lt;/li&gt;
  1152.  
  1153.  
  1154.  
  1155. &lt;li&gt;Alternative default expiry for manually created snapshots&lt;/li&gt;
  1156.  
  1157.  
  1158.  
  1159. &lt;li&gt;Live migration tweaks and progress reporting&lt;/li&gt;
  1160.  
  1161.  
  1162.  
  1163. &lt;li&gt;Reporting of CPU address sizes in the resources API&lt;/li&gt;
  1164.  
  1165.  
  1166.  
  1167. &lt;li&gt;Database logic moved to our code generator&lt;/li&gt;
  1168. &lt;/ul&gt;
  1169.  
  1170.  
  1171.  
  1172. &lt;p&gt;The full announcement and changelog can be &lt;a href=&quot;https://discuss.linuxcontainers.org/t/incus-6-14-has-been-released/24092&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;found here&lt;/a&gt;.&lt;br /&gt;And for those who prefer videos, here’s the release overview video:&lt;/p&gt;
  1173.  
  1174.  
  1175.  
  1176. &lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
  1177.  
  1178. &lt;/div&gt;&lt;/figure&gt;
  1179.  
  1180.  
  1181.  
  1182. &lt;p&gt;You can take the latest release of Incus up for a spin through our online demo service at: &lt;a href=&quot;https://linuxcontainers.org/incus/try-it/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;https://linuxcontainers.org/incus/try-it/&lt;/a&gt;&lt;/p&gt;
  1183.  
  1184.  
  1185.  
  1186. &lt;p&gt;And as always, my company is offering commercial support on Incus, ranging from by-the-hour support contracts to one-off services on things like initial migration from LXD, review of your deployment to squeeze the most out of Incus or even feature sponsorship. You’ll find all details of that here: &lt;a href=&quot;https://zabbly.com/incus&quot;&gt;https://zabbly.com/incus&lt;/a&gt;&lt;/p&gt;
  1187.  
  1188.  
  1189.  
  1190. &lt;p&gt;Donations towards my work on this and other open source projects is also always appreciated, you can  find me on &lt;a href=&quot;https://github.com/sponsors/stgraber&quot;&gt;Github Sponsors&lt;/a&gt;, &lt;a href=&quot;https://patreon.com/stgraber&quot;&gt;Patreon&lt;/a&gt; and &lt;a href=&quot;https://ko-fi.com/stgraber&quot;&gt;Ko-fi&lt;/a&gt;.&lt;/p&gt;
  1191.  
  1192.  
  1193.  
  1194. &lt;p&gt;Enjoy!&lt;/p&gt;
  1195.  
  1196.  
  1197. &lt;p&gt;&lt;/p&gt;</description>
  1198. <pubDate>Mon, 30 Jun 2025 20:15:40 +0000</pubDate>
  1199. </item>
  1200. <item>
  1201. <title>Jos&amp;eacute; Antonio Rey: 2025: Finding a job, and the understanding the market</title>
  1202. <guid isPermaLink="false">http://joseeantonior.wordpress.com/?p=325</guid>
  1203. <link>https://joseeantonior.wordpress.com/2025/06/25/2025-finding-a-job-and-the-understanding-the-market/</link>
  1204. <description>&lt;p&gt;So, I’ve been in the job market for a bit over a year. I was part of a layoff cycle in my last company, and finding a new gig has been difficult. I haven’t been able to find something as of yet, but it’s been a learning curve. The market is not what it has been in the last couple of years. With AI in the mix, lots of roles have been eliminated, or have shifted towards where human intervention is needed to interpret or verify the data AI is interpreting. Job hunting is a job in an of itself, and may even take a 9 to 5 role. I know of a lot of people who have gone through the same process as myself, and wanted to share some of insights and tips from what I’ve learned throughout the last year.&lt;/p&gt;
  1205.  
  1206.  
  1207.  
  1208. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Leveraging your network&lt;/h2&gt;
  1209.  
  1210.  
  1211.  
  1212. &lt;p&gt;First, and I think most important, is to understand that there’s a lot of great people around that you might have worked with. You can always ask for recommendations, touch base, or even have a small chat to see how things are going on their end. Conversations can be very refreshing, and can help you get a new perspective as how the industries are shifting, where you might want to learn new skills, or how to improve your positioning in the market. Folks can talk around and see if there’s additional positions where you might be a good fit, and it’s always good to have a helping hand (or a few). At the end of the day, these folks are your own community. I’ve gotten roles in the past by being referred, and these connections have been critical for my understanding of how different businesses may approach the same problem, or even to solve internal conflicts. So, reach out to people you know!&lt;/p&gt;
  1213.  
  1214.  
  1215.  
  1216. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Understanding the market&lt;/h2&gt;
  1217.  
  1218.  
  1219.  
  1220. &lt;p&gt;Like I mentioned in the opening paragraph, the market is evolving constantly. AI has taken a very solid role nowadays, and lots of companies ask about how you’ve used AI recently. Part of understanding the market is understanding the bleeding edge tools that are used to improve workflows and day-to-day efficiency. Research tools that are coming up, and that are shaping the market. &lt;/p&gt;
  1221.  
  1222.  
  1223.  
  1224. &lt;p&gt;To give you an example. Haven’t tried AI yet? Give it a spin, even for simple questions. Understand where it works, where it fails, and how you, as a human, can make it work for you. Get a sense of the pitfalls, and where human intervention is needed to interpret or verify the data that’s in there. Like one of my former managers said, “trust, but verify”. Or, you can even get to the point of not trusting the data, and sharing that as a story!&lt;/p&gt;
  1225.  
  1226.  
  1227.  
  1228. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Apply thoughtfully&lt;/h2&gt;
  1229.  
  1230.  
  1231.  
  1232. &lt;p&gt;Someone gave me the recommendation to apply to everything that I see where I “could be a fit”. While this might have its upsides, you might also end up in situations where you are not actually a fit, or where you don’t know the company and what it does. Always take the time, at least a few minutes, to understand the company that you’re applying for, research their values, and how they align to yours. Read about the product they’re creating, selling, or offering, and see if it’s a product where you could contribute your skills. Then, you can make the decision of applying. While doing this you may discover that you are applying to a position in a sector that you’re not interested in, or where your skillset might not be used to its full potential. And you might be missing out on some other opportunities that are significantly more aligned to you.&lt;/p&gt;
  1233.  
  1234.  
  1235.  
  1236. &lt;p&gt;Also take the time to fully review the job description. JDs are pretty descriptive, and you might stumble upon certain details that don’t align with yourself, such as the salary, hours, location, or certain expectations that you might feel don’t fit within the role or that you are not ready for.&lt;/p&gt;
  1237.  
  1238.  
  1239.  
  1240. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Prepare for your interviews&lt;/h2&gt;
  1241.  
  1242.  
  1243.  
  1244. &lt;p&gt;You landed an interview – congratulations! Make sure that you’ve researched the company before heading in. If you’ve taken a look at the company and the role before applying, take a glimpse again. You might find more interesting things, and it will demonstrate that you are actually preparing yourself for the interview. Also, interviewing is a two-way street. Make sure that you have some questions at the end. Double-check the role of your interviewer in the company, and ensure that you have questions that are tailored to their particular roles. Think about what you want to get from the interview (other than the job!).&lt;/p&gt;
  1245.  
  1246.  
  1247.  
  1248. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Job sourcing&lt;/h2&gt;
  1249.  
  1250.  
  1251.  
  1252. &lt;p&gt;There are many great job sources today – LinkedIn being the biggest of all of them. Throughout my searches I’ve also found weworkremotely.com and hnhiring.com are great sources. I strongly advise that you expand your search and find sources that are relevant to your particular role or industry. This has opened up a lot of opportunities for me!&lt;/p&gt;
  1253.  
  1254.  
  1255.  
  1256. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Take some time for yourself&lt;/h2&gt;
  1257.  
  1258.  
  1259.  
  1260. &lt;p&gt;I know that having a job is important. However, it’s also important to take time for yourself. Your mental health is important. You can use this time to develop some skills, play some games, take care of your garden, or even reorganize your home. Find a hobby and distract yourself every now and then. Take breaks, and ensure you’re not over-stressing yourself. Read a bit about burnout, and take care of yourself, as burnout can also happen from job hunting. And if you need a breather, make sure you take one, but don’t overdo it! Time is valuable, so it’s all about finding the right balance.&lt;/p&gt;
  1261.  
  1262.  
  1263.  
  1264. &lt;p&gt;&lt;/p&gt;
  1265.  
  1266.  
  1267.  
  1268. &lt;p&gt;Hopefully this is helpful for some folks that are going through my same situation. What other things have worked for you? Do you have any other tips you could share? I’d be happy to read about them! Share them with me on &lt;a href=&quot;https://linkedin.com/in/joseantonio-rey&quot;&gt;LinkedIn&lt;/a&gt;. I’m also happy to chat – you can always find me at jose@ubuntu.com.&lt;/p&gt;</description>
  1269. <pubDate>Wed, 25 Jun 2025 21:39:35 +0000</pubDate>
  1270. </item>
  1271. <item>
  1272. <title>Jonathan Carter: My first tag2upload upload</title>
  1273. <guid isPermaLink="false">https://jonathancarter.org/?p=11887</guid>
  1274. <link>https://jonathancarter.org/2025/06/19/my-first-tag2upload-upload/</link>
  1275. <description>&lt;h2 class=&quot;wp-block-heading&quot;&gt;Tag2upload?&lt;/h2&gt;
  1276.  
  1277.  
  1278.  
  1279. &lt;p&gt;The &lt;a href=&quot;https://wiki.debian.org/tag2upload&quot;&gt;tag2upload&lt;/a&gt; service has &lt;a href=&quot;https://lists.debian.org/msgid-search/26707.58698.814763.251148@chiark.greenend.org.uk&quot;&gt;finally gone live for Debian Developers in an open beta&lt;/a&gt;. &lt;/p&gt;
  1280.  
  1281.  
  1282.  
  1283. &lt;p&gt;If you’ve never heard of tag2upload before, &lt;a href=&quot;https://peertube.debian.social/w/pav68XBWdurWzfTYvDgWRM&quot;&gt;here is a great primer presented by Ian Jackson and prepared by Ian Jackson and Sean Whitton&lt;/a&gt;.&lt;/p&gt;
  1284.  
  1285.  
  1286.  
  1287. &lt;p&gt;In short, the world has moved on to hosting and working with source code in Git repositories. In Debian, we work with source packages that are used to generated the binary artifacts that users know as .deb files. In Debian, there is so much tooling and culture built around this. For example, our workflow passes what we call the island test – you could take every source package in Debian along with you to an island with no Internet, and you’ll still be able to rebuild or modify every package. When changing the workflows, you risk losing benefits like this, and over the years there has been a number of different ideas on how to move to a purely or partially git flow for Debian, none that really managed to gain enough momentum or project-wide support.&lt;/p&gt;
  1288.  
  1289.  
  1290.  
  1291. &lt;p&gt;Tag2upload makes a lot of sense. It doesn’t take away any of the benefits of the current way of working (whether technical or social), but it does make some aspects of Debian packages significantly simpler and faster. Even so, if you’re a Debian Developer and more familiar with how the sausage have made, you’ll have noticed that this has been a very long road for the tag2upload maintainers, they’ve hit multiple speed bumps since 2019, but with a lot of patience and communication and persistence from all involved (and almost even a GR), it is finally materializing.&lt;/p&gt;
  1292.  
  1293.  
  1294.  
  1295. &lt;h2 class=&quot;wp-block-heading&quot;&gt;Performing my first tag2upload&lt;/h2&gt;
  1296.  
  1297.  
  1298.  
  1299. &lt;p&gt;So, first, I needed to choose which package I want to upload. We’re currently in hard freeze for the trixie release, so I’ll look for something simple that I can upload to experimental. &lt;/p&gt;
  1300.  
  1301.  
  1302. &lt;div class=&quot;wp-block-image&quot;&gt;
  1303. &lt;figure class=&quot;aligncenter size-full&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-11891&quot; height=&quot;53&quot; src=&quot;https://jonathancarter.org/files/images/image-21.png&quot; width=&quot;560&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  1304.  
  1305.  
  1306. &lt;p&gt;I chose &lt;a href=&quot;https://bundlewrap.org/&quot;&gt;bundlewrap&lt;/a&gt;, it’s quote a straightforward python package, and updates are usually just as straightforward, so it’s probably a good package to work on without having to deal with extra complexities in learning how to use tag2upload.&lt;/p&gt;
  1307.  
  1308.  
  1309.  
  1310. &lt;p&gt;So, I do the usual uscan and dch -i to update my package…&lt;/p&gt;
  1311.  
  1312.  
  1313. &lt;div class=&quot;wp-block-image&quot;&gt;
  1314. &lt;figure class=&quot;aligncenter size-full is-resized&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-11893&quot; height=&quot;166&quot; src=&quot;https://jonathancarter.org/files/images/image-22.png&quot; style=&quot;width: 728px; height: auto;&quot; width=&quot;979&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  1315.  
  1316.  
  1317. &lt;p&gt;And then I realise that I still want to build a source package to test it in cowbuilder. Hmm, I remember that Helmut showed me that building a source package isn’t necessary in sbuild, but I have a habit of breaking my sbuild configs somehow, but I guess I should revisit that.&lt;/p&gt;
  1318.  
  1319.  
  1320.  
  1321. &lt;p&gt;So, I do a dpkg-buildpackage -S -sa and test it out with cowbuilder, because that’s just how I roll (at least for now, fixing my local sbuild setup is yak shaving for another day, let’s focus!). &lt;/p&gt;
  1322.  
  1323.  
  1324.  
  1325. &lt;p&gt;I end up with a binary that looks good, so I’m satisfied that I can upload this package to the Debian archives. So, time to configure tag2upload. &lt;/p&gt;
  1326.  
  1327.  
  1328.  
  1329. &lt;p&gt;The first step is to set up the webhook in Salsa. I was surprised two find two webhooks &lt;a href=&quot;https://salsa.debian.org/python-team/packages/bundlewrap/-/hooks&quot;&gt;already configured&lt;/a&gt;:&lt;/p&gt;
  1330.  
  1331.  
  1332. &lt;div class=&quot;wp-block-image&quot;&gt;
  1333. &lt;figure class=&quot;aligncenter size-large is-resized&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-11897&quot; height=&quot;154&quot; src=&quot;https://jonathancarter.org/files/images/image-23-1024x154.png&quot; style=&quot;width: 1050px; height: auto;&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  1334.  
  1335.  
  1336. &lt;p&gt;I know of KGB that posts to IRC, didn’t know that this was the mechanism it does that by before. Nice! Also don’t know what the tagpending one does, I’ll go look into that some other time.&lt;/p&gt;
  1337.  
  1338.  
  1339.  
  1340. &lt;p&gt;Configuring a tag2upload webhook is quite simple, add a URL, call the name tag2upload, and select only tag push events:&lt;/p&gt;
  1341.  
  1342.  
  1343. &lt;div class=&quot;wp-block-image&quot;&gt;
  1344. &lt;figure class=&quot;aligncenter size-full&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-11899&quot; height=&quot;817&quot; src=&quot;https://jonathancarter.org/files/images/image-24.png&quot; width=&quot;656&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  1345.  
  1346.  
  1347. &lt;p&gt;I run the test webhook, and it returned a code 400 message about a missing ‘message’ header, which the &lt;a href=&quot;https://wiki.debian.org/tag2upload&quot;&gt;documentation says&lt;/a&gt; is normal.&lt;/p&gt;
  1348.  
  1349.  
  1350.  
  1351. &lt;p&gt;Next, I install git-debpush from experimental.&lt;/p&gt;
  1352.  
  1353.  
  1354.  
  1355. &lt;p&gt;The wiki page simply states that you can use the git-debpush command to upload, but doesn’t give any examples on how to use it, and its manpage doesn’t either. And when I run just git-debpush I get:&lt;/p&gt;
  1356.  
  1357.  
  1358.  
  1359. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;jonathan@lapcloud:~/devel/debian/python-team/bundlewrap/bundlewrap-4.23.1$ git-debpush&lt;br /&gt;git-debpush: check failed: upstream tag upstream/4.22.0 is not an ancestor of refs/heads/debian/master; probably a mistake ('upstream-nonancestor' check)&lt;br /&gt;pristine-tar is /usr/bin/pristine-tar&lt;br /&gt;git-debpush: some check(s) failed; you can pass --force to ignore them&lt;/code&gt;&lt;/pre&gt;
  1360.  
  1361.  
  1362.  
  1363. &lt;p&gt;I have no idea what that’s supposed to mean. I was also not sure whether I should tag anything to begin with, or if some part of the tag2upload machinery automatically does it. I think I might have tagged debian/4.23-1 before tagging upstream/4.23 and perhaps it didn’t like it, I reverted and did it the other way around and got a new error message. Progress!&lt;/p&gt;
  1364.  
  1365.  
  1366.  
  1367. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;jonathan@lapcloud:~/devel/debian/python-team/bundlewrap/bundlewrap-4.23.1$ git-debpush&lt;br /&gt;git-debpush: could not determine the git branch layout&lt;br /&gt;git-debpush: please supply a --quilt= argument&lt;/code&gt;&lt;/pre&gt;
  1368.  
  1369.  
  1370.  
  1371. &lt;p&gt;Looking at the manpage, it looks like –quilt=baredebian matches my package the best, so I try that:&lt;/p&gt;
  1372.  
  1373.  
  1374.  
  1375. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;jonathan@lapcloud:~/devel/debian/python-team/bundlewrap/bundlewrap-4.23.1$ git-debpush --quilt=baredebian
  1376. Enumerating objects: 70, done.
  1377. Counting objects: 100% (70/70), done.
  1378. Delta compression using up to 12 threads
  1379. Compressing objects: 100% (37/37), done.
  1380. Writing objects: 100% (37/37), 8.97 KiB | 2.99 MiB/s, done.
  1381. Total 37 (delta 30), reused 0 (delta 0), pack-reused 0 (from 0)
  1382. To salsa.debian.org:python-team/packages/bundlewrap.git
  1383. 6f55d99..3d5498f debian/master -&amp;gt; debian/master
  1384.  
  1385. * [new tag] upstream/4.23.1 -&amp;gt; upstream/4.23.1
  1386. * [new tag] debian/4.23.1-1_exp1 -&amp;gt; debian/4.23.1-1_exp1&lt;/code&gt;&lt;/pre&gt;
  1387.  
  1388.  
  1389.  
  1390. &lt;p&gt;Ooh! That looked like it did something! And a minute later I received the notification of the upload in my inbox:&lt;/p&gt;
  1391.  
  1392.  
  1393. &lt;div class=&quot;wp-block-image&quot;&gt;
  1394. &lt;figure class=&quot;aligncenter size-full&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-11909&quot; height=&quot;519&quot; src=&quot;https://jonathancarter.org/files/images/image-27.png&quot; width=&quot;703&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  1395.  
  1396.  
  1397. &lt;p&gt;So, I’m not 100% sure that this makes things much easier for me than doing a dput, but, it’s not any more difficult or more work either (once you know how it works), so I’ll be using git-debpush from now on, and I’m sure as I get more used to the git workflow of doing things I’ll understand more of the benefits. And at last, my one last use case for using FTP is now properly dead. RIP FTP :)&lt;/p&gt;
  1398. &lt;img alt=&quot;&quot; height=&quot;0&quot; src=&quot;https://analytics.jonathancarter.org/piwik.php?idsite=1&amp;amp;rec=1&amp;amp;url=https%3A%2F%2Fjonathancarter.org%2F2025%2F06%2F19%2Fmy-first-tag2upload-upload%2F&amp;amp;action_name=My+first+tag2upload+upload&amp;amp;urlref=https%3A%2F%2Fjonathancarter.org%2Ffeed%2F&quot; style=&quot;border: 0; width: 0; height: 0;&quot; width=&quot;0&quot; /&gt;</description>
  1399. <pubDate>Thu, 19 Jun 2025 19:49:28 +0000</pubDate>
  1400. </item>
  1401. <item>
  1402. <title>Aaron Rainbolt: The bug that code couldn't fix...</title>
  1403. <guid isPermaLink="true">https://arraybolt3.substack.com/p/the-bug-that-code-couldnt-fix</guid>
  1404. <link>https://arraybolt3.substack.com/p/the-bug-that-code-couldnt-fix</link>
  1405. <description>&lt;p&gt;This isn’t a tech-related post, so if you’re only here for the tech, feel free to skip over.&lt;/p&gt;&lt;p&gt;Any of y’all hate spiders? If you had asked me that last week, I would have said “no”. Turns out you just need to get in a fight with the wrong spider to change that. I’m in the central United States, so thankfully I don’t have to deal with the horror spiders places like Australia have. But even in my not-intrinsically-hostile-to-human-life area of the world, we have some horror spiders of our own turns out. The two most common ones (the Brown Recluse and Black Widow) are basically memes at this point because they get mentioned so often; I’ve been bitten by both so far. The Brown Recluse bite wasn’t really that dramatic before, during, or after treatment, so there’s not really a story to tell there. The Black Widow bite on the other hand… oh boy. Holy moly.&lt;/p&gt;&lt;p&gt;I woke up last Saturday since the alternative was to sleep for 24 hours straight and that sounded awful. There’s lots of good things to do with a Sabbath, why waste the day on sleep? Usually I spend (or at least am &lt;em&gt;supposed&lt;/em&gt; to spend) this day with my family, generally doing Bible study and board games. Over the last few weeks though, I had been using the time to clean up various areas of the house that needed it, and this time I decided to clean up a room that had been flooded some time back. I entered the Room of Despair, with the Sword of Paper Towels in one hand and the Shield of Trash Bags in the other. In front of me stood the vast armies of UghYuck-Hai. (LotR fans will get the joke.&lt;a class=&quot;footnote-anchor&quot; data-component-name=&quot;FootnoteAnchorToDOM&quot; href=&quot;https://arraybolt3.substack.com/feed#footnote-1&quot; id=&quot;footnote-anchor-1&quot; target=&quot;_self&quot;&gt;1&lt;/a&gt;) Convinced that I was effectively invulnerable to anything the hoards could do to me, I entered the fray, and thus was the battle joined in the land of MyHome.&lt;/p&gt;&lt;p&gt;Fast forward two hours of sorting, scrubbing, and hauling. I had made a pretty decent dent in the mess. I was also pretty tired at that point, and our family’s dog needed me to take him outside, so I decided it was time to take a break. I put the leash on the dog, and headed into the great outdoors for a much-needed breath of fresh air.&lt;/p&gt;&lt;p&gt;It was at about that time I realized there was something that felt weird on my left hip. In my neck of the woods, we have to deal with pretty extreme concentrations of mosquitoes, so I figured I probably just had some of my blood repurposed by a flying mini-vampire. Upon closer inspection though, I didn’t see localized swelling indicating a mosquito bite (or any other bite for that matter). The troubled area was just far enough toward my back that I couldn’t see if it had a bite hole or not, and I didn’t notice any kind of discoloration to give me a heads-up either. All I knew is that there was a decent-sized patch of my left hip that HURT if I poked it lightly. I’d previously had random areas of my body hurt when poked (probably from minor bruises), so I just lumped this event in with the rest of the mystery injuries I’ve been through and went on with my day.&lt;/p&gt;&lt;p&gt;Upon coming back from helping the dog out, I still felt pretty winded. I chalked that up to doing strenuous work in an area with bad air for too long, and decided to spend some time in bed to recover. One hour in bed turned into two. Two turned into three. Regardless of how long I laid there, I still just felt &lt;em&gt;exhausted.&lt;/em&gt; “Did I really work that hard?”, I wondered. It didn’t seem like I had done enough work to warrant this level of tiredness. Thankfully I did get to chat with my mom about Bible stuff for a good portion of that time, so I thought the day had been pretty successful nonetheless.&lt;/p&gt;&lt;p&gt;The sun went down. I was still unreasonably tired. Usually this was when me and my mom would play a board game together, but I just wasn’t up for it. I ended up needing to use the restroom, so I went to do that, and that’s when I noticed my now-even-sorer hip wasn’t the only thing that was wrong.&lt;/p&gt;&lt;p&gt;While in the restroom, I felt like my digestive system was starting to get sick. This too was pretty easily explainable, I had just worked in filth and probably got exposed to too much yuck for my system to handle. My temperature was a bit higher than normal. Whatever, not like I hadn’t had fevers before. My head felt sore and stuffed up, which again just felt like I was getting sick in general. My vision also wasn’t great, but for all I know that could have just been because I was focusing more on feeling bad and less on the wall of the bathroom I was looking at. At this point, I didn’t think that the sore hip and the sudden onset fever might be related.&lt;/p&gt;&lt;p&gt;After coming out of the bathroom, I huddled in bed to try to help the minor fever burn out whatever crud I had gotten into. My mom came to help take care of me while I was sick. To my surprise, the fever didn’t stay minor for long - I suddenly started shivering like &lt;em&gt;crazy&lt;/em&gt; even though I wasn’t even remotely cold. My temperature skyrocketed, getting to the point where I was worried it could be dangerously high. I started aching all over and my muscles felt like they got a lot weaker. My heart started pounding furiously, and I felt short of breath. We always keep colloidal silver in the house since it helps with immunity, so my mom gave me some sprays of it and had me hold it under my tongue. I noticed I was salivating a bunch for absolutely no reason while trying to hold the silver spray there as long as I could. Things weren’t really improving, and I noticed my hip was starting to hurt more. I mentioned the sore hip issue to my mom, and we chose to put some aloe vera lotion and colloidal silver on it, just in case I had been bitten by a spider of some sort.&lt;/p&gt;&lt;p&gt;That turned out to be a very good, very very VERY painful idea. After rubbing in the lotion, the bitten area started experiencing severe, relentless stabbing pains, gradually growing in intensity as time progressed. For the first few minutes, I was thinking “wow, this really hurts, what in the world bit me?”, but that pretty quickly gave way to “AAAAA! AAAAA! AAAAAAAAAAAAAA!” I kept most of the screaming in my mind, but after a while it got so bad I just rocked back and forth and groaned for what felt like forever. I’d never had pain like this just keep going and going, so I thought if I just toughed it out for long enough it would eventually go away. This thing didn’t seem to work like that though. After who-knows-how-long, I finally realized this wasn’t going to go away on its own, and so, for reasons only my pain-deranged mind could understand, I tried rolling over on my left side to see if squishing the area would get it to shut up. Beyond all logic, that actually seemed to work, so I just stayed there for quite some time.&lt;/p&gt;&lt;p&gt;At this point, my mom realized the sore hip and the rest of my sickness might be related (I never managed to put the two together). The symptoms I had originally looked like scarlet fever plus random weirdness, but they turned out to match extremely well with the symptoms of a &lt;a href=&quot;https://my.clevelandclinic.org/health/diseases/black-widow-spider-bite&quot;&gt;black widow bite&lt;/a&gt; (I didn’t have the sweating &lt;em&gt;yet&lt;/em&gt; but that ended up happening too). The bite area also started looking discolored, so something was definitely not right. At about this point my kidneys started hurting pretty badly, not as badly as the bite but not too far from it.&lt;/p&gt;&lt;p&gt;I’ll try to go over the rest of the mess relatively quickly. In summary:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;I passed out and fell over while trying to walk back from the restroom at one point. From what I remember, I had started blacking out while in the restroom, realized I needed to get back to bed ASAP, managed to clumsily walk out of the bathroom and most of the way into the bed, then felt myself fall, bump into a lamp, and land on the bed back-first (which was weird, my back wasn’t facing the bed yet). My mom on the other hand, who was not virtually unconscious, reports that I came around the corner, proceeded to fall face first into the lamp with arms outstretched like a zombie, had a minor seizure, and she had to pull me off the lamp and flip me around. All I can think is my brain must have still been active but lost all sensory input and motor control.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;I couldn’t get out of bed for over 48 hours straight thereafter. I’d start blacking out if I tried to stand up for very long.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;A dime-sized area around the bite turned purple, then black. So, great, I guess I can now say a part of me is dead :P At this point we were also able to clearly see dual fang marks, confirming that this was indeed a spider bite.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;I ended up drinking way more water than usual. I usually only drink three or four cups a day, but I drank more like nine or ten cups the day after the bite.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;I had some muscle paralysis that made it difficult to urinate. Thankfully that went away after a day.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;My vision got very, very blurry, and my eyes had tons of pus coming out of them for no apparent reason. This was more of an annoyance than anything, I was keeping my eyes shut most of the time anyway, but the crud kept drying and gluing my eyes shut! It was easy enough to just pick off when that happened, but it was one of those things that makes you go “come on, really?”&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;On the third day of recovery, my whole body broke out in a rash that looked like a bunch of purple freckles. They didn’t hurt, didn’t bump up, didn’t even hardly itch, but they looked really weird. Patches of the rash proceeded to go away and come back every so often, which they’re still doing now.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;I ended up missing three days of work while laid up.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;We kept applying peppermint oil infused aloe vera lotion and colloidal silver to the bite, which helped reduce pain (well, except for the first time anyway :P) and seems to have helped keep the toxins from spreading too much.&lt;/p&gt;&lt;p&gt;A couple of questions come to mind at this point. For one, how do I know that it was a black widow that bit me? Unfortunately, I never saw or felt the spider, so I can’t know for an absolute certainty that I was bitten by a black widow (some people report false widows can cause similar symptoms if they inject you with enough venom). But false widows don’t live anywhere even remotely close to where I live, and black widows are both known to live here and we’ve seen them here before. The symptoms certainly aren’t anything remotely close to a brown recluse bite, and while I am not a medical professional, they seem to match the symptoms of black widow bites very, very well. So even if by some chance this wasn’t a black widow, whatever bit me had just as bad of an effect on me as a black widow would have.&lt;/p&gt;&lt;p&gt;For two, why didn’t I go to a hospital? Number one, everything I looked up said the most they could do is give you antivenom (which can cause &lt;a href=&quot;https://pubmed.ncbi.nlm.nih.gov/21641165/&quot;&gt;anaphylaxis&lt;/a&gt;, no thank you), or painkillers like fentanyl (which I don’t want anywhere near me, I’d rather feel like I’m dying from a spider bite than take a narcotic painkiller, thanks anyway). Number two, last time a family member had to go to the hospital, the ambulance just about killed him trying to get him there in the first place. I lost most of my respect for my city’s medical facilities that day; if I’m not literally dying, I don’t need a hospital, and if I am dying, my hospitals will probably just kill me off quicker.&lt;/p&gt;&lt;p&gt;I’m currently on day 4 of recovery (including the day I was bitten). I’m still lightheaded, but I can stand without passing out finally. The kidney pain went away, as did the stabbing pain in the bite area (though it still aches a bit, and hurts if you poke it). The fever is mostly gone, my eyes are working normally again and aren’t constantly trying to superglue themselves closed, and my breathing is mostly fine again. I’m definitely still feeling the effects of the bite, but they aren’t crippling anymore. I’ll probably be able to work from home in the morning (I’d try to do household chores too but my mom would probably have a heart attack since I just about killed myself trying to get out of the bathroom).&lt;/p&gt;&lt;p&gt;Speaking of working from home, it’s half past midnight here, I should be going to bed. Thanks for reading!&lt;/p&gt;&lt;div class=&quot;footnote&quot; data-component-name=&quot;FootnoteToDOM&quot;&gt;&lt;a class=&quot;footnote-number&quot; contenteditable=&quot;false&quot; href=&quot;https://arraybolt3.substack.com/feed#footnote-anchor-1&quot; id=&quot;footnote-1&quot; target=&quot;_self&quot;&gt;1&lt;/a&gt;&lt;div class=&quot;footnote-content&quot;&gt;&lt;p&gt;The army of Saruman sent against the fortress of Helm’s Deep was made up of half-elven, half-orc creatures known as Uruk-Hai. “Ugh, yuck!” and “Uruk” sounded humorously similar, so I just went with it.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</description>
  1406. <pubDate>Wed, 18 Jun 2025 05:35:05 +0000</pubDate>
  1407.        <enclosure url="https://substackcdn.com/image/fetch/$s_!U9th!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81afb1c6-f320-42fc-97ab-f1de570fde3a_288x288.png" length="0" type="image/jpeg"/>
  1408. </item>
  1409. <item>
  1410. <title>Paul Tagliamonte: The Promised LAN</title>
  1411. <guid isPermaLink="true">https://notes.pault.ag/tpl/</guid>
  1412. <link>https://notes.pault.ag/tpl/</link>
  1413. <description>&lt;p&gt;The Internet has changed a lot in the last 40+ years. Fads have come and gone.
  1414. Network protocols have been designed, deployed, adopted, and abandoned.
  1415. Industries have come and gone. The types of people on the internet have changed
  1416. a lot. The number of people on the internet has changed a lot, creating an
  1417. information medium unlike anything ever seen before in human history. There’s a
  1418. lot of good things about the Internet as of 2025, &lt;strong&gt;but there’s also an
  1419. inescapable hole in what it used to be, for me&lt;/strong&gt;.&lt;/p&gt;
  1420. &lt;p&gt;I miss being able to throw a site up to send around to friends to play with
  1421. without worrying about hordes of AI-feeding HTML combine harvesters DoS-ing my
  1422. website, costing me thousands in network transfer for the privilege. I miss
  1423. being able to put a lightly authenticated game server up and not worry too much
  1424. at night – wondering if that process is now mining bitcoin. I miss being able
  1425. to run a server in my home closet. Decades of cat and mouse games have rendered
  1426. running a mail server nearly impossible. Those who are “brave” enough to try
  1427. are met with weekslong stretches of delivery failures and countless hours
  1428. yelling ineffectually into a pipe that leads from the cheerful lobby of some
  1429. disinterested corporation directly into a void somewhere 4 layers below ground
  1430. level.&lt;/p&gt;
  1431. &lt;p&gt;I miss the spirit of curiosity, exploration, and trying new things. I miss
  1432. building things for fun without having to worry about being too successful,
  1433. after which “security” offices start demanding my supplier paperwork in
  1434. triplicate as heartfelt thanks from their engineering teams. I miss communities
  1435. that are run because it is important to them, not for ad revenue. I miss
  1436. community operated spaces and having more than four websites that are all full
  1437. of nothing except screenshots of each other.&lt;/p&gt;
  1438. &lt;p&gt;Every other page I find myself on now has an AI generated click-bait title,
  1439. shared for rage-clicks all brought-to-you-by-our-sponsors–completely covered
  1440. wall-to-wall with popup modals, telling me how much they respect my privacy,
  1441. with the real content hidden at the bottom bracketed by deceptive ads served by
  1442. companies that definitely know which new coffee shop I went to last month.&lt;/p&gt;
  1443. &lt;p&gt;This is wrong, and those who have seen what was know it.&lt;/p&gt;
  1444. &lt;p&gt;&lt;strong&gt;I can’t keep doing it. I’m not doing it any more. I reject the notion that
  1445. this is as it needs to be. It is wrong. The hole left in what the Internet used
  1446. to be must be filled. I will fill it.&lt;/strong&gt;&lt;/p&gt;
  1447. &lt;h2 id=&quot;what-comes-before-part-b&quot;&gt;What comes before part b?&lt;/h2&gt;
  1448. &lt;p&gt;Throughout the 2000s, some of my favorite memories were from LAN parties at my
  1449. friends’ places. Dragging your setup somewhere, long nights playing games,
  1450. goofing off, even building software all night to get something working—being
  1451. able to do something fiercely technical in the context of a uniquely social
  1452. activity. It wasn’t really much about the games or the projects—it was an
  1453. excuse to spend time together, just hanging out. A huge reason I learned so
  1454. much in college was that campus was a non-stop LAN party – we could freely
  1455. stand up servers, talk between dorms on the LAN, and hit my dorm room computer
  1456. from the lab. Things could go from individual to social in the matter of
  1457. seconds. The Internet used to work this way—my dorm had public IPs handed out
  1458. by DHCP, and my workstation could serve traffic from anywhere on the internet.
  1459. I haven’t been back to campus in a few years, but I’d be surprised if this were
  1460. still the case.&lt;/p&gt;
  1461. &lt;p&gt;In December of 2021, three of us got together and connected our houses together
  1462. in what we now call The Promised LAN. The idea is simple—fill the hole we feel
  1463. is gone from our lives. Build our own always-on 24/7 nonstop LAN party. Build a
  1464. space that is intrinsically social, even though we’re doing technical things.
  1465. We can freely host insecure game servers or one-off side projects without
  1466. worrying about what someone will do with it.&lt;/p&gt;
  1467. &lt;p&gt;Over the years, it’s evolved very slowly—we haven’t pulled any all-nighters.
  1468. Our mantra has become “old growth”, building each layer carefully. As of May
  1469. 2025, the LAN is now 19 friends running around 25 network segments. Those 25
  1470. networks are connected to 3 backbone nodes, exchanging routes and IP traffic
  1471. for the LAN. We refer to the set of backbone operators as “The Bureau of LAN
  1472. Management”. Combined decades of operating critical infrastructure has
  1473. driven The Bureau to make a set of well-understood, boring, predictable,
  1474. interoperable and easily debuggable decisions to make this all happen.
  1475. &lt;a href=&quot;https://tpl.house/&quot;&gt;Nothing here is exotic or even technically interesting&lt;/a&gt;.&lt;/p&gt;
  1476. &lt;h2 id=&quot;applications-of-trusting-trust&quot;&gt;Applications of trusting trust&lt;/h2&gt;
  1477. &lt;p&gt;The hardest part, however, is rejecting the idea that anything outside our own
  1478. LAN is untrustworthy—nearly irreversible damage inflicted on us by the
  1479. Internet. We have solved this by not solving it. We strictly control
  1480. membership—the absolute hard minimum for joining the LAN requires 10 years of
  1481. friendship with at least one member of the Bureau, with another 10 years of
  1482. friendship planned. Members of the LAN can veto new members even if all other
  1483. criteria is met. Even with those strict rules, there’s no shortage of friends
  1484. that meet the qualifications—but we are not equipped to take that many folks
  1485. on. It’s hard to join—-both socially and technically. Doing something malicious
  1486. on the LAN requires a lot of highly technical effort upfront, and it would
  1487. endanger a decade of friendship. We have relied on those human, social,
  1488. interpersonal bonds to bring us all together. It’s worked for the last 4 years,
  1489. and it should continue working until we think of something better.&lt;/p&gt;
  1490. &lt;p&gt;We assume roommates, partners, kids, and visitors all have access to The
  1491. Promised LAN. If they’re let into our friends' network, there is a level of
  1492. trust that works transitively for us—I trust them to be on mine. This LAN is
  1493. not for “security”, rather, the network border is a social one. Benign
  1494. “hacking”—in the original sense of misusing systems to do fun and interesting
  1495. things—is encouraged. Robust ACLs and firewalls on the LAN are, by definition,
  1496. an interpersonal—not technical—failure. We all trust every other network
  1497. operator to run their segment in a way that aligns with our collective values
  1498. and norms.&lt;/p&gt;
  1499. &lt;p&gt;Over the last 4 years, we’ve grown our own culture and fads—around half of the
  1500. people on the LAN have thermal receipt printers with open access, for printing
  1501. out quips or jokes on each other’s counters. It’s incredible how much network
  1502. transport and a trusting culture gets you—there’s a 3-node IRC network, exotic
  1503. hardware to gawk at, radios galore, a NAS storage swap, LAN only email, and
  1504. even a SIP phone network of “redphones”.&lt;/p&gt;
  1505. &lt;h2 id=&quot;diy&quot;&gt;DIY&lt;/h2&gt;
  1506. &lt;p&gt;We do not wish to, nor will we, rebuild the internet. We do not wish to, nor
  1507. will we, scale this. We will never be friends with enough people, as hard as we
  1508. may try. Participation hinges on us all having fun. As a result, membership
  1509. will never be open, and we will never have enough connected LANs to deal with
  1510. the technical and social problems that start to happen with scale. This is a
  1511. feature, not a bug.&lt;/p&gt;
  1512. &lt;p&gt;This is a call for you to do the same. Build your own LAN. Connect it with
  1513. friends’ homes. Remember what is missing from your life, and fill it in. Use
  1514. software you know how to operate and get it running. Build slowly. Build your
  1515. community. Do it with joy. Remember how we got here. Rebuild a community space
  1516. that doesn’t need to be mediated by faceless corporations and ad revenue. Build
  1517. something sustainable that brings you joy. Rebuild something you use daily.&lt;/p&gt;
  1518. &lt;p&gt;Bring back what we’re missing.&lt;/p&gt;</description>
  1519. <pubDate>Mon, 16 Jun 2025 15:58:00 +0000</pubDate>
  1520. </item>
  1521. <item>
  1522. <title>Salih Emin: Apple Unveils “Containerization” for macOS: A New Era for Linux Containers on macOS</title>
  1523. <guid isPermaLink="false">https://utappia.org/?p=49906</guid>
  1524. <link>https://utappia.org/2025/06/11/apple-unveils-containerization-for-macos-a-new-era-for-linux-containers-on-macos/</link>
  1525. <description>&lt;p&gt;Apple has introduced a new open-source Swift framework named &lt;strong&gt;Containerization&lt;/strong&gt;, designed to fundamentally reshape how Linux containers are run on macOS. In a detailed presentation, Apple revealed a new architecture that prioritizes security, privacy, and performance, moving away from traditional methods to offer a more integrated and efficient experience for developers.&lt;/p&gt;
  1526.  
  1527.  
  1528.  
  1529. &lt;span id=&quot;more-49906&quot;&gt;&lt;/span&gt;
  1530.  
  1531.  
  1532.  
  1533. &lt;p&gt;The new framework aims to provide each container with the same level of robust isolation previously reserved for large, monolithic virtual machines, but with the speed and efficiency of a lightweight solution.&lt;/p&gt;
  1534.  
  1535.  
  1536.  
  1537. &lt;p&gt;Here is the video:&lt;/p&gt;
  1538.  
  1539.  
  1540.  
  1541. &lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
  1542.  
  1543. &lt;/div&gt;&lt;/figure&gt;
  1544.  
  1545.  
  1546.  
  1547. &lt;h3 class=&quot;wp-block-heading&quot;&gt;The Old Way: A Single, Heavy Virtual Machine&lt;/h3&gt;
  1548.  
  1549.  
  1550.  
  1551. &lt;ul class=&quot;wp-block-list&quot;&gt;
  1552. &lt;li&gt;&lt;strong&gt;Resource Inefficiency:&lt;/strong&gt; The large VM had resources like CPU and memory allocated to it upfront, regardless of how many containers were running.&lt;/li&gt;
  1553.  
  1554.  
  1555.  
  1556. &lt;li&gt;&lt;strong&gt;Security &amp;amp; Privacy Concerns:&lt;/strong&gt; Sharing files from the Mac with a container was a two-step process; files were first shared with the entire VM, and then to the specific container, potentially exposing data more broadly than intended.&lt;/li&gt;
  1557.  
  1558.  
  1559.  
  1560. &lt;li&gt;&lt;strong&gt;Maintenance Overhead:&lt;/strong&gt; The large VM contained a full Linux distribution with core utilities, dynamic libraries, and a &lt;code&gt;libc&lt;/code&gt; implementation, increasing the attack surface and requiring constant updates.&lt;/li&gt;
  1561. &lt;/ul&gt;
  1562.  
  1563.  
  1564.  
  1565. &lt;h3 class=&quot;wp-block-heading&quot;&gt;A New Vision: Security, Privacy, and Performance&lt;/h3&gt;
  1566.  
  1567.  
  1568.  
  1569. &lt;p&gt;The Containerization framework was built with three core goals to address these challenges:&lt;/p&gt;
  1570.  
  1571.  
  1572.  
  1573. &lt;ol class=&quot;wp-block-list&quot;&gt;
  1574. &lt;li&gt;&lt;strong&gt;Security:&lt;/strong&gt; Provide every single container with its own isolated virtual machine. This dramatically reduces the attack surface by eliminating shared kernels and system utilities between containers.&lt;/li&gt;
  1575.  
  1576.  
  1577.  
  1578. &lt;li&gt;&lt;strong&gt;Privacy:&lt;/strong&gt; Enable file and directory sharing on a strict, per-container basis. Only the container that requests access to a directory will receive it.&lt;/li&gt;
  1579.  
  1580.  
  1581.  
  1582. &lt;li&gt;&lt;strong&gt;Performance:&lt;/strong&gt; Achieve sub-second start times for containers while respecting the user’s system resources. If no containers are running, no resources are allocated.&lt;/li&gt;
  1583. &lt;/ol&gt;
  1584.  
  1585.  
  1586.  
  1587. &lt;h3 class=&quot;wp-block-heading&quot;&gt;Under the Hood: How Containerization Works&lt;/h3&gt;
  1588.  
  1589.  
  1590.  
  1591. &lt;p&gt;Containerization is more than just an API; it’s a complete rethinking of the container runtime on macOS.&lt;/p&gt;
  1592.  
  1593.  
  1594.  
  1595. &lt;h4 class=&quot;wp-block-heading&quot;&gt;Lightweight, Per-Container Virtual Machines&lt;/h4&gt;
  1596.  
  1597.  
  1598.  
  1599. &lt;p&gt;The most significant architectural shift is that &lt;strong&gt;each container runs inside its own dedicated, lightweight virtual machine&lt;/strong&gt;. This approach provides profound benefits:&lt;/p&gt;
  1600.  
  1601.  
  1602.  
  1603. &lt;ul class=&quot;wp-block-list&quot;&gt;
  1604. &lt;li&gt;&lt;strong&gt;Strong Isolation:&lt;/strong&gt; Each container is sandboxed within its own VM, preventing processes in one container from viewing or interfering with the host or other containers.&lt;/li&gt;
  1605.  
  1606.  
  1607.  
  1608. &lt;li&gt;&lt;strong&gt;Dedicated Networking:&lt;/strong&gt; Every container gets its own dedicated IP address, which improves network performance and eliminates the cumbersome need for port mapping.&lt;/li&gt;
  1609.  
  1610.  
  1611.  
  1612. &lt;li&gt;&lt;strong&gt;Efficient Filesystems:&lt;/strong&gt; Containerization exposes the image’s filesystem to the Linux VM as a block device formatted with &lt;code&gt;EXT4&lt;/code&gt;. Apple has even developed a Swift package to manage the creation and population of these &lt;code&gt;EXT4&lt;/code&gt; filesystems directly from macOS.&lt;/li&gt;
  1613. &lt;/ul&gt;
  1614.  
  1615.  
  1616.  
  1617. &lt;h4 class=&quot;wp-block-heading&quot;&gt;&lt;code&gt;vminitd&lt;/code&gt;: The Swift-Powered Heart of the Container&lt;/h4&gt;
  1618.  
  1619.  
  1620.  
  1621. &lt;p&gt;Once a VM starts, a minimal initial process called &lt;code&gt;vminitd&lt;/code&gt; takes over. This is not a standard Linux &lt;code&gt;init&lt;/code&gt; system; it’s a custom-built solution with remarkable characteristics:&lt;/p&gt;
  1622.  
  1623.  
  1624.  
  1625. &lt;ul class=&quot;wp-block-list&quot;&gt;
  1626. &lt;li&gt;&lt;strong&gt;Built in Swift:&lt;/strong&gt; &lt;code&gt;vminitd&lt;/code&gt; is written entirely in Swift and runs as the first process inside the VM.&lt;/li&gt;
  1627.  
  1628.  
  1629.  
  1630. &lt;li&gt;&lt;strong&gt;Extremely Minimal Environment:&lt;/strong&gt; To maximize security, the filesystem &lt;code&gt;vminitd&lt;/code&gt; runs in is barebones. It contains &lt;strong&gt;no core utilities&lt;/strong&gt; (like &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;cp&lt;/code&gt;), &lt;strong&gt;no dynamic libraries&lt;/strong&gt;, and &lt;strong&gt;no &lt;code&gt;libc&lt;/code&gt; implementation&lt;/strong&gt;.&lt;/li&gt;
  1631.  
  1632.  
  1633.  
  1634. &lt;li&gt;&lt;strong&gt;Statically Compiled:&lt;/strong&gt; To run in such a constrained environment, &lt;code&gt;vminitd&lt;/code&gt; is cross-compiled from a Mac into a single, static Linux executable. This is achieved using Swift’s Static Linux SDK and &lt;code&gt;musl&lt;/code&gt;, a &lt;code&gt;libc&lt;/code&gt; implementation optimized for static linking.&lt;/li&gt;
  1635. &lt;/ul&gt;
  1636.  
  1637.  
  1638.  
  1639. &lt;p&gt;&lt;code&gt;vminitd&lt;/code&gt; is responsible for setting up the entire container environment, including assigning IP addresses, mounting the container’s filesystem, and supervising all processes that run within the container.&lt;/p&gt;
  1640.  
  1641.  
  1642.  
  1643. &lt;h3 class=&quot;wp-block-heading&quot;&gt;Getting Started: The &lt;code&gt;container&lt;/code&gt; Command-Line Tool&lt;/h3&gt;
  1644.  
  1645.  
  1646.  
  1647. &lt;p&gt;To showcase the power of the framework, Apple has also released an open-source command-line tool simply called &lt;code&gt;container&lt;/code&gt;. This tool allows developers to immediately begin working with Linux containers in this new, secure environment.&lt;/p&gt;
  1648.  
  1649.  
  1650.  
  1651. &lt;ul class=&quot;wp-block-list&quot;&gt;
  1652. &lt;li&gt;&lt;strong&gt;Pulling an image:&lt;/strong&gt; &lt;/li&gt;
  1653. &lt;/ul&gt;
  1654.  
  1655.  
  1656.  
  1657. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;container image pull alpine:latest&lt;/code&gt;&lt;/pre&gt;
  1658.  
  1659.  
  1660.  
  1661. &lt;ul class=&quot;wp-block-list&quot;&gt;
  1662. &lt;li&gt;&lt;strong&gt;Running an interactive shell:&lt;/strong&gt; &lt;/li&gt;
  1663. &lt;/ul&gt;
  1664.  
  1665.  
  1666.  
  1667. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;&lt;code&gt;container run -ti alpine:latest sh&lt;/code&gt;&lt;/code&gt;&lt;/pre&gt;
  1668.  
  1669.  
  1670.  
  1671. &lt;p&gt;Within milliseconds, the user is dropped into a shell running inside a fully isolated Linux environment. Running the &lt;code&gt;ps aux&lt;/code&gt; command from within the container reveals only the shell process and the &lt;code&gt;ps&lt;/code&gt; process itself, a clear testament to the powerful process isolation at work.&lt;/p&gt;
  1672.  
  1673.  
  1674.  
  1675. &lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img alt=&quot;Apple Unveils &quot; class=&quot;wp-image-49909&quot; height=&quot;196&quot; src=&quot;https://utappia.org/wp-content/uploads/2025/06/image.png&quot; width=&quot;828&quot; /&gt;&lt;/figure&gt;
  1676.  
  1677.  
  1678.  
  1679. &lt;h3 class=&quot;wp-block-heading&quot;&gt;An Open Invitation to the Community&lt;/h3&gt;
  1680.  
  1681.  
  1682.  
  1683. &lt;p&gt;Both the &lt;strong&gt;Containerization framework&lt;/strong&gt; and the &lt;strong&gt;container tool&lt;/strong&gt; are available on GitHub. Apple is inviting developers to explore the source code, integrate the framework into their own projects, and contribute to its future by submitting issues and pull requests.&lt;/p&gt;
  1684.  
  1685.  
  1686.  
  1687. &lt;p&gt;This move signals a strong commitment from Apple to making macOS a first-class platform for modern, Linux container-based development, offering a solution that is uniquely secure, private, and performant.&lt;/p&gt;
  1688.  
  1689.  
  1690.  
  1691. &lt;p&gt;Source:&lt;/p&gt;
  1692.  
  1693.  
  1694.  
  1695. &lt;ul class=&quot;wp-block-list&quot;&gt;
  1696. &lt;li&gt;&lt;a href=&quot;https://github.com/apple/container&quot;&gt;https://github.com/apple/container&lt;/a&gt;&lt;/li&gt;
  1697.  
  1698.  
  1699.  
  1700. &lt;li&gt;&lt;a href=&quot;https://github.com/apple/containerization&quot;&gt;https://github.com/apple/containerization&lt;/a&gt;&lt;/li&gt;
  1701. &lt;/ul&gt;
  1702.  
  1703.  
  1704.  
  1705. &lt;p&gt;&lt;/p&gt;
  1706. &lt;p&gt;The post &lt;a href=&quot;https://utappia.org/2025/06/11/apple-unveils-containerization-for-macos-a-new-era-for-linux-containers-on-macos/&quot;&gt;Apple Unveils “Containerization” for macOS: A New Era for Linux Containers on macOS&lt;/a&gt; appeared first on &lt;a href=&quot;https://utappia.org&quot;&gt;Utappia&lt;/a&gt;.&lt;/p&gt;</description>
  1707. <pubDate>Wed, 11 Jun 2025 22:06:14 +0000</pubDate>
  1708. </item>
  1709. <item>
  1710. <title>Scarlett Gately Moore: KDE Application snaps 25.04.2 released!</title>
  1711. <guid isPermaLink="false">https://www.scarlettgatelymoore.dev/?p=2091</guid>
  1712. <link>https://www.scarlettgatelymoore.dev/kde-application-snaps-25-04-2-released/</link>
  1713. <description>&lt;figure class=&quot;wp-block-image aligncenter size-full&quot;&gt;&lt;img alt=&quot;KDE Mascot&quot; class=&quot;wp-image-232&quot; height=&quot;500&quot; src=&quot;https://www.scarlettgatelymoore.dev/wp-content/uploads/300px-Mascot_20140702_konqui-group.png&quot; width=&quot;300&quot; /&gt;KDE Mascot&lt;/figure&gt;
  1714.  
  1715.  
  1716.  
  1717. &lt;p&gt;Release notes: &lt;a href=&quot;https://kde.org/announcements/gear/25.04.2/&quot;&gt;https://kde.org/announcements/gear/25.04.2/&lt;/a&gt;&lt;/p&gt;
  1718.  
  1719.  
  1720.  
  1721. &lt;p&gt;Now available in the snap store!&lt;/p&gt;
  1722.  
  1723.  
  1724.  
  1725. &lt;p&gt;Along with that, I have fixed some outstanding bugs:&lt;/p&gt;
  1726.  
  1727.  
  1728.  
  1729. &lt;p&gt;Ark: now can open/save files in removable media&lt;/p&gt;
  1730.  
  1731.  
  1732.  
  1733. &lt;p&gt;Kasts: Once again has sound&lt;/p&gt;
  1734.  
  1735.  
  1736.  
  1737. &lt;p&gt;WIP: Updating Qt6 to 6.9 and frameworks to 6.14&lt;/p&gt;
  1738.  
  1739.  
  1740.  
  1741. &lt;p&gt;Enjoy everyone!&lt;/p&gt;
  1742.  
  1743.  
  1744.  
  1745. &lt;p&gt;Unlike our software, life is not free. Please consider a donation, thanks!&lt;/p&gt;
  1746.  
  1747.  
  1748.  
  1749. &lt;ul class=&quot;wp-block-list&quot;&gt;
  1750. &lt;li&gt;&lt;strong&gt;GoFundMe &lt;/strong&gt;&lt;a href=&quot;https://gofund.me/d59a74ce&quot;&gt;Donate&lt;/a&gt;&lt;/li&gt;
  1751.  
  1752.  
  1753.  
  1754. &lt;li&gt;&lt;strong&gt;Patreon &lt;/strong&gt;&lt;a href=&quot;https://www.patreon.com/c/sgmoore&quot;&gt;Donate&lt;/a&gt;&lt;/li&gt;
  1755.  
  1756.  
  1757.  
  1758. &lt;li&gt;&lt;strong&gt;GitHub&lt;/strong&gt; &lt;a href=&quot;https://github.com/sponsors/ScarlettGatelyMoore?o=sd&amp;amp;sc=t&quot;&gt;Donate&lt;/a&gt;&lt;/li&gt;
  1759.  
  1760.  
  1761.  
  1762. &lt;li&gt;&lt;strong&gt;DonorBox &lt;/strong&gt;&lt;a href=&quot;https://donorbox.org/open-source-survival-fund&quot;&gt;Donate&lt;/a&gt;&lt;/li&gt;
  1763. &lt;/ul&gt;</description>
  1764. <pubDate>Wed, 11 Jun 2025 13:14:59 +0000</pubDate>
  1765. </item>
  1766. <item>
  1767. <title>Simon Quigley: Thanks, Mailbox!</title>
  1768. <guid isPermaLink="false">https://medium.com/p/0eb072dabbc1</guid>
  1769. <link>https://medium.com/@tsimonq2/thanks-mailbox-0eb072dabbc1?source=rss-abe8950a00ea------2</link>
  1770. <description>&lt;a href=&quot;https://medium.com/media/553e1df568153a684bfe861e27692fcb/href&quot;&gt;https://medium.com/media/553e1df568153a684bfe861e27692fcb/href&lt;/a&gt;&lt;p&gt;A gentleman by the name of Arif Ali reached out to me on LinkedIn. I won’t share the actual text of the message, but I’ll paraphrase:&lt;br /&gt;&lt;em&gt;“I hope everything is going well with you. I’m applying to be an Ubuntu ‘Per Package Uploader’ for the SOS package, and I was wondering if you could endorse my application.”&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Arif, thank you! I have always appreciated our chats, and I truly believe you’re doing great work. I don’t want to interfere with anything by jumping on the wiki, but just know you have my full backing.&lt;/p&gt;&lt;p&gt;“So, who actually lets Arif upload new versions of SOS to Ubuntu, and what is it?”&lt;br /&gt;&lt;strong&gt;Great question!&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Firstly, I realized that I needed some more info on what SOS is, so I can explain it to you all. On a quick search, &lt;a href=&quot;https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/generating_sos_reports_for_technical_support/generating-an-sos-report-for-technical-support_generating-sos-reports-for-technical-support&quot;&gt;this was the first result&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Okay, so genuine question…&lt;/p&gt;&lt;p&gt;Why does the first DuckDuckGo result for “sosreport” point to an article for a release of Red Hat Enterprise Linux that is two versions old? In other words, hey DuckDuckGo, your grass is starting to get long. Or maybe Red Hat? Can’t tell, I give you both the benefit of the doubt, in good faith.&lt;/p&gt;&lt;p&gt;So, I clarified the search and found &lt;a href=&quot;https://documentation.ubuntu.com/pro/open-case/&quot;&gt;this&lt;/a&gt;. Canonical, you’ve done a great job. Red Hat, you could work on your &lt;a href=&quot;https://en.wikipedia.org/wiki/Search_engine_optimization&quot;&gt;SEO&lt;/a&gt; so I can actually find the &lt;a href=&quot;https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux&quot;&gt;RHEL 10&lt;/a&gt; docs quicker, but hey… B+ for effort. ;)&lt;/p&gt;&lt;p&gt;Anyway, let me tell you about Arif. Just from my own experiences.&lt;/p&gt;&lt;p&gt;He’s incredible. He shows love to others, and whenever I would sponsor one of his packages during my time in Ubuntu, he was always incredibly receptive to feedback. I really appreciate the way he reached out to me, as well. That was really kind, and to be honest, I needed it.&lt;/p&gt;&lt;p&gt;As for character, he has my +1. In terms of &lt;a href=&quot;https://launchpad.net/~developer-membership-board/+members&quot;&gt;the members of the DMB&lt;/a&gt; (aside from one person who I will not mention by name, who has caused me immense trouble elsewhere), here’s what I’d tell you if you asked me privately…&lt;/p&gt;&lt;p&gt;&lt;em&gt;“It’s just PPU. Arif works on SOS as part of his job. Please, do still grill him. The test, and ensuring people know that they actually need to pass a test to get permissions, that’s pretty important.”&lt;/em&gt;&lt;/p&gt;&lt;p&gt;That being said, I think he deserves it.&lt;/p&gt;&lt;p&gt;Good luck, Arif. I wish you well in your meeting. I genuinely hope this helps. :)&lt;/p&gt;&lt;p&gt;And to my friends in Ubuntu, I miss you. Please reach out. I’d be happy to write you a public letter, too. Only if you want. :)&lt;/p&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://medium.com/_/stat?event=post.clientViewed&amp;amp;referrerSource=full_rss&amp;amp;postId=0eb072dabbc1&quot; width=&quot;1&quot; /&gt;</description>
  1771. <pubDate>Mon, 09 Jun 2025 17:20:27 +0000</pubDate>
  1772. </item>
  1773. <item>
  1774. <title>Simon Quigley: People in the Arena</title>
  1775. <guid isPermaLink="false">https://medium.com/p/abe0d865357f</guid>
  1776. <link>https://medium.com/@tsimonq2/people-in-the-arena-abe0d865357f?source=rss-abe8950a00ea------2</link>
  1777. <description>&lt;p&gt;Theodore Roosevelt is someone I have admired for a long time. I especially appreciate what has been coined &lt;a href=&quot;https://worldfuturefund.org/Documents/maninarena.htm&quot;&gt;the &lt;em&gt;Man in the Arena&lt;/em&gt; speech&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;A specific excerpt comes to mind after reading world news over the last twelve hours:&lt;/p&gt;&lt;p&gt;&lt;em&gt;“It is well if a large proportion of the leaders in any republic, in any democracy, are, as a matter of course, drawn from the classes represented in this audience to-day; but only provided that those classes possess the gifts of sympathy with plain people and of devotion to great ideals. You and those like you have received special advantages; you have all of you had the opportunity for mental training; many of you have had leisure; most of you have had a chance for enjoyment of life far greater than comes to the majority of your fellows. To you and your kind much has been given, and from you much should be expected. Yet there are certain failings against which it is especially incumbent that both men of trained and cultivated intellect, and men of inherited wealth and position should especially guard themselves, because to these failings they are especially liable; and if yielded to, their- your- chances of useful service are at an end. Let the man of learning, the man of lettered leisure, beware of that queer and cheap temptation to pose to himself and to others as a cynic, as the man who has outgrown emotions and beliefs, the man to whom good and evil are as one. The poorest way to face life is to face it with a sneer. There are many men who feel a kind of twister pride in cynicism; there are many who confine themselves to criticism of the way others do what they themselves dare not even attempt. There is no more unhealthy being, no man less worthy of respect, than he who either really holds, or feigns to hold, an attitude of sneering disbelief toward all that is great and lofty, whether in achievement or in that noble effort which, even if it fails, comes to second achievement. A cynical habit of thought and speech, a readiness to criticise work which the critic himself never tries to perform, an intellectual aloofness which will not accept contact with life’s realities — all these are marks, not as the possessor would fain to think, of superiority but of weakness. They mark the men unfit to bear their part painfully in the stern strife of living, who seek, in the affection of contempt for the achievements of others, to hide from others and from themselves in their own weakness. The rôle is easy; there is none easier, save only the rôle of the man who sneers alike at both criticism and performance.”&lt;/em&gt;&lt;/p&gt;&lt;p&gt;The riots in LA are seriously concerning to me. If something doesn’t happen soon, &lt;a href=&quot;https://www.youtube.com/watch?v=rb8z2BMrd60&quot;&gt;this is going to get out of control&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;If you are participating in these events, or know someone who is, tell them to &lt;a href=&quot;https://www.youtube.com/watch?v=QuNOwCBYeE4&quot;&gt;calm down&lt;/a&gt;. Physical violence is &lt;strong&gt;never&lt;/strong&gt; the answer, no matter your political party.&lt;/p&gt;&lt;p&gt;De-escalate &lt;strong&gt;immediately&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;Be well. &lt;em&gt;Show love to one another!&lt;/em&gt;&lt;/p&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://medium.com/_/stat?event=post.clientViewed&amp;amp;referrerSource=full_rss&amp;amp;postId=abe0d865357f&quot; width=&quot;1&quot; /&gt;</description>
  1778. <pubDate>Mon, 09 Jun 2025 05:58:26 +0000</pubDate>
  1779. </item>
  1780. <item>
  1781. <title>Colin Watson: Free software activity in May 2025</title>
  1782. <guid isPermaLink="false">tag:www.chiark.greenend.org.uk,2025-06-08:/~cjwatson/blog/activity-2025-05.html</guid>
  1783. <link>https://www.chiark.greenend.org.uk/~cjwatson/blog/activity-2025-05.html</link>
  1784. <description>&lt;p&gt;My Debian contributions this month were all
  1785. &lt;a href=&quot;https://www.freexian.com/about/debian-contributions/&quot;&gt;sponsored&lt;/a&gt; by
  1786. Freexian.  Things were a bit quieter than usual, as for the most part I was
  1787. sticking to things that seemed urgent for the upcoming trixie release.&lt;/p&gt;
  1788. &lt;p&gt;You can also support my work directly via
  1789. &lt;a href=&quot;https://liberapay.com/cjwatson&quot;&gt;Liberapay&lt;/a&gt; or &lt;a href=&quot;https://github.com/sponsors/cjwatson&quot;&gt;GitHub
  1790. Sponsors&lt;/a&gt;.&lt;/p&gt;
  1791. &lt;h2&gt;OpenSSH&lt;/h2&gt;
  1792. &lt;p&gt;After my appeal for help &lt;a href=&quot;https://www.chiark.greenend.org.uk/~cjwatson/blog/activity-2025-04.html&quot;&gt;last month&lt;/a&gt; to
  1793. debug &lt;a href=&quot;https://bugs.debian.org/1103418&quot;&gt;intermittent &lt;code&gt;sshd&lt;/code&gt; crashes&lt;/a&gt;, Michel
  1794. Casabona helped me put together an environment where I could reproduce it,
  1795. which allowed me to track it down to a &lt;a href=&quot;https://bugzilla.mindrot.org/show_bug.cgi?id=3822&quot;&gt;root
  1796. cause&lt;/a&gt; and fix it.  (I
  1797. also found a &lt;a href=&quot;https://bugzilla.mindrot.org/show_bug.cgi?id=3819&quot;&gt;misuse of
  1798. &lt;code&gt;strlcpy&lt;/code&gt;&lt;/a&gt; affecting at
  1799. least glibc-based systems in passing, though I think that was unrelated.)&lt;/p&gt;
  1800. &lt;p&gt;I worked with Daniel Kahn Gillmor to fix a &lt;a href=&quot;https://bugs.debian.org/1103522&quot;&gt;regression in &lt;code&gt;ssh-agent&lt;/code&gt; socket
  1801. handling&lt;/a&gt;.&lt;/p&gt;
  1802. &lt;p&gt;I fixed a &lt;a href=&quot;https://bugs.debian.org/1104992&quot;&gt;reproducibility bug depending on whether &lt;code&gt;passwd&lt;/code&gt; is installed on
  1803. the build system&lt;/a&gt;, which would have
  1804. affected security updates during the lifetime of trixie.&lt;/p&gt;
  1805. &lt;p&gt;I &lt;a href=&quot;https://bugs.debian.org/1105036&quot;&gt;backported&lt;/a&gt; openssh 1:10.0p1-5 to bookworm-backports.&lt;/p&gt;
  1806. &lt;p&gt;I issued bookworm and
  1807. &lt;a href=&quot;https://lists.debian.org/debian-lts-announce/2025/05/msg00008.html&quot;&gt;bullseye&lt;/a&gt;
  1808. updates for &lt;a href=&quot;https://bugs.debian.org/1102603&quot;&gt;&lt;span class=&quot;caps&quot;&gt;CVE&lt;/span&gt;-2025-32728&lt;/a&gt;.&lt;/p&gt;
  1809. &lt;h2&gt;groff&lt;/h2&gt;
  1810. &lt;p&gt;I backported a fix for &lt;a href=&quot;https://bugs.debian.org/1104609&quot;&gt;incorrect output when formatting multiple documents
  1811. as &lt;span class=&quot;caps&quot;&gt;PDF&lt;/span&gt;/PostScript at once&lt;/a&gt;.&lt;/p&gt;
  1812. &lt;h2&gt;debmirror&lt;/h2&gt;
  1813. &lt;p&gt;I added a &lt;a href=&quot;https://salsa.debian.org/debian/debmirror/-/commit/c122f7ff32c4ae24a729a6ecf42d15c9ac05eb5c&quot;&gt;simple
  1814. autopkgtest&lt;/a&gt;.&lt;/p&gt;
  1815. &lt;h2&gt;Python team&lt;/h2&gt;
  1816. &lt;p&gt;I upgraded these packages to new upstream versions:&lt;/p&gt;
  1817. &lt;ul&gt;
  1818. &lt;li&gt;automat&lt;/li&gt;
  1819. &lt;li&gt;celery&lt;/li&gt;
  1820. &lt;li&gt;flufl.i18n&lt;/li&gt;
  1821. &lt;li&gt;flufl.lock&lt;/li&gt;
  1822. &lt;li&gt;frozenlist&lt;/li&gt;
  1823. &lt;li&gt;python-charset-normalizer&lt;/li&gt;
  1824. &lt;li&gt;python-evalidate (including pointing out an &lt;a href=&quot;https://github.com/yaroslaff/evalidate/issues/15&quot;&gt;upstream release handling
  1825.  issue&lt;/a&gt;)&lt;/li&gt;
  1826. &lt;li&gt;python-pythonjsonlogger&lt;/li&gt;
  1827. &lt;li&gt;python-setproctitle&lt;/li&gt;
  1828. &lt;li&gt;python-telethon&lt;/li&gt;
  1829. &lt;li&gt;python-typing-inspection&lt;/li&gt;
  1830. &lt;li&gt;python-webargs&lt;/li&gt;
  1831. &lt;li&gt;pyzmq&lt;/li&gt;
  1832. &lt;li&gt;trove-classifiers (including a &lt;a href=&quot;https://github.com/pypa/trove-classifiers/pull/212&quot;&gt;small upstream
  1833.  cleanup&lt;/a&gt;)&lt;/li&gt;
  1834. &lt;li&gt;uncertainties&lt;/li&gt;
  1835. &lt;li&gt;zope.testrunner&lt;/li&gt;
  1836. &lt;/ul&gt;
  1837. &lt;p&gt;In bookworm-backports, I updated these packages:&lt;/p&gt;
  1838. &lt;ul&gt;
  1839. &lt;li&gt;python-django to 3:4.2.21-1 (issuing
  1840.  &lt;a href=&quot;https://backports.debian.org/news/BSA-124_Security_Update_for_python-django/&quot;&gt;&lt;span class=&quot;caps&quot;&gt;BSA&lt;/span&gt;-124&lt;/a&gt;)&lt;/li&gt;
  1841. &lt;li&gt;python-django-pgtrigger to 4.14.0-1&lt;/li&gt;
  1842. &lt;/ul&gt;
  1843. &lt;p&gt;I fixed problems building these packages reproducibly:&lt;/p&gt;
  1844. &lt;ul&gt;
  1845. &lt;li&gt;celery (&lt;a href=&quot;https://github.com/celery/celery/pull/9687&quot;&gt;contributed
  1846.  upstream&lt;/a&gt;)&lt;/li&gt;
  1847. &lt;li&gt;python-setproctitle&lt;/li&gt;
  1848. &lt;li&gt;uncertainties (&lt;a href=&quot;https://github.com/lmfit/uncertainties/pull/312&quot;&gt;contributed
  1849.  upstream&lt;/a&gt;, after some discussion)&lt;/li&gt;
  1850. &lt;/ul&gt;
  1851. &lt;p&gt;I backported fixes for some security vulnerabilities to unstable (since
  1852. we’re in freeze now so it’s not always appropriate to upgrade to new
  1853. upstream versions):&lt;/p&gt;
  1854. &lt;ul&gt;
  1855. &lt;li&gt;django-select2: &lt;a href=&quot;https://bugs.debian.org/1106747&quot;&gt;&lt;span class=&quot;caps&quot;&gt;CVE&lt;/span&gt;-2025-48383&lt;/a&gt;&lt;/li&gt;
  1856. &lt;li&gt;python-tornado: &lt;a href=&quot;https://bugs.debian.org/1105886&quot;&gt;&lt;span class=&quot;caps&quot;&gt;CVE&lt;/span&gt;-2025-47287&lt;/a&gt;&lt;/li&gt;
  1857. &lt;/ul&gt;
  1858. &lt;p&gt;I fixed various other build/test failures:&lt;/p&gt;
  1859. &lt;ul&gt;
  1860. &lt;li&gt;&lt;a href=&quot;https://salsa.debian.org/python-team/packages/fail2ban/-/merge_requests/17&quot;&gt;fail2ban&lt;/a&gt;
  1861.  (also reviewing and merging &lt;a href=&quot;https://salsa.debian.org/python-team/packages/fail2ban/-/merge_requests/15&quot;&gt;fix sshd 10.0 log
  1862.  identifier&lt;/a&gt;
  1863.  and &lt;a href=&quot;https://salsa.debian.org/python-team/packages/fail2ban/-/merge_requests/16&quot;&gt;remove runtime calls to
  1864.  distutils&lt;/a&gt;)&lt;/li&gt;
  1865. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1103147&quot;&gt;karabo-bridge&lt;/a&gt; (&lt;a href=&quot;https://github.com/European-XFEL/karabo-bridge-py/pull/71&quot;&gt;contributed
  1866.  upstream&lt;/a&gt;)&lt;/li&gt;
  1867. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1104837&quot;&gt;kegtron-ble&lt;/a&gt;&lt;/li&gt;
  1868. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1091947&quot;&gt;python-click-option-group&lt;/a&gt; (&lt;span class=&quot;caps&quot;&gt;NMU&lt;/span&gt;)&lt;/li&gt;
  1869. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1104508&quot;&gt;python-holidays&lt;/a&gt;&lt;/li&gt;
  1870. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1103591&quot;&gt;python-mastodon&lt;/a&gt;&lt;/li&gt;
  1871. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1106440&quot;&gt;python-mechanize&lt;/a&gt; (&lt;a href=&quot;https://github.com/python-mechanize/mechanize/pull/102&quot;&gt;contributed
  1872.  upstream&lt;/a&gt;)&lt;/li&gt;
  1873. &lt;li&gt;&lt;a href=&quot;https://salsa.debian.org/python-team/packages/thermobeacon-ble/-/commit/c1bc246f0a04018483074cbdca1501088165dc07&quot;&gt;thermobeacon-ble&lt;/a&gt;&lt;/li&gt;
  1874. &lt;/ul&gt;
  1875. &lt;p&gt;I added non-superficial autopkgtests to these packages:&lt;/p&gt;
  1876. &lt;ul&gt;
  1877. &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1035163&quot;&gt;karabo-bridge&lt;/a&gt;&lt;/li&gt;
  1878. &lt;li&gt;&lt;a href=&quot;https://salsa.debian.org/python-team/packages/python-lazy-model/-/compare/debian%2F0.3.0-1...debian%2F0.3.0-2?from_project_id=93488&quot;&gt;python-lazy-model&lt;/a&gt;&lt;/li&gt;
  1879. &lt;/ul&gt;
  1880. &lt;p&gt;I packaged &lt;a href=&quot;https://bugs.debian.org/1103977&quot;&gt;python-django-hashids&lt;/a&gt; and
  1881. &lt;a href=&quot;https://bugs.debian.org/1103880&quot;&gt;python-django-pgbulk&lt;/a&gt;, needed for new
  1882. upstream versions of python-django-pgtrigger.&lt;/p&gt;
  1883. &lt;p&gt;I
  1884. &lt;a href=&quot;https://code.launchpad.net/~cjwatson/storm/py314-beta/+merge/485763&quot;&gt;ported&lt;/a&gt;
  1885. storm to Python 3.14.&lt;/p&gt;
  1886. &lt;h2&gt;Science team&lt;/h2&gt;
  1887. &lt;p&gt;I fixed a &lt;a href=&quot;https://bugs.debian.org/1103232&quot;&gt;build failure&lt;/a&gt; in apertium-oci-fra.&lt;/p&gt;</description>
  1888. <pubDate>Sun, 08 Jun 2025 00:20:02 +0000</pubDate>
  1889. </item>
  1890. <item>
  1891. <title>Launchpad News: Phasing out Bazaar code hosting</title>
  1892. <guid isPermaLink="false">https://blog.launchpad.net/?p=4464</guid>
  1893. <link>https://blog.launchpad.net/general/phasing-out-bazaar-code-hosting</link>
  1894. <description>&lt;h2&gt;What is Bazaar code hosting?&lt;/h2&gt;
  1895.  
  1896.  
  1897.  
  1898. &lt;p&gt;Bazaar is a distributed revision control system, originally developed by Canonical. It provides similar functionality compared to the now dominant Git.&lt;/p&gt;
  1899.  
  1900.  
  1901.  
  1902. &lt;p&gt;Bazaar code hosting is an offering from Launchpad to both provide a Bazaar backend for hosting code, but also a web frontend for browsing the code. The frontend is provided by the Loggerhead application on Launchpad.&lt;/p&gt;
  1903.  
  1904.  
  1905.  
  1906. &lt;h2&gt;&lt;a href=&quot;https://discourse.ubuntu.com/t/phasing-out-bazaar-code-hosting/62189#p-160870-sunsetting-bazaar&quot;&gt;&lt;/a&gt;Sunsetting Bazaar&lt;/h2&gt;
  1907.  
  1908.  
  1909.  
  1910. &lt;p&gt;Bazaar passed its peak a decade ago. &lt;a href=&quot;https://launchpad.net/brz&quot;&gt;Breezy&lt;/a&gt; is a fork of Bazaar that has kept a form of Bazaar alive, but the last release of Bazaar was in 2016. Since then the impact has declined, and there are modern replacements like Git.&lt;/p&gt;
  1911.  
  1912.  
  1913.  
  1914. &lt;p&gt;Just keeping Bazaar running requires a non-trivial amount of development, operations time, and infrastructure resources – all of which could be better used elsewhere.&lt;/p&gt;
  1915.  
  1916.  
  1917.  
  1918. &lt;p&gt;Launchpad will now begin the process of discontinuing support for Bazaar.&lt;/p&gt;
  1919.  
  1920.  
  1921.  
  1922. &lt;h2&gt;&lt;a href=&quot;https://discourse.ubuntu.com/t/phasing-out-bazaar-code-hosting/62189#p-160870-timelines&quot;&gt;&lt;/a&gt;Timelines&lt;/h2&gt;
  1923.  
  1924.  
  1925.  
  1926. &lt;p&gt;We are aware that the migration of the repositories and updating workflows will take some time, that is why we planned sunsetting in two phases.&lt;/p&gt;
  1927.  
  1928.  
  1929.  
  1930. &lt;h3&gt;&lt;a href=&quot;https://discourse.ubuntu.com/t/phasing-out-bazaar-code-hosting/62189#p-160870-phase-1&quot;&gt;&lt;/a&gt;Phase 1&lt;/h3&gt;
  1931.  
  1932.  
  1933.  
  1934. &lt;p&gt;Loggerhead, the web frontend, which is used to browse the code in a web browser, will be shut down imminently. Analyzing access logs showed that there are hardly any more requests from legit users, but almost the entire traffic comes from scrapers and other abusers. Sunsetting Loggerhead will not affect the ability to pull, push and merge changes.&lt;/p&gt;
  1935.  
  1936.  
  1937.  
  1938. &lt;h3&gt;&lt;a href=&quot;https://discourse.ubuntu.com/t/phasing-out-bazaar-code-hosting/62189#p-160870-phase-2&quot;&gt;&lt;/a&gt;Phase 2&lt;/h3&gt;
  1939.  
  1940.  
  1941.  
  1942. &lt;p&gt;From September 1st, 2025, we do not intend to have Bazaar, the code hosting backend, any more. Users need to migrate all repositories from Bazaar to Git between now and this deadline.&lt;/p&gt;
  1943.  
  1944.  
  1945.  
  1946. &lt;h2&gt;&lt;a href=&quot;https://discourse.ubuntu.com/t/phasing-out-bazaar-code-hosting/62189#p-160870-migration-paths&quot;&gt;&lt;/a&gt;Migration paths&lt;/h2&gt;
  1947.  
  1948.  
  1949.  
  1950. &lt;p&gt;The following blog post describes all the necessary steps on how to convert a Bazaar repository hosted on Launchpad to Git.&lt;/p&gt;
  1951.  
  1952.  
  1953.  
  1954. &lt;h3&gt;&lt;a href=&quot;https://jugmac00.github.io/blog/migrate-a-repository-from-bazaar-to-git/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Migrate a Repository From Bazaar to Git&lt;/a&gt;&lt;/h3&gt;
  1955.  
  1956.  
  1957.  
  1958. &lt;h2&gt;&lt;a href=&quot;https://discourse.ubuntu.com/t/phasing-out-bazaar-code-hosting/62189#p-160870-call-for-action&quot;&gt;&lt;/a&gt;Call for action&lt;/h2&gt;
  1959.  
  1960.  
  1961.  
  1962. &lt;p&gt;Our users are extremely important to us. Ubuntu, for instance, has a long history of Bazaar usage, and we will need to work with the Ubuntu Engineering team to find ways to move forward to remove the reliance on the integration with Bazaar for the development of Ubuntu. If you are also using Bazaar and you have a special use case, or you do not see a clear way forward, please reach out to us to discuss your use case and how we can help you.&lt;/p&gt;
  1963.  
  1964.  
  1965.  
  1966. &lt;p&gt;&lt;strong&gt;You can reach us in #launchpad:&lt;a href=&quot;http://ubuntu.com/&quot;&gt;ubuntu.com&lt;/a&gt; on Matrix, or submit a &lt;a href=&quot;https://answers.launchpad.net/launchpad&quot;&gt;question&lt;/a&gt; or send us an e-mail via &lt;a href=&quot;mailto:feedback@launchpad.net&quot;&gt;feedback@launchpad.net&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
  1967.  
  1968.  
  1969.  
  1970. &lt;p&gt;It is also recommended to join the ongoing discussion at &lt;a href=&quot;https://discourse.ubuntu.com/t/phasing-out-bazaar-code-hosting/62189&quot;&gt;https://discourse.ubuntu.com/t/phasing-out-bazaar-code-hosting/62189&lt;/a&gt;.&lt;/p&gt;</description>
  1971. <pubDate>Fri, 06 Jun 2025 09:26:22 +0000</pubDate>
  1972. </item>
  1973. <item>
  1974. <title>Faizul &quot;Piju&quot; 9M2PJU: Building a Plex Media Server with Raspberry Pi</title>
  1975. <guid isPermaLink="false">https://hamradio.my/?p=7464</guid>
  1976. <link>https://hamradio.my/2025/06/building-a-plex-media-server-with-raspberry-pi/</link>
  1977. <description>&lt;p&gt;&lt;/p&gt;
  1978.  
  1979.  
  1980.  
  1981. &lt;p&gt;If you’re looking for a low-power, always-on solution for streaming your personal media library, the &lt;strong&gt;Raspberry Pi&lt;/strong&gt; makes a great Plex server. It’s compact, quiet, affordable, and perfect for handling basic media streaming—especially for home use.&lt;/p&gt;
  1982.  
  1983.  
  1984.  
  1985. &lt;p&gt;In this post, I’ll guide you through setting up &lt;strong&gt;Plex Media Server&lt;/strong&gt; on a &lt;strong&gt;Raspberry Pi&lt;/strong&gt;, using Raspberry Pi OS (Lite or Full) or Debian-based distros like Ubuntu Server.&lt;/p&gt;
  1986.  
  1987.  
  1988.  
  1989. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  1990.  
  1991.  
  1992.  
  1993. &lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-you-ll-need&quot;&gt;&lt;img alt=&quot;🧰&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f9f0.png&quot; style=&quot;height: 1em;&quot; /&gt; What You’ll Need&lt;/h3&gt;
  1994.  
  1995.  
  1996.  
  1997. &lt;ul class=&quot;wp-block-list&quot;&gt;
  1998. &lt;li&gt;Raspberry Pi 4 or 5 (at least 2GB RAM, 4GB+ recommended)&lt;/li&gt;
  1999.  
  2000.  
  2001.  
  2002. &lt;li&gt;microSD card (32GB+), or SSD via USB 3.0&lt;/li&gt;
  2003.  
  2004.  
  2005.  
  2006. &lt;li&gt;External storage for media (USB HDD/SSD or NAS)&lt;/li&gt;
  2007.  
  2008.  
  2009.  
  2010. &lt;li&gt;Ethernet or Wi-Fi connection&lt;/li&gt;
  2011.  
  2012.  
  2013.  
  2014. &lt;li&gt;Raspberry Pi OS (Lite or Desktop)&lt;/li&gt;
  2015.  
  2016.  
  2017.  
  2018. &lt;li&gt;A Plex account (free is enough)&lt;/li&gt;
  2019. &lt;/ul&gt;
  2020.  
  2021.  
  2022.  
  2023. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2024.  
  2025.  
  2026.  
  2027. &lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-1-prepare-the-raspberry-pi&quot;&gt;&lt;img alt=&quot;⚙&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/2699.png&quot; style=&quot;height: 1em;&quot; /&gt; Step 1: Prepare the Raspberry Pi&lt;/h3&gt;
  2028.  
  2029.  
  2030.  
  2031. &lt;ol class=&quot;wp-block-list&quot;&gt;
  2032. &lt;li&gt;Flash Raspberry Pi OS using &lt;a href=&quot;https://www.raspberrypi.com/software/&quot;&gt;Raspberry Pi Imager&lt;/a&gt;&lt;/li&gt;
  2033.  
  2034.  
  2035.  
  2036. &lt;li&gt;Enable SSH and set hostname (optional)&lt;/li&gt;
  2037.  
  2038.  
  2039.  
  2040. &lt;li&gt;Boot the Pi, log in, and update:&lt;/li&gt;
  2041. &lt;/ol&gt;
  2042.  
  2043.  
  2044.  
  2045. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y
  2046. &lt;/code&gt;&lt;/pre&gt;
  2047.  
  2048.  
  2049.  
  2050. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2051.  
  2052.  
  2053.  
  2054. &lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-2-install-plex-media-server&quot;&gt;&lt;img alt=&quot;📦&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f4e6.png&quot; style=&quot;height: 1em;&quot; /&gt; Step 2: Install Plex Media Server&lt;/h3&gt;
  2055.  
  2056.  
  2057.  
  2058. &lt;p&gt;Plex is available for ARM-based devices via their official repository.&lt;/p&gt;
  2059.  
  2060.  
  2061.  
  2062. &lt;ol class=&quot;wp-block-list&quot;&gt;
  2063. &lt;li&gt;Add Plex repo and key:&lt;/li&gt;
  2064. &lt;/ol&gt;
  2065.  
  2066.  
  2067.  
  2068. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;curl https://downloads.plex.tv/plex-keys/PlexSign.key | sudo apt-key add -
  2069. echo deb https://downloads.plex.tv/repo/deb public main | sudo tee /etc/apt/sources.list.d/plexmediaserver.list
  2070. sudo apt update
  2071. &lt;/code&gt;&lt;/pre&gt;
  2072.  
  2073.  
  2074.  
  2075. &lt;ol class=&quot;wp-block-list&quot; start=&quot;2&quot;&gt;
  2076. &lt;li&gt;Install Plex:&lt;/li&gt;
  2077. &lt;/ol&gt;
  2078.  
  2079.  
  2080.  
  2081. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;sudo apt install plexmediaserver -y
  2082. &lt;/code&gt;&lt;/pre&gt;
  2083.  
  2084.  
  2085.  
  2086. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2087.  
  2088.  
  2089.  
  2090. &lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-3-enable-and-start-the-service&quot;&gt;&lt;img alt=&quot;🔁&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f501.png&quot; style=&quot;height: 1em;&quot; /&gt; Step 3: Enable and Start the Service&lt;/h3&gt;
  2091.  
  2092.  
  2093.  
  2094. &lt;p&gt;Enable Plex on boot and start the service:&lt;/p&gt;
  2095.  
  2096.  
  2097.  
  2098. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;sudo systemctl enable plexmediaserver
  2099. sudo systemctl start plexmediaserver
  2100. &lt;/code&gt;&lt;/pre&gt;
  2101.  
  2102.  
  2103.  
  2104. &lt;p&gt;Make sure it’s running:&lt;/p&gt;
  2105.  
  2106.  
  2107.  
  2108. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;sudo systemctl status plexmediaserver
  2109. &lt;/code&gt;&lt;/pre&gt;
  2110.  
  2111.  
  2112.  
  2113. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2114.  
  2115.  
  2116.  
  2117. &lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-4-access-plex-web-interface&quot;&gt;&lt;img alt=&quot;🌐&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f310.png&quot; style=&quot;height: 1em;&quot; /&gt; Step 4: Access Plex Web Interface&lt;/h3&gt;
  2118.  
  2119.  
  2120.  
  2121. &lt;p&gt;Open your browser and go to:&lt;/p&gt;
  2122.  
  2123.  
  2124.  
  2125. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;http://&amp;lt;your-pi-ip&amp;gt;:32400/web
  2126. &lt;/code&gt;&lt;/pre&gt;
  2127.  
  2128.  
  2129.  
  2130. &lt;p&gt;Log in with your Plex account and begin the setup wizard.&lt;/p&gt;
  2131.  
  2132.  
  2133.  
  2134. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2135.  
  2136.  
  2137.  
  2138. &lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-5-add-your-media-library&quot;&gt;&lt;img alt=&quot;📂&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f4c2.png&quot; style=&quot;height: 1em;&quot; /&gt; Step 5: Add Your Media Library&lt;/h3&gt;
  2139.  
  2140.  
  2141.  
  2142. &lt;p&gt;Plug in your external HDD or mount a network share, then:&lt;/p&gt;
  2143.  
  2144.  
  2145.  
  2146. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;sudo mkdir -p /mnt/media
  2147. sudo mount /dev/sda1 /mnt/media
  2148. &lt;/code&gt;&lt;/pre&gt;
  2149.  
  2150.  
  2151.  
  2152. &lt;p&gt;Make sure Plex can access it:&lt;/p&gt;
  2153.  
  2154.  
  2155.  
  2156. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;sudo chown -R plex:plex /mnt/media
  2157. &lt;/code&gt;&lt;/pre&gt;
  2158.  
  2159.  
  2160.  
  2161. &lt;p&gt;Add the media folder during the Plex setup under Library &amp;gt; Add Library.&lt;/p&gt;
  2162.  
  2163.  
  2164.  
  2165. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2166.  
  2167.  
  2168.  
  2169. &lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-optional-tips&quot;&gt;&lt;img alt=&quot;💡&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f4a1.png&quot; style=&quot;height: 1em;&quot; /&gt; Optional Tips&lt;/h3&gt;
  2170.  
  2171.  
  2172.  
  2173. &lt;ul class=&quot;wp-block-list&quot;&gt;
  2174. &lt;li&gt;&lt;strong&gt;Transcoding:&lt;/strong&gt; The Pi can handle direct play (no transcoding) well, but struggles with transcoding large files. Use compatible formats like H.264 (MP4).&lt;/li&gt;
  2175.  
  2176.  
  2177.  
  2178. &lt;li&gt;&lt;strong&gt;USB Boot:&lt;/strong&gt; For better performance, boot the Pi from an SSD instead of a microSD card.&lt;/li&gt;
  2179.  
  2180.  
  2181.  
  2182. &lt;li&gt;&lt;strong&gt;Power Supply:&lt;/strong&gt; Use a proper 5V/3A PSU to avoid crashes under heavy disk load.&lt;/li&gt;
  2183.  
  2184.  
  2185.  
  2186. &lt;li&gt;&lt;strong&gt;Thermal:&lt;/strong&gt; Add a heatsink or fan for the Pi if using Plex for long sessions.&lt;/li&gt;
  2187. &lt;/ul&gt;
  2188.  
  2189.  
  2190.  
  2191. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2192.  
  2193.  
  2194.  
  2195. &lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-secure-your-server&quot;&gt;&lt;img alt=&quot;🔐&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f510.png&quot; style=&quot;height: 1em;&quot; /&gt; Secure Your Server&lt;/h3&gt;
  2196.  
  2197.  
  2198.  
  2199. &lt;ul class=&quot;wp-block-list&quot;&gt;
  2200. &lt;li&gt;Use your router to forward port &lt;code&gt;32400&lt;/code&gt; only if you want remote access.&lt;/li&gt;
  2201.  
  2202.  
  2203.  
  2204. &lt;li&gt;Set a strong Plex password.&lt;/li&gt;
  2205.  
  2206.  
  2207.  
  2208. &lt;li&gt;Enable Tailscale or WireGuard for secure remote access without exposing ports.&lt;/li&gt;
  2209. &lt;/ul&gt;
  2210.  
  2211.  
  2212.  
  2213. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2214.  
  2215.  
  2216.  
  2217. &lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-conclusion&quot;&gt;&lt;img alt=&quot;✅&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/2705.png&quot; style=&quot;height: 1em;&quot; /&gt; Conclusion&lt;/h3&gt;
  2218.  
  2219.  
  2220.  
  2221. &lt;p&gt;A Raspberry Pi might not replace a full-blown NAS or dedicated server, but for personal use or as a secondary Plex node, it’s surprisingly capable. With low energy usage and silent operation, it’s the perfect DIY home media solution.&lt;/p&gt;
  2222.  
  2223.  
  2224.  
  2225. &lt;p&gt;If you’re running other services like Pi-hole or Home Assistant, the Pi can multitask well — just avoid overloading it with too much transcoding.&lt;/p&gt;
  2226.  
  2227.  
  2228.  
  2229. &lt;p&gt;&lt;/p&gt;
  2230. &lt;p&gt;The post &lt;a href=&quot;https://hamradio.my/2025/06/building-a-plex-media-server-with-raspberry-pi/&quot;&gt;Building a Plex Media Server with Raspberry Pi&lt;/a&gt; appeared first on &lt;a href=&quot;https://hamradio.my&quot;&gt;Hamradio.my - Amateur Radio, Tech Insights and Product Reviews&lt;/a&gt; by &lt;a href=&quot;https://hamradio.my/author/9m2pju/&quot;&gt;9M2PJU&lt;/a&gt;.&lt;/p&gt;</description>
  2231. <pubDate>Wed, 04 Jun 2025 21:30:17 +0000</pubDate>
  2232. </item>
  2233. <item>
  2234. <title>Faizul &quot;Piju&quot; 9M2PJU: 0 A.D. on Linux: A Stunning, Free RTS Experience That Rivals the Best</title>
  2235. <guid isPermaLink="false">https://hamradio.my/?p=7744</guid>
  2236. <link>https://hamradio.my/2025/06/0-a-d-on-linux-a-stunning-free-rts-experience-that-rivals-the-best/</link>
  2237. <description>&lt;h1 class=&quot;wp-block-heading&quot;&gt;&lt;/h1&gt;
  2238.  
  2239.  
  2240.  
  2241. &lt;p&gt;If you’re a Linux user craving a real-time strategy (RTS) game with the polish of &lt;em&gt;Age of Empires&lt;/em&gt; and the historical depth of a university textbook—yet entirely &lt;em&gt;free&lt;/em&gt; and &lt;em&gt;open source&lt;/em&gt;—then you need to try &lt;strong&gt;0 A.D.&lt;/strong&gt;. This epic project by &lt;strong&gt;Wildfire Games&lt;/strong&gt; is not just an open-source alternative to mainstream RTS games—it’s a serious contender in its own right, crafted with passion, precision, and community spirit.&lt;/p&gt;
  2242.  
  2243.  
  2244.  
  2245. &lt;h2 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;🎮&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f3ae.png&quot; style=&quot;height: 1em;&quot; /&gt; What is 0 A.D.?&lt;/h2&gt;
  2246.  
  2247.  
  2248.  
  2249. &lt;p&gt;&lt;strong&gt;0 A.D. (Zero Anno Domini)&lt;/strong&gt; is a &lt;strong&gt;free&lt;/strong&gt;, &lt;strong&gt;open-source&lt;/strong&gt;, &lt;strong&gt;cross-platform RTS game&lt;/strong&gt; that takes players deep into ancient history, allowing them to build and battle with civilizations from 500 B.C. to 500 A.D. The game is built using the custom &lt;strong&gt;Pyrogenesis&lt;/strong&gt; engine, a modern 3D engine developed from scratch for this purpose, and available under the GPL license—yes, you can even tinker with the code yourself.&lt;/p&gt;
  2250.  
  2251.  
  2252.  
  2253. &lt;p&gt;It’s not just a clone. 0 A.D. sets itself apart with:&lt;/p&gt;
  2254.  
  2255.  
  2256.  
  2257. &lt;ul class=&quot;wp-block-list&quot;&gt;
  2258. &lt;li&gt;&lt;img alt=&quot;🛡&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f6e1.png&quot; style=&quot;height: 1em;&quot; /&gt; &lt;strong&gt;Historically accurate civilizations&lt;/strong&gt;&lt;/li&gt;
  2259.  
  2260.  
  2261.  
  2262. &lt;li&gt;&lt;img alt=&quot;🗺&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f5fa.png&quot; style=&quot;height: 1em;&quot; /&gt; &lt;strong&gt;Dynamic and random map generation&lt;/strong&gt;&lt;/li&gt;
  2263.  
  2264.  
  2265.  
  2266. &lt;li&gt;&lt;img alt=&quot;⚔&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/2694.png&quot; style=&quot;height: 1em;&quot; /&gt; &lt;strong&gt;Tactical land and naval combat&lt;/strong&gt;&lt;/li&gt;
  2267.  
  2268.  
  2269.  
  2270. &lt;li&gt;&lt;img alt=&quot;🏗&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f3d7.png&quot; style=&quot;height: 1em;&quot; /&gt; &lt;strong&gt;City-building with tech progression&lt;/strong&gt;&lt;/li&gt;
  2271.  
  2272.  
  2273.  
  2274. &lt;li&gt;&lt;img alt=&quot;🧠&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f9e0.png&quot; style=&quot;height: 1em;&quot; /&gt; &lt;strong&gt;AI opponents and multiplayer support&lt;/strong&gt;&lt;/li&gt;
  2275.  
  2276.  
  2277.  
  2278. &lt;li&gt;&lt;img alt=&quot;💬&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f4ac.png&quot; style=&quot;height: 1em;&quot; /&gt; &lt;strong&gt;Modding tools and community-created content&lt;/strong&gt;&lt;/li&gt;
  2279. &lt;/ul&gt;
  2280.  
  2281.  
  2282.  
  2283. &lt;h2 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;🐧&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f427.png&quot; style=&quot;height: 1em;&quot; /&gt; Why It’s Perfect for Linux Users&lt;/h2&gt;
  2284.  
  2285.  
  2286.  
  2287. &lt;p&gt;Linux gamers often get the short end of the stick when it comes to big-name games—but 0 A.D. feels like it was made &lt;em&gt;for us&lt;/em&gt;. Here’s why Linux users should care:&lt;/p&gt;
  2288.  
  2289.  
  2290.  
  2291. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;✔&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/2714.png&quot; style=&quot;height: 1em;&quot; /&gt; Native Linux Support&lt;/h3&gt;
  2292.  
  2293.  
  2294.  
  2295. &lt;p&gt;0 A.D. runs natively on &lt;strong&gt;Linux&lt;/strong&gt; without the need for Wine, Proton, or compatibility layers. You can install it directly from your distro’s package manager or build it from source if you like full control.&lt;/p&gt;
  2296.  
  2297.  
  2298.  
  2299. &lt;p&gt;For example:&lt;/p&gt;
  2300.  
  2301.  
  2302.  
  2303. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;# On Debian/Ubuntu
  2304. sudo apt install 0ad
  2305.  
  2306. # On Arch Linux
  2307. sudo pacman -S 0ad
  2308.  
  2309. # On Fedora
  2310. sudo dnf install 0ad
  2311. &lt;/code&gt;&lt;/pre&gt;
  2312.  
  2313.  
  2314.  
  2315. &lt;p&gt;No weird dependencies. No workarounds. Just pure, native performance.&lt;/p&gt;
  2316.  
  2317.  
  2318.  
  2319. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;🎨&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f3a8.png&quot; style=&quot;height: 1em;&quot; /&gt; Vulkan Renderer and FSR Support&lt;/h3&gt;
  2320.  
  2321.  
  2322.  
  2323. &lt;p&gt;With &lt;strong&gt;Alpha 27 “Agni”&lt;/strong&gt;, 0 A.D. now supports &lt;strong&gt;Vulkan&lt;/strong&gt;, giving Linux users much better graphics performance, lower CPU overhead, and compatibility with modern GPU features. Plus, it includes &lt;strong&gt;AMD FidelityFX Super Resolution (FSR)&lt;/strong&gt;—which boosts frame rates and visual quality even on low-end hardware.&lt;/p&gt;
  2324.  
  2325.  
  2326.  
  2327. &lt;p&gt;This makes 0 A.D. one of the few FOSS games optimized for modern Linux graphics stacks like &lt;strong&gt;Mesa&lt;/strong&gt;, &lt;strong&gt;Wayland&lt;/strong&gt;, and &lt;strong&gt;PipeWire&lt;/strong&gt;.&lt;/p&gt;
  2328.  
  2329.  
  2330.  
  2331. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;🔄&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f504.png&quot; style=&quot;height: 1em;&quot; /&gt; Rolling Updates and Dev Engagement&lt;/h3&gt;
  2332.  
  2333.  
  2334.  
  2335. &lt;p&gt;The development team and community are highly active, with new features, bug fixes, and optimizations arriving steadily. You don’t need to wait years for meaningful updates—0 A.D. grows with each alpha release, and Linux users are treated as first-class citizens.&lt;/p&gt;
  2336.  
  2337.  
  2338.  
  2339. &lt;p&gt;Want to contribute a patch or translate the UI into Malay? You can. Everything is transparent and accessible.&lt;/p&gt;
  2340.  
  2341.  
  2342.  
  2343. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2344.  
  2345.  
  2346.  
  2347. &lt;h2 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;🏛&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f3db.png&quot; style=&quot;height: 1em;&quot; /&gt; What Makes the Gameplay So Good?&lt;/h2&gt;
  2348.  
  2349.  
  2350.  
  2351. &lt;p&gt;Let’s dive deeper into why the gameplay itself shines.&lt;/p&gt;
  2352.  
  2353.  
  2354.  
  2355. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;🏗&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f3d7.png&quot; style=&quot;height: 1em;&quot; /&gt; Realistic Economy and Base Building&lt;/h3&gt;
  2356.  
  2357.  
  2358.  
  2359. &lt;p&gt;Unlike many fast-paced arcade RTS games, 0 A.D. rewards planning and resource management. You’ll manage four resources—&lt;strong&gt;food, wood, stone, and metal&lt;/strong&gt;—to construct buildings, raise armies, and advance through &lt;strong&gt;phases&lt;/strong&gt; that represent a civilization’s growth. Advancing from &lt;strong&gt;village phase to town phase to city phase&lt;/strong&gt; unlocks more units and structures.&lt;/p&gt;
  2360.  
  2361.  
  2362.  
  2363. &lt;p&gt;Each civilization has unique architectural styles, tech trees, and military units. For example:&lt;/p&gt;
  2364.  
  2365.  
  2366.  
  2367. &lt;ul class=&quot;wp-block-list&quot;&gt;
  2368. &lt;li&gt;&lt;strong&gt;Romans&lt;/strong&gt; have disciplined legionaries and siege weapons.&lt;/li&gt;
  2369.  
  2370.  
  2371.  
  2372. &lt;li&gt;&lt;strong&gt;Persians&lt;/strong&gt; boast fast cavalry and majestic palaces.&lt;/li&gt;
  2373.  
  2374.  
  2375.  
  2376. &lt;li&gt;&lt;strong&gt;Athenians&lt;/strong&gt; excel in naval warfare.&lt;/li&gt;
  2377. &lt;/ul&gt;
  2378.  
  2379.  
  2380.  
  2381. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;⚔&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/2694.png&quot; style=&quot;height: 1em;&quot; /&gt; Intense Tactical Combat&lt;/h3&gt;
  2382.  
  2383.  
  2384.  
  2385. &lt;p&gt;Units in 0 A.D. aren’t just damage sponges. There’s formation control, terrain advantage, flanking tactics, and unit counters. The AI behaves strategically, and in multiplayer, experienced players can pull off devastating maneuvers.&lt;/p&gt;
  2386.  
  2387.  
  2388.  
  2389. &lt;p&gt;Naval combat has received significant improvements recently, with better ship handling and water pathfinding—something many commercial RTS games still struggle with.&lt;/p&gt;
  2390.  
  2391.  
  2392.  
  2393. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;🗺&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f5fa.png&quot; style=&quot;height: 1em;&quot; /&gt; Endless Map Variety and Mod Support&lt;/h3&gt;
  2394.  
  2395.  
  2396.  
  2397. &lt;p&gt;0 A.D. includes:&lt;/p&gt;
  2398.  
  2399.  
  2400.  
  2401. &lt;ul class=&quot;wp-block-list&quot;&gt;
  2402. &lt;li&gt;Skirmish maps&lt;/li&gt;
  2403.  
  2404.  
  2405.  
  2406. &lt;li&gt;Random maps (with different biomes and elevation)&lt;/li&gt;
  2407.  
  2408.  
  2409.  
  2410. &lt;li&gt;Scenario maps (with scripted events)&lt;/li&gt;
  2411. &lt;/ul&gt;
  2412.  
  2413.  
  2414.  
  2415. &lt;p&gt;And thanks to the integrated &lt;strong&gt;mod downloader&lt;/strong&gt;, you can browse, install, and play with community mods in just a few clicks. Want to add new units, tweak balance, or add fantasy elements? You can.&lt;/p&gt;
  2416.  
  2417.  
  2418.  
  2419. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2420.  
  2421.  
  2422.  
  2423. &lt;h2 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;🕹&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f579.png&quot; style=&quot;height: 1em;&quot; /&gt; Multiplayer and Replays&lt;/h2&gt;
  2424.  
  2425.  
  2426.  
  2427. &lt;p&gt;Play with friends over LAN, the Internet, or against the built-in AI. The game includes:&lt;/p&gt;
  2428.  
  2429.  
  2430.  
  2431. &lt;ul class=&quot;wp-block-list&quot;&gt;
  2432. &lt;li&gt;&lt;img alt=&quot;🧭&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f9ed.png&quot; style=&quot;height: 1em;&quot; /&gt; Multiplayer save and resume support&lt;/li&gt;
  2433.  
  2434.  
  2435.  
  2436. &lt;li&gt;&lt;img alt=&quot;👁&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f441.png&quot; style=&quot;height: 1em;&quot; /&gt; Observer tools (with flares, commands, and overlays)&lt;/li&gt;
  2437.  
  2438.  
  2439.  
  2440. &lt;li&gt;&lt;img alt=&quot;⏪&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/23ea.png&quot; style=&quot;height: 1em;&quot; /&gt; Replay functionality to study your tactics or cast tournaments&lt;/li&gt;
  2441. &lt;/ul&gt;
  2442.  
  2443.  
  2444.  
  2445. &lt;p&gt;There’s even an in-game lobby where players coordinate matches across all platforms.&lt;/p&gt;
  2446.  
  2447.  
  2448.  
  2449. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2450.  
  2451.  
  2452.  
  2453. &lt;h2 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;👥&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f465.png&quot; style=&quot;height: 1em;&quot; /&gt; Community and Contribution&lt;/h2&gt;
  2454.  
  2455.  
  2456.  
  2457. &lt;p&gt;The 0 A.D. project thrives because of its community:&lt;/p&gt;
  2458.  
  2459.  
  2460.  
  2461. &lt;ul class=&quot;wp-block-list&quot;&gt;
  2462. &lt;li&gt;Developers contribute code via GitHub.&lt;/li&gt;
  2463.  
  2464.  
  2465.  
  2466. &lt;li&gt;Artists create stunning 3D models and animations.&lt;/li&gt;
  2467.  
  2468.  
  2469.  
  2470. &lt;li&gt;Historians help ensure cultural accuracy.&lt;/li&gt;
  2471.  
  2472.  
  2473.  
  2474. &lt;li&gt;Translators localize the game into dozens of languages.&lt;/li&gt;
  2475.  
  2476.  
  2477.  
  2478. &lt;li&gt;Players write guides, tutorials, and strategy posts.&lt;/li&gt;
  2479. &lt;/ul&gt;
  2480.  
  2481.  
  2482.  
  2483. &lt;p&gt;If you’re a Linux user and want to contribute to an ambitious FOSS project, this is the perfect gateway into game development, design, or open collaboration.&lt;/p&gt;
  2484.  
  2485.  
  2486.  
  2487. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2488.  
  2489.  
  2490.  
  2491. &lt;h2 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;🧑‍💻&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f9d1-200d-1f4bb.png&quot; style=&quot;height: 1em;&quot; /&gt; How to Install on Linux&lt;/h2&gt;
  2492.  
  2493.  
  2494.  
  2495. &lt;p&gt;Here’s a quick reference:&lt;/p&gt;
  2496.  
  2497.  
  2498.  
  2499. &lt;h3 class=&quot;wp-block-heading&quot;&gt;Option 1: Package Manager (Recommended)&lt;/h3&gt;
  2500.  
  2501.  
  2502.  
  2503. &lt;ul class=&quot;wp-block-list&quot;&gt;
  2504. &lt;li&gt;&lt;strong&gt;Debian/Ubuntu&lt;/strong&gt;: &lt;code&gt;sudo apt install 0ad&lt;/code&gt;&lt;/li&gt;
  2505.  
  2506.  
  2507.  
  2508. &lt;li&gt;&lt;strong&gt;Arch Linux&lt;/strong&gt;: &lt;code&gt;sudo pacman -S 0ad&lt;/code&gt;&lt;/li&gt;
  2509.  
  2510.  
  2511.  
  2512. &lt;li&gt;&lt;strong&gt;Fedora&lt;/strong&gt;: &lt;code&gt;sudo dnf install 0ad&lt;/code&gt;&lt;/li&gt;
  2513.  
  2514.  
  2515.  
  2516. &lt;li&gt;&lt;strong&gt;openSUSE&lt;/strong&gt;: &lt;code&gt;sudo zypper install 0ad&lt;/code&gt;&lt;/li&gt;
  2517. &lt;/ul&gt;
  2518.  
  2519.  
  2520.  
  2521. &lt;h3 class=&quot;wp-block-heading&quot;&gt;Option 2: Compile from Source&lt;/h3&gt;
  2522.  
  2523.  
  2524.  
  2525. &lt;p&gt;Follow the official instructions at &lt;a href=&quot;https://trac.wildfiregames.com/wiki/BuildInstructions&quot;&gt;https://trac.wildfiregames.com/wiki/BuildInstructions&lt;/a&gt;&lt;/p&gt;
  2526.  
  2527.  
  2528.  
  2529. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2530.  
  2531.  
  2532.  
  2533. &lt;h2 class=&quot;wp-block-heading&quot;&gt;&lt;img alt=&quot;🎯&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f3af.png&quot; style=&quot;height: 1em;&quot; /&gt; Final Thoughts&lt;/h2&gt;
  2534.  
  2535.  
  2536.  
  2537. &lt;p&gt;0 A.D. is more than just a game—it’s a testament to what free and open-source software can achieve. For Linux gamers, it’s a rare gem: a game that respects your platform, performs well, and lets you own your experience entirely.&lt;/p&gt;
  2538.  
  2539.  
  2540.  
  2541. &lt;p&gt;So whether you’re a seasoned general or a curious strategist, &lt;strong&gt;download 0 A.D. today and relive history—on your terms&lt;/strong&gt;.&lt;/p&gt;
  2542.  
  2543.  
  2544.  
  2545. &lt;p&gt;&lt;img alt=&quot;👉&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/15.1.0/72x72/1f449.png&quot; style=&quot;height: 1em;&quot; /&gt; Visit &lt;a href=&quot;https://play0ad.com/&quot;&gt;https://play0ad.com&lt;/a&gt; to download and start playing.&lt;/p&gt;
  2546. &lt;p&gt;The post &lt;a href=&quot;https://hamradio.my/2025/06/0-a-d-on-linux-a-stunning-free-rts-experience-that-rivals-the-best/&quot;&gt;0 A.D. on Linux: A Stunning, Free RTS Experience That Rivals the Best&lt;/a&gt; appeared first on &lt;a href=&quot;https://hamradio.my&quot;&gt;Hamradio.my - Amateur Radio, Tech Insights and Product Reviews&lt;/a&gt; by &lt;a href=&quot;https://hamradio.my/author/9m2pju/&quot;&gt;9M2PJU&lt;/a&gt;.&lt;/p&gt;</description>
  2547. <pubDate>Sun, 01 Jun 2025 16:14:40 +0000</pubDate>
  2548. </item>
  2549. <item>
  2550. <title>Ubuntu Studio: Ubuntu Studio 22.04 LTS has reached End-Of-Life (EOL)</title>
  2551. <guid isPermaLink="false">https://ubuntustudio.org/?p=2999</guid>
  2552. <link>https://ubuntustudio.org/2025/05/ubuntu-studio-22-04-lts-has-reached-end-of-life-eol/</link>
  2553. <description>&lt;p&gt;&lt;strong&gt;Ubuntu Studio 22.04 LTS has reached the end of its three years of supported life&lt;/strong&gt; provided by the Ubuntu Studio team. All users are urged to upgrade to 24.04 LTS at this time.&lt;/p&gt;
  2554.  
  2555.  
  2556.  
  2557. &lt;p&gt;This means that the KDE Plasma, audio, video, graphics, photography, and publishing components of your system will no longer receive updates, plus &lt;strong&gt;we at Ubuntu Studio won’t support it after 29-May-2025,&lt;/strong&gt; though your base packages from Ubuntu will continue to receive security updates from Ubuntu until 2027 since Ubuntu Desktop, Ubuntu Server, Ubuntu Cloud and Ubuntu Core continue to receive updates.&lt;/p&gt;
  2558.  
  2559.  
  2560.  
  2561. &lt;p&gt;See the &lt;a data-id=&quot;2745&quot; data-type=&quot;page&quot; href=&quot;https://ubuntustudio.org/ubuntu-studio-24-04-lts-release-notes/&quot;&gt;Ubuntu Studio 24.04 LTS Release Notes&lt;/a&gt; for upgrade instructions.&lt;/p&gt;
  2562.  
  2563.  
  2564.  
  2565. &lt;p&gt;No single release of any operating system can be supported indefinitely, and Ubuntu Studio has no exception to this rule.&lt;/p&gt;
  2566.  
  2567.  
  2568.  
  2569. &lt;p&gt;Long-Term Support releases are identified by an even numbered year-of-release and a month-of-release of April (04). Hence, the most recent Long-Term Support release is 24.04 (YY.MM = 2024.April), and the next Long-Term Support release will be 26.04 (2026.April). LTS releases for official Ubuntu flavors (not Desktop or Server which are supported for five years) are three years, meaning LTS users are expected to upgrade after every LTS release with a one-year buffer.&lt;/p&gt;</description>
  2570. <pubDate>Thu, 29 May 2025 16:50:01 +0000</pubDate>
  2571. </item>
  2572. <item>
  2573. <title>Julian Andres Klode: A SomewhatMaxSAT Solver</title>
  2574. <guid isPermaLink="true">https://blog.jak-linux.org/2025/05/24/somewhatmax-sat-solver/</guid>
  2575. <link>https://blog.jak-linux.org/2025/05/24/somewhatmax-sat-solver/</link>
  2576. <description>&lt;p&gt;&lt;strong&gt;As you may recall&lt;/strong&gt; from previous posts and elsewhere I have been busy writing a new solver for APT.
  2577. Today I want to share some of the latest changes in how to approach solving.&lt;/p&gt;
  2578. &lt;p&gt;The idea for the solver was that manually installed packages are always protected from removals –
  2579. in terms of SAT solving, they are facts. Automatically installed packages become optional unit
  2580. clauses. Optional clauses are solved after manual ones, they don’t partake in normal unit propagation.&lt;/p&gt;
  2581. &lt;p&gt;This worked fine, say you had&lt;/p&gt;
  2582. &lt;pre tabindex=&quot;0&quot;&gt;&lt;code&gt;A                                   # install request for A
  2583. B                                   # manually installed, keep it
  2584. A depends on: conflicts-B | C
  2585. &lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Installing &lt;code&gt;A&lt;/code&gt; on a system with &lt;code&gt;B&lt;/code&gt; installed installed &lt;code&gt;C&lt;/code&gt;, as it was not allowed to
  2586. install the &lt;code&gt;conflicts-B&lt;/code&gt; package since &lt;code&gt;B&lt;/code&gt; is installed.&lt;/p&gt;
  2587. &lt;p&gt;&lt;strong&gt;However,&lt;/strong&gt; I also introduced a mode to allow removing manually installed packages, and that’s
  2588. where it broke down, now instead of &lt;code&gt;B&lt;/code&gt; being a fact, our clauses looked like:&lt;/p&gt;
  2589. &lt;pre tabindex=&quot;0&quot;&gt;&lt;code&gt;A                               # install request for A
  2590. A depends on: conflicts-B | C
  2591. Optional: B                     # try to keep B installed
  2592. &lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As a result, we installed &lt;code&gt;conflicts-B&lt;/code&gt; and removed &lt;code&gt;B&lt;/code&gt;; the steps the solver takes are:&lt;/p&gt;
  2593. &lt;ol&gt;
  2594. &lt;li&gt;&lt;code&gt;A&lt;/code&gt; is a fact, mark it&lt;/li&gt;
  2595. &lt;li&gt;&lt;code&gt;A depends on: conflicts-B | C&lt;/code&gt; is the strongest clause, try to install &lt;code&gt;conflicts-B&lt;/code&gt;&lt;/li&gt;
  2596. &lt;li&gt;We unit propagate that &lt;code&gt;conflicts-B&lt;/code&gt; conflicts with &lt;code&gt;B&lt;/code&gt;, so we mark &lt;code&gt;not B&lt;/code&gt;&lt;/li&gt;
  2597. &lt;li&gt;&lt;code&gt;Optional: B&lt;/code&gt; is reached, but not satisfiable, ignore it because it’s optional.&lt;/li&gt;
  2598. &lt;/ol&gt;
  2599. &lt;p&gt;This isn’t correct: Just because we allow removing manually installed packages doesn’t mean that we should remove manually installed packages if we don’t need to.&lt;/p&gt;
  2600. &lt;p&gt;&lt;strong&gt;Fixing&lt;/strong&gt; this turns out to be surprisingly easy. In addition to adding our optional (soft) clauses, let’s first assume all of them!&lt;/p&gt;
  2601. &lt;p&gt;But to explain how this works, we first need to explain some terminology:&lt;/p&gt;
  2602. &lt;ol&gt;
  2603. &lt;li&gt;The solver operates on a stack of decisions&lt;/li&gt;
  2604. &lt;li&gt;“enqueue” means a fact is being added at the current decision level, and enqueued for propagation&lt;/li&gt;
  2605. &lt;li&gt;“assume” bumps the decision level, and then enqueues the assumed variable&lt;/li&gt;
  2606. &lt;li&gt;“propagate” looks at all the facts and sees if any clause becomes unit, and then enqueues it&lt;/li&gt;
  2607. &lt;li&gt;“unit” is when a clause has a single literal left to assign&lt;/li&gt;
  2608. &lt;/ol&gt;
  2609. &lt;p&gt;To illustrate this in pseudo Python code:&lt;/p&gt;
  2610. &lt;ol&gt;
  2611. &lt;li&gt;
  2612. &lt;p&gt;We introduce all our facts, and if they conflict, we are unsat:&lt;/p&gt;
  2613. &lt;div class=&quot;highlight&quot;&gt;&lt;pre tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-python3&quot; data-lang=&quot;python3&quot;&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #66d9ef;&quot;&gt;for&lt;/span&gt; fact &lt;span style=&quot;color: #f92672;&quot;&gt;in&lt;/span&gt; facts:
  2614. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;    enqueue(fact)
  2615. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #66d9ef;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #f92672;&quot;&gt;not&lt;/span&gt; propagate():
  2616. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;    &lt;span style=&quot;color: #66d9ef;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #66d9ef;&quot;&gt;False&lt;/span&gt;
  2617. &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
  2618. &lt;li&gt;
  2619. &lt;p&gt;For each optional literal, we register a soft clause and assume it. If the assumption fails,
  2620. we ignore it. If it succeeds, but propagation fails, we undo the assumption.&lt;/p&gt;
  2621. &lt;div class=&quot;highlight&quot;&gt;&lt;pre tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-python3&quot; data-lang=&quot;python3&quot;&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #66d9ef;&quot;&gt;for&lt;/span&gt; optionalLiteral &lt;span style=&quot;color: #f92672;&quot;&gt;in&lt;/span&gt; optionalLiterals:
  2622. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;    registerClause(SoftClause([optionalLiteral]))
  2623. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;    &lt;span style=&quot;color: #66d9ef;&quot;&gt;if&lt;/span&gt; assume(optionalLiteral) &lt;span style=&quot;color: #f92672;&quot;&gt;and&lt;/span&gt; &lt;span style=&quot;color: #f92672;&quot;&gt;not&lt;/span&gt; propagate():
  2624. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;        undo()
  2625. &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
  2626. &lt;li&gt;
  2627. &lt;p&gt;Finally we enter the main solver loop:&lt;/p&gt;
  2628. &lt;div class=&quot;highlight&quot;&gt;&lt;pre tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-python3&quot; data-lang=&quot;python3&quot;&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #66d9ef;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #66d9ef;&quot;&gt;True&lt;/span&gt;:
  2629. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;    &lt;span style=&quot;color: #66d9ef;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #f92672;&quot;&gt;not&lt;/span&gt; propagate():
  2630. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;        &lt;span style=&quot;color: #66d9ef;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #f92672;&quot;&gt;not&lt;/span&gt; backtrack():
  2631. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;            &lt;span style=&quot;color: #66d9ef;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #66d9ef;&quot;&gt;False&lt;/span&gt;
  2632. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;    &lt;span style=&quot;color: #66d9ef;&quot;&gt;elif&lt;/span&gt; &lt;span style=&quot;color: #f92672;&quot;&gt;&amp;lt;&lt;/span&gt;all clauses are satisfied&lt;span style=&quot;color: #f92672;&quot;&gt;&amp;gt;&lt;/span&gt;:
  2633. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;        &lt;span style=&quot;color: #66d9ef;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #66d9ef;&quot;&gt;True&lt;/span&gt;
  2634. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;    &lt;span style=&quot;color: #66d9ef;&quot;&gt;elif&lt;/span&gt; it &lt;span style=&quot;color: #f92672;&quot;&gt;:=&lt;/span&gt; find(&lt;span style=&quot;color: #e6db74;&quot;&gt;&quot;best unassigned literal satisfying a hard clause&quot;&lt;/span&gt;):
  2635. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;        assume(it)
  2636. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;    &lt;span style=&quot;color: #66d9ef;&quot;&gt;elif&lt;/span&gt; it &lt;span style=&quot;color: #f92672;&quot;&gt;:=&lt;/span&gt; find(&lt;span style=&quot;color: #e6db74;&quot;&gt;&quot;best literal satisfying a soft clause&quot;&lt;/span&gt;):
  2637. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;        assume(it)
  2638. &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
  2639. &lt;/ol&gt;
  2640. &lt;p&gt;The key point to note is that the main loop will undo the assumptions in order; so
  2641. if you assume &lt;code&gt;A,B,C&lt;/code&gt; and &lt;code&gt;B&lt;/code&gt; is not possible, we will have also undone &lt;code&gt;C&lt;/code&gt;. But since
  2642. &lt;code&gt;C&lt;/code&gt; is also enqueued as a soft clause, we will then later find it again:&lt;/p&gt;
  2643. &lt;ol&gt;
  2644. &lt;li&gt;Assume &lt;code&gt;A&lt;/code&gt;: &lt;code&gt;State=[Assume(A)]&lt;/code&gt;, &lt;code&gt;Clauses=[SoftClause([A])]&lt;/code&gt;&lt;/li&gt;
  2645. &lt;li&gt;Assume &lt;code&gt;B&lt;/code&gt;: &lt;code&gt;State=[Assume(A),Assume(B)]&lt;/code&gt;, &lt;code&gt;Clauses=[SoftClause([A]),SoftClause([B])]&lt;/code&gt;&lt;/li&gt;
  2646. &lt;li&gt;Assume &lt;code&gt;C&lt;/code&gt;: &lt;code&gt;State=[Assume(A),Assume(B),Assume(C)]&lt;/code&gt;, &lt;code&gt;Clauses=[SoftClause([A]),SoftClause([B]),SoftClause([C])]&lt;/code&gt;&lt;/li&gt;
  2647. &lt;li&gt;Solve finds a conflict, backtracks, and sets &lt;code&gt;not C&lt;/code&gt;: &lt;code&gt;State=[Assume(A),Assume(B),not(C)]&lt;/code&gt;&lt;/li&gt;
  2648. &lt;li&gt;Solve finds a conflict, backtracks, and sets &lt;code&gt;not B&lt;/code&gt;: &lt;code&gt;State=[Assume(A),not(B)]&lt;/code&gt; – C is no longer assumed either&lt;/li&gt;
  2649. &lt;li&gt;Solve, assume &lt;code&gt;C&lt;/code&gt; as it satisfies &lt;code&gt;SoftClause([C])&lt;/code&gt; as next best literal: &lt;code&gt;State=[Assume(A),not(B),Assume(C)]&lt;/code&gt;&lt;/li&gt;
  2650. &lt;li&gt;All clauses are satisfied, solution is &lt;code&gt;A&lt;/code&gt;, &lt;code&gt;not B&lt;/code&gt;, and &lt;code&gt;C&lt;/code&gt;.&lt;/li&gt;
  2651. &lt;/ol&gt;
  2652. &lt;p&gt;&lt;strong&gt;This is not (correct) MaxSAT&lt;/strong&gt;, because we actually do not guarantee that we satisfy as many soft clauses as possible. Consider you have the following clauses:&lt;/p&gt;
  2653. &lt;pre&gt;&lt;code&gt;Optional: A
  2654. Optional: B
  2655. Optional: C
  2656. B Conflicts with A
  2657. C Conflicts with A
  2658. &lt;/code&gt;&lt;/pre&gt;
  2659. &lt;p&gt;There are two possible results here:&lt;/p&gt;
  2660. &lt;ol&gt;
  2661. &lt;li&gt;&lt;code&gt;{A}&lt;/code&gt;   – If we assume &lt;code&gt;A&lt;/code&gt; first, we are unable to satisfy &lt;code&gt;B&lt;/code&gt; or &lt;code&gt;C&lt;/code&gt;.&lt;/li&gt;
  2662. &lt;li&gt;&lt;code&gt;{B,C}&lt;/code&gt; – If we assume either &lt;code&gt;B&lt;/code&gt; or &lt;code&gt;C&lt;/code&gt; first, &lt;code&gt;A&lt;/code&gt; is unsat.&lt;/li&gt;
  2663. &lt;/ol&gt;
  2664. &lt;p&gt;The question to ponder though is whether we actually need a global maximum or whether a local maximum is satisfactory in practice for a dependency solver
  2665. If you look at it, a naive MaxSAT solver needs to run the SAT solver &lt;code&gt;2**n&lt;/code&gt; times for &lt;code&gt;n&lt;/code&gt; soft clauses, whereas our heuristic only needs &lt;code&gt;n&lt;/code&gt; runs.&lt;/p&gt;
  2666. &lt;p&gt;For dependency solving, it seems we do not seem have a strong need for a global maximum:
  2667. There are various other preferences between our literals, say priorities;
  2668. and empirically, from evaluating hundreds of regressions &lt;em&gt;without&lt;/em&gt; the initial assumptions,
  2669. I can say that the assumptions do fix those cases and the result is correct.&lt;/p&gt;
  2670. &lt;p&gt;&lt;strong&gt;Further improvements&lt;/strong&gt; exist, though, and we can look into them if they are needed, such as:&lt;/p&gt;
  2671. &lt;ul&gt;
  2672. &lt;li&gt;
  2673. &lt;p&gt;Use a &lt;em&gt;better heuristic&lt;/em&gt;:&lt;/p&gt;
  2674. &lt;p&gt;If we assume 1 clause and solve, and we cause 2 or more clauses to become unsatisfiable,
  2675. then that clause is a local minimum and can be skipped.
  2676. This is a more common heuristical MaxSAT solver.
  2677. This gives us a &lt;em&gt;better&lt;/em&gt; local maximum, but not a global one.&lt;/p&gt;
  2678. &lt;p&gt;This is more or less what the &lt;a href=&quot;https://labix.org/smart&quot;&gt;Smart package manager&lt;/a&gt; did,
  2679. except that in Smart, all packages were optional, and the entire solution was scored.
  2680. It calculated a basic solution without optimization and then toggled each variable and saw if the score improved.&lt;/p&gt;
  2681. &lt;/li&gt;
  2682. &lt;li&gt;
  2683. &lt;p&gt;Implement &lt;em&gt;an actual search for a global maximum&lt;/em&gt;:&lt;/p&gt;
  2684. &lt;p&gt;This involves reading the literature.
  2685. There are various versions of this, for example:&lt;/p&gt;
  2686. &lt;ol&gt;
  2687. &lt;li&gt;
  2688. &lt;p&gt;Find unsatisfiable cores and use those to guide relaxation of clauses.&lt;/p&gt;
  2689. &lt;/li&gt;
  2690. &lt;li&gt;
  2691. &lt;p&gt;A bounds-based search, where we translate sum(satisifed clauses) &amp;gt; k into SAT, and then search in one of the following ways:&lt;/p&gt;
  2692. &lt;ol&gt;
  2693. &lt;li&gt;from 0 upward&lt;/li&gt;
  2694. &lt;li&gt;from n downward&lt;/li&gt;
  2695. &lt;li&gt;perform a binary search on [0, k] satisfied clauses.&lt;/li&gt;
  2696. &lt;/ol&gt;
  2697. &lt;p&gt;&lt;em&gt;Actually&lt;/em&gt; we do not even need to calculate sum constraints into CNF, because we can just add a specialized new type of constraint to our code.&lt;/p&gt;
  2698. &lt;/li&gt;
  2699. &lt;/ol&gt;
  2700. &lt;/li&gt;
  2701. &lt;/ul&gt;</description>
  2702. <pubDate>Sat, 24 May 2025 10:14:58 +0000</pubDate>
  2703. </item>
  2704. <item>
  2705. <title>Launchpad News: Sunsetting Launchpad’s mailing lists</title>
  2706. <guid isPermaLink="false">https://blog.launchpad.net/?p=4460</guid>
  2707. <link>https://blog.launchpad.net/general/sunsetting-launchpads-mailing-lists</link>
  2708. <description>&lt;h2&gt;What are Launchpad’s mailing lists?&lt;/h2&gt;
  2709.  
  2710.  
  2711.  
  2712. &lt;p&gt;Launchpad’s mailing lists are team-based mailing lists, which means that each team can have one of them. E-mails from Launchpad’s mailing lists contain `lists.launchpad.net ` in their address.&lt;/p&gt;
  2713.  
  2714.  
  2715.  
  2716. &lt;p&gt;For more information on the topic please see &lt;a href=&quot;https://help.launchpad.net/ListHelp&quot;&gt;https://help.launchpad.net/ListHelp&lt;/a&gt;.&lt;/p&gt;
  2717.  
  2718.  
  2719.  
  2720. &lt;h2&gt;What are they not?&lt;/h2&gt;
  2721.  
  2722.  
  2723.  
  2724. &lt;p&gt;Please note that both &lt;a href=&quot;http://lists.canonical.com&quot;&gt;lists.canonical.com&lt;/a&gt; and &lt;a href=&quot;http://lists.ubuntu.com&quot;&gt;lists.ubuntu.com&lt;/a&gt; are not managed by Launchpad, but by Canonical Information Systems.&lt;/p&gt;
  2725.  
  2726.  
  2727.  
  2728. &lt;h2&gt;Timeline&lt;/h2&gt;
  2729.  
  2730.  
  2731.  
  2732. &lt;p&gt;Launchpad will no longer offer mailing lists as of the end of October 2025, which aligns with the end of the 25.10 cycle.&lt;/p&gt;
  2733.  
  2734.  
  2735.  
  2736. &lt;h2&gt;Migration paths&lt;/h2&gt;
  2737.  
  2738.  
  2739.  
  2740. &lt;p&gt;Depending on your use case, there are different alternatives available.&lt;/p&gt;
  2741.  
  2742.  
  2743.  
  2744. &lt;p&gt;For a couple of years now, discourse has become a viable alternative for most scenarios. Launchpad also offers the &lt;a href=&quot;https://help.launchpad.net/Answers&quot;&gt;Answers feature&lt;/a&gt; for discussions. If it is not so much about communication, but more about receiving information, e.g. for updates on a bug report, you should be aware that you can also subscribe teams to bugs.&lt;/p&gt;
  2745.  
  2746.  
  2747.  
  2748. &lt;h2&gt;Call for action&lt;/h2&gt;
  2749.  
  2750.  
  2751.  
  2752. &lt;p&gt;We are aware that your use case may be very different from the above listed ones. If you are using Launchpad’s mailing lists today and you do not see a clear way forward, please reach out to us to discuss your use case and how we can help you.&lt;/p&gt;
  2753.  
  2754.  
  2755.  
  2756. &lt;p&gt;Please contact us on Matrix (#launchpad:&lt;a href=&quot;http://ubuntu.com&quot;&gt;ubuntu.com&lt;/a&gt;) or drop as a message via feedback@launchpad.net.&lt;/p&gt;
  2757.  
  2758.  
  2759.  
  2760. &lt;p&gt;Please note that this is still work in progress, and we will provide more information over the upcoming weeks and months.&lt;/p&gt;</description>
  2761. <pubDate>Thu, 22 May 2025 17:42:38 +0000</pubDate>
  2762. </item>
  2763. <item>
  2764. <title>Kubuntu General News: Plasma 6.4 Beta1 available for testing</title>
  2765. <guid isPermaLink="false">https://kubuntu.org/?p=5329</guid>
  2766. <link>https://kubuntu.org/news/plasma-6-4-beta1-available-for-testing/</link>
  2767. <description>&lt;p id=&quot;block-d172a06c-2462-4906-86fc-3e208056ff7b&quot;&gt;&lt;br /&gt;Are you using Kubuntu 25.04 Plucky Puffin, our current stable release? Or are you already running our development builds of the upcoming 25.10 (Questing Quokka)?&lt;/p&gt;
  2768.  
  2769.  
  2770.  
  2771. &lt;p id=&quot;block-9c699339-e52d-4677-b409-c9b4fc924032&quot;&gt;We currently have &lt;a href=&quot;https://kde.org/announcements/plasma/6/6.3.90/&quot;&gt;Plasma 6.3.90 (Plasma 6.4 Beta1)&lt;/a&gt; available in our &lt;a href=&quot;https://launchpad.net/~kubuntu-ppa/+archive/ubuntu/beta&quot;&gt;Beta PPA&lt;/a&gt; for Kubuntu 25.04 and for the &lt;a href=&quot;http://cdimage.ubuntu.com/kubuntu/daily-live/current/&quot;&gt;25.10 development series&lt;/a&gt;.&lt;/p&gt;
  2772.  
  2773.  
  2774.  
  2775. &lt;p id=&quot;block-7b4e6602-72d0-43c0-b3f0-2d1b0eb96594&quot;&gt;However this is a Beta release, and we should re-iterate the disclaimer:&lt;/p&gt;
  2776.  
  2777.  
  2778.  
  2779. &lt;p id=&quot;block-a55e81b0-9713-490a-8522-a3e883c91e9e&quot;&gt;&lt;/p&gt;
  2780.  
  2781.  
  2782.  
  2783. &lt;p&gt;&lt;strong&gt;DISCLAIMER&lt;/strong&gt;: This release contains untested and unstable software. It is highly recommended you &lt;strong&gt;do not use this version in a production environment&lt;/strong&gt; and do not use it as your daily work environment. You risk crashes and loss of data.&lt;/p&gt;
  2784.  
  2785.  
  2786.  
  2787. &lt;p id=&quot;block-5d444010-ea6d-4273-9f29-15ec644b9564&quot;&gt;&lt;/p&gt;
  2788.  
  2789.  
  2790.  
  2791. &lt;p id=&quot;block-d8658d77-9e53-4d05-90f1-a48116e660bc&quot;&gt;6.4 Beta1 packages and required dependencies are available in our Beta PPA. The PPA should work whether you are currently using our backports PPA or not. If you are prepared to test via the PPA, then add the beta PPA and then upgrade:&lt;/p&gt;
  2792.  
  2793.  
  2794.  
  2795. &lt;pre class=&quot;wp-block-preformatted&quot; id=&quot;block-cfba50ba-2e9d-4487-9d61-21bc3167f4ee&quot;&gt;sudo add-apt-repository ppa:kubuntu-ppa/beta &amp;amp;&amp;amp; sudo apt full-upgrade -y&lt;/pre&gt;
  2796.  
  2797.  
  2798.  
  2799. &lt;p id=&quot;block-dc67bdb2-40cb-478f-8be2-048722434756&quot;&gt;Then reboot.&lt;/p&gt;
  2800.  
  2801.  
  2802.  
  2803. &lt;p id=&quot;block-60926ba5-9c4a-414f-a41a-5ffdacd7745b&quot;&gt;&lt;em&gt;&lt;strong&gt;In case of issues, testers should be prepared to use ppa-purge to remove the PPA and revert/downgrade packages.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
  2804.  
  2805.  
  2806.  
  2807. &lt;p id=&quot;block-eb072a47-2abc-4f23-947a-04467dfbe81b&quot;&gt;Kubuntu is part of the &lt;a href=&quot;https://www.kde.org/community/whatiskde/&quot;&gt;KDE community&lt;/a&gt;, so this testing will benefit both Kubuntu as well as upstream KDE Plasma software, which is used by many other distributions too.&lt;/p&gt;
  2808.  
  2809.  
  2810.  
  2811. &lt;ul id=&quot;block-5dfd69bc-7925-48b9-956f-378d0207d24f&quot;&gt;&lt;li&gt;If you believe you might have found a packaging bug, you can use &lt;a href=&quot;https://launchpad.net/&quot;&gt;launchpad.net&lt;/a&gt; to post testing feedback to the Kubuntu team as a bug, or give feedback on Matrix [1], or mailing lists [2].&lt;/li&gt;&lt;li&gt;If you believe you have found a bug in the underlying software, then &lt;a href=&quot;https://bugs.kde.org/&quot;&gt;bugs.kde.org&lt;/a&gt; is the best place to file your bug report.&lt;/li&gt;&lt;/ul&gt;
  2812.  
  2813.  
  2814.  
  2815. &lt;p id=&quot;block-1bd358e6-4a09-4d8b-a34d-90a1eaa241b4&quot;&gt;Please review the &lt;a href=&quot;https://community.kde.org/Plasma/Plasma_6#Plasma_6.4&quot;&gt;planned feature list&lt;/a&gt;,  &lt;a href=&quot;https://kde.org/announcements/plasma/5/5.24.90/&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://kde.org/announcements/plasma/6/6.3.90/&quot;&gt;release announcement&lt;/a&gt; and &lt;a href=&quot;https://kde.org/announcements/changelogs/plasma/6/6.3.5-6.3.90/&quot;&gt;changelog&lt;/a&gt;.&lt;/p&gt;
  2816.  
  2817.  
  2818.  
  2819. &lt;p id=&quot;block-15544460-9659-44c0-9c72-d8b6198392bf&quot;&gt;[Test Case]&lt;br /&gt;* General tests:&lt;br /&gt;– Does plasma desktop start as normal with no apparent regressions over 6.3?&lt;br /&gt;– General workflow – testers should carry out their normal tasks, using the plasma features they normally do, and test common subsystems such as audio, settings changes, compositing, desktop affects, suspend etc.&lt;br /&gt;* Specific tests:&lt;br /&gt;– Identify items with front/user facing changes capable of specific testing.&lt;br /&gt;– Test the ‘fixed’ functionality or ‘new’ feature.&lt;/p&gt;
  2820.  
  2821.  
  2822.  
  2823. &lt;p id=&quot;block-13f71df5-c42e-4782-b7e4-6613e3f0306e&quot;&gt;Testing may involve some technical set up to do, so while you do not need to be a highly advanced K/Ubuntu user, some proficiently in apt-based package management is advisable.&lt;/p&gt;
  2824.  
  2825.  
  2826.  
  2827. &lt;p id=&quot;block-8200b920-6a21-490c-8562-64576f2386c5&quot;&gt;Testing is very important to the quality of the software Ubuntu and Kubuntu developers package and release.&lt;/p&gt;
  2828.  
  2829.  
  2830.  
  2831. &lt;p id=&quot;block-cdc80c41-5654-4736-a57f-9738b9465e02&quot;&gt;We need your help to get this important beta release in shape for Kubuntu and the KDE community as a whole.&lt;/p&gt;
  2832.  
  2833.  
  2834.  
  2835. &lt;p id=&quot;block-cefe282e-0ef3-4aa1-a996-278b35dc0587&quot;&gt;Thanks!&lt;/p&gt;
  2836.  
  2837.  
  2838.  
  2839. &lt;p id=&quot;block-98c05cf6-5993-413e-b021-8c0bdbaffa4d&quot;&gt;Please stop by the Kubuntu-devel Matrix channel on if you need clarification of any of the steps to follow.&lt;/p&gt;
  2840.  
  2841.  
  2842.  
  2843. &lt;p id=&quot;block-e997dfca-5ffb-4535-b33b-1842bcbcfcdc&quot;&gt;[1] – &lt;a href=&quot;https://matrix.to/#/#kubuntu-devel:ubuntu.com&quot;&gt;https://matrix.to/#/#kubuntu-devel:ubuntu.com&lt;/a&gt;&lt;br /&gt;[2] –&lt;a href=&quot;https://lists.ubuntu.com/mailman/listinfo/kubuntu-devel&quot;&gt; https://lists.ubuntu.com/mailman/listinfo/kubuntu-devel&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;</description>
  2844. <pubDate>Sun, 18 May 2025 09:26:10 +0000</pubDate>
  2845. </item>
  2846. <item>
  2847. <title>Oliver Grawert: Rooming with Mark</title>
  2848. <guid isPermaLink="false">http://ograblog.wordpress.com/?p=389</guid>
  2849. <link>https://ograblog.wordpress.com/2025/05/16/rooming-with-mark/</link>
  2850. <description>&lt;p class=&quot;has-black-color has-text-color has-link-color wp-elements-6d4834a493ab5517648658b889ae02a2&quot;&gt;Yesterday, exactly twenty years ago my mobile rang while I was walking the dog. &lt;br /&gt;&lt;br /&gt;I had just returned from Sydney about a week ago (still battling with the last remains of my Jet-lag (I had never left Europe before!)) where I had attended the UbuntuDownUnder summit and had a 30min interview on the last day (that was literally rather like having a coffee with friends after lunch) with Mark Shuttleworth and Matt Zimmerman (back then Canonicals CTO) on a nice hotel terrace directly under a tree with a colony of flying foxes sleeping above our heads.&lt;br /&gt;&lt;br /&gt;There was Jane Silber (CEO) on the phone, telling me: “I’m so happy to tell you you are hired! In your new role we want you to create an educational flavor of Ubuntu, there will be a debian-edu/skolelinux gathering in Bergen in Norway from the 10th to 12th of June, are you okay flying there with Mark?”&lt;br /&gt;&lt;br /&gt;I rushed back home and told my girlfriend: “I’m hired, and I’ll fly Canonical One on my first business trip next month!” (Canonical One was the name of Marks plane). I learned the next weeks that Canonical had indeed booked a generic scheduled flight for me and we’d only meet at the venue &lt;img alt=&quot;🙂&quot; class=&quot;wp-smiley&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f642.png&quot; style=&quot;height: 1em;&quot; /&gt;&lt;br /&gt;&lt;br /&gt;The flight was a disaster, after we were boarding that small 20-seater 2 prop plane that was supposed to get us from Cologne to Amsterdam and the pilot started the engine my window all of a sudden was soaked in oil. We had to stay in the plane out on the filed while the mechanics were fixing the engine for like 2-3h so indeed I missed the connection in Amsterdam and had to stay for the night instead of arriving in Bergen the evening before the event started.&lt;br /&gt;&lt;br /&gt;When I arrived at the venue everyone was already busy hacking on stuff and I jumped right in alongside, finally meeting some users of LTSP (Linux Terminal Server Project) which I was upstream for at that time and working with them on the problems they faced in debian with it, tinkering with moodle as a teaching support system and looking at other edu software, meanwhile Mark was sitting on a bar-stool in a corner with his laptop hacking on launchpad code.&lt;br /&gt;&lt;br /&gt;When we went to our hotel in the evening it turned out they did not have our booking at all and were completely overbooked due to a jewelry exhibition they had in the house for that week. I talked like 15min to the lady behind the counter, showed her my booking confirmation PDF on the laptop, begged and flirted a lot and eventually she told us “We do have an exhibition room that we keep as spare, it only has one bed but you can have it and we will add a folding bed”. The room was actually a normal hotel room but completely set up with wallpaper tables all around the walls. &lt;br /&gt;&lt;br /&gt;Mark insisted to take the folding bed and I can tell you, he does not snore … (well, he didn’t back then)&lt;br /&gt;&lt;br /&gt;This was only the first of a plethora of adventures that followed in the upcoming 20 years, that phone call clearly changed my life and the company gave me the opportunity to work with the brightest, sharpest and most intelligent people on the planet in and outside of Canonical.&lt;br /&gt;&lt;br /&gt;It surely changed a lot over these years (when I started we were building the distro with 18 people in the distro team and did that for quite a few years before it actually got split into server, foundations, kernel and desktop teams) but it never lost its special spirit of having these exceptional people with such a high focus on bringing opensource to everyone and making it accessible to everyone. &lt;br /&gt;Indeed, with growth comes the requirement to make more money to pay the people, the responsibility to give your employees a certain amount of security and persistence grows, but Canonical and especially Mark have always managed to keep the balance to not lose that focus and do the right thing in the end.&lt;br /&gt;&lt;br /&gt;Ten years ago I said “onward to the next ten!!”, I won’t really say “onward to the nest 20!” today, not because I ever plan to resign but simply because I doubt I still want to work full time when I’m 75 &lt;img alt=&quot;😉&quot; class=&quot;wp-smiley&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f609.png&quot; style=&quot;height: 1em;&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Thank you Mark for dragging me into this adventure and thank you for still having me! I still love the ride!!&lt;/p&gt;
  2851.  
  2852.  
  2853.  
  2854. &lt;p&gt;&lt;/p&gt;
  2855.  
  2856.  
  2857.  
  2858. &lt;p&gt;&lt;/p&gt;
  2859.  
  2860.  
  2861.  
  2862. &lt;p&gt;&lt;/p&gt;</description>
  2863. <pubDate>Fri, 16 May 2025 14:34:17 +0000</pubDate>
  2864. </item>
  2865. <item>
  2866. <title>Kubuntu General News: Plasma 6.3.5 update for Kubuntu 25.04 available via PPA</title>
  2867. <guid isPermaLink="false">https://kubuntu.org/?p=5326</guid>
  2868. <link>https://kubuntu.org/news/plasma-6-3-5-update-for-kubuntu-25-04-available-via-ppa/</link>
  2869. <description>&lt;p&gt;We are pleased to announce that the &lt;a href=&quot;https://kde.org/announcements/changelogs/plasma/6/6.3.4-6.3.5/&quot;&gt;Plasma 6.3.5 bugfix update&lt;/a&gt; is now available for Kubuntu 25.04 Plucky Puffin in our backports PPA.&lt;/p&gt;
  2870.  
  2871.  
  2872.  
  2873. &lt;p&gt;As usual with our PPAs, there is the caveat that the PPA may receive additional updates and new releases of KDE Plasma, Gear (Apps), and Frameworks, plus other apps and required libraries. Users should always review proposed updates to decide whether they wish to receive them.&lt;/p&gt;
  2874.  
  2875.  
  2876.  
  2877. &lt;p id=&quot;block-41439926-19ff-4ba1-b2d8-e1510a46c91c&quot;&gt;&lt;strong&gt;To upgrade:&lt;/strong&gt;&lt;/p&gt;
  2878.  
  2879.  
  2880.  
  2881. &lt;p id=&quot;block-064bf9c0-d3e6-4ba1-b03c-8e521932d684&quot;&gt;Add the following repository to your software sources list:&lt;/p&gt;
  2882.  
  2883.  
  2884.  
  2885. &lt;p id=&quot;block-a7e92586-3a90-42d3-9399-13a4a1b851b3&quot;&gt;&lt;strong&gt;&lt;em&gt;ppa:kubuntu-ppa/backports&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
  2886.  
  2887.  
  2888.  
  2889. &lt;p id=&quot;block-6c6e34fc-0229-434c-895b-f9d88c130046&quot;&gt;or if it is already added, the updates should become available via your preferred update method.&lt;/p&gt;
  2890.  
  2891.  
  2892.  
  2893. &lt;p id=&quot;block-b4604309-93d2-417e-80a1-8cc452715567&quot;&gt;The PPA can be added manually in the Konsole terminal with the command:&lt;/p&gt;
  2894.  
  2895.  
  2896.  
  2897. &lt;p id=&quot;block-d080f84a-57e9-4b78-8d77-d9a43b4d4431&quot;&gt;&lt;em&gt;&lt;code&gt;sudo add-apt-repository ppa:kubuntu-ppa/backports&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;
  2898.  
  2899.  
  2900.  
  2901. &lt;p id=&quot;block-719edd42-50bc-4443-93e2-96b65761e8f8&quot;&gt;and packages then updated with&lt;/p&gt;
  2902.  
  2903.  
  2904.  
  2905. &lt;p id=&quot;block-30a646d4-b528-46f4-8cd0-149b056c5689&quot;&gt;&lt;em&gt;sudo apt full-upgrade&lt;/em&gt;&lt;/p&gt;
  2906.  
  2907.  
  2908.  
  2909. &lt;p&gt;We hope you enjoy using Plasma 6.3.5!&lt;/p&gt;
  2910.  
  2911.  
  2912.  
  2913. &lt;p&gt;Issues with Plasma itself can be reported on the KDE bugtracker [1]. In the case of packaging or other issues, please provide feedback on our mailing list [2], and/or file a bug against our PPA packages [3].&lt;/p&gt;
  2914.  
  2915.  
  2916.  
  2917. &lt;p&gt;&lt;em&gt;&lt;em&gt;1. KDE bugtracker:&lt;/em&gt;:https://bugs.kde.org&lt;/em&gt;&lt;br /&gt;&lt;em&gt;2. Kubuntu-devel mailing list: https://lists.u&lt;br /&gt;3. Kubuntu ppa bugs: https://bugs.launchpad.net/kubuntu-ppa&lt;/em&gt;&lt;/p&gt;</description>
  2918. <pubDate>Thu, 08 May 2025 18:28:15 +0000</pubDate>
  2919. </item>
  2920. <item>
  2921. <title>Simos Xenitellis: How to run a Linux Desktop virtual machine on Incus</title>
  2922. <guid isPermaLink="false">https://blog.simos.info/?p=51377</guid>
  2923. <link>https://blog.simos.info/how-to-run-a-linux-desktop-virtual-machine-on-incus/</link>
  2924. <description>&lt;p&gt;&lt;a href=&quot;https://linuxcontainers.org/incus/&quot;&gt;Incus&lt;/a&gt; is a manager for virtual machines and system containers.&lt;/p&gt;
  2925.  
  2926.  
  2927.  
  2928. &lt;p&gt;A &lt;strong&gt;virtual machine&lt;/strong&gt; (VM) is an instance of an operating system that runs on a computer, along with the main operating system. A virtual machine uses hardware virtualization features for the separation from the main operating system. With virtual machines, the full operating system boots up in them. While in most cases you would run Linux on a VM without a desktop environment, you can also run Linux with a desktop environment (like in VirtualBox and VMWare).&lt;/p&gt;
  2929.  
  2930.  
  2931.  
  2932. &lt;p&gt;In &lt;a href=&quot;https://blog.simos.info/how-to-run-a-windows-virtual-machine-on-incus-on-linux/&quot;&gt;How to run a Windows virtual machine on Incus on Linux&lt;/a&gt; we saw how to run a run a Windows VM on Incus. In this post we see how to run a Linux Desktop virtual machine on Incus. &lt;/p&gt;
  2933.  
  2934.  
  2935. &lt;h2 class=&quot;simpletoc-title&quot;&gt;Table of Contents&lt;/h2&gt;
  2936. &lt;ul class=&quot;simpletoc-list&quot;&gt;
  2937. &lt;li&gt;&lt;a href=&quot;https://blog.simos.info/category/planet-ubuntu/feed/?mrss=off#updates&quot;&gt;Updates&lt;/a&gt;
  2938.  
  2939. &lt;/li&gt;
  2940. &lt;li&gt;&lt;a href=&quot;https://blog.simos.info/category/planet-ubuntu/feed/?mrss=off#prerequisites&quot;&gt;Prerequisites&lt;/a&gt;
  2941.  
  2942. &lt;/li&gt;
  2943. &lt;li&gt;&lt;a href=&quot;https://blog.simos.info/category/planet-ubuntu/feed/?mrss=off#cheat-sheet&quot;&gt;Cheat sheet&lt;/a&gt;
  2944.  
  2945. &lt;/li&gt;
  2946. &lt;li&gt;&lt;a href=&quot;https://blog.simos.info/category/planet-ubuntu/feed/?mrss=off#availability-of-images&quot;&gt;Availability of images&lt;/a&gt;
  2947.  
  2948. &lt;/li&gt;
  2949. &lt;li&gt;&lt;a href=&quot;https://blog.simos.info/category/planet-ubuntu/feed/?mrss=off#booting-a-desktop-linux-vm-on-incus&quot;&gt;Booting a desktop Linux VM on Incus&lt;/a&gt;
  2950.  
  2951.  
  2952. &lt;ul&gt;&lt;li&gt;
  2953. &lt;a href=&quot;https://blog.simos.info/category/planet-ubuntu/feed/?mrss=off#booting-the-ubuntu-desktop-image-on-incus&quot;&gt;Booting the Ubuntu desktop image on Incus&lt;/a&gt;
  2954.  
  2955. &lt;/li&gt;
  2956. &lt;li&gt;&lt;a href=&quot;https://blog.simos.info/category/planet-ubuntu/feed/?mrss=off#booting-the-archlinux-desktop-image-on-incus&quot;&gt;Booting the ArchLinux desktop image on Incus&lt;/a&gt;
  2957.  
  2958. &lt;/li&gt;
  2959. &lt;li&gt;&lt;a href=&quot;https://blog.simos.info/category/planet-ubuntu/feed/?mrss=off#booting-the-opensuse-desktop-image-on-incus&quot;&gt;Booting the OpenSUSE desktop image on Incus&lt;/a&gt;
  2960.  
  2961. &lt;/li&gt;
  2962. &lt;/ul&gt;
  2963. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://blog.simos.info/category/planet-ubuntu/feed/?mrss=off#troubleshooting&quot;&gt;Troubleshooting&lt;/a&gt;
  2964.  
  2965.  
  2966. &lt;ul&gt;&lt;li&gt;
  2967.  
  2968. &lt;ul&gt;&lt;li&gt;
  2969. &lt;a href=&quot;https://blog.simos.info/category/planet-ubuntu/feed/?mrss=off#i-closed-the-desktop-window-but-the-vm-is-running-how-do-i-get-it-back-up&quot;&gt;I closed the desktop window but the VM is running. How do I get it back up?&lt;/a&gt;
  2970.  
  2971. &lt;/li&gt;
  2972. &lt;li&gt;&lt;a href=&quot;https://blog.simos.info/category/planet-ubuntu/feed/?mrss=off#error-this-console-is-already-connected-force-is-required-to-take-it-over&quot;&gt;Error: This console is already connected. Force is required to take it over.&lt;/a&gt;
  2973.  
  2974. &lt;/li&gt;
  2975. &lt;li&gt;&lt;a href=&quot;https://blog.simos.info/category/planet-ubuntu/feed/?mrss=off#error-instance-is-not-running&quot;&gt;Error: Instance is not running&lt;/a&gt;
  2976.  
  2977. &lt;/li&gt;
  2978. &lt;li&gt;&lt;a href=&quot;https://blog.simos.info/category/planet-ubuntu/feed/?mrss=off#i-get-no-audio-from-the-desktop-vm-how-do-i-get-sound-in-the-desktop-vm&quot;&gt;I get no audio from the desktop VM! How do I get sound in the desktop VM?&lt;/a&gt;
  2979.  
  2980. &lt;/li&gt;
  2981. &lt;li&gt;&lt;a href=&quot;https://blog.simos.info/category/planet-ubuntu/feed/?mrss=off#how-do-i-shutdown-the-desktop-vm&quot;&gt;How do I shutdown the desktop VM?&lt;/a&gt;
  2982.  
  2983. &lt;/li&gt;
  2984. &lt;li&gt;&lt;a href=&quot;https://blog.simos.info/category/planet-ubuntu/feed/?mrss=off#error-failed-instance-creation-the-image-used-by-this-instance-is-incompatible-with-secureboot-please-set-securitysecurebootfalse-on-the-instance&quot;&gt;Error: Failed instance creation: The image used by this instance is incompatible with secureboot. Please set security.secureboot=false on the instance&lt;/a&gt;
  2985.  
  2986. &lt;/li&gt;
  2987. &lt;li&gt;&lt;a href=&quot;https://blog.simos.info/category/planet-ubuntu/feed/?mrss=off#error-failed-instance-creation-failed-creating-instance-record-add-instance-info-to-the-database-failed-to-create-instances-entry-unique-constraint-failed-instancesprojectid-instancesname&quot;&gt;Error: Failed instance creation: Failed creating instance record: Add instance info to the database: Failed to create “instances” entry: UNIQUE constraint failed: instances.project_id, instances.name&lt;/a&gt;
  2988. &lt;/li&gt;
  2989. &lt;/ul&gt;
  2990. &lt;/li&gt;
  2991. &lt;/ul&gt;
  2992. &lt;/li&gt;&lt;/ul&gt;
  2993.  
  2994. &lt;h2 class=&quot;wp-block-heading&quot; id=&quot;updates&quot;&gt;Updates&lt;/h2&gt;
  2995.  
  2996.  
  2997. &lt;p&gt;No updates yet.&lt;/p&gt;
  2998.  
  2999.  
  3000. &lt;h2 class=&quot;wp-block-heading&quot; id=&quot;prerequisites&quot;&gt;Prerequisites&lt;/h2&gt;
  3001.  
  3002.  
  3003. &lt;ol class=&quot;wp-block-list&quot;&gt;
  3004. &lt;li&gt;You should have &lt;a href=&quot;https://linuxcontainers.org/incus/docs/main/tutorial/first_steps/&quot;&gt;a system that runs Incus&lt;/a&gt;. &lt;/li&gt;
  3005.  
  3006.  
  3007.  
  3008. &lt;li&gt;A system with support for hardware virtualization so that it can run virtual machines.&lt;/li&gt;
  3009.  
  3010.  
  3011.  
  3012. &lt;li&gt;A virtual machine image of your preferred Linux desktop distribution.&lt;/li&gt;
  3013. &lt;/ol&gt;
  3014.  
  3015.  
  3016. &lt;h2 class=&quot;wp-block-heading&quot; id=&quot;cheat-sheet&quot;&gt;Cheat sheet&lt;/h2&gt;
  3017.  
  3018.  
  3019. &lt;p&gt;You should specify how much RAM memory you are giving to the VM. The default is only 1GiB of RAM, which is not enough for desktop VMs. The &lt;code&gt;--console=vga&lt;/code&gt; launches for you the Remote Viewer GUI application to allow you to use the desktop in a window.&lt;/p&gt;
  3020.  
  3021.  
  3022.  
  3023. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;$ incus image list images:desktop       # List all available desktop images
  3024. $ incus launch --vm images:ubuntu/jammy/desktop mydesktop -c limits.memory=3GiB --console=vga
  3025. $ incus console mydesktop --type=vga    # Reconnect to already running instance
  3026. $ incus start mydesktop --console=vga   # Start an existing desktop VM&lt;/code&gt;&lt;/pre&gt;
  3027.  
  3028.  
  3029. &lt;h2 class=&quot;wp-block-heading&quot; id=&quot;availability-of-images&quot;&gt;Availability of images&lt;/h2&gt;
  3030.  
  3031.  
  3032. &lt;p&gt;Currently, Incus provides you with the following VM images of Linux desktop distributions. The architecture is &lt;code&gt;x86_64&lt;/code&gt;.&lt;/p&gt;
  3033.  
  3034.  
  3035.  
  3036. &lt;p&gt;Run the following command to list all available Linux desktop images. &lt;code&gt;incus image&lt;/code&gt; is the section of Incus that deals with the management of images. The &lt;code&gt;list&lt;/code&gt; command lists the available images of a &lt;em&gt;remote&lt;/em&gt;/repository, the default being &lt;code&gt;images:&lt;/code&gt; (run &lt;code&gt;incus remote list&lt;/code&gt; for the full list of &lt;em&gt;remotes&lt;/em&gt;). After the colon (&lt;code&gt;:&lt;/code&gt;), you type &lt;em&gt;filter&lt;/em&gt; keywords, and in this case we typed &lt;code&gt;desktop&lt;/code&gt; to show images that have the word &lt;code&gt;desktop&lt;/code&gt; in them (to show only Desktop images). We are interested in a few columns only, therefore &lt;code&gt;-c ldt&lt;/code&gt; only shows the columns for the &lt;em&gt;Alias&lt;/em&gt;, the &lt;em&gt;Description&lt;/em&gt; and the &lt;em&gt;Type&lt;/em&gt;.&lt;/p&gt;
  3037.  
  3038.  
  3039.  
  3040. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;$ incus image list images:desktop -c ldt
  3041. +------------------------------------------+---------------------------+-----------------+
  3042. |                  ALIAS                   |      DESCRIPTION          |      TYPE       |
  3043. +------------------------------------------+---------------------------+-----------------+
  3044. | archlinux/desktop-gnome (3 more)         | Archlinux current amd64   | VIRTUAL-MACHINE |
  3045. +------------------------------------------+---------------------------+-----------------+
  3046. | opensuse/15.5/desktop-kde (1 more)       | Opensuse 15.5 amd64       | VIRTUAL-MACHINE |
  3047. +------------------------------------------+---------------------------+-----------------+
  3048. | opensuse/15.6/desktop-kde (1 more)       | Opensuse 15.6 amd64       | VIRTUAL-MACHINE |
  3049. +------------------------------------------+---------------------------+-----------------+
  3050. | opensuse/tumbleweed/desktop-kde (1 more) | Opensuse tumbleweed amd64 | VIRTUAL-MACHINE |
  3051. +------------------------------------------+---------------------------+-----------------+
  3052. | ubuntu/24.10/desktop (3 more)            | Ubuntu oracular amd64     | VIRTUAL-MACHINE |
  3053. +------------------------------------------+---------------------------+-----------------+
  3054. | ubuntu/focal/desktop (3 more)            | Ubuntu focal amd64        | VIRTUAL-MACHINE |
  3055. +------------------------------------------+---------------------------+-----------------+
  3056. | ubuntu/jammy/desktop (3 more)            | Ubuntu jammy amd64        | VIRTUAL-MACHINE |
  3057. +------------------------------------------+---------------------------+-----------------+
  3058. | ubuntu/noble/desktop (3 more)            | Ubuntu noble amd64        | VIRTUAL-MACHINE |
  3059. +------------------------------------------+---------------------------+-----------------+
  3060. | ubuntu/plucky/desktop (1 more)           | Ubuntu plucky amd64       | VIRTUAL-MACHINE |
  3061. +------------------------------------------+---------------------------+-----------------+
  3062. $ &lt;/code&gt;&lt;/pre&gt;
  3063.  
  3064.  
  3065.  
  3066. &lt;p&gt;These images have been generated with the utility &lt;code&gt;distrobuilder&lt;/code&gt;, &lt;a href=&quot;https://github.com/lxc/distrobuilder&quot;&gt;https://github.com/lxc/distrobuilder&lt;/a&gt; The purpose of the utility is to prepare the images so that when we launch them, we get immediately the desktop environment and do not perform any manual configuration. The configuration files for distrobuilder to create these images can be found at &lt;a href=&quot;https://github.com/lxc/lxc-ci/tree/main/images&quot;&gt;https://github.com/lxc/lxc-ci/tree/main/images&lt;/a&gt; For example, the &lt;code&gt;archlinux.yaml&lt;/code&gt; configuration file has a section to create the desktop image, along with the container and other virtual machine images. &lt;/p&gt;
  3067.  
  3068.  
  3069.  
  3070. &lt;p&gt;The full list of Incus images are also available on the Web, through the website &lt;a href=&quot;https://images.linuxcontainers.org/&quot;&gt;https://images.linuxcontainers.org/&lt;/a&gt; It is possible to generate more such desktop images by following the steps of the existing configuration files. Perhaps a Kali Linux desktop image would be very useful. In the &lt;a href=&quot;https://images.linuxcontainers.org/&quot;&gt;https://images.linuxcontainers.org/&lt;/a&gt; website you can also view the build logs that were generated while building the images, and figure out what parameters are needed for &lt;code&gt;distrobuilder&lt;/code&gt; to build them (along with the actual configuration file). For example, here are the logs for the ArchLinux desktop image, &lt;a href=&quot;https://images.linuxcontainers.org/images/archlinux/current/amd64/desktop-gnome/&quot;&gt;https://images.linuxcontainers.org/images/archlinux/current/amd64/desktop-gnome/&lt;/a&gt;&lt;/p&gt;
  3071.  
  3072.  
  3073.  
  3074. &lt;p&gt;Up to this point we got a list of the available virtual machine images that are provided by Incus. We are ready to boot them.&lt;/p&gt;
  3075.  
  3076.  
  3077. &lt;h2 class=&quot;wp-block-heading&quot; id=&quot;booting-a-desktop-linux-vm-on-incus&quot;&gt;Booting a desktop Linux VM on Incus&lt;/h2&gt;
  3078.  
  3079.  
  3080. &lt;p&gt;When launching a VM, Incus provides by default 1GiB RAM and 10GiB of disk space. The disk space is generally OK, but the RAM is too little for a desktop image (it’s OK for non-desktop images). For example, for an Ubuntu desktop image, the instance requires about 1.2GB of memory to start up and obviously more to run other programs. Therefore, if we do not specify more RAM, then the VM would struggle to make do of the mere 1GiB of RAM.&lt;/p&gt;
  3081.  
  3082.  
  3083. &lt;h3 class=&quot;wp-block-heading&quot; id=&quot;booting-the-ubuntu-desktop-image-on-incus&quot;&gt;Booting the Ubuntu desktop image on Incus&lt;/h3&gt;
  3084.  
  3085.  
  3086. &lt;p&gt;Here is the command to launch a desktop image. We use &lt;code&gt;incus launch&lt;/code&gt; to launch the image. It’s a VM, hence &lt;code&gt;--vm&lt;/code&gt;. We are using the image from the &lt;code&gt;images:&lt;/code&gt; remote, the one called &lt;code&gt;ubuntu/plucky/desktop&lt;/code&gt; (it’s the last from the list of the previous section). We configure a new limit for the memory usage, &lt;code&gt;-c limits.memory=3GiB&lt;/code&gt;, so that the instance will be able to run successfully. Finally, the console is not textual but graphical. We specify that with &lt;code&gt;--console=vga&lt;/code&gt; which means that Incus will launch the remote desktop utility for us. &lt;/p&gt;
  3087.  
  3088.  
  3089.  
  3090. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;$ incus launch --vm images:ubuntu/plucky/desktop mydesktop -c limits.memory=3GiB --console=vga
  3091. Launching mydesktop
  3092. &lt;/code&gt;&lt;/pre&gt;
  3093.  
  3094.  
  3095.  
  3096. &lt;p&gt;Here is a screenshot of the new window with the running desktop virtual machine. &lt;/p&gt;
  3097.  
  3098.  
  3099.  
  3100. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://i0.wp.com/blog.simos.info/wp-content/uploads/2025/05/Screenshot-from-2025-05-01-23-03-37.png?ssl=1&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-51379&quot; data-attachment-id=&quot;51379&quot; data-comments-opened=&quot;1&quot; data-image-caption=&quot;&quot; data-image-description=&quot;&quot; data-image-meta=&quot;{&amp;quot;aperture&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;credit&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;camera&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;created_timestamp&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;copyright&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;focal_length&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;iso&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;shutter_speed&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;orientation&amp;quot;:&amp;quot;0&amp;quot;}&quot; data-image-title=&quot;Screenshot from 2025-05-01 23-03-37&quot; data-large-file=&quot;https://i0.wp.com/blog.simos.info/wp-content/uploads/2025/05/Screenshot-from-2025-05-01-23-03-37.png?fit=750%2C508&amp;amp;ssl=1&quot; data-medium-file=&quot;https://i0.wp.com/blog.simos.info/wp-content/uploads/2025/05/Screenshot-from-2025-05-01-23-03-37.png?fit=300%2C203&amp;amp;ssl=1&quot; data-orig-file=&quot;https://i0.wp.com/blog.simos.info/wp-content/uploads/2025/05/Screenshot-from-2025-05-01-23-03-37.png?fit=1300%2C880&amp;amp;ssl=1&quot; data-orig-size=&quot;1300,880&quot; data-permalink=&quot;https://blog.simos.info/how-to-run-a-linux-desktop-virtual-machine-on-incus/screenshot-from-2025-05-01-23-03-37/&quot; data-recalc-dims=&quot;1&quot; height=&quot;508&quot; src=&quot;https://i0.wp.com/blog.simos.info/wp-content/uploads/2025/05/Screenshot-from-2025-05-01-23-03-37.png?resize=750%2C508&amp;amp;ssl=1&quot; width=&quot;750&quot; /&gt;&lt;/a&gt;Screenshot of images:ubuntu/plucky/desktop&lt;/figure&gt;
  3101.  
  3102.  
  3103.  
  3104. &lt;p&gt;Now we closed the wizard.&lt;/p&gt;
  3105.  
  3106.  
  3107.  
  3108. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://i0.wp.com/blog.simos.info/wp-content/uploads/2025/05/image.png?ssl=1&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-51380&quot; data-attachment-id=&quot;51380&quot; data-comments-opened=&quot;1&quot; data-image-caption=&quot;&quot; data-image-description=&quot;&quot; data-image-meta=&quot;{&amp;quot;aperture&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;credit&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;camera&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;created_timestamp&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;copyright&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;focal_length&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;iso&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;shutter_speed&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;orientation&amp;quot;:&amp;quot;0&amp;quot;}&quot; data-image-title=&quot;image&quot; data-large-file=&quot;https://i0.wp.com/blog.simos.info/wp-content/uploads/2025/05/image.png?fit=750%2C508&amp;amp;ssl=1&quot; data-medium-file=&quot;https://i0.wp.com/blog.simos.info/wp-content/uploads/2025/05/image.png?fit=300%2C203&amp;amp;ssl=1&quot; data-orig-file=&quot;https://i0.wp.com/blog.simos.info/wp-content/uploads/2025/05/image.png?fit=1300%2C880&amp;amp;ssl=1&quot; data-orig-size=&quot;1300,880&quot; data-permalink=&quot;https://blog.simos.info/how-to-run-a-linux-desktop-virtual-machine-on-incus/image-13/&quot; data-recalc-dims=&quot;1&quot; height=&quot;508&quot; src=&quot;https://i0.wp.com/blog.simos.info/wp-content/uploads/2025/05/image.png?resize=750%2C508&amp;amp;ssl=1&quot; width=&quot;750&quot; /&gt;&lt;/a&gt;Screenshot of images:ubuntu/plucky/desktop after we close the wizard.&lt;/figure&gt;
  3109.  
  3110.  
  3111. &lt;h3 class=&quot;wp-block-heading&quot; id=&quot;booting-the-archlinux-desktop-image-on-incus&quot;&gt;Booting the ArchLinux desktop image on Incus&lt;/h3&gt;
  3112.  
  3113.  
  3114. &lt;p&gt;I cannot get this image to show the desktop. If someone can make this work, please post in a comment.&lt;/p&gt;
  3115.  
  3116.  
  3117.  
  3118. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;$ incus launch --vm images:archlinux/desktop-gnome mydesktop -c limits.memory=3GiB --console=vga -c security.secureboot=false
  3119. Launching mydesktop
  3120. &lt;/code&gt;&lt;/pre&gt;
  3121.  
  3122.  
  3123. &lt;h3 class=&quot;wp-block-heading&quot; id=&quot;booting-the-opensuse-desktop-image-on-incus&quot;&gt;Booting the OpenSUSE desktop image on Incus&lt;/h3&gt;
  3124.  
  3125.  
  3126. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;$ incus launch --vm images:opensuse/15.5/desktop-kde mydesktop -c limits.memory=3GiB --console=vga
  3127. Launching mydesktop
  3128. &lt;/code&gt;&lt;/pre&gt;
  3129.  
  3130.  
  3131.  
  3132. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://i0.wp.com/blog.simos.info/wp-content/uploads/2025/05/Screenshot-from-2025-05-02-01-41-39.png?ssl=1&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-51382&quot; data-attachment-id=&quot;51382&quot; data-comments-opened=&quot;1&quot; data-image-caption=&quot;&quot; data-image-description=&quot;&quot; data-image-meta=&quot;{&amp;quot;aperture&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;credit&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;camera&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;created_timestamp&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;copyright&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;focal_length&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;iso&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;shutter_speed&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;orientation&amp;quot;:&amp;quot;0&amp;quot;}&quot; data-image-title=&quot;Screenshot from 2025-05-02 01-41-39&quot; data-large-file=&quot;https://i0.wp.com/blog.simos.info/wp-content/uploads/2025/05/Screenshot-from-2025-05-02-01-41-39.png?fit=750%2C508&amp;amp;ssl=1&quot; data-medium-file=&quot;https://i0.wp.com/blog.simos.info/wp-content/uploads/2025/05/Screenshot-from-2025-05-02-01-41-39.png?fit=300%2C203&amp;amp;ssl=1&quot; data-orig-file=&quot;https://i0.wp.com/blog.simos.info/wp-content/uploads/2025/05/Screenshot-from-2025-05-02-01-41-39.png?fit=1300%2C880&amp;amp;ssl=1&quot; data-orig-size=&quot;1300,880&quot; data-permalink=&quot;https://blog.simos.info/how-to-run-a-linux-desktop-virtual-machine-on-incus/screenshot-from-2025-05-02-01-41-39/&quot; data-recalc-dims=&quot;1&quot; height=&quot;508&quot; src=&quot;https://i0.wp.com/blog.simos.info/wp-content/uploads/2025/05/Screenshot-from-2025-05-02-01-41-39.png?resize=750%2C508&amp;amp;ssl=1&quot; width=&quot;750&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  3133.  
  3134.  
  3135. &lt;h2 class=&quot;wp-block-heading&quot; id=&quot;troubleshooting&quot;&gt;Troubleshooting&lt;/h2&gt;
  3136.  
  3137. &lt;h4 class=&quot;wp-block-heading&quot; id=&quot;i-closed-the-desktop-window-but-the-vm-is-running-how-do-i-get-it-back-up&quot;&gt;I closed the desktop window but the VM is running. How do I get it back up?&lt;/h4&gt;
  3138.  
  3139.  
  3140. &lt;p&gt;If you closed the Remote Viewer window, you can get Incus to start it again with the following command. By doing so, you are actually reconnecting back to the VM and continue working from where you left off.&lt;/p&gt;
  3141.  
  3142.  
  3143.  
  3144. &lt;p&gt;We are using the &lt;code&gt;incus console&lt;/code&gt; action to connect to the running &lt;em&gt;mydesktop&lt;/em&gt; instance and request access through the Remote Viewer (rather than a text console).&lt;/p&gt;
  3145.  
  3146.  
  3147.  
  3148. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;$ incus console mydesktop --type=vga
  3149. &lt;/code&gt;&lt;/pre&gt;
  3150.  
  3151.  
  3152. &lt;h4 class=&quot;wp-block-heading&quot; id=&quot;error-this-console-is-already-connected-force-is-required-to-take-it-over&quot;&gt;Error: This console is already connected. Force is required to take it over.&lt;/h4&gt;
  3153.  
  3154.  
  3155. &lt;p&gt;You are already connected to the desktop VM with the Remote Viewer and you are trying to connect again. Either go to the existing Remote Viewer window, or add the parameter &lt;code&gt;--force&lt;/code&gt; to close the existing Remote Viewer window and open a new one. &lt;/p&gt;
  3156.  
  3157.  
  3158. &lt;h4 class=&quot;wp-block-heading&quot; id=&quot;error-instance-is-not-running&quot;&gt;Error: Instance is not running&lt;/h4&gt;
  3159.  
  3160.  
  3161. &lt;p&gt;You are trying to connect to a desktop VM with the Remote Viewer but the instance (which already exists) is not running. Use the action &lt;code&gt;incus start&lt;/code&gt; to start the virtual machine, along with the &lt;code&gt;--type=vga&lt;/code&gt; parameter to get Incus to launch the Remote Viewer for you.&lt;/p&gt;
  3162.  
  3163.  
  3164.  
  3165. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;$ incus start mydesktop --console=vga&lt;/code&gt;&lt;/pre&gt;
  3166.  
  3167.  
  3168. &lt;h4 class=&quot;wp-block-heading&quot; id=&quot;i-get-no-audio-from-the-desktop-vm-how-do-i-get-sound-in-the-desktop-vm&quot;&gt;I get no audio from the desktop VM! How do I get sound in the desktop VM?&lt;/h4&gt;
  3169.  
  3170.  
  3171. &lt;p&gt;This requires extra steps which I do not show yet. There are three options. The first is to use the QEMU device emulation to emulate a sound device in the VM. The second is to somehow push an audio device into the VM so that this audio device is used exclusively in the VM (have not tried this but I think it’s possible). The third and perhaps best option is to use network audio with PulseAudio/Pipewire. You enable network audio on your desktop and then configure the VM instance to connect to that network audio server. I have tried that and it worked well for me. The downside is that the Firefox snap package in the VM could not figure out that there is network audio there and I could not get audio in that application. &lt;/p&gt;
  3172.  
  3173.  
  3174. &lt;h4 class=&quot;wp-block-heading&quot; id=&quot;how-do-i-shutdown-the-desktop-vm&quot;&gt;How do I shutdown the desktop VM?&lt;/h4&gt;
  3175.  
  3176.  
  3177. &lt;p&gt;Use the desktop UI to perform the shutdown. The VM will shut down cleanly.&lt;/p&gt;
  3178.  
  3179.  
  3180. &lt;h4 class=&quot;wp-block-heading&quot; id=&quot;error-failed-instance-creation-the-image-used-by-this-instance-is-incompatible-with-secureboot-please-set-securitysecurebootfalse-on-the-instance&quot;&gt;Error: Failed instance creation: The image used by this instance is incompatible with secureboot. Please set security.secureboot=false on the instance&lt;/h4&gt;
  3181.  
  3182.  
  3183. &lt;p&gt;You tried to launch a virtual machine with SecureBoot enabled but the image does not support SecureBoot. You need to disable SecureBoot when you launch this image. The instance has been created but is unable to run unless you disable SecureBoot. You can either disable SecureBoot through an Incus configuration for this image, or just delete the instance, and try again with the parameter &lt;code&gt;-c security.secureboot=false&lt;/code&gt;. &lt;/p&gt;
  3184.  
  3185.  
  3186.  
  3187. &lt;p&gt;Here is how to disable SecureBoot, then try to &lt;code&gt;incus start&lt;/code&gt; that instance. &lt;/p&gt;
  3188.  
  3189.  
  3190.  
  3191. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;$ incus config set mydesktop security.secureboot=true&lt;/code&gt;&lt;/pre&gt;
  3192.  
  3193.  
  3194.  
  3195. &lt;p&gt;Here is how you would enable that flag when you launch such a VM.&lt;/p&gt;
  3196.  
  3197.  
  3198.  
  3199. &lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;incus launch --vm images:archlinux/desktop-gnome mydesktop -c limits.memory=3GiB --console=vga -c security.secureboot=false&lt;/code&gt;&lt;/pre&gt;
  3200.  
  3201.  
  3202.  
  3203. &lt;p&gt;Note that official Ubuntu images can work with SecureBoot enabled, most others don’t. It has to do with the Linux kernel being digitally signed by some certification authority.&lt;/p&gt;
  3204.  
  3205.  
  3206. &lt;h4 class=&quot;wp-block-heading&quot; id=&quot;error-failed-instance-creation-failed-creating-instance-record-add-instance-info-to-the-database-failed-to-create-instances-entry-unique-constraint-failed-instancesprojectid-instancesname&quot;&gt;Error: Failed instance creation: Failed creating instance record: Add instance info to the database: Failed to create “instances” entry: UNIQUE constraint failed: instances.project_id, instances.name&lt;/h4&gt;
  3207.  
  3208.  
  3209. &lt;p&gt;This error message is a bit cryptic. It just means that you are trying to create or launch an instance while the instance already exists. Read as &lt;em&gt;&lt;strong&gt;Error: The instance name already exists&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;
  3210.  
  3211.  
  3212.  
  3213. &lt;p&gt;&lt;/p&gt;
  3214. &lt;div class=&quot;saboxplugin-wrap&quot;&gt;&lt;div class=&quot;saboxplugin-tab&quot;&gt;&lt;div class=&quot;saboxplugin-gravatar&quot;&gt;&lt;img alt=&quot;Simos Xenitellis&quot; class=&quot;avatar avatar-100 photo&quot; height=&quot;100&quot; src=&quot;https://secure.gravatar.com/avatar/fadb0e15964fa5c57144f8b9bccf3985281d04e3817a69d0885c0b911d66c59d?s=100&amp;amp;d=wavatar&amp;amp;r=g&quot; width=&quot;100&quot; /&gt;&lt;/div&gt;&lt;div class=&quot;saboxplugin-authorname&quot;&gt;&lt;a class=&quot;vcard author&quot; href=&quot;https://blog.simos.info/author/simos/&quot; rel=&quot;author&quot;&gt;&lt;span class=&quot;fn&quot;&gt;Simos Xenitellis&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;saboxplugin-desc&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;saboxplugin-web &quot;&gt;&lt;a href=&quot;https://blog.simos.info/&quot; target=&quot;_self&quot;&gt;blog.simos.info/&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
  3215. <pubDate>Thu, 01 May 2025 22:51:53 +0000</pubDate>
  3216. </item>
  3217. <item>
  3218. <title>Ubuntu MATE: Ubuntu MATE 25.04 Release Notes</title>
  3219. <guid isPermaLink="false">https://ubuntu-mate.org/blog/ubuntu-mate-plucky-puffin</guid>
  3220. <link>https://ubuntu-mate.org/blog/ubuntu-mate-plucky-puffin-release-notes/</link>
  3221. <description>&lt;p&gt;Ubuntu MATE 25.04 is ready to soar! 🪽 Celebrating our 10th anniversary as an official Ubuntu flavour with the reliable MATE Desktop experience you love, built on the latest Ubuntu foundations. Read on to learn more 👓️&lt;/p&gt;
  3222.  
  3223. &lt;h2 id=&quot;a-decade-of-mate&quot;&gt;A Decade of MATE&lt;/h2&gt;
  3224.  
  3225. &lt;p&gt;This release marks the 10th anniversary of Ubuntu MATE becoming an official Ubuntu flavour. From our humble beginnings, we’ve developed a loyal following of users who value a traditional desktop experience with modern capabilities. Thanks to our amazing community, contributors, and users who have been with us throughout this journey. Here’s to many more years of Ubuntu MATE! 🥂&lt;/p&gt;
  3226.  
  3227. &lt;h2 id=&quot;what-changed-in-ubuntu-mate-2504&quot;&gt;What changed in Ubuntu MATE 25.04?&lt;/h2&gt;
  3228.  
  3229. &lt;p&gt;Here are the highlights of what’s new in the Plucky Puffin release:&lt;/p&gt;
  3230.  
  3231. &lt;ul&gt;
  3232.  &lt;li&gt;Celebrating 10 years as an official Ubuntu flavour! 🎂&lt;/li&gt;
  3233.  &lt;li&gt;Optional full disk encryption in the installer 🔐
  3234.    &lt;ul&gt;
  3235.      &lt;li&gt;Enhanced advanced partitioning options&lt;/li&gt;
  3236.      &lt;li&gt;Better interaction with existing BitLocker-enabled Windows installations&lt;/li&gt;
  3237.      &lt;li&gt;Improved experience when installing alongside other operating systems&lt;/li&gt;
  3238.    &lt;/ul&gt;
  3239.  &lt;/li&gt;
  3240. &lt;/ul&gt;
  3241.  
  3242. &lt;h2 id=&quot;major-applications&quot;&gt;Major Applications&lt;/h2&gt;
  3243.  
  3244. &lt;p&gt;Accompanying &lt;strong&gt;MATE Desktop&lt;/strong&gt; 🧉 and &lt;strong&gt;Linux 6.14&lt;/strong&gt; 🐧 are &lt;strong&gt;Firefox 137&lt;/strong&gt; 🔥🦊,
  3245. &lt;strong&gt;Evolution 3.56&lt;/strong&gt; 📧, &lt;strong&gt;LibreOffice 25.2.2&lt;/strong&gt; 📚&lt;/p&gt;
  3246.  
  3247. &lt;p&gt;See the &lt;a href=&quot;https://discourse.ubuntu.com/t/plucky-puffin-release-notes/48687&quot;&gt;Ubuntu 25.04 Release Notes&lt;/a&gt;
  3248. for details of all the changes and improvements that Ubuntu MATE benefits from.&lt;/p&gt;
  3249.  
  3250. &lt;div class=&quot;jumbotron&quot;&gt;
  3251.  
  3252.    &lt;h2&gt;Download Ubuntu MATE 25.04&lt;/h2&gt;
  3253.  
  3254.    &lt;p&gt;Available for 64-bit desktop computers!&lt;/p&gt;
  3255.  
  3256.  
  3257.    
  3258.        &lt;a class=&quot;btn&quot; href=&quot;https://ubuntu-mate.org/download/&quot;&gt;Download&lt;/a&gt;
  3259.    
  3260.  
  3261. &lt;/div&gt;
  3262.  
  3263. &lt;h2 id=&quot;upgrading-to-ubuntu-mate-2504&quot;&gt;Upgrading to Ubuntu MATE 25.04&lt;/h2&gt;
  3264.  
  3265. &lt;p&gt;The upgrade process to Ubuntu MATE 25.04 is the same as Ubuntu.&lt;/p&gt;
  3266.  
  3267. &lt;ul&gt;
  3268.  &lt;li&gt;&lt;a href=&quot;https://help.ubuntu.com/community/PluckyUpgrades&quot;&gt;Ubuntu 25.04 Upgrade Process&lt;/a&gt;&lt;/li&gt;
  3269. &lt;/ul&gt;
  3270.  
  3271. &lt;p&gt;There are no offline upgrade options for Ubuntu MATE. Please ensure you have
  3272. network connectivity to one of the official mirrors or to a locally accessible
  3273. mirror and follow the instructions above.&lt;/p&gt;</description>
  3274. <pubDate>Sat, 19 Apr 2025 04:48:24 +0000</pubDate>
  3275. </item>
  3276. <item>
  3277. <title>Xubuntu: Xubuntu 25.04 released!</title>
  3278. <guid isPermaLink="false">https://xubuntu.org/?p=5647</guid>
  3279. <link>https://xubuntu.org/news/xubuntu-25-04-released/</link>
  3280. <description>&lt;p&gt;The Xubuntu team is happy to announce the immediate release of Xubuntu 25.04.&lt;/p&gt;
  3281.  
  3282.  
  3283.  
  3284. &lt;p&gt;Xubuntu 25.04, codenamed &lt;strong&gt;Plucky Puffin&lt;/strong&gt;, is a regular release and will be supported for 9 months, until January 2026.&lt;/p&gt;
  3285.  
  3286.  
  3287.  
  3288. &lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-5648&quot; height=&quot;800&quot; src=&quot;https://xubuntu.org/wp-content/uploads/2025/04/2e04/xubuntu-25.04.png&quot; width=&quot;1280&quot; /&gt;Xubuntu 25.04, featuring the latest updates from Xfce 4.20 and GNOME 48.&lt;/figure&gt;
  3289.  
  3290.  
  3291.  
  3292. &lt;p&gt;Xubuntu 25.04 features the latest Xfce 4.20, GNOME 48, and MATE 1.26 updates. &lt;strong&gt;Xfce 4.20&lt;/strong&gt; features many bug fixes and minor improvements, modernizing the Xubuntu desktop while maintaining a familiar look and feel. &lt;strong&gt;GNOME 48&lt;/strong&gt; apps are tightly integrated and have full support for dark mode. Users of &lt;strong&gt;QEMU and KVM&lt;/strong&gt; will be delighted to find new stability with the desktop session—the long-running &lt;a href=&quot;https://bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/1861609&quot;&gt;X server crash&lt;/a&gt; has been resolved in Xubuntu 25.04 and backported to all supported Xubuntu releases.&lt;/p&gt;
  3293.  
  3294.  
  3295.  
  3296. &lt;p&gt;The &lt;strong&gt;final release images&lt;/strong&gt; for &lt;strong&gt;Xubuntu Desktop&lt;/strong&gt; and &lt;strong&gt;Xubuntu Minimal&lt;/strong&gt; are available as torrents and direct downloads from &lt;a href=&quot;https://xubuntu.org/download/&quot;&gt;xubuntu.org/download/&lt;/a&gt;.&lt;/p&gt;
  3297.  
  3298.  
  3299.  
  3300. &lt;p&gt;As the main server might be busy the first few days after the release, we recommend using the torrents if possible.&lt;/p&gt;
  3301.  
  3302.  
  3303.  
  3304. &lt;p&gt;We want to thank everybody who contributed to this release of Xubuntu!&lt;/p&gt;
  3305.  
  3306.  
  3307.  
  3308. &lt;h2&gt;Highlights and Known Issues&lt;/h2&gt;
  3309.  
  3310.  
  3311.  
  3312. &lt;h3&gt;Highlights&lt;/h3&gt;
  3313.  
  3314.  
  3315.  
  3316. &lt;ul&gt;&lt;li&gt;&lt;strong&gt;Xfce 4.20&lt;/strong&gt;, released in December 2024, is included and contains many new features. Early Wayland support has been added, but is not available in Xubuntu.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;GNOME 48&lt;/strong&gt; apps, including &lt;em&gt;Font Viewer&lt;/em&gt; (gnome-font-viewer) and &lt;em&gt;Mines&lt;/em&gt; (gnome-mines), include a refreshed appearance and usability improvements.&lt;/li&gt;&lt;/ul&gt;
  3317.  
  3318.  
  3319.  
  3320. &lt;h3&gt;Known Issues&lt;/h3&gt;
  3321.  
  3322.  
  3323.  
  3324. &lt;ul&gt;&lt;li&gt;The shutdown prompt may not be displayed at the end of the installation. Instead, you might just see a Xubuntu logo, a black screen with an underscore in the upper left-hand corner, or a black screen. Press Enter, and the system will reboot into the installed environment. (LP: &lt;a href=&quot;https://bugs.launchpad.net/ubuntu-release-notes/+bug/1944519&quot;&gt;#1944519&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;You may experience choppy audio or poor system performance while playing audio, but only in some virtual machines (observed in VMware and VirtualBox).&lt;/li&gt;&lt;li&gt;OEM installation options are not currently supported or available.&lt;/li&gt;&lt;/ul&gt;
  3325.  
  3326.  
  3327.  
  3328. &lt;p&gt;Please refer to the &lt;a href=&quot;https://wiki.xubuntu.org/releases/25.04/release-notes&quot;&gt;Xubuntu Release Notes&lt;/a&gt; for more obscure known issues, information on affecting bugs, bug fixes, and a list of new package versions.&lt;/p&gt;
  3329.  
  3330.  
  3331.  
  3332. &lt;p&gt;The main &lt;a href=&quot;https://discourse.ubuntu.com/t/plucky-puffin-release-notes/48687&quot;&gt;Ubuntu Release Notes&lt;/a&gt; cover many other packages we carry and more generic issues.&lt;/p&gt;
  3333.  
  3334.  
  3335.  
  3336. &lt;h2&gt;Support&lt;/h2&gt;
  3337.  
  3338.  
  3339.  
  3340. &lt;p&gt;&lt;strong&gt;For support&lt;/strong&gt; with the release, navigate to &lt;a href=&quot;https://xubuntu.org/help/&quot;&gt;Help &amp;amp; Support&lt;/a&gt; for a complete list of methods to get help.&lt;/p&gt;</description>
  3341. <pubDate>Thu, 17 Apr 2025 20:59:18 +0000</pubDate>
  3342. </item>
  3343. <item>
  3344. <title>Lubuntu Blog: Lubuntu 25.04 (Plucky Puffin) Released!</title>
  3345. <guid isPermaLink="false">https://lubuntu.me/?p=4126</guid>
  3346. <link>https://lubuntu.me/plucky-released/</link>
  3347. <description>The Lubuntu Team is proud to announce Lubuntu 25.04, codenamed Plucky Puffin. Lubuntu 25.04 is the 28th release of Lubuntu, the 14th release of Lubuntu with LXQt as the default desktop environment. With 25.04 being an interim release, it will be supported until January of 2026. If you're a 24.10 user, please upgrade to 25.04 […]</description>
  3348. <pubDate>Thu, 17 Apr 2025 18:27:20 +0000</pubDate>
  3349. </item>
  3350. <item>
  3351. <title>David Mohammed: Ubuntu Budgie 25.04 release notes</title>
  3352. <guid isPermaLink="false">https://ubuntubudgie.org/?p=3898</guid>
  3353. <link>https://ubuntubudgie.org/2025/04/ubuntu-budgie-25-04-release-notes/</link>
  3354. <description>&lt;p&gt;Ubuntu Budgie 25.04 (Plucky Puffin) is a Standard Release with 9 months of support by your distro maintainers and Canonical, from April 2025 to Jan 2026. These release notes showcase the key takeaways for 24.10 upgraders to 25.04. Please note – there is no direct upgrade path from 24.04.2 to 25.04; you must uplift to 24.10 first or perform a fresh install. In these release notes the areas…&lt;/p&gt;
  3355. &lt;p&gt;&lt;a href=&quot;https://ubuntubudgie.org/2025/04/ubuntu-budgie-25-04-release-notes/&quot; rel=&quot;nofollow&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;</description>
  3356. <pubDate>Tue, 15 Apr 2025 17:31:49 +0000</pubDate>
  3357. </item>
  3358. <item>
  3359. <title>Ubuntu MATE: Ubuntu MATE 24.10 Release Notes</title>
  3360. <guid isPermaLink="false">https://ubuntu-mate.org/blog/ubuntu-mate-oracular-oriole</guid>
  3361. <link>https://ubuntu-mate.org/blog/ubuntu-mate-oracular-oriole-release-notes/</link>
  3362. <description>&lt;p&gt;Ubuntu MATE 24.10 is more of what you like, stable MATE Desktop on top of current Ubuntu. Read on to learn more 👓️&lt;/p&gt;
  3363.  
  3364. &lt;p class=&quot;center&quot;&gt;&lt;img alt=&quot;Ubuntu MATE 24.10&quot; src=&quot;https://ubuntu-mate.org/images/blog/oracular/screenshot.png&quot; /&gt;
  3365. &lt;strong&gt;Ubuntu MATE 24.10&lt;/strong&gt;&lt;/p&gt;
  3366.  
  3367. &lt;h2 id=&quot;thank-you-&quot;&gt;Thank you! 🙇&lt;/h2&gt;
  3368.  
  3369. &lt;p&gt;&lt;strong&gt;My sincere thanks to everyone who has played an active role in improving Ubuntu MATE for this release 👏
  3370. I’d like to acknowledge the close collaboration with the Ubuntu Foundations team and the Ubuntu flavour teams, in particular &lt;a href=&quot;https://launchpad.net/~eeickmeyer&quot;&gt;Erich Eickmeyer&lt;/a&gt; who pushed critical fixes while I was travelling.
  3371. Thank you!&lt;/strong&gt; 💚&lt;/p&gt;
  3372.  
  3373. &lt;h2 id=&quot;what-changed-since-the-ubuntu-mate-2404-lts&quot;&gt;What changed since the Ubuntu MATE 24.04 LTS?&lt;/h2&gt;
  3374.  
  3375. &lt;p&gt;Here are the highlights of what’s changed since the &lt;a href=&quot;https://ubuntu-mate.org/blog/ubuntu-mate-noble-numbat-release-notes/&quot;&gt;release of Ubuntu MATE 24.04&lt;/a&gt;&lt;/p&gt;
  3376.  
  3377. &lt;ul&gt;
  3378.  &lt;li&gt;Ships stable &lt;a href=&quot;https://mate-desktop.org&quot;&gt;MATE Desktop&lt;/a&gt; 1.26.2 with a handful of bug fixes 🐛&lt;/li&gt;
  3379.  &lt;li&gt;Switched back to Slick Greeter (replacing Arctica Greeter) due to race-condition in the boot process which results the display manager failing to initialise.
  3380.    &lt;ul&gt;
  3381.      &lt;li&gt;Returning to Slick Greeter reintroduces the ability to easily configure the login screen via a graphical application, something users have been requesting be re-instated 👍&lt;/li&gt;
  3382.    &lt;/ul&gt;
  3383.  &lt;/li&gt;
  3384.  &lt;li&gt;Ubuntu MATE 24.10 .iso 📀 is now 3.3GB 🤏 Down from 4.1GB in the 24.04 LTS release.
  3385.    &lt;ul&gt;
  3386.      &lt;li&gt;This is thanks to some fixes in the installer that no longer require as many packages in the live-seed.&lt;/li&gt;
  3387.    &lt;/ul&gt;
  3388.  &lt;/li&gt;
  3389. &lt;/ul&gt;
  3390.  
  3391. &lt;p class=&quot;center&quot;&gt;&lt;img alt=&quot;Login Window Configuration&quot; src=&quot;https://ubuntu-mate.org/images/blog/oracular/login-window.png&quot; /&gt;
  3392. &lt;strong&gt;Login Window&lt;/strong&gt;&lt;/p&gt;
  3393.  
  3394. &lt;h2 id=&quot;what-didnt-change-since-the-ubuntu-mate-2404-lts&quot;&gt;What didn’t change since the Ubuntu MATE 24.04 LTS?&lt;/h2&gt;
  3395.  
  3396. &lt;p&gt;If you follow upstream MATE Desktop development, then you’ll have noticed that Ubuntu MATE 24.10 doesn’t ship with the recently released MATE Desktop 1.28 🧉&lt;/p&gt;
  3397.  
  3398. &lt;p&gt;I have prepared packaging for MATE Desktop 1.28, along with the associated components but encountered some bugs and regressions 🐞 I wasn’t able to get things to a standard I’m happy to ship be default, so it is tried and true MATE 1.26.2 one last time 🪨&lt;/p&gt;
  3399.  
  3400. &lt;h2 id=&quot;major-applications&quot;&gt;Major Applications&lt;/h2&gt;
  3401.  
  3402. &lt;p&gt;Accompanying &lt;strong&gt;MATE Desktop 1.26.2&lt;/strong&gt; 🧉 and &lt;strong&gt;Linux 6.11&lt;/strong&gt; 🐧 are &lt;strong&gt;Firefox 131&lt;/strong&gt; 🔥🦊,
  3403. &lt;strong&gt;Celluloid 0.27&lt;/strong&gt; 🎥, &lt;strong&gt;Evolution 3.54&lt;/strong&gt; 📧, &lt;strong&gt;LibreOffice 24.8.2&lt;/strong&gt; 📚&lt;/p&gt;
  3404.  
  3405. &lt;p&gt;See the &lt;a href=&quot;https://discourse.ubuntu.com/t/oracular-oriole-release-notes/44878/1&quot;&gt;Ubuntu 24.10 Release Notes&lt;/a&gt;
  3406. for details of all the changes and improvements that Ubuntu MATE benefits from.&lt;/p&gt;
  3407.  
  3408. &lt;div class=&quot;jumbotron&quot;&gt;
  3409.  
  3410.    &lt;h2&gt;Download Ubuntu MATE 24.10&lt;/h2&gt;
  3411.  
  3412.    &lt;p&gt;Available for 64-bit desktop computers!&lt;/p&gt;
  3413.  
  3414.  
  3415.    
  3416.        &lt;a class=&quot;btn&quot; href=&quot;https://ubuntu-mate.org/download/&quot;&gt;Download&lt;/a&gt;
  3417.    
  3418.  
  3419. &lt;/div&gt;
  3420.  
  3421. &lt;h2 id=&quot;upgrading-to-ubuntu-mate-2410&quot;&gt;Upgrading to Ubuntu MATE 24.10&lt;/h2&gt;
  3422.  
  3423. &lt;p&gt;The upgrade process to Ubuntu MATE 24.10 is the same as Ubuntu.&lt;/p&gt;
  3424.  
  3425. &lt;ul&gt;
  3426.  &lt;li&gt;&lt;a href=&quot;https://help.ubuntu.com/community/OracularUpgrades&quot;&gt;Ubuntu 24.10 Upgrade Process&lt;/a&gt;&lt;/li&gt;
  3427. &lt;/ul&gt;
  3428.  
  3429. &lt;p&gt;There are no offline upgrade options for Ubuntu MATE. Please ensure you have
  3430. network connectivity to one of the official mirrors or to a locally accessible
  3431. mirror and follow the instructions above.&lt;/p&gt;</description>
  3432. <pubDate>Sun, 06 Apr 2025 16:54:02 +0000</pubDate>
  3433. </item>
  3434. <item>
  3435. <title>Elizabeth K. Joseph: A VisionFive 2 and a Raspberry Pi 1 B</title>
  3436. <guid isPermaLink="false">https://princessleia.com/journal/?p=17828</guid>
  3437. <link>https://princessleia.com/journal/2025/04/a-visionfive-2-and-a-raspberry-pi-1-b/</link>
  3438. <description>&lt;p&gt;A couple weeks ago I was playing around with a multiple architecture CI setup with another team, and that led me to pull out my StarFive VisionFive 2 SBC again to see where I could make it this time with an install.&lt;/p&gt;
  3439. &lt;p&gt;I left off about a year ago when I succeeded in getting an older version of Debian on it, but attempts to get the tooling to install a more broadly supported version of U-Boot to the SPI flash were unsuccessful. Then I got pulled away to other things, effectively just bringing my VF2 around to events as a prop for my multiarch talks – which it did beautifully! I even had one conference attendee buy one to play with while sitting in the audience of my talk. Cool.&lt;/p&gt;
  3440. &lt;p&gt;I was delighted to learn how much progress had been made since I last looked. Canonical has published more formalized documentation: &lt;a href=&quot;https://canonical-ubuntu-boards.readthedocs-hosted.com/en/latest/how-to/starfive-visionfive-2/&quot;&gt;Install Ubuntu on the StarFive VisionFive 2&lt;/a&gt; in the place of what had been a rather cluttered wiki page. So I got all hooked up and began my latest attempt.&lt;/p&gt;
  3441. &lt;div align=&quot;center&quot;&gt;&lt;a href=&quot;https://princessleia.com/images/journalpics/032025/visionfive2_install_philly.jpg&quot;&gt;&lt;img src=&quot;https://princessleia.com/images/journalpics/032025/visionfive2_install_philly_sm.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
  3442. &lt;p&gt;My first step was to grab the pre-installed server image. I got that installed, but struggled a little with persistence once I unplugged the USB UART adapter and rebooted. I then decided just to move forward with the &lt;a href=&quot;https://canonical-ubuntu-boards.readthedocs-hosted.com/en/latest/how-to/starfive-visionfive-2/#install-u-boot-to-the-spi-flash&quot;&gt;Install U-Boot to the SPI flash&lt;/a&gt; instructions. I struggled a bit here for two reasons:&lt;/p&gt;
  3443. &lt;ol&gt;
  3444. &lt;li&gt;The documentation today leads off with having you download the livecd, but you actually want the pre-installed server image to flash U-Boot, the livecd step doesn’t come until later. Admittedly, the instructions do &lt;em&gt;say&lt;/em&gt; this, but I wasn’t reading carefully enough and was more focused on the steps.&lt;/li&gt;
  3445. &lt;li&gt;I couldn’t get the 24.10 pre-installed image to work for flashing U-Boot, but once I went back to the 24.04 pre-installed image it worked.&lt;/li&gt;
  3446. &lt;/ol&gt;
  3447. &lt;p&gt;And then I had to fly across the country. We’re spending a couple weeks around spring break here at our vacation house in Philadelphia, but the good thing about SBCs is that they’re incredibly portable and I just tossed my gear into my backpack and brought it along.&lt;/p&gt;
  3448. &lt;p&gt;Thanks to Emil Renner Berthing (esmil) on the &lt;a href=&quot;https://discourse.ubuntu.com/t/getting-started-with-matrix/41000&quot;&gt;Ubuntu Matrix server&lt;/a&gt; for providing me with enough guidance to figure out where I had gone wrong above, and got me on my way just a few days after we arrived in Philly.&lt;/p&gt;
  3449. &lt;p&gt;With the newer U-Boot installed, I was able to use the Ubuntu 24.04 livecd image on a micro SD Card to install Ubuntu 24.04 on an NVMe drive! That’s another new change since I last looked at installation, using my little NVMe drive as a target was a lot simpler than it would have been a year ago. In fact, it was rather anticlimactic, hah!&lt;/p&gt;
  3450. &lt;div align=&quot;center&quot;&gt;&lt;a href=&quot;https://princessleia.com/images/journalpics/032025/visionfive2_nvme.jpg&quot;&gt;&lt;img src=&quot;https://princessleia.com/images/journalpics/032025/visionfive2_nvme_sm.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
  3451. &lt;p&gt;And with that, I was fully logged in to my new system.&lt;/p&gt;
  3452. &lt;p&gt;&lt;code&gt;elizabeth@r2kt:~$ cat /proc/cpuinfo&lt;br /&gt;
  3453. processor : 0&lt;br /&gt;
  3454. hart : 2&lt;br /&gt;
  3455. isa : rv64imafdc_zicntr_zicsr_zifencei_zihpm_zba_zbb&lt;br /&gt;
  3456. mmu : sv39&lt;br /&gt;
  3457. uarch : sifive,u74-mc&lt;br /&gt;
  3458. mvendorid : 0x489&lt;br /&gt;
  3459. marchid : 0x8000000000000007&lt;br /&gt;
  3460. mimpid : 0x4210427&lt;br /&gt;
  3461. hart isa : rv64imafdc_zicntr_zicsr_zifencei_zihpm_zba_zbb&lt;/code&gt;&lt;/p&gt;
  3462. &lt;p&gt;It has 4 cores, so here’s the full output: &lt;a href=&quot;https://princessleia.com/txt/vf2-cpus.txt&quot;&gt;vf2-cpus.txt&lt;/a&gt;&lt;/p&gt;
  3463. &lt;p&gt;What will I do with this little single board computer? I don’t know yet. I joked with my husband that I’d “install Debian on it and forget about it like everything else” but I really would like to get past that. I have my little multiarch demo CI project in the wings, and I’ll probably loop it into that.&lt;/p&gt;
  3464. &lt;p&gt;Since we were in Philly, I had a look over at my long-neglected Raspberry Pi 1B that I have here. When we first moved in, I used it as an ssh tunnel to get to this network from California. It was great for that! But now we have a more sophisticated network setup between the houses with a VLAN that connects them, so the ssh tunnel is unnecessary. In fact, my poor Raspberry Pi fell off the WiFi network when we switched to 802.1X just over a year ago and I never got around to getting it back on the network. I connected it to a keyboard and monitor and started some investigation. Honestly, I’m surprised the little guy was still running, but it’s doing fine!&lt;/p&gt;
  3465. &lt;p&gt;And it had been chugging along running Rasbian based on Debian 9. Well, that’s worth an upgrade. But not just an upgrade, I didn’t want to stress the device and SD card, so I figured flashing it with the latest version of Raspberry Pi OS was the right way to go. It turns out, it’s been a long time since I’ve done a Raspberry Pi install.&lt;/p&gt;
  3466. &lt;p&gt;I grabbed the &lt;a href=&quot;https://www.raspberrypi.com/software/&quot;&gt;Raspberry Pi Imager&lt;/a&gt; and went on my way. It’s really nice. I went with the Raspberry Pi OS Lite install since it’s the RP1, I didn’t want a GUI. The imager asked the usual installation questions, loaded up my SSH key, and I was ready to load it up in my Pi.&lt;/p&gt;
  3467. &lt;div align=&quot;center&quot;&gt;&lt;a href=&quot;https://princessleia.com/images/journalpics/032025/raspberripi1b_imager_2025.png&quot;&gt;&lt;img src=&quot;https://princessleia.com/images/journalpics/032025/raspberripi1b_imager_2025_sm.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
  3468. &lt;p&gt;The only thing I need to finish sorting out is networking. The old USB WiFi adapter I have it in doesn’t initialize until after it’s booted up, so wpa_supplicant on boot can’t negotiate with the access point. I’ll have to play around with it. And what will I use this for once I do, now that it’s not an SSH tunnel? I’m not sure yet.&lt;/p&gt;
  3469. &lt;div align=&quot;center&quot;&gt;&lt;a href=&quot;https://princessleia.com/images/journalpics/032025/raspberry_pi_1_dusty_case.jpg&quot;&gt;&lt;img src=&quot;https://princessleia.com/images/journalpics/032025/raspberry_pi_1_dusty_case_sm.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
  3470. &lt;p&gt;I realize this blog post isn’t very deep or technical, but I guess that’s the point. We’ve come a long way in recent years in support for non-x86 architectures, so installation has gotten a lot easier across several of them. If you’re new to playing around with architectures, I’d say it’s a really good time to start. You can hit the ground running with some wins, and then play around as you go with various things you want to help get working. It’s a lot of fun, and the years I spent playing around with Debian on Sparc back in the day definitely laid the groundwork for the job I have at IBM working on mainframes. You never know where a bit of technical curiosity will get you.&lt;/p&gt;</description>
  3471. <pubDate>Thu, 03 Apr 2025 20:43:31 +0000</pubDate>
  3472. </item>
  3473. <item>
  3474. <title>Lubuntu Blog: Lubuntu Plucky Puffin Beta Released!</title>
  3475. <guid isPermaLink="false">https://lubuntu.me/?p=4122</guid>
  3476. <link>https://lubuntu.me/plucky-beta/</link>
  3477. <description>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 […]</description>
  3478. <pubDate>Thu, 27 Mar 2025 21:02:47 +0000</pubDate>
  3479. </item>
  3480.  
  3481. </channel>
  3482. </rss>
  3483.  

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

  1. Download the "valid RSS" banner.

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

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

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

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

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