<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title>Debian Disguised Work</title>
  <link rel="self" href="https://disguised.work/atom.xml"/>
  <link href="https://disguised.work/"/>
  <id>https://disguised.work/atom.xml</id>
  <updated>2026-08-20T00:11:50+00:00</updated>
  <generator uri="http://intertwingly.net/code/venus/">http://intertwingly.net/code/venus/</generator>


  <entry xml:lang="en">
	<title type="html" xml:lang="en">RcppMsgPack 0.2.5 on CRAN: Minor Maintenance</title>
	<link href="http://dirk.eddelbuettel.com/blog/2026/08/19#rcppmsgpack_0.2.5"/>
	<id>http://dirk.eddelbuettel.com/blog/2026/08/19#rcppmsgpack_0.2.5</id>
	<updated>2026-08-19T20:07:00+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;Another maintenance release of &lt;a href=&quot;https://dirk.eddelbuettel.com/code/rcpp.msgpack.html&quot;&gt;RcppMsgPack&lt;/a&gt;
got onto &lt;a href=&quot;https://cran.r-project.org&quot;&gt;CRAN&lt;/a&gt; today. &lt;a href=&quot;https://msgpack.org/&quot;&gt;MessagePack&lt;/a&gt; itself is an efficient
binary serialization format. It lets you exchange data among multiple
languages like JSON. But it is faster and smaller. Small integers are
encoded into a single byte, and typical short strings require only one
extra byte in addition to the strings themselves. &lt;a href=&quot;https://dirk.eddelbuettel.com/code/rcpp.msgpack.html&quot;&gt;RcppMsgPack&lt;/a&gt;
brings both the C++ headers of MessagePack as well as clever code (in
both R and C++) Travers wrote to access MsgPack-encoded objects directly
from R.&lt;/p&gt;
&lt;p&gt;This release is once again chiefly maintenance. Besides standard
upkeep to the README.md and continuous integration setup we had to add
one &lt;code&gt;#include&lt;/code&gt;. The &lt;code&gt;clang++-23&lt;/code&gt; compiler, when
also running with its own library, now now needs the
&lt;code&gt;type_traits.h&lt;/code&gt; header file (in the upstream &lt;a href=&quot;https://msgpack.org/&quot;&gt;MessagePack&lt;/a&gt; code) so we added that. No
other changes, so no user-facing changes. Details follow from the NEWS
file.&lt;/p&gt;
&lt;blockquote&gt;
&lt;h4 id=&quot;changes-in-version-0.2.5-2026-08-19&quot;&gt;Changes in version 0.2.5
(2026-08-19)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Explicitly include header &quot;type_traits.h&quot; to appease
clang++-23&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standard maintenance updating continuous integration, adding
minor helper script, and updating README.md&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Courtesy of my &lt;a href=&quot;https://dirk.eddelbuettel.com/cranberries&quot;&gt;CRANberries&lt;/a&gt;, there
is also a diffstat report for &lt;a href=&quot;https://dirk.eddelbuettel.com/cranberries/2026/08/19#RcppMsgPack_0.2.5&quot;&gt;this
release&lt;/a&gt;. For questions, suggestions, or issues please use the &lt;a href=&quot;https://github.com/eddelbuettel/rcppmsgpack/issues&quot;&gt;issue
tracker&lt;/a&gt; at the &lt;a href=&quot;https://github.com/eddelbuettel/rcppmsgpack&quot;&gt;GitHub repo&lt;/a&gt;.&lt;/p&gt;
&lt;p style=&quot;font-size: 80%; font-style: italic;&quot;&gt;
This post by &lt;a href=&quot;https://dirk.eddelbuettel.com&quot;&gt;Dirk
Eddelbuettel&lt;/a&gt; originated on his &lt;a href=&quot;https://dirk.eddelbuettel.com/blog&quot;&gt;Thinking inside the box&lt;/a&gt;
blog. If you like this or other open-source work I do, you can now &lt;a href=&quot;https://github.com/sponsors/eddelbuettel&quot;&gt;sponsor me at
GitHub&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content>
	<author>
	  <name>Dirk Eddelbuettel</name>
	   <uri>http://dirk.eddelbuettel.com/blog</uri> 
	</author>
	<source>
	  <title type="html">Thinking inside the box</title>
	  <subtitle type="html">Thinking inside the box</subtitle>
	  <link rel="self" href="http://dirk.eddelbuettel.com/blog/index.rss"/>
	  <id>http://dirk.eddelbuettel.com/blog</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">The people vs the AI overlords</title>
	<link href="https://anarc.at/blog/2026-08-18-people-vs-ai-overlords/"/>
	<id>https://anarc.at/blog/2026-08-18-people-vs-ai-overlords/</id>
	<updated>2026-08-19T14:29:31+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;blockquote&gt;&lt;p&gt;Previously in this series: &lt;a href=&quot;https://anarc.at/blog/2026-05-16-four-horsemen/&quot;&gt;The Four Horsemen of the LLM
Apocalypse&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;In a &lt;a href=&quot;https://lwn.net/ml/all/87o6fmdgs6.fsf@hope.eyrie.org/&quot;&gt;post to oss-security&lt;/a&gt;, my (Debian) co-developer Russ Allbery
stated that &quot;open source software [OSS] is coming face to face with a
motivation crisis that has been building for a long time&quot;. His point
is essentially that large language models (LLMs&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://anarc.at/tag/debian-planet/#fn:1&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;) are making the
existing OSS community crisis worse. For him, it&#39;s the flood of code
reviews, but he argues that varies according to people&#39;s desires, for
others it&#39;s security issues and so on.&lt;/p&gt;

&lt;p&gt;I think Russ is right, but I would argue there&#39;s something much bigger
than our open &lt;em&gt;communities&lt;/em&gt; going on here, and it&#39;s about the entire
&lt;em&gt;field&lt;/em&gt; of computing. This pressure is on &lt;em&gt;all&lt;/em&gt; of us, regardless of
whether we work on open source software or not.&lt;/p&gt;

&lt;h1 id=&quot;how-people-use-models&quot;&gt;How people use models&lt;/h1&gt;

&lt;p&gt;People using LLMs in their workflow have &lt;em&gt;radically&lt;/em&gt; changed how
programming works, even for &lt;a href=&quot;https://www.spurint.org/journal/2026/07/llms-and-xfwl4&quot;&gt;people who claim to avoid
vibe-coding&lt;/a&gt;. And I&#39;m sorry to single out one poor maintainer here:
it&#39;s not you, Brian, you&#39;re just one example among many. But this is
typical use of those models nowadays:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Once it’s done, I’ll use &lt;code&gt;/code-review&lt;/code&gt; and let Claude spawn
sub-agents to do a full review of the new code. This usually finds
some problems, even problems that the “main” Claude instance didn’t
find during its validation. I usually keep running &lt;code&gt;/code-review&lt;/code&gt;
again and again after finding and fixing issues, until there aren’t
any left.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Think about what that means for a minute. This is automation built to
fire up dozens of agents crunching at a problem for minutes if not
hours of GPU compute time, in parallel. This is essentially a couple
of shelves in a datacenter rack, totally maxed out on power and
cooling, abstracted behind a cute little &lt;code&gt;/code-review&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;The author, here, is rightly concerned that &quot;Anthropic could pull the
rug out and require API pricing&quot;, which is perhaps a code word for
&quot;charging something closer to actual costs&quot;. Brian also pays lip
service to environmental and societal costs but those are largely
abstracted away, so let&#39;s keep that conversation aside here as well,
as we have &lt;a href=&quot;https://anarc.at/blog/2026-05-16-four-horsemen/&quot;&gt;discussed it before anyways&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But clearly, this way of working has an (&lt;a href=&quot;https://drewdevault.com/blog/Stop-externalizing-your-costs-on-me/&quot;&gt;externalized&lt;/a&gt;) cost, to
say the least.&lt;/p&gt;

&lt;h1 id=&quot;paying-for-non-free-tools&quot;&gt;Paying for non-free tools&lt;/h1&gt;

&lt;p&gt;For decades my work has been focused on free and open source
software. I&#39;ve long stopped using proprietary operating systems like
Windows or Mac, and even before that switch, I was mostly using free
software on those platforms, partly out of principle, but also because
I was too poor. So the tools of my trade are free, and I build free
tools with them.&lt;/p&gt;

&lt;p&gt;It feels like we&#39;re going backwards: when I was in school, a millennia
ago, my classmates didn&#39;t have access to a compiler and were wondering
how they would scrape the money to buy a compiler like &lt;a href=&quot;https://en.wikipedia.org/wiki/Borland_C%2B%2B&quot;&gt;Borland&#39;s&lt;/a&gt;
or &lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B&quot;&gt;Microsoft&#39;s&lt;/a&gt;. I had a compiler built into my operating system
(&lt;a href=&quot;https://www.freebsd.org/&quot;&gt;FreeBSD&lt;/a&gt; at the time), so that wasn&#39;t a problem for me. For them,
it was a significant expense, but at least those expenses (or more
&lt;a href=&quot;https://en.wikipedia.org/wiki/Warez&quot;&gt;shady sourcing of programs&lt;/a&gt;) were a one-shot deal.&lt;/p&gt;

&lt;p&gt;Fast forward 30 years, and software is rented: you pay monthly for
Adobe&#39;s Photoshop and Microsoft&#39;s office suite just like you pay for
Netflix, Disney+ or Spotify&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;https://anarc.at/tag/debian-planet/#fn:2&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;. And now you need to add dozens (if not
hundreds of dollars) of monthly credits to access LLMs on top of that.&lt;/p&gt;

&lt;p&gt;So, now we have to &lt;em&gt;pay&lt;/em&gt; to get anything done? This is peak
&lt;a href=&quot;https://craphound.com/category/enshittification/&quot;&gt;enshitification&lt;/a&gt; of our job: first they steal our work to train their
models, and then they sell it back to us at a profit.&lt;/p&gt;

&lt;h1 id=&quot;attacking-the-engineers&quot;&gt;Attacking the engineers&lt;/h1&gt;

&lt;p&gt;AI is coming for our jobs, as engineers, if not &lt;em&gt;everyone&lt;/em&gt;, according
to the narrative. For a while now, our job market has deteriorated:
less jobs, for less pay. Lots of skilled engineers looking for work
and finding crap jobs then still looking while working.&lt;/p&gt;

&lt;p&gt;This is not by accident.&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a href=&quot;https://anarc.at/tag/debian-planet/#fn:3&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; We engineers have a &lt;em&gt;lot&lt;/em&gt; of power, it is not
organized, but that&#39;s just a couple of unions away (&lt;a href=&quot;https://www.ibtimes.sg/wikimedia-foundation-declines-voluntary-union-recognition-labor-dispute-grows-91377&quot;&gt;easy&lt;/a&gt;!). Tech
overlords know this, so they are attacking our profession, directly,
by forcing us to train and use models that &lt;em&gt;they&lt;/em&gt; can control.&lt;/p&gt;

&lt;p&gt;Even in environments where programmers are not &lt;em&gt;forced&lt;/em&gt; to use LLMs,
the mere pressure of other people&#39;s LLM-generated work is huge. One can
be forced to review LLM outputs, or just peer pressured you into
producing more.&lt;/p&gt;

&lt;p&gt;We&#39;re now supposed to accelerate delivery, because models can
&lt;em&gt;presumably&lt;/em&gt; do things so much better and faster. With supply chain
security becoming such a large vector that we now have &lt;a href=&quot;https://unit42.paloaltonetworks.com/chaindrop-npm-worm-analysis/&quot;&gt;worms crawling
around developers accounts on NPM&lt;/a&gt;, increasing the delivery cadence
seems like a really bad idea.&lt;sup id=&quot;fnref:4&quot;&gt;&lt;a href=&quot;https://anarc.at/tag/debian-planet/#fn:4&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;The LLM hype is part of the larger wave of cyberwar against workers,
against water, against the Earth, against all the people. This is not
a matter of individually &quot;adapting to the reality&quot; or personal choice,
but a political, social, hard problem we need to address collectively.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Previously in this series: &lt;a href=&quot;https://anarc.at/blog/2026-05-16-four-horsemen/&quot;&gt;The Four Horsemen of the LLM
Apocalypse&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;





&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr /&gt;
&lt;ol&gt;
&lt;li id=&quot;fn:1&quot;&gt;
I again prefer the term LLM to &quot;AI&quot; because models do &lt;em&gt;not&lt;/em&gt;
possess &lt;a href=&quot;https://en.wikipedia.org/wiki/Intelligence&quot;&gt;intelligence&lt;/a&gt;. I did use it in the title because
click baiting is apparently important, but I stopped short of
calling this one &quot;Rage Against the Machines&quot; because that would be
the title of every blog post I have ever made.&lt;a href=&quot;https://anarc.at/tag/debian-planet/#fnref:1&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;fn:2&quot;&gt;
Yes, I know that &lt;a href=&quot;https://en.wikipedia.org/wiki/Visual_Studio&quot;&gt;Visual Studio&lt;/a&gt; is kind of free now, but I
wouldn&#39;t be surprised if they turn that into a rental as well,
because why not.&lt;a href=&quot;https://anarc.at/tag/debian-planet/#fnref:2&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;fn:3&quot;&gt;
Beyond sabotaging the job market, Sam Altman event wants to
sell &quot;&lt;a href=&quot;https://gizmodo.com/sam-altman-says-intelligence-will-be-a-utility-and-hes-just-the-man-to-collect-the-bills-2000732953&quot;&gt;intelligence as a utility&lt;/a&gt;&quot; something that is just a
&lt;a href=&quot;https://www.psychologytoday.com/us/blog/the-digital-self/202603/intelligence-as-a-commodity&quot;&gt;really bad idea&lt;/a&gt; but especially shows how megalomaniac those
people are.&lt;a href=&quot;https://anarc.at/tag/debian-planet/#fnref:3&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;fn:4&quot;&gt;
This brings back memories of &lt;a href=&quot;https://en.wikipedia.org/wiki/Morris_worm&quot;&gt;another era&lt;/a&gt;, walking us
back decades in terms of computer security.&lt;a href=&quot;https://anarc.at/tag/debian-planet/#fnref:4&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content>
	<author>
	  <name>Antoine Beaupré</name>
	   <uri>https://anarc.at/tag/debian-planet/</uri> 
	</author>
	<source>
	  <title type="html">pages tagged debian-planet</title>
	  <subtitle type="html">anarcat</subtitle>
	  <link rel="self" href="https://anarc.at/tag/debian-planet/index.rss"/>
	  <id>https://anarc.at/tag/debian-planet/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">The Four Horsemen of the LLM Apocalypse</title>
	<link href="https://anarc.at/blog/2026-05-16-four-horsemen/"/>
	<id>https://anarc.at/blog/2026-05-16-four-horsemen/</id>
	<updated>2026-08-19T14:14:42+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;blockquote&gt;&lt;p&gt;Next in this series: &lt;a href=&quot;https://anarc.at/blog/2026-08-18-people-vs-ai-overlords/&quot;&gt;The people vs the AI
overlords&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I have been battling Large Language Models (LLM&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://anarc.at/tag/debian-planet/#fn:1&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;) for the past
couple of weeks and have struggled to think about what it means and
how to deal with its fallout.&lt;/p&gt;

&lt;p&gt;Because the fight has come from many fronts, I&#39;ve come to articulate
this in terms of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Four_Horsemen_of_the_Apocalypse&quot;&gt;Four Horsemen of the Apocalypse&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Sound track: Metallica&#39;s &lt;a href=&quot;https://www.metallica.com/songs/the-four-horsemen.html&quot;&gt;The Four Horsemen&lt;/a&gt;, preferably
&lt;a href=&quot;https://en.wikipedia.org/wiki/Metallica_v._Napster,_Inc.&quot;&gt;downloaded from Napster around 2000&lt;/a&gt;, but now I guess you &lt;a href=&quot;https://www.youtube.com/watch?v=-zKOhVSERS8&quot;&gt;get
it on YouTube&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;

&lt;h1 id=&quot;war-bot-armies&quot;&gt;War: bot armies&lt;/h1&gt;

&lt;p&gt;Let&#39;s start with War. We&#39;ve been battling bot armies for control of
our GitLab server &lt;a href=&quot;https://gitlab.torproject.org/tpo/tpa/team/-/work_items/42152&quot;&gt;for a while&lt;/a&gt;. Bots crawl virtually infinite
endpoints on our Git repositories (as opposed to downloading an
archive or shallow clone), including our fork of Firefox, Tor Browser,
a massive repository.&lt;/p&gt;

&lt;p&gt;At first, we&#39;ve tried various methods: &lt;a href=&quot;https://www.robotstxt.org/&quot;&gt;robots.txt&lt;/a&gt;, blocking user
agents, and finally blocking entire networks. I &lt;a href=&quot;https://anarc.at/blog/2025-05-30-asncounter/&quot;&gt;wrote
asncounter&lt;/a&gt;. It worked for a while.&lt;/p&gt;

&lt;p&gt;But now, blocking entire networks doesn&#39;t work: they come back some
other way, typically through &lt;a href=&quot;https://acid.vegas/blog/the-shady-world-of-ip-leasing/&quot;&gt;shady proxy networks&lt;/a&gt;, which is kind
of ironic considering we&#39;re essentially running the largest proxy
network of the world.&lt;/p&gt;

&lt;p&gt;Out of desperation, we&#39;ve forced users to &lt;a href=&quot;https://gitlab.torproject.org/tpo/tpa/team/-/wikis/policy/0108-gitlab-cookie-and-javascript-enforcement&quot;&gt;use cookies&lt;/a&gt; when
visiting our site. We haven&#39;t deployed &lt;a href=&quot;https://anubis.techaro.lol/&quot;&gt;Anubis&lt;/a&gt; yet, as we worry
that &lt;a href=&quot;https://social.anoxinon.de/@Codeberg/115033790447125787&quot;&gt;bots have broken Anubis anyways&lt;/a&gt; and that it &lt;a href=&quot;https://lock.cmpxchg8b.com/anubis.html&quot;&gt;does not really
defend against a well-funded attacker&lt;/a&gt;, something which &lt;a href=&quot;https://behind.pretix.eu/2025/05/23/captchas-are-over/&quot;&gt;Pretix
warned against in 2025 already&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;(We have a whole &lt;a href=&quot;https://gitlab.torproject.org/tpo/tpa/team/-/work_items/42229&quot;&gt;discussion regarding those tools here&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;But even that, predictably, has failed. I suspect what we consider
bots are now really agents. They run full web browsers, JavaScript
included, so a feeble cookie is no match for the massive bot armies.&lt;/p&gt;

&lt;h2 id=&quot;side-note-on-llm-order-of-battle&quot;&gt;Side note on LLM &quot;order of battle&quot;&lt;/h2&gt;

&lt;p&gt;We often underestimate the size of that army. The cloud was huge even
before LLMs, serving about two thirds of the web. Even larger swaths of
clients like government and corporate databases have all moved to the
cloud, in shared, but private infrastructure with massive spare
capacity that is readily available to anyone who pays.&lt;/p&gt;

&lt;p&gt;LLMs have made the problem worse by dramatically expanding the
capacity of the &quot;cloud&quot;. We now have data centers that defy
imagination with &lt;a href=&quot;https://epoch.ai/data/data-centers&quot;&gt;millions of cores&lt;/a&gt;, petabytes of memory, exabytes
of storage.&lt;/p&gt;

&lt;p&gt;I thought that &lt;a href=&quot;https://sschueller.github.io/posts/the-free-market-lie/&quot;&gt;25 gigabit residential internet in Switzerland&lt;/a&gt;
could bring balance, but this is nothing compared to the scale of
those data centers.&lt;/p&gt;

&lt;p&gt;Those companies can launch thousands, if not millions of fully
functional web browsers at our servers. Computing power or bandwidth
are not a limitation for them, our primitive infrastructure is. No one
but hyperscalers can deal with this kind of load, and I suspect that
they are also struggling, as even &lt;a href=&quot;https://www.androidauthority.com/google-recaptcha-play-services-requirement-3664806/&quot;&gt;Google is deploying extreme
mechanisms in reCAPTCHA&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This is the largest attack on the internet since the &lt;a href=&quot;https://en.wikipedia.org/wiki/Morris_worm&quot;&gt;Morris
worm&lt;/a&gt; but while &lt;a href=&quot;https://en.wikipedia.org/wiki/Robert_Tappan_Morris&quot;&gt;Robert Tappan Morris&lt;/a&gt; went to jail on a felony,
LLM companies are celebrated as innovators and will soon be too big to
fail.&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;https://anarc.at/tag/debian-planet/#fn:2&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Which brings us to the second horsemen, famine.&lt;/p&gt;

&lt;h1 id=&quot;famine-shortages&quot;&gt;Famine: shortages&lt;/h1&gt;

&lt;p&gt;All that computing power doesn&#39;t come out of thin air: it needs
massive amounts of hardware, power, and cooling.&lt;/p&gt;

&lt;p&gt;Earlier this year, I&#39;ve heard from a colleague that their Dell
supplier refused to even provide a &lt;em&gt;quote&lt;/em&gt; before August. Dell!&lt;/p&gt;

&lt;p&gt;In February, &lt;a href=&quot;https://www.techspot.com/news/111346-western-digital-hdd-production-capacity-2026-already-sold.html&quot;&gt;Western Digital&#39;s hard drive production for 2026 was
already sold out&lt;/a&gt;. Hard drives essentially &lt;a href=&quot;https://gitlab.torproject.org/tpo/tpa/team/-/work_items/42465&quot;&gt;doubled in price within
a year&lt;/a&gt;, and some have now tripled. A server quote we had in
November has now &lt;em&gt;quadrupled&lt;/em&gt;, going from 10 thousand to &lt;em&gt;FORTY&lt;/em&gt;
thousand dollars for a single server.&lt;/p&gt;

&lt;p&gt;But regular folks are facing real-life shortages as well, as
&lt;a href=&quot;https://www.theguardian.com/us-news/2026/may/13/utah-approves-datacenter-backlash&quot;&gt;city-size data centers&lt;/a&gt; are being built at neck-breaking speed,
stealing fresh water and energy from human beings to feed the war
machine.&lt;/p&gt;

&lt;p&gt;We&#39;ve been scared of losing our jobs, but it seems that Apocalypse has
yet to fully materialize. Regardless for engineers, the market feels
tighter than it was a couple years ago, and everyone feels on edge
that they will just have to learn to operate LLMs to keep their jobs.&lt;/p&gt;

&lt;p&gt;Update: it turns out I was clearly too optimistic. Cisco is laying
off 4,000 or 5% of its staff in a &lt;a href=&quot;https://blogs.cisco.com/news/our-path-forward&quot;&gt;jolly announcement celebrating
a record $15.8 billion revenue&lt;/a&gt;, and Meta will &lt;a href=&quot;https://www.nytimes.com/2026/04/23/technology/meta-layoffs.html&quot;&gt;lay off 8,000 or
10% of its workforce&lt;/a&gt;, in &lt;a href=&quot;https://sfstandard.com/pacific-standard-time/2026/05/15/meta-employee-gets-real-horror-working-right-now/&quot;&gt;horrifying conditions&lt;/a&gt;. See also the
&lt;a href=&quot;https://jobloss.ai/&quot;&gt;jobloss.ai tracker&lt;/a&gt; which counts 125,000 jobs lost since January
2025, as of May 2026.&lt;/p&gt;

&lt;p&gt;Which brings us, of course, to Death.&lt;/p&gt;

&lt;h1 id=&quot;death-security-and-copyright&quot;&gt;Death: security and copyright&lt;/h1&gt;

&lt;p&gt;Our third horseman is one I did &lt;em&gt;not&lt;/em&gt; expect a couple of months
ago. Back at FOSDEM, &lt;code&gt;curl&lt;/code&gt;&#39;s maintainer Daniel Stenberg famously
&lt;a href=&quot;https://lwn.net/Articles/1058266/&quot;&gt;complained about the poor quality of LLM-generated reports&lt;/a&gt; but
then, a few months later, everyone is &lt;a href=&quot;https://lwn.net/Articles/1066581/&quot;&gt;scrambling to deal with floods
of good reports&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In the past two weeks, this culminated in a significant number of
critical security issues across multiple projects. Chained
together, remote code execution vulnerabilities in &lt;a href=&quot;https://depthfirst.com/nginx-rift&quot;&gt;Nginx&lt;/a&gt; and
&lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2026-23918&quot;&gt;Apache&lt;/a&gt; and &lt;em&gt;two&lt;/em&gt; local privilege escalations in the Linux kernel
(&lt;a href=&quot;https://github.com/V4bel/dirtyfrag/&quot;&gt;dirtyfrag&lt;/a&gt; and &lt;a href=&quot;https://github.com/v12-security/pocs/tree/main/fragnesia#fragnesia&quot;&gt;fragnesia&lt;/a&gt;) essentially gave anyone root access to any unpatched server to the web.&lt;/p&gt;

&lt;p&gt;As I write this, &lt;a href=&quot;https://github.com/0xdeadbeefnetwork/ssh-keysign-pwn&quot;&gt;another vulnerability dropped&lt;/a&gt;, which gives read
access to any file to a local user, compromising TLS and SSH private
keys.&lt;/p&gt;

&lt;p&gt;All those vulnerabilities were released without any significant
coordination while people scrambled to mitigate.&lt;/p&gt;

&lt;p&gt;Many people &lt;a href=&quot;https://lwn.net/Articles/1072007/#Comments&quot;&gt;including Linus Torvalds&lt;/a&gt; are now considering issues
discovered through LLMs to be essentially public. This puts &lt;a href=&quot;https://lwn.net/Articles/1071499/&quot;&gt;some
debates about disclosure processes&lt;/a&gt; in perspective, to say the
least.&lt;/p&gt;

&lt;p&gt;But this is not merely the death of the traditional coordinated disclosure
process, the C programming language, or the Linux kernel: remember
that those bots are trained on a large corpus of copyrighted
material. Facebook has &lt;a href=&quot;https://www.theguardian.com/technology/2025/jan/10/mark-zuckerberg-meta-books-ai-models-sarah-silverman&quot;&gt;trained their models on pirated books&lt;/a&gt; and
&lt;a href=&quot;https://torrentfreak.com/nvidia-contacted-annas-archive-to-secure-access-to-millions-of-pirated-books/&quot;&gt;Nvidia has done deals with Anna&#39;s Archive&lt;/a&gt; to secure access to
large swaths of copyrighted material. The &lt;a href=&quot;https://www.congress.gov/crs-product/LSB10922&quot;&gt;US Congress seems to think
LLM outputs are not copyrightable&lt;/a&gt;, like any other machine outputs.&lt;/p&gt;

&lt;p&gt;With many people now vibe coding their way out of learning or
remembering how computers work, is this the Death of Copyright?&lt;/p&gt;

&lt;p&gt;And that, of course, brings us to the final horseman: Pestilence.&lt;/p&gt;

&lt;h1 id=&quot;pestilence-slop&quot;&gt;Pestilence: slop&lt;/h1&gt;

&lt;p&gt;There is a growing meme that programming is essentially over as we
know it. That you can simply vibe-code applications from scratch and
it&#39;s pretty good.&lt;/p&gt;

&lt;p&gt;Maybe that&#39;s true.&lt;/p&gt;

&lt;p&gt;So far, most of my attempts at resolving any complex problem with a
LLM have often failed with bizarre failures. &lt;a href=&quot;https://gitlab.com/anarcat/scripts/-/blob/main/transmodify.py?ref_type=heads&quot;&gt;Some worked surprisingly
well.&lt;/a&gt; Maybe, of course, I am holding it wrong.&lt;/p&gt;

&lt;p&gt;I personally don&#39;t believe LLMs will ever be good enough to produce
and maintain software at scale. They&#39;re surprisingly good at finding
security flaws right now. But what I see is also a lot of
&lt;a href=&quot;https://en.wikipedia.org/wiki/Bullshit&quot;&gt;Bullshit&lt;/a&gt;, with a capital B. It&#39;s not lying: it does not &quot;know&quot;
anything, so it &lt;em&gt;can&#39;t&lt;/em&gt; lie. It&#39;s misleadingly cohesive and
deliberate, but it lacks meaning, intent, will.&lt;/p&gt;

&lt;p&gt;I have not been confronted with much slop, apart from the lobster
Jesus or the yellow man atrocities, and particularly not in my
work. But I see what it is doing to my profession: beyond
&lt;a href=&quot;https://en.wikipedia.org/wiki/Vibe_coding&quot;&gt;vibe-coding&lt;/a&gt;, people are now &lt;a href=&quot;https://www.forbes.com/sites/timkeary/2026/04/13/is-the-cult-of-tokenmaxxingjust-another-fad-or-the-new-normal/&quot;&gt;token-maxxing&lt;/a&gt;, and
&lt;a href=&quot;https://leehanchung.github.io/blogs/2026/04/05/the-ai-great-leap-forward/#let-a-hundred-skills-bloom&quot;&gt;land-grabbing their colleagues&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I don&#39;t like what LLMs do to our communities, or the fabric of
software we live with.&lt;/p&gt;

&lt;p&gt;Software does not evolve in a void. It is a team effort, be it free
software or a corporate product. Generations of humans have carefully
built the scaffolding of technology required for modern networks and
software to operate, in a convoluted contraption that no single human
fully understands anymore.&lt;/p&gt;

&lt;p&gt;The idea of simply giving up on that understanding entirely and
delegating it to an unproven model is not only chilling, it feels just
plain stupid. Not stupid as in &lt;a href=&quot;https://en.wikipedia.org/wiki/Skynet_(Terminator)&quot;&gt;Skynet&lt;/a&gt;, stupid as in &quot;I can&#39;t get
inside the data center because the authentication system is
down&quot;. Except we&#39;re in a &quot;the power plant doesn&#39;t reboot&quot; or &quot;their
LLM found an 0day in our slop&quot; kind of stupid.&lt;/p&gt;

&lt;h1 id=&quot;the-fifth-horsemen&quot;&gt;The fifth horsemen&lt;/h1&gt;

&lt;p&gt;Researching for this article, I looked up the four horsemen and found
out they original seems to have been:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Famine&lt;/li&gt;
&lt;li&gt;War&lt;/li&gt;
&lt;li&gt;Death&lt;/li&gt;
&lt;li&gt;Conquest (??)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I was surprised. I grew up thinking about the horsemen being Famine,
War, Pestilence, and Death. So I went back to &lt;a href=&quot;https://www.metallica.com/songs/the-four-horsemen.html&quot;&gt;my original source&lt;/a&gt;
which actually claims the horsemen are:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Time has taken its toll on you, the lines that crack your face.
Famine, your body, it has torn through, withered in every place.
Pestilence for what you&#39;ve had to endure, and what you have put others through
Death, deliverance for you, for sure, now there&#39;s nothing you can do
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;So I guess that makes no sense either, which, fair enough, I shouldn&#39;t
rely on Metallica for theological references. Especially since that
song was originally called &lt;a href=&quot;https://en.wikipedia.org/wiki/Mechanix&quot;&gt;Mechanix&lt;/a&gt; and was &quot;about having sex at
a gas station&quot;.&lt;/p&gt;

&lt;p&gt;Anyways.&lt;/p&gt;

&lt;p&gt;The point is, there are actually five horsemen, and the fifth one is,
in my opinion, Conquest.&lt;/p&gt;

&lt;p&gt;Those companies (and &lt;em&gt;not&lt;/em&gt; &quot;AI&quot;, mind you) are taking over the
world. I sense a strong connection with the &quot;post-truth&quot; world imposed
on us by fascists like Trump and Putin. It&#39;s not an accident, it&#39;s a
power grab part of the &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Californian_Ideology&quot;&gt;Californian Ideology&lt;/a&gt;&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a href=&quot;https://anarc.at/tag/debian-planet/#fn:3&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;. Just like Airbnb
broke housing, Uber destroyed the transportation and Amazon is taking
over retail and server hosting, LLM companies are essentially trying
to take over if not everything, at least &lt;a href=&quot;https://en.wikipedia.org/wiki/Cognition&quot;&gt;Cognition&lt;/a&gt; as a whole.&lt;/p&gt;

&lt;p&gt;But the capitalization of those companies (OpenAI and Nvidia in particular)
are so far beyond reason that their inevitable collapse will likely
lead to a global financial collapse of biblical proportions.&lt;/p&gt;

&lt;p&gt;Because they will inevitably fail like previous bubbles they are built
on. And when they fail, I hope it zips all the way back through the
blockchain scam, the ad surveillance system, and the dot com then git
me back my internet.&lt;/p&gt;

&lt;h1 id=&quot;the-tower-of-babel&quot;&gt;The Tower of Babel&lt;/h1&gt;

&lt;p&gt;While I&#39;m off in the woods hallucinating (ha!) on biblical allegories,
I feel there&#39;s another sign that the apocalypse is coming.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Tower_of_Babel&quot;&gt;Tower of Babel&lt;/a&gt; myth says that humans tried to create a big
tower up to heaven and become god. God confounds their speech and
scatters the human race. End of utopia.&lt;/p&gt;

&lt;p&gt;This is what is happening to our human translators now. LLMs being,
after all, Language Models, they are excellent at translation work. So
much that the only translators not replaced by LLMs right now are
&lt;a href=&quot;https://en.wikipedia.org/wiki/Language_interpretation&quot;&gt;interpreters&lt;/a&gt;, who translate vocally in real time. But
interpreters are worried about their jobs as well.&lt;/p&gt;

&lt;p&gt;This concretely means we will lose the human capacity, as a
civilization, to translate between each other. It is still an &lt;a href=&quot;https://revues.imist.ma/index.php/JALCS/article/view/59018&quot;&gt;open
question&lt;/a&gt; whether the remaining revision work will be enough for
translators to avoid deskilling, but other research has shown that LLM
use &lt;a href=&quot;https://publichealthpolicyjournal.com/mit-study-finds-artificial-intelligence-use-reprograms-the-brain-leading-to-cognitive-decline/&quot;&gt;leads to cognitive decline&lt;/a&gt;, &lt;a href=&quot;https://dl.acm.org/doi/full/10.1145/3706598.3713778&quot;&gt;impacts critical thinking&lt;/a&gt;,
and generally, that &lt;a href=&quot;https://publicera.kb.se/ir/article/view/47143&quot;&gt;deskilling is a common outcome&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ultimately, I think this is where LLMs bring us. Towards collapse.&lt;/p&gt;

&lt;p&gt;So this is a call to arms. Fight back!&lt;/p&gt;

&lt;p&gt;Poison bots. Build local real-world communities.&lt;/p&gt;

&lt;p&gt;Go low tech. &lt;a href=&quot;https://en.wikipedia.org/wiki/Moore%27s_law&quot;&gt;Moore&#39;s law&lt;/a&gt; is dead, &lt;a href=&quot;https://spectrum.ieee.org/the-death-of-moores-law-will-spur-innovation&quot;&gt;make use of it&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Patch your shit. &lt;a href=&quot;https://anginedepoitrine.com/&quot;&gt;Go weird&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Refuse slop. Train your brain. &lt;a href=&quot;https://github.com/leilei926524-tech/anti-distill&quot;&gt;Refuse distillation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The horsemen will collapse, but let&#39;s not go down with them.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://dune.fandom.com/wiki/Butlerian_Jihad&quot;&gt;Butlerian Jihad&lt;/a&gt;!&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;This article was written without the use of a large language model
and should not be used to train one.&lt;/p&gt;

&lt;p&gt;Next in this series: &lt;a href=&quot;https://anarc.at/blog/2026-08-18-people-vs-ai-overlords/&quot;&gt;The people vs the AI
overlords&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;

&lt;h1 id=&quot;updates&quot;&gt;Updates&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A paragraph was added about the job apocalypse, which was of course
under-estimate.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.tumblr.com/dreaminginthedeepsouth/817865966907228160/darren-oconnor-timnit-gebru-was-fired-from&quot;&gt;Why Timnit Gebru was fired&lt;/a&gt; is extremely important and
interesting. The co-lead of the Ethical AI team at Google was fired
because they blew the whistle on &quot;stochastic parrots&quot; essentially
destroying the world as we know it:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;The fifth warning was the one Google cared about most. [...]&lt;/p&gt;

&lt;p&gt;The internet would become a place where the dominant voice was a
statistical average of dominant voices, presented as a neutral
assistant.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;The warnings from the paper are eerily similar to my horsemen:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;predicted the hallucination (pestilence)&lt;/li&gt;
&lt;li&gt;bias amplification (war?)&lt;/li&gt;
&lt;li&gt;environmental cost (famine)&lt;/li&gt;
&lt;li&gt;un-auditable training corpus (death?)&lt;/li&gt;
&lt;li&gt;&quot;centralize linguistic and cultural power in the hands of the
small number of companies&quot; (conquest)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;See also Tim Wu&#39;s &quot;The Master Switch&quot; &lt;a href=&quot;https://scoat.es/@sean/116698778802881078&quot;&gt;which says&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;The industry learned how to secure the enactment of seemingly
innocuous and sensible regulations that nonetheless spelled doom
for any rival.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;People claim &lt;a href=&quot;https://cyberplace.social/@GossiTheDog/116698461313896106&quot;&gt;the same about Anthropic&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;






&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr /&gt;
&lt;ol&gt;
&lt;li id=&quot;fn:1&quot;&gt;
I prefer &quot;LLM&quot; to Artificial Intelligence, as I don&#39;t consider
models to have &quot;Intelligence&quot; which goes far beyond the analytical
traits we train models for. Intelligence &lt;em&gt;requires&lt;/em&gt; embodiment
and social interaction; machines lack the innate human skills of
empathy, feeling and care, which explains a lot of the evils
behind the current trends.&lt;a href=&quot;https://anarc.at/tag/debian-planet/#fnref:1&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;fn:2&quot;&gt;
It should be noted that Morris also happened to be one of the
founder of &lt;a href=&quot;https://en.wikipedia.org/wiki/Y_Combinator&quot;&gt;Y Combinator&lt;/a&gt; where he is in good company with
other techno-fascists like Peter Thiel, Sam Altman, and so
on. Crime, after all, pays.&lt;a href=&quot;https://anarc.at/tag/debian-planet/#fnref:2&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;fn:3&quot;&gt;
Probably a good time to watch &lt;a href=&quot;https://en.wikipedia.org/wiki/All_Watched_Over_by_Machines_of_Loving_Grace_(TV_series)&quot;&gt;All Watched Over by Machines of Loving Grace&lt;/a&gt;.&lt;a href=&quot;https://anarc.at/tag/debian-planet/#fnref:3&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content>
	<author>
	  <name>Antoine Beaupré</name>
	   <uri>https://anarc.at/tag/debian-planet/</uri> 
	</author>
	<source>
	  <title type="html">pages tagged debian-planet</title>
	  <subtitle type="html">anarcat</subtitle>
	  <link rel="self" href="https://anarc.at/tag/debian-planet/index.rss"/>
	  <id>https://anarc.at/tag/debian-planet/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">LLM usage in Debian</title>
	<link href="http://blog.fai-project.org/posts/llm-usage-gr/"/>
	<id>http://blog.fai-project.org/posts/llm-usage-gr/</id>
	<updated>2026-08-18T13:52:29+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;After spending many hours on reading all the proposals and discussions
the best choice for me is NOTA (None of the above).&lt;/p&gt;

&lt;p&gt;We do not need to create new rules for LLM usage, we already have our
DFSG and our social contract.&lt;/p&gt;

&lt;p&gt;Keep it simple, stupid. Avoid more rules!&lt;/p&gt;</content>
	<author>
	  <name>Thomas Lange</name>
	   <uri>http://blog.fai-project.org/</uri> 
	</author>
	<source>
	  <title type="html">FAI (Fully Automatic Installation) / Plan your
Installation and FAI installs your Plan</title>
	  <subtitle type="html">faiblog</subtitle>
	  <link rel="self" href="http://blog.fai-project.org/index.rss"/>
	  <id>http://blog.fai-project.org/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en-US">My first go at tracking down a kernel bug…</title>
	<link href="https://blog.koipond.org.uk/archives/371"/>
	<id>https://blog.koipond.org.uk/?p=371</id>
	<updated>2026-08-18T10:50:43+00:00</updated>
	<summary type="html" xml:lang="en-US"></summary>
	<content type="html" xml:lang="en-US">&lt;p&gt;A couple of weekends back, I upgraded my home sever. It failed to restart after running &lt;code&gt;apt dist-upgrade &lt;/code&gt;&lt;/p&gt;



&lt;p&gt;The only update that was performed was to the kernel, it went from &lt;code&gt;6.12.88+deb13-amd64&lt;/code&gt; to &lt;code&gt;6.12.100+deb13-amd64&lt;/code&gt;.  I had previously performed an &lt;code&gt;apt-get upgrade&lt;/code&gt;, and rebooted the machine, so I was pretty sure that this was to blame.  This blog entry (is a late) attempt to document how I went about finding a fix for this issue so that next time I don’t need as much hand holding as I did this time around :-)&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;(1)&lt;/strong&gt;&lt;br /&gt;Having my machine not boot following an upgrade is pretty rare, but has happened before. Usually it is because I have done something wrong so as always confirming I haven’t broken something by accident is always my first step…&lt;/p&gt;



&lt;p&gt;I plugged in a keyboard an monitor to the machine and watched it boot. Being a server this takes a long time (I guess because at this stage of system initialisation we want to test things sequentially)&lt;/p&gt;



&lt;p&gt;Watching the system boot I see the usual BIOS/UEFI stages for this machine, followed by the grub menu and the the local screen showed:&lt;/p&gt;



&lt;pre class=&quot;wp-block-preformatted has-cyan-bluish-gray-background-color has-background&quot;&gt;&lt;code&gt;            Loading Linux 6.12.100+deb13-amd64 ...
            Loading initial ramdisk ...&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Nothing else. That was it.  OK that looks like I have a broken system all right, and at very early stage of the boot process process.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;(2) &lt;/strong&gt;&lt;br /&gt;Breaking into the grub menu and removing the quiet option yields a little more information (but not much):&lt;/p&gt;



&lt;pre class=&quot;wp-block-preformatted has-cyan-bluish-gray-background-color has-background&quot;&gt;&lt;code&gt;            Loading Linux 6.12.100+deb13-amd64 …
            Loading initial ramdisk ...
            

            	EFI stub: Loaded initrd from LINUX_EFI_INITRD_MEDIA_GUID d
            	evice path
            		EFI stub: Measured initrd data into PCR 9&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;and nothing else.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;(3)&lt;/strong&gt; &lt;strong&gt;Initial debugging&lt;/strong&gt;&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;Confirmed that I could still boot the machine with the old kernel &lt;code&gt;6.12.88+deb13-amd64&lt;/code&gt; (During boot select Advanced options from the grub menu followed by the kernel image wanted) 
&lt;ul&gt;
&lt;li&gt;Yes – the system starts happily with the previous kernel&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;Checked that /boot had enough space
&lt;ul&gt;
&lt;li&gt;Yes – plenty of space&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;Is anyone else reporting this problem?  
&lt;ul&gt;
&lt;li&gt;Nothing jumps out on Debian’s bug tracker&lt;/li&gt;



&lt;li&gt;Actually not mush referenced for my search “&lt;code&gt;EFI stub: Measured initrd data into PCR 9 apart&lt;/code&gt;” other than the usual rantings to “turn off secure boot” (on this server that currently isn’t turned on – bad me)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;strong&gt;(4)&lt;/strong&gt; &lt;strong&gt;Triage&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Start looking for where the fault first occurred.  At this point I needed help, and given that Sledge was visiting I asked if he would sanity check what I was doing.  His initial thoughts were that that /boot had run out of space, but replaying my step (3) with him acting as a ‘rubber duck’ showed that this was something other than PBKAC&lt;/p&gt;



&lt;p&gt;Sledge had a quick look, then informed me that between kernel images &lt;code&gt;6.12.88+deb13&lt;/code&gt; and &lt;code&gt;6.12.100+deb13&lt;/code&gt; Debian stable has only had shipped &lt;code&gt;.90 .94 .95&lt;/code&gt; and &lt;code&gt;.96&lt;/code&gt; kernels.  We could easily try them all:&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;&lt;code&gt;wget&lt;/code&gt; each kernel package then install (&lt;code&gt;dpkg -i&lt;/code&gt;)  followed by an &lt;code&gt;update-grub&lt;/code&gt;, checking that there was sufficient space on disks especially my small&lt;code&gt; /boot partition&lt;/code&gt;)&lt;/li&gt;



&lt;li&gt;I started with image &lt;code&gt;6.12.95+deb13&lt;/code&gt; and this worked&lt;/li&gt;



&lt;li&gt;&lt;code&gt;6.12.96+deb13&lt;/code&gt; yielded the same lock up on boot as &lt;code&gt;6.12.100+deb13&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;OK I now have the first kernel image that doesn’t boot on my system, time to raise a bug…&lt;/p&gt;



&lt;p class=&quot;has-vivid-cyan-blue-color has-text-color&quot;&gt;&lt;em&gt;Up until now I have been walking to my garage where the server is located and standing in front of a rack&lt;br /&gt;with a monitor and keyboard plugged into the machine. However this machine supports IPMI so I spent a little time getting that up and running so that I can continue from the relative comfort of my desk (with lights, a chair and not needing to hold the keyboard with one hand)&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Great I can now grab screen shots from the confort of my desk (unfortunatly they are only screen shots not text files, but at least we can seen the early stage of boot, Post, grub menu and then initramfs before system log happens)&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;(5) Collating information for the initial bug report&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Sledge had mentioned my problem in irc/#debain-kernal where iam_tj suggested that we try appending&lt;br /&gt;‘debug earlycon=efifb’ to the kernal command line. This yielded 15 seconds worth of messages before the system locked up the last few messages being (vmlinuz-6.12.96+deb13-amd64):&lt;/p&gt;



&lt;p class=&quot;has-cyan-bluish-gray-background-color has-background has-small-font-size&quot;&gt;[ 14.663477] RCU Tasks: Setting shift to 5 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=20.&lt;br /&gt;[ 14.750474] RCU Tasks Rude: Setting shift to 5 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=20.&lt;br /&gt;[ 14.838024] RCU Tasks Trace: Setting shift to 5 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=20.&lt;br /&gt;[ 14.929752] NR_IRQS: 524544, nr_irqs: 584, preallocated irqs: 16&lt;br /&gt;[ 15.016814] rcu: srcu_init: Setting srcu_struct sizes based on contention.&lt;br /&gt;[ 15.104011] Console: colour dummy device 80×25&lt;br /&gt;[ 15.191236] printk: legacy console [tty0] enabled&lt;br /&gt;[ 15.278249] printk: legacy bootconsole [efifb0] disabled&lt;/p&gt;



&lt;p&gt;Booting the working kernel with the same kernel options yields the SAME messages with slightly differing times, but then continues to login prompt:&lt;/p&gt;



&lt;pre class=&quot;wp-block-preformatted has-cyan-bluish-gray-background-color has-background has-small-font-size&quot;&gt; [   14.697466] RCU Tasks: Setting shift to 5 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=20.
 [   14.784936] RCU Tasks Rude: Setting shift to 5 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=20.
 [   14.872067] RCU Tasks Trace: Setting shift to 5 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=20.
 [   14.964000] NR_IRQS: 524544, nr_irqs: 584, preallocated irqs: 16
 [   15.051482] rcu: srcu_init: Setting srcu_struct sizes based on contention.
 [   15.226079] printk: legacy console [tty0] enabled
 [   15.313751] printk: legacy bootconsole [efifb0] disabled
 [   15.400831] ACPI: Core revision 20240827
 [   15.401415] clocksource: hpet: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635855245 ns
 [   15.401464] APIC: Switch to symmetric I/O mode setup
 
&lt;code&gt;... and so on&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;iam_tj also suggested adding keep_bootcon – with ‘debug earlycon=efifb keep_bootcon’ on vmlinuz-6.12.96+deb13-amd64:&lt;br /&gt;We get a LOT further – and we see a crash / trace-back:&lt;/p&gt;



&lt;pre class=&quot;wp-block-preformatted has-cyan-bluish-gray-background-color has-background has-small-font-size&quot;&gt;&lt;code&gt;[ 34.285342] BUG: kernel NULL pointer dereference, address: 0000000000000000&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;I raised bug &lt;a href=&quot;mailto:1143721@bugs.debian.org&quot;&gt;#1143721&lt;/a&gt; and followed it up with screen captures of the boot sequence (captured from the IPMI client) and files containing the output of dmidecode, lscpu and lspci to kive the kernel team as much information as possible:&lt;/p&gt;



&lt;div class=&quot;is-vertical is-content-justification-left is-layout-flex wp-container-1 wp-block-group&quot;&gt;
&lt;pre class=&quot;wp-block-preformatted has-small-font-size&quot;&gt;[&lt;a href=&quot;https://bugs.debian.org/cgi-bin/bugreport.cgi?att=1;bug=1143721;filename=6.12.96%2Bdeb13-amd64+debug+earlycon%3Defifb+keep_bootcon.tar.gz;msg=10&quot;&gt;6.12.96+deb13-amd64 debug earlycon=efifb keep_bootcon.tar.gz&lt;/a&gt; (application/gzip, attachment)]&lt;/pre&gt;



&lt;pre class=&quot;wp-block-preformatted has-small-font-size&quot;&gt;[&lt;a href=&quot;https://bugs.debian.org/cgi-bin/bugreport.cgi?att=2;bug=1143721;filename=dmidecode.txt;msg=10&quot;&gt;dmidecode.txt&lt;/a&gt; (text/plain, attachment)]&lt;/pre&gt;



&lt;pre class=&quot;wp-block-preformatted has-small-font-size&quot;&gt;[&lt;a href=&quot;https://bugs.debian.org/cgi-bin/bugreport.cgi?att=3;bug=1143721;filename=lscpu.txt;msg=10&quot;&gt;lscpu.txt&lt;/a&gt; (text/plain, attachment)]&lt;/pre&gt;



&lt;pre class=&quot;wp-block-preformatted has-small-font-size&quot;&gt;[&lt;a href=&quot;https://bugs.debian.org/cgi-bin/bugreport.cgi?att=4;bug=1143721;filename=lspci.txt;msg=10&quot;&gt;lspci.txt&lt;/a&gt; (text/plain, attachment)]
&lt;/pre&gt;
&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;(6) Tracking down the bug Git Bisect&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;The problem with this type of bug is that it is hardware (class) specific, whilst the kernel doesn’t boot on my system, it clearly has worked on machines used by the kernel team, the Debian test and build infrastructure, &lt;em&gt;(otherwise this kernel would never have been released)&lt;/em&gt; and everyone else who has upgraded to the newer &lt;em&gt;kernel&lt;/em&gt; before I did &lt;em&gt;(otherwise we would be drowning in fails to boot bug reports)&lt;/em&gt;.  Carnil’s excellent response to my bug: &lt;a href=&quot;https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1143721#15&quot;&gt;Message #15&lt;/a&gt; (and help in IRC) provided me with a detailed step by step guide in how to track down the individual git commit that fails on my system.  I had already (with Sledge’s suggestion) made a clone of the stable branch, but was struggling to follow the steps in the &lt;a href=&quot;https://kernel-team.pages.debian.net/kernel-handbook/ch-common-tasks.html#s-common-building&quot;&gt;Debian Linux Kernel Handbook&lt;/a&gt; to re-build a duplicate kernel because I didn’t understand how to obtain the same configuration that Debian used to build the kernel; Carnil’s email provided me the missing steps (Highlighted).&lt;/p&gt;



&lt;pre class=&quot;wp-block-preformatted has-cyan-bluish-gray-background-color has-background has-small-font-size&quot;&gt;git clone --single-branch -b linux-6.12.y https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
cd linux-stable
git checkout v6.12.95
&lt;strong&gt;cp /boot/config-$(uname -r) .config
yes &#39;&#39; | make localmodconfig
make savedefconfig
mv defconfig arch/x86/configs/my_def&lt;/strong&gt;
test 6.12.96 to ensure this is &quot;bad&quot;
git checkout v6.12.96
&lt;strong&gt;make my_defconfig&lt;/strong&gt;
make -j $(nproc) bindeb-pkg
… install the resulting .deb package and confirm it fails to boot and triggers the NULL pointer dereference.&lt;strong&gt;
&lt;/strong&gt;&lt;/pre&gt;



&lt;p&gt;Right I can now start to Bisect the problem:&lt;/p&gt;



&lt;pre class=&quot;wp-block-preformatted has-cyan-bluish-gray-background-color has-background has-small-font-size&quot;&gt;&lt;code&gt;git bisect start
git bisect good v6.12.95
git bisect bad v6.12.96&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Rather than use the half step point’s git bisect suggested I was advised in irc to jump straight to the a given commit that from the git log was suspected as the culprit: &lt;/p&gt;



&lt;p class=&quot;has-cyan-bluish-gray-background-color has-background has-small-font-size&quot;&gt;git checkout 977855894bca4b87afa50d21e3f3e85a5a0e901f&lt;br /&gt;build and install….&lt;br /&gt;fails…&lt;br /&gt;git bisect bad&lt;/p&gt;



&lt;p class=&quot;has-cyan-bluish-gray-background-color has-background has-small-font-size&quot;&gt;git checkout 977855894bca4b87afa50d21e3f3e85a5a0e901f~1 ## ~1 is the commit beforehand&lt;br /&gt;build and install….&lt;br /&gt;fails…&lt;br /&gt;git bisect good&lt;/p&gt;



&lt;p&gt;The entire test tree can shown with &lt;code&gt;git bisect log&lt;/code&gt; and this was submitted as an email to the bug report, we have found our smoking gun :-)&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Finally I would like to thank Carnil, Iam_tj for their time patience and fantastic support in guiding me through finding this regression.  Right now kernel bugs are coming in thick and fast with a lot of AI assisted bug hunting, the increased numbers of bugs mean that the kernel team are especially busy.  Hopefully our paths will cross and I’ll be able to buy you some beers (or whatever) soon.  thank you.  Sledge also deserves thanks for putting up with me and pointing me in the right direction (as ever).  Lucky for me that he lives nearby so I can provide beers on a regular basis :-)&lt;/em&gt;&lt;/p&gt;</content>
	<author>
	  <name>andy</name>
	   <uri>https://blog.koipond.org.uk</uri> 
	</author>
	<source>
	  <title type="html">Debian – Koipond</title>
	  
	  <link rel="self" href="https://blog.koipond.org.uk/archives/tag/debian/feed"/>
	  <id>https://blog.koipond.org.uk</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">Debian LLM GR - Summary of the options</title>
	<link href="https://diziet.dreamwidth.org/20998.html"/>
	<id>tag:dreamwidth.org,2009-05-21:377446:20998</id>
	<updated>2026-08-18T09:02:17+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://diziet.dreamwidth.org/data/atom#introduction&quot;&gt;Introduction&lt;/a&gt;
&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://diziet.dreamwidth.org/data/atom#a-plea-to-the-undecided-voter&quot;&gt;A plea to the undecided voter&lt;/a&gt;
&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://diziet.dreamwidth.org/data/atom#table&quot;&gt;Table&lt;/a&gt;
&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://diziet.dreamwidth.org/data/atom#notes&quot;&gt;Notes&lt;/a&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Debian LLM GR - Summary of the options
&lt;/p&gt;&lt;h1&gt;&lt;a name=&quot;introduction&quot;&gt;Introduction&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;LLMs have finally made it to the ultimate stage of Debian’s governance processes, a General Resolution of all the project’s full governing members (DDs).
&lt;/p&gt;&lt;p&gt;There are a lot of options on the ballot, and they all have a different structure and approach the question in a different way. It can be hard to see the wood for the trees. I have made a summary table to try to capture the main differences, both in effect, and sentiment.

&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;
&lt;/p&gt;&lt;h1&gt;&lt;a name=&quot;a-plea-to-the-undecided-voter&quot;&gt;A plea to the undecided voter&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Suspending briefly my attempt to be neutral:
&lt;/p&gt;&lt;p&gt;Before voting, I encourage you to read the passionate rationales in options H and A, or at least the summary in my option C.
&lt;/p&gt;&lt;p&gt;Few of the LLM defences in the discussion threads, and none of the LLM-positive proposals, provide answers to any of these profound ethical concerns, many of which ought individually to be a deal-breaker. Instead, these crucial questions are simply dismissed or even ignored.
&lt;/p&gt;&lt;p&gt;Some will tell you we should “keep politics out of software” but as we can see in the world around us, software is political - now more than ever. Debian’s mission is a highly political one: developing a fully-free operating system, and defending its freeness as we do, is far from neutral!
&lt;/p&gt;&lt;p&gt;And of course many of LLMs’ harms affect Debian directly.
&lt;/p&gt;&lt;h1&gt;&lt;a name=&quot;table&quot;&gt;Table&lt;/a&gt;&lt;/h1&gt;
&lt;table rules=&quot;all&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;th&gt;&lt;a href=&quot;https://www.debian.org/vote/2026/vote_002#texta&quot;&gt;A&lt;/a&gt;&lt;/th&gt;
&lt;th&gt;&lt;a href=&quot;https://www.debian.org/vote/2026/vote_002#textg&quot;&gt;G&lt;/a&gt;&lt;/th&gt;
&lt;th&gt;&lt;a href=&quot;https://www.debian.org/vote/2026/vote_002#textc&quot;&gt;C&lt;/a&gt;&lt;/th&gt;
&lt;th&gt;&lt;a href=&quot;https://www.debian.org/vote/2026/vote_002#texth&quot;&gt;H&lt;/a&gt;&lt;/th&gt;
&lt;th&gt;&lt;a href=&quot;https://www.debian.org/vote/2026/vote_002#textf&quot;&gt;F&lt;/a&gt;&lt;/th&gt;
&lt;th&gt;&lt;a href=&quot;https://www.debian.org/vote/2026/vote_002#textd&quot;&gt;D&lt;/a&gt;&lt;/th&gt;
&lt;th&gt;&lt;a href=&quot;https://www.debian.org/vote/2026/vote_002#textb&quot;&gt;B&lt;/a&gt;&lt;/th&gt;
&lt;th&gt;&lt;a href=&quot;https://www.debian.org/vote/2026/vote_002#texte&quot;&gt;E&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt; LLM harms &lt;/th&gt;&lt;td&gt; Robusly discussed &lt;/td&gt;&lt;td&gt; Discussed &lt;/td&gt;&lt;td&gt; Robusly summarised &lt;/td&gt;&lt;td&gt; Robusly discussed; especially re climate &lt;/td&gt;&lt;td&gt; Summarised &lt;/td&gt;&lt;td&gt; Accepted as inevitable &lt;/td&gt;&lt;td&gt; Disregarded [1] &lt;/td&gt;&lt;td&gt; Ignored &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt; Direct contributions of LLM-generated code &lt;/th&gt;&lt;td&gt; Forbidden &lt;/td&gt;&lt;td&gt; Forbidden &lt;/td&gt;&lt;td&gt; Strongly discouraged &lt;/td&gt;&lt;td&gt; Strongly discouraged &lt;/td&gt;&lt;td&gt; Discouraged &lt;/td&gt;&lt;td&gt; Permitted &lt;/td&gt;&lt;td&gt; Permitted &lt;/td&gt;&lt;td&gt; Permitted &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt; Direct use of LLM output in communications (bugs, mailing lists, etc.) &lt;/th&gt;&lt;td&gt; Forbidden &lt;/td&gt;&lt;td&gt; Forbidden &lt;/td&gt;&lt;td&gt; Forbidden (with possible exceptions) &lt;/td&gt;&lt;td&gt; Strongly discouraged &lt;/td&gt;&lt;td&gt; Discouraged &lt;/td&gt;&lt;td&gt; Permitted &lt;/td&gt;&lt;td&gt; Permitted &lt;/td&gt;&lt;td&gt; Permitted &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt; LLM use where LLM output does not end up in the code/message &lt;/th&gt;&lt;td&gt; Forbidden &lt;/td&gt;&lt;td&gt; No position, so permitted &lt;/td&gt;&lt;td&gt; Strongly discouraged &lt;/td&gt;&lt;td&gt; Strongly discouraged &lt;/td&gt;&lt;td&gt; Discouraged &lt;/td&gt;&lt;td&gt; Permitted &lt;/td&gt;&lt;td&gt; Permitted &lt;/td&gt;&lt;td&gt; Permitted &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt; Disclosure of LLM use &lt;/th&gt;&lt;td&gt; LLM use forbidden &lt;/td&gt;&lt;td&gt; LLM use largely forbidden, no further disclosure requirement &lt;/td&gt;&lt;td&gt; Disclosure required &lt;/td&gt;&lt;td&gt; Disclosure encouraged &lt;/td&gt;&lt;td&gt; Disclosure encouraged &lt;/td&gt;&lt;td&gt; Disclosure required &lt;/td&gt;&lt;td&gt; Disclosure required &lt;/td&gt;&lt;td&gt; Undisclosed LLM use is OK &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt; Use of LLMs by upstreams &lt;/th&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt; Condemned &lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt; “Not recommended” &lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt; Positive statements about LLMs &lt;/th&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt; “Here to stay” &lt;/td&gt;&lt;td&gt; Moderate &lt;/td&gt;&lt;td&gt; Strong &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h1&gt;&lt;a name=&quot;notes&quot;&gt;Notes&lt;/a&gt;&lt;/h1&gt;
&lt;h2&gt;&lt;a name=&quot;ordering&quot;&gt;Ordering&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I have tried to present the options in semantic order, with most LLM-negative proposals to the left, and the most LLM-positive to the right.
&lt;/p&gt;&lt;p&gt;I have not quoted the one-line titles for the options. These have generally been provided by the proponents of each option, and, unfortunately, some of them are IMO quite misleading.
&lt;/p&gt;&lt;p&gt;Note that, unfortunately, the voting software likes to assign numbers to options but also to preferences. Be mindful of this possible confusion when casting your vote. For clarity I quote only the option letters.
&lt;/p&gt;&lt;h2&gt;&lt;a name=&quot;upstream-llm-code-contributions&quot;&gt;Upstream LLM code contributions&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Some of the proposals acknowledge the uncertain legal status of LLM output. But all of them implicitly or explicitly assume that LLM output is or can be DFSG free. So none of the proposals forbid upstream projects with LLM-generated contents.
&lt;/p&gt;&lt;p&gt;None of the proposals would require us to go back to pre-LLM versions of the upstream projects we use, and attempt to fork and maintain them. I very much think there is room in the world for people to try to do that, but I don’t think the Debian project can be that effort.
&lt;/p&gt;&lt;p&gt;Given that the conclusions are the same in each case, whether the matter is discussed does not seem to me to be a significant difference. I have therefore not included a column for it.
&lt;/p&gt;&lt;h2&gt;&lt;a name=&quot;ability-of-individual-teams-to-set-their-own-rules&quot;&gt;Ability of individual teams to set their own rules&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;My proposal has a specific paragraph (7) explicitly permitting teams to set a “no LLM” policy. The other proposals do not discuss this point specifically. During the discussion, it seemed that most participants agreed that even options which explicitly permit LLM use generally do not prevent a team from setting its own more restrictive LLM policy.
&lt;/p&gt;&lt;p&gt;I have therefore not tabulated this aspect.
&lt;/p&gt;&lt;h2&gt;&lt;a name=&quot;exceptions-and-nuances&quot;&gt;Exceptions and nuances&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Few of the permissive texts are absolute or unconditional. To summarise I have necessarily left out some nuance.
&lt;/p&gt;&lt;p&gt;So for example when an entry says “permitted”, that generally means “permitted with conditions which are believed by LLM users to be readily satisfiable” (for example, DFSG-compatibility - see above).
&lt;/p&gt;&lt;h2&gt;&lt;a name=&quot;footnote-re-proposal-b&quot;&gt;[1] Footnote re proposal B&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Proposal B does mention that there are “concerns” about LLM use. But it fails to make an explicit statement about whether these concerns are justified.
&lt;/p&gt;&lt;p&gt;It then proceeds exactly as if they are not justified. IMO “disregarded” is a relatively mild term for such a rhetorical technique.
&lt;/p&gt;&lt;hr /&gt;
&lt;address&gt;
Edited 2026-08-18 09:02 UTC to make the proposal letters in the table be links.&lt;/address&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;img alt=&quot;comment count unavailable&quot; height=&quot;12&quot; src=&quot;https://www.dreamwidth.org/tools/commentcount?user=diziet&amp;amp;ditemid=20998&quot; style=&quot;vertical-align: middle;&quot; width=&quot;30&quot; /&gt; comments</content>
	<author>
	  <name>Ian Jackson</name>
	   <uri>https://diziet.dreamwidth.org/</uri> 
	</author>
	<source>
	  <title type="html">Ian Jackson</title>
	  <subtitle type="html">Ian Jackson</subtitle>
	  <link rel="self" href="https://diziet.dreamwidth.org/data/atom"/>
	  <id>tag:dreamwidth.org,2009-05-21:377446</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en-US">AI in Debian: The Vote, Proposals, and Nuance</title>
	<link href="https://changelog.complete.org/archives/44740-ai-in-debian-the-vote-proposals-and-nuance"/>
	<id>https://changelog.complete.org/?p=44740</id>
	<updated>2026-08-18T01:39:54+00:00</updated>
	<summary type="html" xml:lang="en-US"></summary>
	<content type="html" xml:lang="en-US">&lt;p&gt;Let me start with a hypothesis:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;For human developers, using coding LLMs magnifies their difference in skill levels.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I am one that rarely thinks things are always black and white.  Back in March, I wrote &lt;a href=&quot;https://changelog.complete.org/archives/42503-artificial-intelligence-shades-of-gray&quot;&gt;Artifial Intelligence: Shades of Gray&lt;/a&gt;.  Since then, I’ve had more of a chance to experiment with LLMs myself.  I also happen to work for an employer that is taking a very pragmatic approach to LLMs: teams and individuals use it as they see fit, but if they are causing considerable expense, they have to justify it.&lt;/p&gt;
&lt;p&gt;In various settings, I have seen the egregious examples of AI slop we all know about.  As I wrote in March, “I have seen it both waste more time than it saves, and save a ton of time.”&lt;/p&gt;
&lt;p&gt;I have come to see that, as a tool, it is most valuable when it is running under the supervision of an experienced engineer.  It is at its worst when it has no such supervision; the “vibe coding” and other low-quality slop we see.&lt;/p&gt;
&lt;p&gt;A coding agent is like a junior developer or research assistant.  When properly supervised, they help projects move along more quickly by letting a senior developer focus on the more difficult, less mundane aspects of the project.  But one couldn’t expect a junior developer to consistently deliver high-quality code and architecture on their own.&lt;/p&gt;
&lt;p&gt;Let’s put a pin in this idea and look at the story in Debian.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;LLM use in Debian&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;There is a &lt;a href=&quot;https://www.debian.org/vote/2026/vote_002&quot;&gt;vote happening&lt;/a&gt; in Debian around the use of LLMs.  In typical Debian fashion, there are 8 options to choose from, many of them similar.  Most of these proposals acknowledge there are different types of tasks done in Debian, but the proposals don’t differentiate between them well.  Let me do so here.  These are some of the LLM-relevant tasks people in Debian perform:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Packaging upstream software for Debian (by far the largest task)&lt;/li&gt;
&lt;li&gt;Writing Debian-specific code (eg, apt or the Debian installer)&lt;/li&gt;
&lt;li&gt;Maintaining Debian infrastructure (build systems, for instance)&lt;/li&gt;
&lt;li&gt;Writing documentation and translations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I’m going to focus my remarks here on packaging upstream software for Debian, since this is by far the most time-consuming developer task project-wide.&lt;/p&gt;
&lt;p&gt;It matters to our users that we get this right, and packaging quality is one of the things that sets Debian apart from other distros.  Packaging things for Debian requires knowledge of some specific tools, such as debhelper, that aren’t widely used anywhere else.  In most cases, it is fairly rote time-consuming work.  In other words, by its design, it requires people with senior-level skills to do grunt work.&lt;/p&gt;
&lt;p&gt;I can’t overstate how massive a burden this grunt work is.  I maintain some packages for Go and Rust.  By Debian policy, all of those packages’ dependencies must also exist as Debian packages, and be used to build against.  When upstream adopts a newer version of some library, it can unleash cascading dependencies that can take hours to sort out.  Worse, the Rust team and the Go team use entirely different ways of managing packages (Go uses one Git repo per package, while Rust has a monorepo with specialized scripts to import Cargo packages and generate Debian ones).  On top of that, we can’t just modify things like usual; we have to use quilt.  And on top of that, I’m also a backports maintainer, so all the work (and usually even more) has to be done there also.&lt;/p&gt;
&lt;p&gt;Now let’s pull on that pin from the earlier conversation.  This is exactly the kind of scenario that a well-supervised coding LLM is most effective in.  I could see a seasoned developer saving hours, maybe even days, by turning over the mundane tasks of managing trees of cascading dependencies over to a coding tool — and verifying and directing the process.  (Yes, I have been using em-dashes for years; LLMs have copied people like me, not the other way around!  This post was not written with any AI assistance.)&lt;/p&gt;
&lt;p&gt;Actually, this is almost a dream scenario for a coding assistant.  The result is time-consuming to formulate but easy to review, which is the opposite of the way these things often go.&lt;/p&gt;
&lt;p&gt;I can assure you with 100% certainty that humans aren’t adding a lot of value in this process.  It would be wrong to believe that a human is carefully reading every line of code in dozens of updated or new library packages.  The problem set is too big, the time too short, and the code too varied and complex.&lt;/p&gt;
&lt;p&gt;Coding agents seem to be most effective when there are strong test suites that they can test changes against.  Debian builds, especially of modern packages, tend to have this property.  Many packages have test suites that are run during build.  And, if the package builds in an isolated environment (and especially if its downstream dependencies do also), then there is a decent chance that it’s fairly correct.  Maybe needing some manual tweaking here and there, but generally a successful build is a reasonable indicator.&lt;/p&gt;
&lt;p&gt;You can argue that it would make more sense for Debian to just include dependencies in source packages, along with some version information to support security rebuilds, and I’d tend to agree with you.  But we are where we are.  This would be one of the more significant leaps forward in developer productivity, but it complicates things like copyright reviews.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Where are LLMs run?  What is the environmental impact?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Most of the proposals seem to make the assumption that LLMs must always run in some large, hosted datacenter.  As I noted in &lt;a href=&quot;https://changelog.complete.org/archives/42503-artificial-intelligence-shades-of-gray&quot;&gt;my March article&lt;/a&gt;, I have had credible results on even an older GPU running on solar power.&lt;/p&gt;
&lt;p&gt;That said, it is undeniable that LLMs are fueling a datacenter boom, and this in turn is producing a significant new demand for resources.  Most notably for the global scale: electricity, which is sometimes generated using carbon-emitting technologies.&lt;/p&gt;
&lt;p&gt;Bill McKibben, who has been a leading voice in the fight against climate change since the 1980s, has made some interesting points recently: he’s noted that &lt;a href=&quot;https://www.youtube.com/watch?v=_iOxU4-OLss&quot;&gt;solar power is the fastest kind of generation we can build&lt;/a&gt;, and a number of large AI companies are investing heavily in solar, even to the point of fully offsetting new datacenter’s needs.  On the other hand, he’s also noted that some companies are buying inefficient and dirty gas turbines.  It is decidedly a mixed bag.  The heavy investment in solar can have knock-on positive effects for infrastructure.  Obviously, not every picture here is rosy.  This analysis doesn’t touch on the real land and water use situation, either.&lt;/p&gt;
&lt;p&gt;On the other hand, if an LLM allows me to do in an hour what I would have done in a day, that’s a day of not heating or cooling the work area — generally not sustaining a human for the purpose of writing code for Debian.  HVAC energy consumption dwarfs my GPU, and I’d imagine probably also the slice of LLM energy used.&lt;/p&gt;
&lt;p&gt;Holistically, I would have to conclude the picture is mixed.  It is possible to use LLMs in a pretty green way, and also in a pretty dirty way.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Assuming Conditions Never Change&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;A flaw in most of these proposals is they assume that the conditions at this present moment will always hold.  In fact, that the conditions at the present moment will &lt;b&gt;not&lt;/b&gt; continue is something both AI cheerleaders and AI skeptics agree on.&lt;/p&gt;
&lt;p&gt;For instance:&lt;/p&gt;
&lt;p&gt;Ed Zitron has done a &lt;a href=&quot;https://www.wheresyoured.at/&quot;&gt;ton of research&lt;/a&gt; into the financing side of AI, and has concluded that the current model is unsustainable and headed for a significant bubble burst.  I’m not positioned to personally evaluate those claims, but if that happens, what is the result?  Perhaps it is a steeply increasing cost of inference for the frontier models, slower pace of training/evolution for them, etc.&lt;/p&gt;
&lt;p&gt;In a &lt;a href=&quot;https://www.youtube.com/watch?v=f_6TzmifxnI&quot;&gt;recent episode of Oxide and Friends&lt;/a&gt;, Simon Willison discussed the open weight models that are now available.  They have been making remarkable strides in efficiency and capabilities, to the point where $50,000 of hardware can now run high-end open weight models with capabilities that are at least in the same ballpark as the American frontier models.  This puts running high-end models locally squarely within reach of universities and small- to medium-sized businesses, with power requirements that can be met with standard commercial solar and wind installations.&lt;/p&gt;
&lt;p&gt;The lack of nuance in the more restrictive proposals is particularly concerning.  Proposal A doesn’t allow “the use or assitance of… LLMs”.  So it bans my solar-powered GPU.  It bans using LLMs to find security issues.  It bans all sorts of things that don’t seem to be ban-worthy, alongside the things that do.  And it codifies it in the very hard-to-change social contract.&lt;/p&gt;
&lt;p&gt;That proposal, and some like it, seem to imply that all LLM output is bad.  I grant you that AI slop is a real and legitimate concern, and many Open Source projects have to deal with it.  On the other hand, we have all seen first-hand how the security of the Linux kernel has benefited dramatically from AI analysis.  It is certain that black hats are using these tools.  If we refuse to use modern security tools, our security will be compromised (and what is the environmental and social impact of THAT?)&lt;/p&gt;
&lt;p&gt;I find the statement “Generative AI is characterized by producing output of a nature that would ordinarily be produced and consumed by humans” to be particularly interesting.  The same was once said of compilers.  &lt;/p&gt;
&lt;p&gt;&lt;b&gt;The Real Concerns&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;You might think from reading this that I am some AI cheerleader.  I’m not.  I share the ethics of the FLOSS movement, and have for decades.  I abhor the power and lack of ethics that many big names in the field are running with at the moment.  I’ve had to put up Anubis on this blog, for instance.&lt;/p&gt;
&lt;p&gt;I have personally experienced the effects of AI slop, especially at review time.  This is a real problem, though I don’t think the more draconian policies are likely to help (the looser “you must disclose” stand a fighting chance, but I’m not sure they would help, either.)  Done poorly, AI threatens developer burnout by overwhelming them with poor code and verbose but useless explanations.  Done well, AI can help prevent developer burnout by automating tedious and low-value tasks.&lt;/p&gt;
&lt;p&gt;Shouldn’t our goal be that humans submit work to Debian, using tools they prefer, and take responsibility for it?  Does it matter if someone uses ed, vim, emacs, or vscode?  If they use LSP or just run gcc manually?  I’d say we benefit from the diversity.  Wouldn’t we be better off to benefit from the diversity here, and judge work as we always have: on its merits, not what tools were used to create it?&lt;/p&gt;
&lt;p&gt;Fundamentally, a GR is a long and arduous process.  It’s not easy to reverse later.  Amending the Social Contract is even longer and more arduous (I should know; I may have been the &lt;a href=&quot;https://www.debian.org/vote/2000/vote_0008&quot;&gt;first one to try&lt;/a&gt;).  The LLM landscape is fast-moving.  None of us can really predict where it will be in a year.  Will the current market leading companies even still exist?  Will it be at all credible to refuse to use AI-assisted security tools?   What is the most effective way to deal with AI slop?  What level of utility will we be able to achieve with models run locally?&lt;/p&gt;
&lt;p&gt;Some of these proposals would make sense if drafted in some way short of a GR, which would allow more maneuverability as the landscape changes.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Brief analysis of the options&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Considering the proposals:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Proposal A: seeks to amend the social contract, which I am opposed to for reasons already laid out above.  It names some real concerns about AI that I agree with, but implies that all LLM uses and models are guilty of the problems, which is not the case with all of the claims.  It also sets us behind the curve on security and stability by forbidding the use or assistance of those tools, even if run by others.  It &lt;b&gt;requires us to ignore reports of actual security bugs, or correct fixes, if those reports were generated with the assistance of an LLM&lt;/b&gt;, which I find to be absolutely untenable.&lt;/li&gt;
&lt;li&gt;Proposal B: This is the “AI with accountability” approach.  It notes the real concerns with LLMs without painting with an overbroad brush.  It strikes me as level-headed and sensible.&lt;/li&gt;
&lt;li&gt;Proposal C: It paints with an over-broad brush and makes some non-binding requests.  Then it winds up largely like proposal B, though while it is worded more strongly, has fewer binding requirements (for instance, it lacks proposal B’s prohibition on transmitting sensitive information to untrusted providers)&lt;/li&gt;
&lt;li&gt;Proposal D: Seems broadly similar to proposal B, an “AI with accountability” approach.  I’m not really clear why we need both.&lt;/li&gt;
&lt;li&gt;Proposal E: Largely the status quo.  It is like proposals B and D in that it says humans are accountable for their contributions.  It encourages disclosure of LLM use, but does not mandate it.  Like proposal B, it prohibits disclosing sensitive information to third-party AI services.  Note that both proposals B and D have an appropriate nuance: a local model is fine, a third-party one is not.&lt;/li&gt;
&lt;li&gt;Proposal F: This seems really similar to proposal E.  I’m not sure why we have these two.&lt;/li&gt;
&lt;li&gt;Proposal G: Disallows “the output of generative AI as direct contributions to Debian.”  This is something of a weakened proposal A; it doesn’t seek to amend the social contract, nor does it ban all use; it simply bans the use as a direct contribution.&lt;/li&gt;
&lt;li&gt;Proposal H: Ban due to climate impacts.  “How is this even an argument” is disrespectful to reasoned conversation.  I have already noted that LLMs can be and are used in ways that are not climate-harming.  It explicitly contains no binding requirements at all, and is effectively a rant.  While I agree with the sentiment that climate change is an urgent problem, and that some LLMs are exacerbating it, I disagree with that all LLM usage does so and therefore disagree with the conclusion.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;In favor of nuance&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I find that black-and-white thinking is almost always something to be avoided.  I see it too often.  I see it in politics, I see it in our software, I see it in discussions around AI.  Are there deeply unethical things happening in AI?  &lt;a href=&quot;https://www.404media.co/we-tracked-a-shipment-of-rare-books-it-ended-at-an-amazon-ai-training-facility/&quot;&gt;Absolutely&lt;/a&gt;.  Are they doing some impressive things?  &lt;a href=&quot;https://cybersecuritynews.com/linux-patches-400-kernel-vulnerabilities/&quot;&gt;Also yes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We have accepted this nuance in other areas.  For instance, almost all the hardware Debian runs on has closed-source hardware, and has components manufactured or assembled in countries with some of the worst human rights records on the planet.  I’m not saying this is a great state of affairs.  It is something we should speak up about and act upon.  But the &lt;i&gt;worse&lt;/i&gt; state of affairs would be “no Debian because the hardware is impure”.&lt;/p&gt;</content>
	<author>
	  <name>John Goerzen</name>
	   <uri>https://changelog.complete.org</uri> 
	</author>
	<source>
	  <title type="html">The Changelog</title>
	  <subtitle type="html">Comments on family, technology, and society</subtitle>
	  <link rel="self" href="https://changelog.complete.org/feed"/>
	  <id>https://changelog.complete.org</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">Debian turns 33!</title>
	<link href="https://bits.debian.org/2026/08/debian-turns-33.html"/>
	<id>tag:bits.debian.org,2026-08-16:/2026/08/debian-turns-33.html</id>
	<updated>2026-08-16T13:00:00+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;It has now been thirty-three years since the Debian project was &lt;a href=&quot;https://wiki.debian.org/DebianHistory?action=AttachFile&amp;amp;do=get&amp;amp;target=Debian-announcement-1993.txt&quot;&gt;announced&lt;/a&gt; to
the world by Ian Murdock, on August 16, 1993. This anniversary is an
opportunity to reaffirm the goals, characteristics, and qualities of the
Debian project: itâ€™s an association of individuals who have made common cause
to create a free operating system. Our distribution is characterized by a
commitment to software freedom, as enshrined in the &lt;a href=&quot;https://www.debian.org/social_contract&quot;&gt;Debian Social Contract&lt;/a&gt;
and the Debian Free Software Guidelines. It focuses on security and
stability. This stability is crucial to Debian position in the free software
ecosystem.&lt;/p&gt;
&lt;p&gt;With our users as our priority, Debian makes special efforts regarding
accessibility with &lt;a href=&quot;https://www.debian.org/devel/debian-accessibility/&quot;&gt;Debian-Accessibility&lt;/a&gt; and diversity with our &lt;a href=&quot;https://wiki.debian.org/Teams/Outreach&quot;&gt;Outreach
Programs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Debian Day is a great opportunity to get together, whether for a local meetup,
or simply to grab a coffee with other members of the Debian community. Check
out the &lt;a href=&quot;https://wiki.debian.org/DebianDay/2026&quot;&gt;Debian Day wiki&lt;/a&gt; to see if there is a celebration near you. And if
there isn&#39;t, maybe &lt;a href=&quot;https://wiki.debian.org/DebianDay#Organize_a_local_Debian_Day_celebration&quot;&gt;you can organize it&lt;/a&gt; next year!&lt;/p&gt;
&lt;p&gt;Today is also an opportunity for you to start or resume your contributions
to Debian. For example, you can install the &lt;a href=&quot;https://packages.debian.org/trixie/how-can-i-help&quot;&gt;how-can-i-help package&lt;/a&gt; and
see if there is a bug in any of the software that you use that you can help
to fix, contribute small tips on how to install Debian on your machines to our
&lt;a href=&quot;https://wiki.debian.org/InstallingDebianOn/&quot;&gt;wiki pages&lt;/a&gt;, or put a &lt;a href=&quot;https://www.debian.org/CD/live/&quot;&gt;Debian live&lt;/a&gt; image in an USB memory
and give it to some person near you, who still didn&#39;t discover Debian.&lt;/p&gt;
&lt;p&gt;Thanks to everybody who has contributed to develop our beloved operating
system in these 33 years, and
&lt;strong&gt;Happy birthday Debian!&lt;/strong&gt;&lt;/p&gt;</content>
	<author>
	  <name>Debian Publicity Team</name>
	   <uri>https://bits.debian.org/</uri> 
	</author>
	<source>
	  <title type="html">Bits from Debian</title>
	  <subtitle type="html">Blog from the Debian Project</subtitle>
	  <link rel="self" href="https://bits.debian.org/feeds/feed.rss"/>
	  <id>https://bits.debian.org/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en-US">Sad Story</title>
	<link href="https://mako.cc/copyrighteous/sad-story"/>
	<id>https://mako.cc/copyrighteous/?p=3361</id>
	<updated>2026-08-16T07:01:10+00:00</updated>
	<summary type="html" xml:lang="en-US"></summary>
	<content type="html" xml:lang="en-US">&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://mako.cc/copyrighteous/wp-content/uploads/2026/08/PXL_20260719_1815328531-scaled.jpg&quot;&gt;&lt;img alt=&quot;Picture of a box in a fireplace saying: &quot; class=&quot;wp-image-3363&quot; height=&quot;1024&quot; src=&quot;https://mako.cc/copyrighteous/wp-content/uploads/2026/08/PXL_20260719_1815328531-576x1024.jpg&quot; width=&quot;576&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;Not a &lt;a href=&quot;https://screenshotsofdespair.tumblr.com/&quot;&gt;screenshot of despair&lt;/a&gt;. But only because it’s not a screenshot.&lt;/p&gt;</content>
	<author>
	  <name>Benjamin Mako Hill</name>
	   <uri>https://mako.cc/copyrighteous</uri> 
	</author>
	<source>
	  <title type="html">copyrighteous</title>
	  <subtitle type="html">rebel with rather too many causes</subtitle>
	  <link rel="self" href="https://mako.cc/copyrighteous/feed"/>
	  <id>https://mako.cc/copyrighteous</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">FrOSCon 2026: TLS Talk</title>
	<link href="http://sven.stormbind.net/blog/posts/talk_froscon2026_tls_ech_caa_https/"/>
	<id>http://sven.stormbind.net/blog/posts/talk_froscon2026_tls_ech_caa_https/</id>
	<updated>2026-08-15T18:02:03+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;Info: German content only, sorry.&lt;/p&gt;

&lt;p&gt;I was pondering for the past three years if I should give some sort
of TLS basics talk at FrOSCon. I finally stepped up this year
and gave that talk today, with the title
&quot;TLS, mTLS, SNI, ECH, CAA, HTTPS, PKI, Zertifikate und ein bisschen PQC&quot;.
I was too optimistic with my 50 slides, and had to drop the
Post Quantum Cryptography part at the end. Still got positive feedback from
Zugschlus and others - thanks a lot for that &amp;lt;3 - and was asked for the slides.
It&#39;s not a piece of art, but maybe it helps to release the LibreOffice odp file
as well, so others can use it as a base for other events or corp internal talks.
So here is the
&lt;a href=&quot;https://sven.stormbind.net/talks/froscon2026/froscon-tls-2026.pdf&quot;&gt;froscon-tls-2026.pdf&lt;/a&gt;
and
&lt;a href=&quot;https://sven.stormbind.net/talks/froscon2026/froscon-tls-2026.odp&quot;&gt;froscon-tls-2026.odp&lt;/a&gt;,
both released under the CC BY-NC license.&lt;/p&gt;

&lt;p&gt;The video is also available at
&lt;a href=&quot;https://media.ccc.de/v/froscon2026-3584-tls_mtls_sni_ech_caa_https_pki_zertifikate_und_ein_bisschen_pqc&quot;&gt;media.ccc.de&lt;/a&gt; if you want to watch it.&lt;/p&gt;

&lt;p&gt;Thanks to everyone who made FrOSCon happen for the 21th time!&lt;/p&gt;</content>
	<author>
	  <name>Sven Hoexter</name>
	   <uri>http://sven.stormbind.net/blog/</uri> 
	</author>
	<source>
	  <title type="html">a blog</title>
	  <subtitle type="html">a blog</subtitle>
	  <link rel="self" href="http://sven.stormbind.net/blog/index.rss"/>
	  <id>http://sven.stormbind.net/blog/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en-US">Hacked by Chinafans</title>
	<link href="https://etbe.coker.com.au/2026/08/15/hacked-chinafans/"/>
	<id>https://etbe.coker.com.au/?p=6276</id>
	<updated>2026-08-15T09:31:47+00:00</updated>
	<summary type="html" xml:lang="en-US"></summary>
	<content type="html" xml:lang="en-US">&lt;h2&gt;What Happened&lt;/h2&gt;
&lt;p&gt;On 2026/08/10 at 2:11 am Australian eastern standard time (2026/08/09 16:11 UTC) someone created a post titled “Hacked by Chinafans” on &lt;a href=&quot;https://doc.coker.com.au/&quot;&gt;my documents blog [1]&lt;/a&gt;. The person in question created an account named “67965e42a3c3” on that site with the email address 67965e42a3c3@google.com associated with it (I tried emailing that address and it bounced).&lt;/p&gt;
&lt;p&gt;At 04:28:41am Australian eastern standard time (18:28 UTC) I was sent an email titled “Have you been hacked” by a reader of my blogs who subscribed to the RSS feed of my documents blog (a blog that I never expected anyone to read by RSS). Along the lines of “the wisdom of crowds” should we have “the unexpected observation and problem reporting of crowds”? I appreciate the notification, I might not have noticed until the next time I watched an unusually good movie otherwise.&lt;/p&gt;
&lt;p&gt;The account in question was apparently created on 2026-07-21 at 16:43:47 (presumably UTC) even though at the time I believe creating accounts was not permitted. As an aside the timestamp of account creation is stored in the user_registered column of the wp_users table in the database, there doesn’t appear to be a way to access this in a standard WordPress installation other than doing a SQL query.&lt;/p&gt;
&lt;pre&gt;2026-07-24 15:43:17 status triggers-pending wordpress:all 7.0+dfsg1-1
2026-07-24 15:43:19 upgrade wordpress:all 7.0+dfsg1-1 7.0.2+dfsg1-1&lt;/pre&gt;
&lt;p&gt;Above are the relevant sections of my dpkg log showing the WordPress versions in use. I was running version 7.0+dfsg1-1 at the time the account was apparently created. I am confident in the accuracy of the dpkg logs and believe that they did not compromise the OS, I am not sure whether they ran hostile SQL code to change fields in the MySQL database so had to consider the possibility that the account creation time could have been set to a deliberately misleading value. I checked backups of the MySQL database stored off-site and found that the account in question was not in the 2026-07-21 backup (which was done before 16:43) but in the 2026-07-22 backup.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://en-au.wordpress.org/download/releases/&quot;&gt;WordPress release history [2]&lt;/a&gt; has version 7.0.1 released on 2026-07-09 and version 7.0.2 released on 2026-07-17. So presumably the attacker diffed the code on those releases, found an exploitable bug, and used it to create an account on my blog with admin privs. Then they waited a few weeks to see if I would notice and published a blog post when I didn’t notice.&lt;/p&gt;
&lt;h2&gt;WordPress Deficiencies&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;WordPress doesn’t seem to store the version it’s running at the time of operations. So anyone who doesn’t have a suitable external log of versions deployed (such as the dpkg.log file for a Debian managed installation) won’t know for sure which version was running. It supports automatic updates but you can’t be sure that they happened soon after the release.&lt;/li&gt;
&lt;li&gt;There is no log of IP addresses used for operations. There are apparently some 3rd party modules to log such things and web pages documenting how to modify the PHP to add it but nothing in the standard distribution.&lt;/li&gt;
&lt;li&gt;Software should have a standard distribution with some support for logging of security relevant data. The typical situation is that people don’t plan for logging such things until after they have been attacked so the data should be recorded without users going out of their way to log it.&lt;/li&gt;
&lt;li&gt;A log of security relevant data should be stored in a database table with only insert access (no update, delete, or drop).&lt;/li&gt;
&lt;li&gt;Ideally a CMS would support different database accounts for different purposes. Someone from an internal network or VPN could talk to an instance of the web server which has a database username and password giving full access. Everyone from outside the trusted range gets an instance of the web server with database access only allowing to read the posts and appearance configuration and to enter comments. If the database didn’t allow the account used for public access to create new admin users or create posts then it would be a lot harder for attackers.&lt;/li&gt;
&lt;li&gt;Ideally for everything that stores user account data there would be an easy way of getting a list of users in a plain text format to allow running diff. The design of WordPress has two tables, one for users and one for encoded metadata about users of which one will be the access level. The following SQL command will give a list of all users that aren’t subscribers (everyone above the minimum level of access which is typical for new users) along with their encoded password and access level. This could be used in a monitoring system to alert about new privileged users. The TABLE_PREFIX variable is for the prefix for WordPress tables, which is “wp_” by default but can be any legal value.
&lt;pre&gt;select $TABLE_PREFIXusers.user_login, $TABLE_PREFIXusers.user_pass, $TABLE_PREFIXusermeta.meta_value from  $TABLE_PREFIXusers join $TABLE_PREFIXusermeta on $TABLE_PREFIXusers.id = $TABLE_PREFIXusermeta.user_id and meta_key=&#39;$TABLE_PREFIXcapabilities&#39; and meta_value != &#39;a:1:{s:10:&quot;subscriber&quot;;b:1;}&#39;;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;What Next?&lt;/h2&gt;
&lt;p&gt;The blog post they created had a couple of links to Telegram which could presumably be used to contact them. If anyone involved in computer security wants a copy of the original post to do so then they can contact me by any of the usual methods.&lt;/p&gt;
&lt;p&gt;I am interested in communication with the attacker if they wish, Telegram is not a service I use but I presume that anyone capable of doing this sort of attack is also capable of finding other ways of contacting me.&lt;/p&gt;
&lt;p&gt;I have idly considered changing to a static site generator, &lt;a href=&quot;https://jamstack.org/generators/&quot;&gt;here is a good list of static site generators [3]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I have also idly considered other platforms for blogging such as Lemmy. I don’t know if Lemmy is better than WordPress for security and updates, but there are plenty of free instances running where it wouldn’t be an issue I have to work on.&lt;/p&gt;
&lt;h2&gt;15 Years&lt;/h2&gt;
&lt;p&gt;It’s been &lt;a href=&quot;https://etbe.coker.com.au/2011/12/31/server-cracked/&quot;&gt;15 years since my blog server was cracked by a trojaned ssh client [4]&lt;/a&gt;. At least this time it was only one service that was compromised.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[1]&lt;a href=&quot;https://doc.coker.com.au/&quot;&gt; https://doc.coker.com.au/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[2]&lt;a href=&quot;https://en-au.wordpress.org/download/releases/&quot;&gt; https://en-au.wordpress.org/download/releases/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[3]&lt;a href=&quot;https://jamstack.org/generators/&quot;&gt; https://jamstack.org/generators/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[4]&lt;a href=&quot;https://etbe.coker.com.au/2011/12/31/server-cracked/&quot;&gt; https://etbe.coker.com.au/2011/12/31/server-cracked/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;yarpp yarpp-related yarpp-related-rss yarpp-template-list&quot;&gt;

&lt;p&gt;Related posts:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2006/09/12/blogging-software/&quot; rel=&quot;bookmark&quot; title=&quot;blogging software&quot;&gt;blogging software&lt;/a&gt; &lt;small&gt;Previously I asked for advice about running an Intranet blog,...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2007/10/22/wordpress-and-thumbnails/&quot; rel=&quot;bookmark&quot; title=&quot;WordPress and Thumbnails&quot;&gt;WordPress and Thumbnails&lt;/a&gt; &lt;small&gt;I have just had a lot of trouble with Thumbnails...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2010/08/04/wordpress-maintainability/&quot; rel=&quot;bookmark&quot; title=&quot;WordPress Maintainability&quot;&gt;WordPress Maintainability&lt;/a&gt; &lt;small&gt;For a while I’ve been maintaining my own WordPress packages....&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content>
	<author>
	  <name>etbe</name>
	   <uri>https://etbe.coker.com.au</uri> 
	</author>
	<source>
	  <title type="html">etbe – Russell Coker</title>
	  <subtitle type="html">Linux, politics, and other interesting things</subtitle>
	  <link rel="self" href="https://etbe.coker.com.au/feed/"/>
	  <id>https://etbe.coker.com.au</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en-US">AMD Video Drivers, LLMs, and Debian Kernels</title>
	<link href="https://etbe.coker.com.au/2026/08/15/amd-video-llms-debian-kernels/"/>
	<id>https://etbe.coker.com.au/?p=6278</id>
	<updated>2026-08-15T08:09:51+00:00</updated>
	<summary type="html" xml:lang="en-US"></summary>
	<content type="html" xml:lang="en-US">&lt;h2&gt;The AMD GPU Problem&lt;/h2&gt;
&lt;p&gt;For a while I’ve been having issues with AMD GPUs, video locking up periodically. &lt;a href=&quot;https://etbe.coker.com.au/2025/11/09/amd-video-driver-issues/&quot;&gt;I blogged about this late last year but I first had noticeable problems early last year [1]&lt;/a&gt;. The problems hadn’t only concerned my workstation but also my home server which is also used as a workstation. I’ve recently upgraded my machines to Debian/Testing, my home server has been generally OK but my workstation has been crashing a lot. Every second day when on kernel 7.1.6 and then when on 7.1.7 it crashed at least once a day.&lt;/p&gt;
&lt;p&gt;The AMD GPUs I have are “&lt;b&gt;[AMD/ATI] Baffin [Radeon RX 460/560D / Pro 450/455/460/555/555X/560/560X] (rev e5)&lt;/b&gt;” in my main desktop workstation, “&lt;b&gt;[AMD/ATI] Lexa [Radeon 540X/550X/630 / RX 640 / E9171 MCM] (rev c1)&lt;/b&gt;” in my build server, and “&lt;b&gt;[AMD/ATI] Baffin [Radeon RX 460/560D / Pro 450/455/460/555/555X/560/560X] (rev cf)&lt;/b&gt;” in my home server. They aren’t new GPUs, but also aren’t really old and they all support 4K and better resolution.&lt;/p&gt;
&lt;h2&gt;Chat GPT Was Useful&lt;/h2&gt;
&lt;p&gt;When I googled the errors I was seeing I found nothing useful. On the suggestion of a friend I tried asking ChatGPT. Generally I don’t recommend asking LLMs about such things, but it can be a last resort as long as you know what you are doing. ChatGPT asked me to run a number of commands to get information for it to make more informed decisions. I know that the output of lspci and similar commands isn’t a risk, but a novice could be tricked into running commands that expose sensitive data.&lt;/p&gt;
&lt;p&gt;ChatGPT did give me some useful information, not a solution but an indication that the problem was due to driver bugs.&lt;/p&gt;
&lt;h2&gt;Upgrading to Experimental&lt;/h2&gt;
&lt;p&gt;Debian/Experimental is for packages that are expected to have problems and generally aren’t recommended even for the people who usually use Debian/Unstable. It’s commonly used for packages that are needed to develop other packages, EG new libraries that aren’t fully usable but which are needed to package newer versions of applications.&lt;/p&gt;
&lt;p&gt;I upgraded my workstation to the Debian/Experimental kernel 7.2~rc7-1~exp1 after having tried every other convenient option. Generally I wouldn’t recommend that anyone run an Experimental kernel without a really good reason, but crashing more than once a day is a fairly good reason. That kernel has now given me over 4 days of uptime on a system that previously wouldn’t last a day. I installed it on my dual-socket build server that has an old AMD GPU in it for test purposes and that also hasn’t crashed since. I installed it on my ML test machine which has an Intel B580 Battlemage GPU with 16G of VRAM and was repeatedly getting a kernel panic related to the GPU a few seconds after boot and now it also works correctly.&lt;/p&gt;
&lt;p&gt;It seems that the 7.1.x kernels have bugs in the AMD video drivers and in some part of the code that affects Intel video drivers and that the bugs in question are fixed in the tree that will become 7.2. I would not recommend anyone who has a 7.1.x kernel working fine for them try 7.2 RC kernels at this time, but anyone who has GPU related problems (particularly Intel and AMD GPUs) should definitely test it out.&lt;/p&gt;
&lt;p&gt;I also don’t recommend upgrading any system with an AMD GPU to Debian/Testing or Debian/Unstable at this time unless you are also prepared to install an Experimental kernel if it becomes necessary.&lt;/p&gt;
&lt;p&gt;There are a several kernel log dumps related to this after the break (which won’t be in RSS feeds). This is mainly for Google so that other people who have such issues can get more useful results out of Google searches than I got.&lt;/p&gt;
&lt;h2&gt;Future Support Options&lt;/h2&gt;
&lt;p&gt;Separate from the issue of whether commercial LLMs like ChatGPT can be useful for solving technical problems there is the issue of whether they are desirable. I think that we really don’t want people solving problems in FOSS systems with closed-source LLMs. This leads to loss of privacy, loss of the control users deserve to have over their own systems, and an implied promotion of non-fee software.&lt;/p&gt;
&lt;p&gt;I think that the ideal would be to have a cross distribution effort to generate training data for a support LLM system which can then be further trained by each distribution for a greater emphasis on distribution specific issues.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[1]&lt;a href=&quot;https://etbe.coker.com.au/2025/11/09/amd-video-driver-issues/&quot;&gt; https://etbe.coker.com.au/2025/11/09/amd-video-driver-issues/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span id=&quot;more-6278&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Errors on AMD GPUs&lt;/h2&gt;
&lt;pre&gt;2026-08-09T23:03:06.004792+10:00 xev kernel: amdgpu 0000:02:00.0: GPU fault detected: 147 0x00024802
2026-08-09T23:03:06.004792+10:00 xev kernel: amdgpu 0000:02:00.0: Process kscreenlocker_g pid 42037 thread kscreenloc:cs0 pid 42044
2026-08-09T23:03:06.004793+10:00 xev kernel: amdgpu 0000:02:00.0: VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x00000800
2026-08-09T23:03:06.004794+10:00 xev kernel: amdgpu 0000:02:00.0: VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x0F048002
2026-08-09T23:03:06.004795+10:00 xev kernel: amdgpu 0000:02:00.0: VM fault (0x02, vmid 7, pasid 130) at page 2048, write from &#39;TC0&#39; (0x54433000) (72)
2026-08-09T23:03:06.008762+10:00 xev kernel: amdgpu 0000:02:00.0: GPU fault detected: 147 0x00004802
2026-08-09T23:03:06.008768+10:00 xev kernel: amdgpu 0000:02:00.0: Process kscreenlocker_g pid 42037 thread kscreenloc:cs0 pid 42044&lt;/pre&gt;
&lt;pre&gt;2026-08-04T01:13:37.505839+10:00 xev kernel: ------------[ cut here ]------------ 
2026-08-04T01:13:37.505859+10:00 xev kernel: amdgpu 0000:02:00.0: [drm] drm_WARN_ON_ONCE(cur_vblank != vblank-&amp;gt;last) 
2026-08-04T01:13:37.505862+10:00 xev kernel: WARNING: CPU: 6 PID: 210534 at drivers/gpu/drm/drm_vblank.c:362 drm_update_vblank_count+0x2f1/0x3c0 [drm] 
2026-08-04T01:13:37.505866+10:00 xev kernel: snd_intel_dspcfg wmi_bmof rc_core snd_intel_sdw_acpi drm_ttm_helper uas realtek snd_usbmidi_lib snd_hda_codec ttm mdio_devres snd_hda_core snd_seq_midi drm_kms_helper usb_storage mc snd_hwdep libphy snd_seq_midi_event intel_uncore snd_pcm_oss i2c_algo_bit serio_raw snd_rawmidi pcspkr snd_mixer_oss i2c_i801 video snd_seq snd_pcm i2c_smbus lpc_ich snd_seq_device mei_me e1000e snd_timer mei snd tpm_infineon soundcore joydev bnx2 wmi button nfsd auth_rpcgss nfs_acl lockd grace sunrpc coretemp br_netfilter bridge stp llc sg ghash_clmulni_intel loop msr i2c_dev drm efi_pstore configfs nfnetlink ip_tables x_tables autofs4 btrfs blake2b_generic dm_crypt dm_mod raid10 raid456 async_raid6_recov async_memcpy async_pq async_xor async_tx libcrc32c xor raid6_pq raid1 raid0 md_mod ext4 crc16 mbcache jbd2 crc32c_generic virtio_blk evdev hid_generic usbhid hid sd_mod xhci_pci xhci_hcd ahci ehci_pci ehci_hcd libahci crc32c_intel libata usbcore aesni_intel nvme psmouse scsi_mod gf128mul crypto_simd nvme_core cryptd 
2026-08-04T01:13:37.505879+10:00 xev kernel: nvme_auth scsi_common usb_common efivarfs 
2026-08-04T01:13:37.505880+10:00 xev kernel: CPU: 6 UID: 1008 PID: 210534 Comm: sshd-session Tainted: G D 6.12.88+deb13-amd64 #1 Debian 6.12.88-1 
2026-08-04T01:13:37.505881+10:00 xev kernel: Tainted: [D]=DIE 
2026-08-04T01:13:37.505883+10:00 xev kernel: Hardware name: Hewlett-Packard HP Z640 Workstation/212A, BIOS M60 v02.61 03/23/2023 
2026-08-04T01:13:37.505884+10:00 xev kernel: RIP: 0010:drm_update_vblank_count+0x2f1/0x3c0 [drm] 
2026-08-04T01:13:37.505885+10:00 xev kernel: Code: 48 8b 5f 50 48 85 db 75 03 48 8b 1f e8 68 eb 2b cf 48 c7 c1 70 3e cb c0 48 89 da 48 c7 c7 f9 6f cb c0 48 89 c6 e8 af d7 a6 ce &amp;lt;0f&amp;gt; 0b e9 4b fe ff ff 48 8b 4c 24 18 e9 31 fe ff ff 31 f6 48 85 db 
2026-08-04T01:13:37.505887+10:00 xev kernel: RSP: 0000:ffffd3cc8681fca0 EFLAGS: 00010082 
2026-08-04T01:13:37.505888+10:00 xev kernel: RAX: 0000000000000000 RBX: ffff8c6b42b13710 RCX: 0000000000000027 
2026-08-04T01:13:37.505889+10:00 xev kernel: RDX: ffff8c89ef521788 RSI: 0000000000000001 RDI: ffff8c89ef521780 
2026-08-04T01:13:37.505890+10:00 xev kernel: RBP: 0000000000000000 R08: 0000000000000000 R09: ffffd3cc8681fb20 
2026-08-04T01:13:37.505891+10:00 xev kernel: R10: ffff8c8a6fef3628 R11: 0000000000000003 R12: 0000000000000000 
2026-08-04T01:13:37.505892+10:00 xev kernel: R13: ffff8c6c07853828 R14: 0000000000000003 R15: 0000000000000000 
2026-08-04T01:13:37.505893+10:00 xev kernel: FS: 00007ffaf2fd5880(0000) GS:ffff8c89ef500000(0000) knlGS:0000000000000000 
2026-08-04T01:13:37.505895+10:00 xev kernel: CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 
2026-08-04T01:13:37.505896+10:00 xev kernel: CR2: 00007fb1718c8000 CR3: 000000074521a004 CR4: 00000000003706f0 
2026-08-04T01:13:37.505897+10:00 xev kernel: Call Trace: 
2026-08-04T01:13:37.505898+10:00 xev kernel:  
2026-08-04T01:13:37.505899+10:00 xev kernel: drm_crtc_accurate_vblank_count+0x41/0xc0 [drm] 
2026-08-04T01:13:37.505900+10:00 xev kernel: dm_pflip_high_irq+0x155/0x330 [amdgpu] 
2026-08-04T01:13:37.505901+10:00 xev kernel: amdgpu_dm_irq_handler+0x85/0x1f0 [amdgpu] 
2026-08-04T01:13:37.505902+10:00 xev kernel: amdgpu_irq_dispatch+0xd2/0x230 [amdgpu] 
2026-08-04T01:13:37.505903+10:00 xev kernel: amdgpu_ih_process+0x84/0x100 [amdgpu] 
2026-08-04T01:13:37.505904+10:00 xev kernel: amdgpu_irq_handler+0x23/0x60 [amdgpu] 
2026-08-04T01:13:37.505905+10:00 xev kernel: __handle_irq_event_percpu+0x4a/0x190
2026-08-04T01:13:37.505907+10:00 xev kernel: handle_irq_event+0x38/0x80 
2026-08-04T01:13:37.505908+10:00 xev kernel: handle_edge_irq+0x8b/0x230 
2026-08-04T01:13:37.505909+10:00 xev kernel: __common_interrupt+0x45/0xe0 
2026-08-04T01:13:37.505910+10:00 xev kernel: common_interrupt+0x42/0xa0 
2026-08-04T01:13:37.505911+10:00 xev kernel: asm_common_interrupt+0x26/0x40 
2026-08-04T01:13:37.505912+10:00 xev kernel: RIP: 0033:0x7ffaf3c5fd7b 
2026-08-04T01:13:37.505913+10:00 xev kernel: Code: 70 c7 00 66 0f 6e f8 c1 ef 02 66 0f 70 f7 e0 83 c7 01 66 0f ef ff 66 0f fa f2 0f 1f 44 00 00 f3 0f 7e 01 66 0f 6f ce 83 c6 01 &amp;lt;48&amp;gt; 83 e9 08 f2 0f 70 c0 1b 66 0f 6f e0 66 0f 6f e8 66 41 0f f9 c0 
2026-08-04T01:13:37.505915+10:00 xev kernel: RSP: 002b:00007fff86a5e0e0 EFLAGS: 00000202 
2026-08-04T01:13:37.505916+10:00 xev kernel: RAX: 0000000000008000 RBX: 0000562614a04050 RCX: 0000562614982ed8 
2026-08-04T01:13:37.505946+10:00 xev kernel: RDX: 0000000000007fe2 RSI: 0000000000000fad RDI: 0000000000002000 
2026-08-04T01:13:37.505948+10:00 xev kernel: RBP: 0000000000000000 R08: 000056261498ac40 R09: 0000000000008000 
2026-08-04T01:13:37.505949+10:00 xev kernel: R10: 0000000000000066 R11: 0000000000007fe1 R12: 0000000000007efa
2026-08-04T01:13:37.505950+10:00 xev kernel: R13: 0000000000008000 R14: 0000000000008000 R15: 000000000000ffe0 
2026-08-04T01:13:37.505951+10:00 xev kernel:  
2026-08-04T01:13:37.505953+10:00 xev kernel: ---[ end trace 0000000000000000 ]--- 
2026-08-04T01:55:40.844110+10:00 xev kernel: pcieport 0000:00:03.3: AER: Multiple Correctable error message received from 0000:00:03.3 
2026-08-04T01:55:40.844130+10:00 xev kernel: pcieport 0000:00:03.3: PCIe Bus Error: severity=Correctable, type=Data Link Layer, (Receiver ID) 
2026-08-04T01:55:40.844132+10:00 xev kernel: pcieport 0000:00:03.3: device [8086:6f0b] error status/mask=00000040/00002000 
2026-08-04T01:55:40.844134+10:00 xev kernel: pcieport 0000:00:03.3: [ 6] BadTLP&lt;/pre&gt;
&lt;pre&gt;2026-08-11T09:33:33.473855+10:00 xev kernel: amdgpu 0000:02:00.0: GPU fault detected: 147 0x00024802
2026-08-11T09:33:33.473871+10:00 xev kernel: amdgpu 0000:02:00.0: Process kscreenlocker_g pid 150905 thread kscreenloc:cs0 pid 150912
2026-08-11T09:33:33.473871+10:00 xev kernel: amdgpu 0000:02:00.0: VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x00000800
2026-08-11T09:33:33.473873+10:00 xev kernel: amdgpu 0000:02:00.0: VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x0F048002
2026-08-11T09:33:33.473873+10:00 xev kernel: amdgpu 0000:02:00.0: VM fault (0x02, vmid 7, pasid 63) at page 2048, write from &#39;TC0&#39; (0x54433000) (72)
2026-08-11T09:33:33.473874+10:00 xev kernel: amdgpu 0000:02:00.0: GPU fault detected: 147 0x00004802
2026-08-11T09:33:33.473874+10:00 xev kernel: amdgpu 0000:02:00.0: Process kscreenlocker_g pid 150905 thread kscreenloc:cs0 pid 150912
2026-08-11T09:33:33.473875+10:00 xev kernel: amdgpu 0000:02:00.0: VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x00000800
2026-08-11T09:33:33.473876+10:00 xev kernel: amdgpu 0000:02:00.0: VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x0E048002
2026-08-11T09:33:33.473876+10:00 xev kernel: amdgpu 0000:02:00.0: VM fault (0x02, vmid 7, pasid 63) at page 2048, read from &#39;TC0&#39; (0x54433000) (72)
2026-08-11T09:33:35.481863+10:00 xev kernel: amdgpu 0000:02:00.0: Dumping IP State
2026-08-11T09:33:35.481875+10:00 xev kernel: amdgpu 0000:02:00.0: Dumping IP State Completed
2026-08-11T09:33:35.481875+10:00 xev kernel: amdgpu 0000:02:00.0: [drm] AMDGPU device coredump file has been created
2026-08-11T09:33:35.481876+10:00 xev kernel: amdgpu 0000:02:00.0: [drm] Check your /sys/class/drm/card0/device/devcoredump/data
2026-08-11T09:33:35.481877+10:00 xev kernel: amdgpu 0000:02:00.0: GPU fault detected: 146 0x0110040c
2026-08-11T09:33:35.481877+10:00 xev kernel: amdgpu 0000:02:00.0: Process kscreenlocker_g pid 150905 thread kscreenloc:cs0 pid 150912
2026-08-11T09:33:35.481878+10:00 xev kernel: amdgpu 0000:02:00.0: VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x00000022
2026-08-11T09:33:35.481879+10:00 xev kernel: amdgpu 0000:02:00.0: VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x0E00400C
2026-08-11T09:33:35.481879+10:00 xev kernel: amdgpu 0000:02:00.0: VM fault (0x0c, vmid 7, pasid 63) at page 34, read from &#39;TC3&#39; (0x54433300) (4)
2026-08-11T09:33:35.489845+10:00 xev kernel: amdgpu 0000:02:00.0: ring gfx timeout, signaled seq=5123619, emitted seq=5123621
2026-08-11T09:33:35.489853+10:00 xev kernel: amdgpu 0000:02:00.0: Process kscreenlocker_g pid 150905 thread kscreenloc:cs0 pid 150912
2026-08-11T09:33:35.489854+10:00 xev kernel: amdgpu 0000:02:00.0: GPU reset begin!. Source: 1
2026-08-11T09:33:35.493839+10:00 xev kernel: amdgpu 0000:02:00.0: [drm] ERROR Failed to initialize parser -125!
2026-08-11T09:33:35.737848+10:00 xev kernel: amdgpu: cp is busy, skip halt cp
2026-08-11T09:33:35.897842+10:00 xev kernel: amdgpu: rlc is busy, skip halt rlc
2026-08-11T09:33:35.897852+10:00 xev kernel: amdgpu 0000:02:00.0: BACO reset
2026-08-11T09:33:36.485849+10:00 xev kernel: amdgpu 0000:02:00.0: GPU reset succeeded, trying to resume
2026-08-11T09:33:36.485859+10:00 xev kernel: amdgpu 0000:02:00.0: [drm] PCIE GART of 256M enabled (table at 0x000000F402000000).
2026-08-11T09:33:36.485860+10:00 xev kernel: amdgpu 0000:02:00.0: VRAM is lost due to GPU reset!&lt;/pre&gt;
&lt;h2&gt;Errors on Battlemage&lt;/h2&gt;
&lt;pre&gt;Aug 11 17:01:47 ami kernel: ------------[ cut here ]------------
Aug 11 17:01:47 ami kernel: xe 0000:23:00.0: [drm] DMC 1 mmio[0]/0x5f074 incorrect (expected 0x96fc0, current 0x0)
Aug 11 17:01:47 ami kernel: WARNING: drivers/gpu/drm/i915/display/intel_dmc.c:696 at assert_dmc_loaded+0x275/0x430 [xe], CPU#0: kworker/0:3/215
Aug 11 17:01:47 ami kernel: Modules linked in: intel_rapl_msr intel_rapl_common intel_uncore_frequency intel_uncore_frequency_common xe(+) skx_edac snd_h&amp;gt;
Aug 11 17:01:47 ami kernel:  msr i2c_dev configfs efi_pstore efivarfs autofs4 btrfs libblake2b raid6_pq xor mpt3sas raid_class scsi_transport_sas megarai&amp;gt;
Aug 11 17:01:47 ami kernel: CPU: 0 UID: 0 PID: 215 Comm: kworker/0:3 Not tainted 7.1.7+deb14-amd64 #1 PREEMPT(lazy)  Debian 7.1.7-1 
Aug 11 17:01:47 ami kernel: Hardware name: HP HP Z4 G4 Workstation/81C5, BIOS P61 v03.00 04/15/2026
Aug 11 17:01:47 ami kernel: Workqueue: sync_wq local_pci_probe_callback
Aug 11 17:01:47 ami kernel: RIP: 0010:assert_dmc_loaded+0x291/0x430 [xe]
Aug 11 17:01:47 ami kernel: Code: 24 10 e8 f2 e5 a3 ce 48 8d 3d bb 85 0d 00 8b 54 24 0c 45 89 e9 45 89 e0 48 89 c6 52 8b 4c 24 2c 51 8b 4c 24 30 48 8b 54&amp;gt;
Aug 11 17:01:47 ami kernel: RSP: 0018:ffffd27ac0b87b80 EFLAGS: 00010282
Aug 11 17:01:47 ami kernel: RAX: ffffffffc1743dfd RBX: ffff8c5b80e54000 RCX: 0000000000000001
Aug 11 17:01:47 ami kernel: RDX: ffff8c5b81df5a10 RSI: ffffffffc1743dfd RDI: ffffffffc1605860
Aug 11 17:01:47 ami kernel: RBP: ffff8c5b86955000 R08: 0000000000000000 R09: 000000000005f074
Aug 11 17:01:47 ami kernel: R10: 0000000000000000 R11: 0000000000091050 R12: 0000000000000000
Aug 11 17:01:47 ami kernel: R13: 000000000005f074 R14: 0000000000000001 R15: 0000000000000000
Aug 11 17:01:47 ami kernel: FS:  0000000000000000(0000) GS:ffff8c673e172000(0000) knlGS:0000000000000000
Aug 11 17:01:47 ami kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
Aug 11 17:01:47 ami kernel: CR2: 00007ffed1fdcd00 CR3: 0000000ae942a003 CR4: 00000000003706f0
Aug 11 17:01:47 ami kernel: Call Trace:
Aug 11 17:01:47 ami kernel:  
Aug 11 17:01:47 ami kernel:  intel_dmc_enable_pipe+0xe4/0x290 [xe]
Aug 11 17:01:47 ami kernel:  ? drm_crtc_vblank_reset+0x4d/0x120 [drm]
Aug 11 17:01:47 ami kernel:  intel_modeset_setup_hw_state+0xb50/0x1e10 [xe]
Aug 11 17:01:47 ami kernel:  ? intel_display_driver_probe_nogem+0x138/0x1a0 [xe]
Aug 11 17:01:47 ami kernel:  intel_display_driver_probe_nogem+0x138/0x1a0 [xe]
Aug 11 17:01:47 ami kernel:  xe_display_init_early+0xb2/0x140 [xe]
Aug 11 17:01:47 ami kernel:  xe_device_probe+0x3c8/0xb50 [xe]
Aug 11 17:01:47 ami kernel:  ? xe_pm_init_early+0x152/0x160 [xe]
Aug 11 17:01:47 ami kernel:  xe_pci_probe+0xc26/0x1150 [xe]
Aug 11 17:01:47 ami kernel:  local_pci_probe+0x3e/0x90
Aug 11 17:01:47 ami kernel:  local_pci_probe_callback+0x16/0x20
Aug 11 17:01:47 ami kernel:  process_one_work+0x19d/0x3a0
Aug 11 17:01:47 ami kernel:  worker_thread+0x1af/0x320
Aug 11 17:01:47 ami kernel:  ? __pfx_worker_thread+0x10/0x10
Aug 11 17:01:47 ami kernel:  kthread+0xe3/0x120
Aug 11 17:01:47 ami kernel:  ? __pfx_kthread+0x10/0x10
Aug 11 17:01:47 ami kernel:  ret_from_fork+0x2b2/0x340
Aug 11 17:01:47 ami kernel:  ? __pfx_kthread+0x10/0x10
Aug 11 17:01:47 ami kernel:  ret_from_fork_asm+0x1a/0x30
Aug 11 17:01:47 ami kernel:  
Aug 11 17:01:47 ami kernel: ---[ end trace 0000000000000000 ]---&lt;/pre&gt;
&lt;div class=&quot;yarpp yarpp-related yarpp-related-rss yarpp-template-list&quot;&gt;

&lt;p&gt;Related posts:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2025/11/09/amd-video-driver-issues/&quot; rel=&quot;bookmark&quot; title=&quot;AMD Video Driver Issues&quot;&gt;AMD Video Driver Issues&lt;/a&gt; &lt;small&gt;I have had some graphics hangs on my HP z640...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2008/10/22/kernel-issues-with-debian-xen-and-centos-kernels/&quot; rel=&quot;bookmark&quot; title=&quot;Kernel issues with Debian Xen and CentOS Kernels&quot;&gt;Kernel issues with Debian Xen and CentOS Kernels&lt;/a&gt; &lt;small&gt;Last time I tried using a Debian 64bit Xen kernel...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2025/11/02/pcie-problems/&quot; rel=&quot;bookmark&quot; title=&quot;PCIe Problems&quot;&gt;PCIe Problems&lt;/a&gt; &lt;small&gt;HP z840 Dead Slot I just had an issue with...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content>
	<author>
	  <name>etbe</name>
	   <uri>https://etbe.coker.com.au</uri> 
	</author>
	<source>
	  <title type="html">etbe – Russell Coker</title>
	  <subtitle type="html">Linux, politics, and other interesting things</subtitle>
	  <link rel="self" href="https://etbe.coker.com.au/feed/"/>
	  <id>https://etbe.coker.com.au</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en-US">File recovery in process...</title>
	<link href="https://gwolf.org/2026/08/file-recovery-in-process.html"/>
	<id>https://gwolf.org/2026/08/file-recovery-in-process.html</id>
	<updated>2026-08-13T17:47:20+00:00</updated>
	<summary type="html" xml:lang="en-US"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;Ohai,&lt;/p&gt;

&lt;p&gt;I have some pending, encrypted mails to answer. And some of my answers for
the next few days (particularly to what pertains to the &lt;a href=&quot;https://www.debian.org/vote/2026/vote_002&quot;&gt;current
in-discussion vote on LLM usage in
Debian&lt;/a&gt;) will be unsigned, even
though Iâ€™d like otherwise.&lt;/p&gt;

&lt;p&gt;My desktop system at work is showing some data corruption, and Iâ€™m slowly
backing up my data. Fortunately, it seems I havenâ€™t lost any data, but
still, given Iâ€™m letting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rsync&lt;/code&gt; run until it starts spewing I/O errors,
then power down and let the machine cool a bit, and start againâ€¦ it is a
potentially long process.&lt;/p&gt;

&lt;p&gt;And yes, this makes me somewhat angry. Why angry? Because Iâ€™m working on a
brand-new computer (well, have used it for slightly over six months),
custom-built to specs requested by my workplace. Specs that I donâ€™t really
need, this machine is an utter luxury (i.e. an AMD Ryzen 9 9950X processor
with 16 real cores / 32 threads; 128GB RAM in this day and age of RAM
shortage, quite recent 32GB GPU, and lots of shiny lights seen in its huge
fishbowl cabinet, liquid-based coolingâ€¦). The specs came not from me, but
from people who had no idea what we would use them for. And yes, I expect
the little fortune spent on this machine to be good for my use for probably
a decade, as my previous computer was, but the amount paid
wasâ€¦ exorbitant.&lt;/p&gt;

&lt;p&gt;But still, what I learned recently is that the 4TB nVME SSD it has (a
T-Force TM8FFJX34T) isâ€¦ a very cheap brand, bought because it was close
to half the price of other offerings similar in capacity. According to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;smartctl&lt;/code&gt;â€™s output, th SSD operates with a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Warning Comp. Temp. Threshold:
90 Celsius&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Critical Comp. Temp. Threshold: 110 Celsius&lt;/code&gt;, which sounds
sensible, even too high for my standards (my last two laptops have been
fanlessâ€¦ yes, an ARM system is very different from a high-end gaming
machine). Iâ€™m right now typing from my laptop, which shows 78Â°C and 82Â°C
for warning/critical thresholds.&lt;/p&gt;

&lt;p&gt;And as expected, under heavy sustained reads (backing up to my NFS server),
the desktopâ€™s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;smartctl&lt;/code&gt; shows &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Temperature: 83 Celsius&lt;/code&gt; and, further down,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Temperature Sensor 1: 107 Celsius&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Temperature Sensor 2: 82 Celsius&lt;/code&gt;
(donâ€™t know which of these would make the threshold jump). The SSD has
sustained &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Media and Data Integrity Errors: 20&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Warning
Comp. Temperature Time: 21&lt;/code&gt; (although &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Critical Comp. Temperature Time: 0&lt;/code&gt;). At least one of my colleagues have shrugged and installed a SATA SSD,
laying the huge nVME basically to waste.&lt;/p&gt;

&lt;p&gt;Anywayâ€¦ I also learned I am not the first, but the fourth person to
notice this kind of issues in this system (out of ten similar purchased
systems AIUI). It is completely unacceptable, and Iâ€™ll be pushing our
Instituteâ€™s authorities to demand the provider to provide either good
component quality for this very expensive system that has many luxury
items, or to fix the systemâ€™s build in a way the nVME does not heat as much
as it currently does.&lt;/p&gt;

&lt;p&gt;Anyway, &lt;em&gt;sigh&lt;/em&gt;, I only wanted to say, please excuse me for not using my
cryptographic keys for a couple of days ðŸ™ƒ&lt;/p&gt;

&lt;p&gt;PS- Iâ€™m also currently not connected to IRC and Jabber (and some similar
technologies), as my bouncer runs from my usual workstation.&lt;/p&gt;</content>
	<author>
	  <name>Gunnar Wolf</name>
	   <uri>https://gwolf.org</uri> 
	</author>
	<source>
	  <title type="html">Gunnar Wolf - Nice grey life</title>
	  <subtitle type="html">Gunnar Wolf - Nice grey life</subtitle>
	  <link rel="self" href="https://gwolf.org/rss.xml"/>
	  <id>https://gwolf.org</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">DIY skate punch-out</title>
	<link href="https://jmtd.net/log/punch-out/"/>
	<id>https://jmtd.net/log/punch-out/</id>
	<updated>2026-08-13T08:28:08+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;div class=&quot;image&quot;&gt;
&lt;a href=&quot;https://jmtd.net/log/punch-out/punch.jpg&quot;&gt;&lt;img alt=&quot;The punch set-up&quot; class=&quot;img&quot; height=&quot;281&quot; src=&quot;https://jmtd.net/log/punch-out/500x-punch.jpg&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;

&lt;/div&gt;




&lt;div class=&quot;image&quot;&gt;
&lt;a href=&quot;https://jmtd.net/log/punch-out/marked.jpg&quot;&gt;&lt;img alt=&quot;the punched boot&quot; class=&quot;img&quot; height=&quot;281&quot; src=&quot;https://jmtd.net/log/punch-out/500x-marked.jpg&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;

&lt;/div&gt;


&lt;p&gt;Since I wrote about my &lt;a href=&quot;https://jmtd.net/log/fly30/&quot;&gt;fly30&lt;/a&gt; ice skates, I&#39;d continued to battle pain
around the navicular bone in my feet. The action that seems to have finally
fixed it was to perform a &quot;punch out&quot;: a very localized remoulding of the
area of the boot that presses against the sore area.&lt;/p&gt;

&lt;p&gt;I basically followed the process from &lt;a href=&quot;https://www.youtube.com/watch?v=5RntLK_-lBU&quot;&gt;this helpful YouTube
video&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I narrowed down the exact spot by borrowing some lipstick and transferring it
from my navicular bone to the boot lining, then making that more permanent with
a sharpie.&lt;/p&gt;

&lt;p&gt;My punch was a spare part from a radiator valve which I packed with US cents
(I couldn&#39;t fit any UK coins in). For the receiving-end, I tried another part
from the radiator valve but I think it wasn&#39;t sufficiently larger than the punch
to work well, so I swapped that out for a spoon.&lt;/p&gt;

&lt;div class=&quot;image&quot;&gt;
&lt;a href=&quot;https://jmtd.net/log/punch-out/take2.jpg&quot;&gt;&lt;img alt=&quot;take 2&quot; class=&quot;img&quot; height=&quot;281&quot; src=&quot;https://jmtd.net/log/punch-out/500x-take2.jpg&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;

&lt;p&gt;take 2&lt;/p&gt;

&lt;/div&gt;


&lt;p&gt;I didn&#39;t have a temperature sensor I could use and I used a heat gun rather than
a hairdryer, so I YOLO&#39;d it a little. Some of the wrap on one of my boots is now
distorted from where I didn&#39;t move the heat gun enough. It only took a minute or
two to get the boot hot enough to be flexible. I set a 15 minute timer once the
clamp was in place.&lt;/p&gt;

&lt;p&gt;I&#39;ve only skated one session since I did this but the pain seems to have gone!
It&#39;s remarkably freeing to be skating without constantly trying to manage pain.
Now I can focus on technique.&lt;/p&gt;</content>
	<author>
	  <name>jmtd</name>
	   <uri>https://jmtd.net/log/</uri> 
	</author>
	<source>
	  <title type="html">Jonathan Dowland&#39;s Weblog</title>
	  <subtitle type="html">jmtd</subtitle>
	  <link rel="self" href="https://jmtd.net/log/index.atom"/>
	  <id>https://jmtd.net/log/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">The PSX GPU is wild</title>
	<link href="http://blog.sesse.net/blog/tech/2026-08-12-16-26_the_psx_gpu_is_wild.html"/>
	<id>http://blog.sesse.net/blog/tech/2026-08-12-16-26_the_psx_gpu_is_wild.html</id>
	<updated>2026-08-12T15:26:00+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;Inspired by some recent reverse-engineering, here are some things I
find wild by the original PlayStation GPU:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VRAM is a flat 1024x512 16-bit image (555 + 1 bit alpha).
You want more than just a framebuffer?  Figure out yourself what goes where.&lt;/li&gt;
&lt;li&gt;Yes, that means you&#39;ll need to allocate two framebuffers
and double-buffer everything yourself.&lt;/li&gt;
&lt;li&gt;Quads are common. No “triangles only” business here.&lt;/li&gt;
&lt;li&gt;Vertex coordinates are screen-space x/y integers. No floats or fixed-point. (I&#39;m ignoring the GTE here,
plus higher-level libraries.)&lt;/li&gt;
&lt;li&gt;Wait, where&#39;s z? There&#39;s no z. So there&#39;s no perspective correction.
(This one is pretty famous)&lt;/li&gt;
&lt;li&gt;OK, so how do you give in subpixel coordinates? You don&#39;t. There&#39;s no AA after all.&lt;/li&gt;
&lt;li&gt;Texture coordinates (u/v) are uint8_t. There&#39;s no texture filtering either;
everything is nearest-neighbor only.&lt;/li&gt;
&lt;li&gt;OK, so that means you can&#39;t have textures larger than 256x256
(pretty common in that era), but how do you give in the handle to the
texture?&lt;/li&gt;
&lt;li&gt;You don&#39;t, it points directly to the 1024x512 VRAM. You manage yourself
what goes where, remember?&lt;/li&gt;
&lt;li&gt;So can you an only have textures in the top-left 256x256? Hah, no,
we give you a bit-packed “texture page” system that offsets
all your u/v coordinates.&lt;/li&gt;
&lt;li&gt;Most textures are paletted to save VRAM (so instead of 555+1, your
pixels now mean something like “two palette indexes”). Where does the palette live?&lt;/li&gt;
&lt;li&gt;Well, duh, that&#39;s a 256x1 (or 16x1, or whatever) area of VRAM too.
The GPU does not care, you can use another texture&#39;s pixels as a palette if
you feel like it.&lt;/li&gt;
&lt;li&gt;OK, so you said there&#39;s no z, how do you do z-buffering? You have a
z-buffer, right… right?&lt;/li&gt;
&lt;li&gt;Yeah, sure, we&#39;re not cavemen. We have an “ordering table” that is
your Z-buffer, drawn back-to-front. If you want 256 levels of Z,
you just allocate an array of 256 linked-list pointers, and then
you put your polygon into the one corresponding to the correct right Z. &lt;/li&gt;
&lt;li&gt;But, eh, what if my polygon is not completely flat in Z-space?&lt;/li&gt;
&lt;li&gt;Hello?&lt;/li&gt;
&lt;li&gt;Hello…?&lt;/li&gt;
&lt;/ul&gt;</content>
	<author>
	  <name>Steinar H. Gunderson</name>
	   <uri>http://blog.sesse.net/</uri> 
	</author>
	<source>
	  <title type="html">Steinar H. Gunderson</title>
	  <subtitle type="html">sesse&#39;s blog</subtitle>
	  <link rel="self" href="http://blog.sesse.net/blog/tech/?flav=rss"/>
	  <id>http://blog.sesse.net/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">Reproducible Builds summit 2026 to take place in Gothenburg</title>
	<link href="https://reproducible-builds.org/news/2026/08/12/reproducible-builds-summit-in-gothenburg/"/>
	<id>https://reproducible-builds.org/news/2026/08/12/reproducible-builds-summit-in-gothenburg/</id>
	<updated>2026-08-12T00:00:00+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p class=&quot;alert alert-info&quot;&gt;This event is happening soon — see below for registration instructions!&lt;/p&gt;

&lt;p class=&quot;lead&quot;&gt;We are extremely pleased to announce the upcoming Reproducible Builds summit, which will take place from &lt;strong&gt;September 22nd—24th 2026&lt;/strong&gt; in the city of Gothenburg, Sweden.&lt;/p&gt;

&lt;p&gt;This year, we are thrilled to host the tenth edition of this exciting event, following the success of previous summits in various iconic locations around the world, including &lt;a href=&quot;https://reproducible-builds.org/events/vienna2025/&quot;&gt;Vienna&lt;/a&gt; (2025), &lt;a href=&quot;https://reproducible-builds.org/events/hamburg2024/&quot;&gt;Hamburg&lt;/a&gt; (2023—2024), &lt;a href=&quot;https://reproducible-builds.org/events/venice2022/&quot;&gt;Venice&lt;/a&gt; (2022), &lt;a href=&quot;https://reproducible-builds.org/events/Marrakesh2019/&quot;&gt;Marrakesh&lt;/a&gt; (2019), &lt;a href=&quot;https://reproducible-builds.org/events/paris2018/&quot;&gt;Paris&lt;/a&gt; (2018), &lt;a href=&quot;https://reproducible-builds.org/events/berlin2017/&quot;&gt;Berlin&lt;/a&gt; (2017), &lt;a href=&quot;https://reproducible-builds.org/events/berlin2016/&quot;&gt;Berlin&lt;/a&gt; (2016) and &lt;a href=&quot;https://reproducible-builds.org/events/athens2015/&quot;&gt;Athens&lt;/a&gt; (2015).&lt;/p&gt;

&lt;p&gt;If you’re excited about joining us this year, please make sure to read &lt;a href=&quot;https://reproducible-builds.org/events/gothenburg2026/&quot;&gt;the event page which has more details about the event and location&lt;/a&gt;. As in previous years, we will be sending invitations to all those who attended our previous summit events or expressed interest to do so. However, even if you do not receive a personal invitation, please do &lt;a href=&quot;mailto:2026-summit-team@lists.reproducible-builds.org&quot;&gt;email the organizers&lt;/a&gt; and we will find a way to accommodate you.&lt;/p&gt;

&lt;h3 id=&quot;about-the-event&quot;&gt;About the event&lt;/h3&gt;

&lt;p&gt;The Reproducible Builds Summit is a unique gathering that brings together attendees from diverse projects, united by a shared vision of advancing the Reproducible Builds effort. During this enriching event, participants will have the opportunity to engage in discussions, establish connections and exchange ideas to drive progress in this vital field. Our aim is to create an inclusive space that fosters collaboration, innovation and problem-solving.&lt;/p&gt;



&lt;h3 id=&quot;schedule&quot;&gt;Schedule&lt;/h3&gt;

&lt;p&gt;Although the exact content of the meeting will be shaped by the participants, the main goals will include:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Update &amp;amp; exchange about the status of reproducible builds in various projects.&lt;/li&gt;
  &lt;li&gt;Improve collaboration both between and inside projects.&lt;/li&gt;
  &lt;li&gt;Expand the scope and reach of reproducible builds to more projects.&lt;/li&gt;
  &lt;li&gt;Work together and hack on solutions.&lt;/li&gt;
  &lt;li&gt;Establish space for more strategic and long-term thinking than is possible in virtual channels.&lt;/li&gt;
  &lt;li&gt;Brainstorm designs on tools enabling users to get the most benefits from reproducible builds.&lt;/li&gt;
  &lt;li&gt;Discuss how reproducible builds will be usable and meaningful to users and developers alike.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Logs and minutes will be published after the meeting.&lt;/p&gt;

&lt;h3 id=&quot;location--date&quot;&gt;Location &amp;amp; date&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://clarion-hotel-draken-goteborg.hotelcheckins.com/&quot;&gt;Clarion Hotel Draken&lt;/a&gt;, Olof Palmes Plats 2, 413 30 Göteborg, Sweden. (&lt;a href=&quot;https://www.openstreetmap.org/way/1243458002&quot;&gt;OpenStreetMap&lt;/a&gt;, &lt;a href=&quot;https://maps.app.goo.gl/BBDUEojYcR95jAoc8&quot;&gt;Google Maps&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;September 22nd to September 24th 2026&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;registration-instructions&quot;&gt;Registration instructions&lt;/h3&gt;

&lt;p&gt;Please &lt;a href=&quot;https://reproducible-builds.org/events/gothenburg2026/&quot;&gt;reach out&lt;/a&gt; if you’d like to participate in hopefully interesting, inspiring and intense technical sessions about reproducible builds and beyond!&lt;/p&gt;

&lt;p&gt;We look forward to what we anticipate to be yet another extraordinary event!&lt;/p&gt;</content>
	<author>
	  <name>Reproducible Builds</name>
	   <uri>https://reproducible-builds.org/blog/</uri> 
	</author>
	<source>
	  <title type="html">reproducible-builds.org</title>
	  <subtitle type="html">Reproducible builds blog</subtitle>
	  <link rel="self" href="https://reproducible-builds.org/blog/index.rss"/>
	  <id>https://reproducible-builds.org/blog/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">Free software activity in July 2026</title>
	<link href="https://www.chiark.greenend.org.uk/~cjwatson/blog/activity-2026-07.html"/>
	<id>tag:www.chiark.greenend.org.uk,2026-08-11:/~cjwatson/blog/activity-2026-07.html</id>
	<updated>2026-08-11T10:42:43+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;About 95% of my Debian contributions this month were &lt;a href=&quot;https://www.freexian.com/about/debian-contributions/&quot;&gt;sponsored&lt;/a&gt; by Freexian.&lt;/p&gt;
&lt;p&gt;You can also support my work directly via &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 Sponsors&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;OpenSSH&lt;/h2&gt;
&lt;p&gt;Now that Ubuntu 26.04 &lt;span class=&quot;caps&quot;&gt;LTS&lt;/span&gt; has been released, I’ve been getting back to the &lt;a href=&quot;https://lists.debian.org/debian-devel/2024/04/msg00044.html&quot;&gt;&lt;span class=&quot;caps&quot;&gt;GSS&lt;/span&gt;-&lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; key exchange package split&lt;/a&gt; in our OpenSSH packaging.  Once I started testing my draft &lt;code&gt;openssh-gssapi&lt;/code&gt; source package, I realized that I needed to make some changes in the main &lt;code&gt;openssh&lt;/code&gt; source package first in order to support it.  The dependency from &lt;code&gt;openssh-server&lt;/code&gt; to &lt;code&gt;openssh-client&lt;/code&gt; was awkward, as was the (related) fact that &lt;code&gt;openssh-client&lt;/code&gt; contained shared documentation for other OpenSSH binary packages.  After some thought, I created a new &lt;code&gt;openssh-common&lt;/code&gt; binary package, moved shared documentation and the &lt;code&gt;ssh-keygen&lt;/code&gt; program to that, and dropped dependencies on &lt;code&gt;openssh-client&lt;/code&gt; which were no longer necessary (fixing &lt;a href=&quot;https://bugs.debian.org/699473&quot;&gt;#699473&lt;/a&gt; and &lt;a href=&quot;https://bugs.debian.org/1070098&quot;&gt;#1070098&lt;/a&gt; in the process).&lt;/p&gt;
&lt;p&gt;This caused a couple of regressions (&lt;a href=&quot;https://bugs.debian.org/1141420&quot;&gt;#1141420&lt;/a&gt; and &lt;a href=&quot;https://bugs.debian.org/1141550&quot;&gt;#1141550&lt;/a&gt;) that I had to fix, and more subtly it also caused a number of autopkgtest regressions in other packages because &lt;code&gt;openssh-client&lt;/code&gt; is no longer in base images as a result of a dependency from &lt;code&gt;openssh-server&lt;/code&gt;.  I believe I have fixes for all of these either pending review or merged (one of which I did in August rather than July):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://salsa.debian.org/debian/curl/-/merge_requests/65&quot;&gt;curl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/diffoscope/-/merge_requests/170&quot;&gt;diffoscope&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://salsa.debian.org/debian/glome/-/merge_requests/1&quot;&gt;glome&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://salsa.debian.org/go-team/packages/golang-github-appleboy-easyssh-proxy/-/merge_requests/4&quot;&gt;golang-github-appleboy-easyssh-proxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://salsa.debian.org/debian/parsyncfp2/-/merge_requests/1&quot;&gt;parsyncfp2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://salsa.debian.org/debian/rsync/-/merge_requests/41&quot;&gt;rsync&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I upgraded from 10.3p1 to 10.4p1, and in the process &lt;a href=&quot;https://bugzilla.mindrot.org/show_bug.cgi?id=3974&quot;&gt;contributed a &lt;span class=&quot;caps&quot;&gt;GSS&lt;/span&gt;-&lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; option handling fix upstream&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I made openssh-ssh1’s package description &lt;a href=&quot;https://bugs.debian.org/1123609&quot;&gt;more accurately describe the package&lt;/a&gt;, thanks to suggestions from Matthias Lang.&lt;/p&gt;
&lt;h2&gt;Installer team&lt;/h2&gt;
&lt;p&gt;With support from a Freexian customer, I reviewed, tested, edited, and merged a patch to add &lt;a href=&quot;https://bugs.debian.org/433568&quot;&gt;&lt;span class=&quot;caps&quot;&gt;VLAN&lt;/span&gt; support&lt;/a&gt;.  I described the details of what I did in a &lt;a href=&quot;https://bugs.debian.org/433568#243&quot;&gt;comment&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This has been vaguely on my to-do list since, er, about 2014, so it was very satisfying to get it sorted out.&lt;/p&gt;
&lt;h2&gt;Python packaging&lt;/h2&gt;
&lt;p&gt;New upstream versions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;cryptodatahub (fixing a &lt;a href=&quot;https://bugs.debian.org/1140974&quot;&gt;build failure&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;dep-logic&lt;/li&gt;
&lt;li&gt;django-q&lt;/li&gt;
&lt;li&gt;flufl.lock&lt;/li&gt;
&lt;li&gt;more-itertools&lt;/li&gt;
&lt;li&gt;multipart&lt;/li&gt;
&lt;li&gt;pyasn1 (fixing &lt;a href=&quot;https://bugs.debian.org/1142388&quot;&gt;&lt;span class=&quot;caps&quot;&gt;CVE&lt;/span&gt;-2026-59884, &lt;span class=&quot;caps&quot;&gt;CVE&lt;/span&gt;-2026-59885, and &lt;span class=&quot;caps&quot;&gt;CVE&lt;/span&gt;-2026-59886&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;pytest-rerunfailures&lt;/li&gt;
&lt;li&gt;python-auditwheel&lt;/li&gt;
&lt;li&gt;python-build&lt;/li&gt;
&lt;li&gt;python-certifi&lt;/li&gt;
&lt;li&gt;python-datamodel-code-generator (fixing a &lt;a href=&quot;https://bugs.debian.org/1141004&quot;&gt;build failure&lt;/a&gt;, and an &lt;a href=&quot;https://github.com/koxudaxi/datamodel-code-generator/issues/3578&quot;&gt;incompatibility with pydantic 2.13&lt;/a&gt; that I reported upstream)&lt;/li&gt;
&lt;li&gt;python-django-parler&lt;/li&gt;
&lt;li&gt;python-httplib2&lt;/li&gt;
&lt;li&gt;python-pgbouncer&lt;/li&gt;
&lt;li&gt;python-time-machine&lt;/li&gt;
&lt;li&gt;python-treq&lt;/li&gt;
&lt;li&gt;python-typing-extensions&lt;/li&gt;
&lt;li&gt;python-wheezy.template&lt;/li&gt;
&lt;li&gt;storm&lt;/li&gt;
&lt;li&gt;ubelt&lt;/li&gt;
&lt;li&gt;webpy&lt;/li&gt;
&lt;li&gt;zope.testing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other build/test failures:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1131792&quot;&gt;django-q: autopkgtest failure with Python 3.14&lt;/a&gt; (&lt;a href=&quot;https://github.com/django-q2/django-q2/issues/334&quot;&gt;reported upstream&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1140980&quot;&gt;httpx: &lt;span class=&quot;caps&quot;&gt;FTBFS&lt;/span&gt;: E assert [(‘uvicorn.ac…1.1 200 &lt;span class=&quot;caps&quot;&gt;OK&lt;/span&gt;”’)] == [(‘httpx’, 20…1.1 200 &lt;span class=&quot;caps&quot;&gt;OK&lt;/span&gt;”’)]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1141778&quot;&gt;libntruprime: autopkgtest failures with Python 3.14&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1141791&quot;&gt;pygments: Handle None object before &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt; escaping&lt;/a&gt; (fixed build failures in cmd2, gunicorn, python-inline-snapshot, and python-openapi-core)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1142205&quot;&gt;python-authlib: some of tests/flask/test_oauth2/rfc9068/ failed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1140873&quot;&gt;python-click: autopkgtest regression with pytest 9.1&lt;/a&gt; (&lt;a href=&quot;https://github.com/pallets/click/pull/3656&quot;&gt;contributed upstream&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1141010&quot;&gt;python-httplib2: &lt;span class=&quot;caps&quot;&gt;FTBFS&lt;/span&gt;: &lt;span class=&quot;caps&quot;&gt;ERROR&lt;/span&gt; tests/test_proxy.py - Failed: ‘forked’ not found in &lt;code&gt;markers&lt;/code&gt; configuration option&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1143139&quot;&gt;python-maturin: Please upgrade goblin dependency to 0.10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1140692&quot;&gt;python-memray: &lt;span class=&quot;caps&quot;&gt;FTBFS&lt;/span&gt; on armhf (segfault)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1141210&quot;&gt;python-mne: &lt;span class=&quot;caps&quot;&gt;FTBFS&lt;/span&gt;: E pytest.PytestRemovedIn10Warning: Passing a non-Collection iterable to parametrize is deprecated&lt;/a&gt; (actually fixed in scikit-learn; &lt;a href=&quot;https://github.com/scikit-learn/scikit-learn/pull/34448&quot;&gt;contributed upstream&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1142373&quot;&gt;python-softlayer: autopkgtest fails with python3-click 8.3.3&lt;/a&gt; (&lt;a href=&quot;https://github.com/softlayer/softlayer-python/pull/2262&quot;&gt;contributed upstream&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1142214&quot;&gt;python-urllib3: &lt;span class=&quot;caps&quot;&gt;FAILED&lt;/span&gt; test/contrib/test_pyopenssl.py&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I fixed some other bugs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1044278&quot;&gt;django-pipeline: Fails to build source after successful build&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1078037&quot;&gt;more-itertools: Please mark python3-more-itertools with M-A: foreign&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I adopted &lt;a href=&quot;https://bugs.debian.org/980407&quot;&gt;transaction&lt;/a&gt; for the Python team.&lt;/p&gt;
&lt;p&gt;I attended the &lt;a href=&quot;https://debconf26.debconf.org/talks/32-debian-python-bof/&quot;&gt;Python BoF&lt;/a&gt; at DebConf remotely, although a badly-timed fibre outage in the village I live in really didn’t help.&lt;/p&gt;
&lt;h2&gt;Code reviews&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1142354&quot;&gt;openssh: sshd-session built without crypt(), breaking UsePAM=no password auth&lt;/a&gt; (merged and uploaded)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1142938&quot;&gt;openssh: Slovak debconf templates translation&lt;/a&gt; (merged and uploaded)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1045463&quot;&gt;python-treq: Fails to build source after successful build&lt;/a&gt; (merged and uploaded)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1129141&quot;&gt;python-better-exceptions: &lt;span class=&quot;caps&quot;&gt;FTBFS&lt;/span&gt;: failing tests&lt;/a&gt; (sponsored upload for Seyed Mohamad Amin Modaresi)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1141577&quot;&gt;yubihsm-connector: patch to make the build reproducible&lt;/a&gt; (merged and uploaded)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Other bits and pieces&lt;/h2&gt;
&lt;p&gt;Dan Poltawski pointed out in a &lt;a href=&quot;https://fedi.talktodan.com/@dan/116982771943815387&quot;&gt;Fediverse post&lt;/a&gt; that the project history didn’t list Sruthi as the current &lt;span class=&quot;caps&quot;&gt;DPL&lt;/span&gt;.  I &lt;a href=&quot;https://salsa.debian.org/publicity-team/debian-history/-/merge_requests/30&quot;&gt;fixed that&lt;/a&gt;, although it doesn’t look as though the fix is in the published version yet.&lt;/p&gt;
&lt;p&gt;I upgraded yubihsm-shell to 2.8.0.&lt;/p&gt;</content>
	<author>
	  <name>Colin Watson</name>
	   <uri>https://www.chiark.greenend.org.uk/~cjwatson/blog/</uri> 
	</author>
	<source>
	  <title type="html">Colin Watson&#39;s blog - planet-debian</title>
	  
	  <link rel="self" href="https://www.chiark.greenend.org.uk/~cjwatson/blog/feeds/tag/planet-debian.atom.xml"/>
	  <id>https://www.chiark.greenend.org.uk/~cjwatson/blog/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">DebConf26 Local Team says goodbye</title>
	<link href="https://bits.debian.org/2026/08/debconf26-words-from-localteam.html"/>
	<id>tag:bits.debian.org,2026-08-10:/2026/08/debconf26-words-from-localteam.html</id>
	<updated>2026-08-10T21:50:00+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;On Saturday 25 July 2026, the annual &lt;a href=&quot;https://debconf26.debconf.org/&quot;&gt;Debian Developers and Contributors
Conference&lt;/a&gt; came to a close.  The Debian Press
team would now like to share this personal and beautiful message from the Santa Fe
Local Team.&lt;/p&gt;
&lt;h3&gt;Words from DC26 Local Team&lt;/h3&gt;
&lt;p&gt;DebConf26 is over, and those of us who were part of the Local Team are trying
to return to “normality”, if such a thing exists after organizing a DebConf.&lt;/p&gt;
&lt;p&gt;This event changed our lives and would not have been possible without the help
of many great people.&lt;/p&gt;
&lt;p&gt;We would especially like to thank everyone who became part of our extended
local team. Our endless thanks go to Gunnar —who also instigated this whole
adventure—, Santiago, Nattie, Stefano, and Olasd. Thank you for supporting and
guiding us, sharing your experience, and helping us find solutions throughout
the entire process.&lt;/p&gt;
&lt;p&gt;It was also made possible thanks to the great work, strong support and patience
of international teams: Fundraising, Bursaries, Content, Video, Treasury, Visa,
Website, Accommodation, Front Desk, Cheese and Wine, Publicity as well as all
the other teams and individuals who contributed. We apologize if we have
forgotten to mention anyone; many people helped make this event possible.&lt;/p&gt;
&lt;p&gt;Our deepest thanks also go to everyone who joined us in working on the event,
especially Fer, José, and Julián, who showed great commitment and took
responsibility for several important tasks.&lt;/p&gt;
&lt;p&gt;We would also like to extend our gratitude to FICH, the Universidad Nacional
del Litoral, the institutions, organizations, sponsors, suppliers, and everyone
who contributed in one way or another to welcoming the Debian community to
Santa Fe.&lt;/p&gt;
&lt;p&gt;And finally, a very special thank you to our families, to whom we dedicated
little time these past few weeks, who supported us on this adventure, enduring
the exhaustion, the calls and messages at all hours, and the occasional
stressful situation. Always giving us that much-needed, encouraging hug with so
much love.&lt;/p&gt;
&lt;p&gt;These were very intense weeks, during which we tried to give our best so that
everyone could enjoy their stay and so that the Debian community had the
necessary conditions to meet, work, share knowledge, and continue creating the
magic that characterizes community life and the development of Debian.&lt;/p&gt;
&lt;p&gt;As happens at every DebConf, there were difficulties, unexpected situations,
and challenges that required us to improvise, learn, and perform a few juggling
acts. There were also moments that will certainly remain as memorable
anecdotes: the “antisocial room”, some gas heaters worthy of a museum, and
newly unlocked powers for negotiating with suppliers.&lt;/p&gt;
&lt;p&gt;We have no evidence, but also no doubt, that for many people the Conference
Dinner was one of the best moments of the event.&lt;/p&gt;
&lt;p&gt;A few ingredients we had hoped would happen naturally were missing, such as
more wine nights and at least one in-person football match.&lt;/p&gt;
&lt;p&gt;During the two weeks of DebConf, we experienced every kind of weather and a
wide range of emotions. Above all, however, we saw people enjoying themselves
and building friendships, which fills us with pride.&lt;/p&gt;
&lt;p&gt;Thank you very much to everyone who came and helped DebConf26 leave such a
beautiful mark on our hearts.&lt;/p&gt;
&lt;p&gt;We hope our paths cross again somewhere in life.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Leonardo, Emmanuel, Mariano, Pablo, and Martín
DebConf26 Local Team&lt;/p&gt;
&lt;h3&gt;About Debian&lt;/h3&gt;
&lt;p&gt;The Debian Project was founded in 1993 by Ian Murdock to be a truly free
community project. Since then the project has grown to be one of the
largest and most influential Open Source projects. Thousands of
volunteers from all over the world work together to create and maintain
Debian software. Available in 70 languages, and supporting a huge range
of computer types, Debian calls itself the &lt;em&gt;universal operating system&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;About DebConf&lt;/h3&gt;
&lt;p&gt;DebConf is the Debian Project&#39;s developer conference. In addition to a
full schedule of technical, social and policy talks, DebConf provides an
opportunity for developers, contributors and other interested people to
meet in person and work together more closely. It has taken place
annually since 2000 in locations as varied as Scotland, Bosnia and Herzegovina,
India, Korea, France. More information about DebConf is available from
&lt;a href=&quot;https://debconf.org&quot;&gt;https://debconf.org/&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Contact Information&lt;/h3&gt;
&lt;p&gt;For further information, please visit the DebConf26 web page at
&lt;a href=&quot;https://debconf26.debconf.org/&quot;&gt;https://debconf26.debconf.org/&lt;/a&gt; or send
mail to &lt;a href=&quot;https://bits.debian.org/feeds/mailto:press@debian.org&quot;&gt;press@debian.org&lt;/a&gt;.&lt;/p&gt;</content>
	<author>
	  <name>Publicity team and DebConf26 Local Team</name>
	   <uri>https://bits.debian.org/</uri> 
	</author>
	<source>
	  <title type="html">Bits from Debian</title>
	  <subtitle type="html">Blog from the Debian Project</subtitle>
	  <link rel="self" href="https://bits.debian.org/feeds/feed.rss"/>
	  <id>https://bits.debian.org/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">time-delayed scifi roundup feed</title>
	<link href="https://jmtd.net/log/guardian_scifi_roundup/"/>
	<id>https://jmtd.net/log/guardian_scifi_roundup/</id>
	<updated>2026-08-10T14:44:31+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;I enjoy reading The Guardian&#39;s monthly round-up of new SF novels, which can be
found in their &lt;a href=&quot;https://www.theguardian.com/books/science-fiction&quot;&gt;Science Fiction
Books&lt;/a&gt; section, and can also
be read via &lt;a href=&quot;https://www.theguardian.com/books/science-fiction/rss&quot;&gt;feed&lt;/a&gt;.
Since the round-up is of new books, at the time the round-up is published
they&#39;re usually only available in hardback.&lt;/p&gt;

&lt;p&gt;When it comes to choosing a book to read, these days I am tending towards
paperbacks: I&#39;ve largely ran out of room for hardbacks. So I decided to apply
a time delay to their feed. Six months is roughly enough that a
book mentioned in a round-up should be shortly available in paperback.&lt;/p&gt;

&lt;p&gt;The first obstacle was that The Guardian only publish roughly the
last six months of articles in their feed, and so the posts I want have
disappeared. However, my Feed Reader
(&lt;a href=&quot;https://www.freshrss.org/&quot;&gt;FreshRSS&lt;/a&gt;) had older copies stored in
its database, and I am able to re-publish those
using &lt;a href=&quot;https://freshrss.github.io/FreshRSS/en/users/user_queries.html&quot;&gt;User Queries&lt;/a&gt;.
(This also gives me an opportunity to filter out non-roundup articles
from the Guardian&#39;s feed).&lt;/p&gt;

&lt;p&gt;It&#39;s then a nice short piece of scripting (this time, using Ruby) to filter the
republished feed on the publication date. To make the most recent articles appear new, I
also modify the metadata for filtered entries to appear 6 months newer than they are.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#!/usr/bin/ruby
require &#39;rss&#39;

# replace with the user query feed URI
uri       = &#39;https://www.theguardian.com/books/science-fiction/rss&#39;
now       = Time.now
sixMonths = 6 * 30 * 24 * 60 * 60
feed      = RSS::Parser.parse(uri)

feed.items.select! do |item|
  item.date + sixMonths &amp;lt; now
end
feed.items.collect! do |item|
  item.date += sixMonths
  item
end

puts &quot;Content-Type: text/xml\r\n\r&quot;
puts feed
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I stuck that up on my private web server, subscribed to it in my FreshRSS
and voila, a time-delayed list of books to read, most likely available in
paperback.&lt;/p&gt;</content>
	<author>
	  <name>jmtd</name>
	   <uri>https://jmtd.net/log/</uri> 
	</author>
	<source>
	  <title type="html">Jonathan Dowland&#39;s Weblog</title>
	  <subtitle type="html">jmtd</subtitle>
	  <link rel="self" href="https://jmtd.net/log/index.atom"/>
	  <id>https://jmtd.net/log/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">PGP Keysigning on Linux Plumbers and OpenSource Summit Europe 2026</title>
	<link href="https://blog.kleine-koenig.org/ukl/pgp-keysigning-on-linux-plumbers-and-opensource-summit-europe-2026.html"/>
	<id>tag:blog.kleine-koenig.org,2026-08-10:/ukl/pgp-keysigning-on-linux-plumbers-and-opensource-summit-europe-2026.html</id>
	<updated>2026-08-10T14:37:00+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;I&#39;m going to this year&#39;s &lt;a href=&quot;https://lpc.events/&quot;&gt;LPC&lt;/a&gt; and &lt;a href=&quot;https://sessionize.com/open-source-summit-europe26&quot;&gt;Open Source Summit
Europe&lt;/a&gt; ðŸ¥³.&lt;/p&gt;
&lt;p&gt;I will organize sessions on two days after the conference program to exchange
PGP fingerprints for keysigning to improve the kernel&#39;s web-of-trust (but of
course everyone is welcome).&lt;/p&gt;
&lt;p&gt;For details see my &lt;a href=&quot;https://lore.kernel.org/lkml/lpcosse2026-keysigning@baylibre.com/&quot;&gt;announcement on
LKML&lt;/a&gt;. Note
the registration deadline at 2026-09-27 08:00 UTC.&lt;/p&gt;</content>
	<author>
	  <name>Uwe Kleine-König</name>
	   <uri>https://blog.kleine-koenig.org/ukl/</uri> 
	</author>
	<source>
	  <title type="html">ukl&#39;s blog</title>
	  
	  <link rel="self" href="https://blog.kleine-koenig.org/ukl/feeds/all.atom.xml"/>
	  <id>https://blog.kleine-koenig.org/ukl/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">Managing virtualenvs with a little bash</title>
	<link href="https://hashman.ca/managing-venvs/"/>
	<id>tag:hashman.ca,2026-08-09:/managing-venvs/</id>
	<updated>2026-08-09T20:00:00+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;When you need to install something directly from &lt;a href=&quot;https://pypi.org/&quot;&gt;PyPI&lt;/a&gt;, Python virtualenvs have
been my go-to for over a decade.&lt;/p&gt;
&lt;h2&gt;A quick virtualenv intro&lt;/h2&gt;
&lt;p&gt;Most of my readers are probably already familiar with virtualenvs, but for
completeness, I&#39;ll give you a brief introduction. A &lt;a href=&quot;https://docs.python.org/3/library/venv.html&quot;&gt;virtualenv&lt;/a&gt; (short for
&quot;virtual environment&quot;) is an isolated distribution of Python packages, where
you can independently install packages without disturbing your system packages
or other virtualenvs.&lt;/p&gt;
&lt;p&gt;You can set one up like this, assuming you are using Python 3.3 or higher:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;python3&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-m&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;venv&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;~/.venv/my-virtualenv
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The directory specified here is just a convention. I keep all my virtualenvs in
the &lt;code&gt;.venv&lt;/code&gt; folder in my home directory, but you can pick whatever location you
like.&lt;/p&gt;
&lt;p&gt;To use the virtualenv, you must activate it:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;source&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;~/.venv/my-virtualenv/bin/activate
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This activation script is a special shell script that configures your current
shell, pointing at all the right paths in order to use the virtual environment.
&lt;a href=&quot;https://www.gnu.org/software/bash/manual/bash.html#index-_002e&quot;&gt;&lt;code&gt;source&lt;/code&gt;&lt;/a&gt; runs this script in your current shell session to set it
up. You will notice that this adds &lt;code&gt;(my-virtualenv)&lt;/code&gt; to the beginning of your
shell prompt, reminding you that the &quot;my-virtualenv&quot; virtualenv is active. Now
when you &lt;code&gt;pip install amazing-package&lt;/code&gt;, the software will only be available in
this virtual environment.&lt;/p&gt;
&lt;p&gt;When you&#39;re done, you can deactivate it like so:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;deactivate
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Wonderful!&lt;/p&gt;
&lt;h2&gt;Managing many virtualenvs gets annoying&lt;/h2&gt;
&lt;p&gt;Over time, I end up accumulating many virtualenvs, which can become harder to
manage. Maybe something like this:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ls&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;~/.venv/
my-virtualenv&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;cool-project&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;snakes-ahoy
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;I also don&#39;t want to type &lt;code&gt;source ~/.venv/my-virtualenv/bin/activate&lt;/code&gt; every
time I use the virtualenv, because it gets very repetitive—only the name
of the venv is really needed.&lt;/p&gt;
&lt;p&gt;But luckily, we can write a little bit of bash to make managing this less
annoying. (Or you can use one of many Python developer tools that are designed
to manage this, like &lt;a href=&quot;https://pipx.pypa.io/latest/index.html&quot;&gt;pipx&lt;/a&gt;, but when I merely want to &lt;em&gt;consume&lt;/em&gt; Python
software, I might not have a development environment set up. So that&#39;s beyond
the scope of this post!)&lt;/p&gt;
&lt;p&gt;If you add the following shell function to your &lt;code&gt;~/.bashrc&lt;/code&gt; or
&lt;code&gt;~/.bash_aliases&lt;/code&gt; file, it will nicely wrap our activation command:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;setup-venv&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;source&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/.venv/&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$1&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/bin/activate&quot;&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now all we need to run is&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;setup-venv&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;my-virtualenv
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;So much quicker!&lt;/p&gt;
&lt;h2&gt;Spicing it up with tab completion&lt;/h2&gt;
&lt;p&gt;The first thing I noticed after writing this wrapper was that I started hitting
tab on the virtual environment name, but... nothing happened. Wouldn&#39;t it be
nice to know what virtualenvs I had available, and to not have to type out the
whole long thing?&lt;/p&gt;
&lt;p&gt;Well, we can write it ourselves 😄&lt;/p&gt;
&lt;p&gt;If for some reason you don&#39;t already have bash completion installed, on a
Debian-based system, you will need to install it with&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;apt&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;install&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;bash-completion
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;In order to configure our &lt;a href=&quot;https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion.html&quot;&gt;bash completion&lt;/a&gt;, we will create a new file,
&lt;code&gt;/etc/bash_completion.d/venv&lt;/code&gt;, with the following contents:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;_list_venvs&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;local&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;cur&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;prev&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;opts
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;COMPREPLY&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=()&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;cur&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;COMP_WORDS&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[COMP_CWORD]&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;prev&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;COMP_WORDS&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[COMP_CWORD-1]&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&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;$(&lt;/span&gt;find&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;/.venv/&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-mindepth&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-maxdepth&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-type&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;d&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-printf&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;%f &quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;COMPREPLY&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=(&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;compgen&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-W&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;opts&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;cur&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;complete&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-F&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;_list_venvs&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;setup-venv
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This file defines another shell function order to determine how to
autocomplete the options for our &lt;code&gt;setup-venv&lt;/code&gt; function.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$opts&lt;/code&gt; is where we define the options for our function. We generate it with a
&lt;code&gt;find&lt;/code&gt; command—looking at the &lt;code&gt;.venv&lt;/code&gt; folder in the current user&#39;s home
directory, then only including child folders (excluding the current directory
itself, &lt;code&gt;.venv&lt;/code&gt;, in our results) by using the min/max depth and type arguments,
and printing just the individual directory names, deliminated by spaces using
our print formatter.&lt;/p&gt;
&lt;p&gt;Everything else is the standard scaffolding required to use bash completions.&lt;/p&gt;
&lt;p&gt;Once you save this file and reload your shell, you&#39;ll see that you are able to use completions as expected!&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;setup-venv&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&amp;lt;tab&amp;gt;
my-virtualenv&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;cool-project&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;snakes-ahoy

setup-venv&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;s&amp;lt;tab&amp;gt;
setup-venv&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;snakes-ahoy
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Complaints, comments, questions?&lt;/h2&gt;
&lt;p&gt;Hope this was helpful! If it wasn&#39;t, that&#39;s too bad. But don&#39;t worry—you
can safely ignore this post.&lt;/p&gt;</content>
	<author>
	  <name>Elana Hashman</name>
	   <uri>https://hashman.ca/</uri> 
	</author>
	<source>
	  <title type="html">hashman.ca</title>
	  
	  <link rel="self" href="https://hashman.ca/feeds/all.atom.xml"/>
	  <id>https://hashman.ca/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">Reproducible Builds in July 2026</title>
	<link href="https://reproducible-builds.org/reports/2026-07/"/>
	<id>https://reproducible-builds.org/reports/2026-07/</id>
	<updated>2026-08-09T19:12:10+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p class=&quot;lead&quot;&gt;&lt;strong&gt;Welcome to the July 2026 report from the &lt;a href=&quot;https://reproducible-builds.org&quot;&gt;Reproducible Builds&lt;/a&gt; project!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://reproducible-builds.org/&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-07/reproducible-builds.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In our reports, we try to outline the most important things that we have been up to over the past month. As a quick recap about what problem our project intends to solve, whilst anyone may inspect the source code of free software for malicious flaws, almost all software is distributed to end users as pre-compiled binaries. The motivation behind the reproducible builds effort is to ensure no flaws have been introduced during this compilation process by promising identical results are always generated from a given source, thus allowing multiple third-parties to come to a consensus on whether a build was compromised or not.&lt;/p&gt;

&lt;p&gt;If you are interested in contributing to the project, please visit the &lt;a href=&quot;https://reproducible-builds.org/contribute/&quot;&gt;&lt;em&gt;Contribute&lt;/em&gt;&lt;/a&gt; page on our website.&lt;/p&gt;

&lt;p&gt;In this month’s report, we cover:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#tool-development&quot;&gt;Tool development&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#distribution-work&quot;&gt;Distribution work&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#three-new-scholarly-papers&quot;&gt;Three new scholarly papers&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#patches&quot;&gt;Patches&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#misc-news&quot;&gt;Misc news&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;tool-development&quot;&gt;Tool development&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://diffoscope.org/&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-07/diffoscope.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://diffoscope.org&quot;&gt;&lt;strong&gt;diffoscope&lt;/strong&gt;&lt;/a&gt; is our in-depth and content-aware diff utility that can locate and diagnose reproducibility issues. This month, Chris Lamb made the following changes, including preparing and uploading versions &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;324&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;325&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;326&lt;/code&gt; to Debian:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Fix tests to work with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zipdetails&lt;/code&gt; 4.0008. (&lt;a href=&quot;https://bugs.debian.org/1141359&quot;&gt;#1141359&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Bump debhelper compatibility level to 13. [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/diffoscope/commit/474f3702&quot;&gt;…&lt;/a&gt;]&lt;/li&gt;
  &lt;li&gt;Update copyright years. [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/diffoscope/commit/4cde19a5&quot;&gt;…&lt;/a&gt;]&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In addition, Paul Spooren made changes to allow trailing garbage in Gzip files [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/diffoscope/commit/c8dcbf4a&quot;&gt;…&lt;/a&gt;] and Vagrant Cascadian added an external tool reference for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pedump&lt;/code&gt; binary to use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mono&lt;/code&gt; package under &lt;a href=&quot;https://guix.gnu.org/&quot;&gt;GNU Guix&lt;/a&gt;. [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/diffoscope/commit/b79afa9e&quot;&gt;…&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/disorderfs&quot;&gt;&lt;strong&gt;disorderfs&lt;/strong&gt;&lt;/a&gt; is our &lt;a href=&quot;https://en.wikipedia.org/wiki/Filesystem_in_Userspace&quot;&gt;FUSE&lt;/a&gt;-based filesystem that deliberately introduces non-determinism into system calls to reliably flush out reproducibility issues. This month, Christelle Gloor added the option to sort by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ctime&lt;/code&gt; as returned by the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lstat(2)&lt;/code&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/System_call&quot;&gt;syscall&lt;/a&gt;. [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/disorderfs/commit/68d20f7&quot;&gt;…&lt;/a&gt;], which Chris Lamb uploaded whilst bumping the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Standards-Version&lt;/code&gt; to version 4.7.4 [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/disorderfs/commit/240fae0&quot;&gt;…&lt;/a&gt;]. Bernhard Wiedemann also &lt;a href=&quot;https://build.opensuse.org/request/show/1368149&quot;&gt;updated &lt;em&gt;disorderfs&lt;/em&gt; to version 0.7.0&lt;/a&gt; in &lt;a href=&quot;https://www.opensuse.org/&quot;&gt;openSUSE&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://reproducible-builds.org/&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-07/website.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yet again, there were a number of improvements made to &lt;a href=&quot;https://reproducible-builds.org/&quot;&gt;&lt;strong&gt;our website&lt;/strong&gt;&lt;/a&gt; this month as well. For example, Chris Lamb, by request of &lt;a href=&quot;https://www.digitalocean.com/&quot;&gt;Digital Ocean&lt;/a&gt;, changed the target of a referral link so that they can manage incoming referrers [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-website/commit/4ac1b2fa&quot;&gt;…&lt;/a&gt;] and pushed a number of changes to the &lt;a href=&quot;https://reproducible-builds.org/tools/&quot;&gt;&lt;em&gt;Tools&lt;/em&gt;&lt;/a&gt; page [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-website/commit/3e3154f2&quot;&gt;…&lt;/a&gt;].&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;distribution-work&quot;&gt;Distribution work&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://debian.org/&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-07/debian.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Debian&lt;/strong&gt; this month, 32 reviews of Debian packages were added, 26 were updated and a total of 21 were removed this month, adding to &lt;a href=&quot;https://tests.reproducible-builds.org/debian/index_issues.html&quot;&gt;our extensive knowledge about identified issues&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A number of issue types were added by Chris Lamb, including:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;python_towncrier_build_date&lt;/code&gt; [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-notes/commit/83a0efd3&quot;&gt;…&lt;/a&gt;][&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-notes/commit/6f036b2a&quot;&gt;…&lt;/a&gt;]&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;log_files_installed_in_package&lt;/code&gt; [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-notes/commit/c629afdf&quot;&gt;…&lt;/a&gt;]&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fontforge_varies_by_timezone&lt;/code&gt; [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-notes/commit/d76c0f05&quot;&gt;…&lt;/a&gt;][&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-notes/commit/fc4a9fc5&quot;&gt;…&lt;/a&gt;]&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Chris also added a further note for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;build_date_in_manpage_generated_by_spf13_cobra&lt;/code&gt; issue. [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-notes/commit/f7b69082&quot;&gt;…&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://openwrt.org/&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-07/openwrt.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In addition, there is &lt;a href=&quot;https://rebuilderd.n.aparcar.org/?distro=openwrt-image&quot;&gt;a new page showing verification rebuilds&lt;/a&gt; of &lt;a href=&quot;https://openwrt.org/&quot;&gt;OpenWrt&lt;/a&gt; APK packages and firmware images, powered by &lt;a href=&quot;https://github.com/kpcyrd/rebuilderd&quot;&gt;&lt;em&gt;rebuilderd&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://rebuilderd.n.aparcar.org/?distro=openwrt-image&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-07/openwrt-rebuilderd.png#center&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;three-new-scholarly-papers&quot;&gt;Three new scholarly papers&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/abstract/document/11593337&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-07/paper-vcaligner.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yan Li, Nan Jiang, Qihang Zhou, Shaowen Xu, Yamin Xie and Xiaoqi Jia of the &lt;a href=&quot;https://english.cas.cn/&quot;&gt;Chinese Academy of Sciences&lt;/a&gt; published a paper titled &lt;a href=&quot;https://ieeexplore.ieee.org/abstract/document/11593337&quot;&gt;&lt;em&gt;VCAligner: Aligning Source Distribution Versions with Upstream Git Commits to Secure Supply Chain&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;We present VCAligner, a content-based alignment methodology that constructs inverted indexes over VCS histories to precisely map released artifacts to their originating commits, independent of fragile version tags. We evaluated VCAligner on a dataset of 2,984 verifiable PyPI packages derived from the 4,000 most-downloaded projects linked to public GitHub upstreams. &lt;strong&gt;Our results reveal a critical weakness in conventional tag-based heuristics: while they appear effective on 85% of the dataset, the residual 15% failure rate generates a catastrophic downstream audit workload of over 10.3 million commits. In contrast, VCAligner reduces this burden by two orders of magnitude (≈ 158×), bounding the total workload to under 65,000 commits.&lt;/strong&gt; Furthermore, we provide the large-scale characterization of “Packaging Noise,” classifying artifact divergence into structural additions (Path Phantoms) and content mutations (Blob Phantoms), thereby isolating the distinct attack surfaces of malicious injection and code tampering.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://doi.org/10.48550/ARXIV.2607.21888&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-07/paper-snakeoil.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Jens Dietrich and Spencer Sun from the &lt;a href=&quot;https://www.wgtn.ac.nz/&quot;&gt;Victoria University of Wellington&lt;/a&gt; together with Tim W. White and Behnaz Hassanshahi from &lt;a href=&quot;https://www.oracle.com&quot;&gt;Oracle Inc&lt;/a&gt; pre-published their paper &lt;a href=&quot;https://arxiv.org/pdf/2607.21888&quot;&gt;&lt;em&gt;No Snake Oil: Verifying Python Package Builds&lt;/em&gt;&lt;/a&gt; (PDF):&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Python has become the default language for interacting with AI, with packages being distributed through registries like the Python Package Index (PyPI). This creates a need to analyse supply chains comprising such packages. One such analysis is to rebuild packages in order to identify compromised builds injecting malware. Independent rebuilds in hardened environments have the added advantage that they can generate and record provenance in order to increase the trustworthiness of packages. Two tools that are designed to automate such rebuilds and run them at scale are macaron and oss-rebuild. We study 12,180 popular releases from PyPI and find that the byte-for-byte equivalence rate is generally low. We analyse the reasons why they produce different wheels, and find that equivalence between the original and rebuilt wheels can often still be established, preserving most of the guarantees users expect from rebuildable releases. We present and evaluate daleq4py, a tool to establish the equivalence of Python wheels through the kernel of a normalisation function that is based on provenance-preserving datalog rules. Experimental results show that daleq4py substantially expands the set of rebuilds that can be accepted as equivalent. &lt;strong&gt;Although only 15.4% of macaron rebuilds and 19.1% of oss-rebuild rebuilds are byte-for-byte identical to the published PyPI wheels, daleq4py establishes wheel equivalence for 60.2% and 78.9% of source-equivalent rebuilds, respectively.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://arxiv.org/abs/2607.01890&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-07/paper-fdroid.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Denise Nanni, Julien Malka, Stefano Zacchiroli and Théo Zimmermann from &lt;a href=&quot;https://www.telecom-paris.fr/en/home&quot;&gt;Télécom Paris&lt;/a&gt; together with Gabriele D’Angelo from the &lt;a href=&quot;https://www.unibo.it/en/homepage&quot;&gt;University of Bologna&lt;/a&gt; pre-published their paper &lt;a href=&quot;https://arxiv.org/pdf/2607.01890&quot;&gt;&lt;em&gt;Understanding Build Reproducibility in the F-Droid Ecosystem&lt;/em&gt;&lt;/a&gt; (PDF), which was accepted at the &lt;a href=&quot;https://acm-rep.github.io/2026/accepted/&quot;&gt;2026 ACM Conference on Reproducibility and Replicability&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The security of open source applications benefits considerably from the possibility of rebuilding their source and verifying the output. F-Droid, a prominent distribution for open source Android applications, systematically rebuilds them from source and tests their bitwise reproducibility at app publishing time. However, F-Droid offers no guarantee that app reproducibility will continue to hold in the future. As software ecosystems evolve, reproducibility may degrade, with potential negative consequences for software preservation and security. We present the first empirical study of build reproducibility in the F-Droid app ecosystem. Analyzing historical reproducibility logs, we find that the overall bitwise reproducibility rate has been steadily increasing over time (as new versions of apps are published). We then evaluate how reproducibility holds in time for fixed app versions, by attempting to rebuild 18 904 app versions that F-Droid had previously confirmed bitwise reproducible, published between September 2018 and February 2026, &lt;strong&gt;achieving an 83% rebuild success rate, and identify missing dependencies as the dominant cause of failure, accounting for 76% of non-rebuildable cases. Among successfully rebuilt apps, 94% are also bitwise reproducible&lt;/strong&gt;-i.e., they still yield bitwise identical artifacts upon rebuild. Together, these results show that while bitwise reproducibility largely holds for apps that can be rebuilt, rebuildability itself is highly sensitive to temporal decay.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;patches&quot;&gt;Patches&lt;/h3&gt;

&lt;p&gt;The Reproducible Builds project detects, dissects and attempts to fix as many currently-unreproducible packages as possible. We endeavour to send all of our patches upstream where applicable or possible. This month, we wrote a large number of such patches, including:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lists.opensuse.org/archives/list/factory@lists.opensuse.org/thread/JLAOJP7W6K3P2SL6XT6UYX444XZ5WQPN/&quot;&gt;openSUSE monthly&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Arnout Engelen:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/apache/ant-ivy/pull/127&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ivy&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/apache/pekko-grpc/pull/746&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pekko-grpc&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/sbt/ivy/pull/51&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sbt-ivy&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/scala/scala3/pull/26510&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scala&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Bernhard M. Wiedemann:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://build.opensuse.org/request/show/1364030&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;angelfish&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/python/cpython/pull/154988&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cpython&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://git.enlightenment.org/enlightenment/efl/pulls/133&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;efl&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/erlang/otp/issues/4417#issuecomment-5105267295&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;erlang+ex_doc&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://build.opensuse.org/request/show/1368578&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;eww/glib-macros&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/intel/intel-graphics-compiler/pull/418&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;intel-graphics-compiler&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://build.opensuse.org/request/show/1368181&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java-11-openjdk&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://build.opensuse.org/request/show/1368181&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java-17-openjdk&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://build.opensuse.org/request/show/1368504&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java-1_8_0-openjdk&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugzilla.opensuse.org/show_bug.cgi?id=1221224&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;java-21-openjdk&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://gitlab.winehq.org/mono/mono/-/work_items/33&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mono-core&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/medek/nasm-rs/pull/47&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nasm/rav1e&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://build.opensuse.org/request/show/1364286&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;python-langsmith&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://build.opensuse.org/request/show/1364231&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zathura*&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://build.opensuse.org/request/show/1368243&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zig0.15&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Chris Lamb:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1141505&quot;&gt;#1141505&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/golang-github-tidwall-wal&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;golang-github-tidwall-wal&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1141506&quot;&gt;#1141506&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/lightproof&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lightproof&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1141582&quot;&gt;#1141582&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/libslow5lib&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libslow5lib&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1141687&quot;&gt;#1141687&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/siso&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;siso&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1141841&quot;&gt;#1141841&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/grout&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grout&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1142126&quot;&gt;#1142126&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/libpsl&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libpsl&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1142492&quot;&gt;#1142492&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/node-grunt-contrib-internal&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node-grunt-contrib-internal&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1142495&quot;&gt;#1142495&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/fontforge&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fontforge&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1142496&quot;&gt;#1142496&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/spopt&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;spopt&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1142887&quot;&gt;#1142887&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/go-dlib&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;go-dlib&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1143147&quot;&gt;#1143147&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/towncrier&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;towncrier&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Jochen Sprickerhof:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1141412&quot;&gt;#1141412&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/python-sphinx-chango&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;python-sphinx-chango&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1141553&quot;&gt;#1141553&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/gasnet&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gasnet&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1141577&quot;&gt;#1141577&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/yubihsm-connector&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;yubihsm-connector&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1141663&quot;&gt;#1141663&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/dh-fortran&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dh-fortran&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1142000&quot;&gt;#1142000&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/watcher&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;watcher&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1142001&quot;&gt;#1142001&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/rakudo&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rakudo&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1142128&quot;&gt;#1142128&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/kf6-breeze-icons&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;kf6-breeze-icons&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1142141&quot;&gt;#1142141&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/oxygen-icons&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;oxygen-icons&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1142256&quot;&gt;#1142256&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/gnu-apl&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gnu-apl&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1142513&quot;&gt;#1142513&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/barvinok&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;barvinok&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1143169&quot;&gt;#1143169&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/ecbuild&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ecbuild&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;misc-news&quot;&gt;Misc news&lt;/h3&gt;

&lt;p&gt;On &lt;a href=&quot;https://lists.reproducible-builds.org/listinfo/rb-general/&quot;&gt;our mailing list&lt;/a&gt; this month, Colin Winter of &lt;a href=&quot;https://markovianprotocol.com/&quot;&gt;Markovian Protocol&lt;/a&gt; wrote to our mailing list on the topic of &lt;a href=&quot;https://lists.reproducible-builds.org/pipermail/rb-general/2026-July/004133.html&quot;&gt;&lt;em&gt;Reproducible verification for retained logs&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Reproducible builds remove trust in the builder: anyone re-derives the same artifact from the same source, byte for byte. The same shape applies one layer over, to a retained record. Most record-keeping regimes (the &lt;a href=&quot;https://artificialintelligenceact.eu/article/12/&quot;&gt;EU AI Act’s Article 12&lt;/a&gt; logging is the current example) require that events be recorded and logs retained, but not that a retained log be verifiable, by a party who was not present, as unaltered and existing when claimed. That leaves an integrity obligation resting on trusting the party being audited.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;(&lt;a href=&quot;https://lists.reproducible-builds.org/pipermail/rb-general/2026-July/thread.html#4133&quot;&gt;Full thread&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Finally, if you are interested in contributing to the Reproducible Builds project, please visit our &lt;a href=&quot;https://reproducible-builds.org/contribute/&quot;&gt;&lt;em&gt;Contribute&lt;/em&gt;&lt;/a&gt; page on our website. However, you can get in touch with us via:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;IRC: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#reproducible-builds&lt;/code&gt; on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;irc.oftc.net&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Mastodon: &lt;a href=&quot;https://fosstodon.org/@reproducible_builds&quot;&gt;@reproducible_builds@fosstodon.org&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Mailing list: &lt;a href=&quot;https://lists.reproducible-builds.org/listinfo/rb-general&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rb-general@lists.reproducible-builds.org&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;</content>
	<author>
	  <name>Reproducible Builds</name>
	   <uri>https://reproducible-builds.org/blog/</uri> 
	</author>
	<source>
	  <title type="html">reproducible-builds.org</title>
	  <subtitle type="html">Reproducible builds blog</subtitle>
	  <link rel="self" href="https://reproducible-builds.org/blog/index.rss"/>
	  <id>https://reproducible-builds.org/blog/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en-US">My Debian Activities in July 2026</title>
	<link href="http://blog.alteholz.eu/2026/08/my-debian-activities-in-july-2026/"/>
	<id>http://blog.alteholz.eu/?p=2842</id>
	<updated>2026-08-07T17:02:01+00:00</updated>
	<summary type="html" xml:lang="en-US"></summary>
	<content type="html" xml:lang="en-US">&lt;h3&gt;&lt;strong&gt;Debian LTS/ELTS&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;&lt;/p&gt;&lt;p&gt;This was my hundred-forty-fifth month that I did some work for the Debian LTS initiative, started by Raphael Hertzog at Freexian.
&lt;/p&gt;
&lt;p&gt;
During my allocated time I uploaded or worked on:  
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;[&lt;a href=&quot;https://lists.debian.org/debian-security-announce/2026/msg00313.html&quot;&gt;DSA 6402-1&lt;/a&gt;] hplip security update to fix two CVEs in Trixie related to privilege escalation and/or arbitrary code execution. I sent the debdiff to the security team, which resulted in this DSA.
&lt;/li&gt;&lt;li&gt;[&lt;a href=&quot;https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1142351&quot;&gt;#1142351&lt;/a&gt;] trixie-pu of libnfs has been uploaded.&lt;/li&gt;&lt;li&gt;[&lt;a href=&quot;https://lists.debian.org/debian-lts-announce/2026/07/msg00031.html&quot;&gt;DLA 4689-1&lt;/a&gt;]  libnfs security update to fix one CVE in Bookworm and Bullseye related to an integer overflow.
&lt;/li&gt;&lt;li&gt;[&lt;a href=&quot;https://lists.debian.org/debian-lts-announce/2026/07/msg00041.html&quot;&gt;DLA 4699-1&lt;/a&gt;] hplip security update to fix two CVEs in Bookworm and Bullseye related to privilege escalation and/or arbitrary code execution.
&lt;/li&gt;&lt;li&gt;[ELA-1775-1] libnfs gimp security update to fix one CVE in Buster and Stretch related to an integer overflow.&lt;/li&gt;&lt;li&gt;[ELA-1784-1] hplip security update to fix two CVEs in Buster and Stretch related to privilege escalation and/or arbitrary code execution.&lt;/li&gt;&lt;/ul&gt;



&lt;p&gt;
Unfortunately the number of assigned hours was rather low this month. So besides doing some days of FD at the end of the month, where I also had to process a new package list for ELTS, and a review of the rsync package (prepared by Sylvain), not much happened here.
&lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;Debian Printing&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;This month I uploaded a new upstream versions:&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/hplip&quot;&gt;hplip&lt;/a&gt; to unstable.&lt;/li&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/foomatic-db&quot;&gt;foomatic-db&lt;/a&gt; to unstable.&lt;/li&gt;&lt;/ul&gt;



&lt;p&gt;Besides the package upload, I also took care of some older bugs of hplip.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;This work is generously funded by &lt;a href=&quot;https://www.freexian.com&quot;&gt;Freexian&lt;/a&gt;!&lt;/strong&gt;&lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;Debian Lomiri&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;&lt;/p&gt;&lt;p&gt;This month I continued the upload of lomiri packages with new upstream versions. Thanks to the help of my other colleagues, this project could be finished now.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;This work is generously funded by &lt;a href=&quot;https://freiesoftware.gmbh/&quot;&gt;Fre(i)e Software GmbH&lt;/a&gt;!&lt;/strong&gt;&lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;Debian Astro&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;This month I uploaded a new upstream version  or a bugfix version of:&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/fxload&quot;&gt;fxload&lt;/a&gt; to unstable.&lt;/li&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/indi-orion-ssg3&quot;&gt;indi-orion-ssg3&lt;/a&gt; to unstable.&lt;/li&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/calceph&quot;&gt;calceph&lt;/a&gt; to unstable (sponsored upload).&lt;/li&gt;&lt;/ul&gt;



&lt;h3&gt;&lt;strong&gt;Debian IoT&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Unfortunately I had no time to work in this category this month.&lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;Debian Mobcom&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;This month I uploaded a new upstream version  or a bugfix version of:&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/libgsm&quot;&gt;libgsm&lt;/a&gt; to unstable.&lt;/li&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/libosmocore&quot;&gt;libosmocore&lt;/a&gt; to unstable.&lt;/li&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/libosmo-cc&quot;&gt;libosmo-cc&lt;/a&gt; to unstable.&lt;/li&gt;&lt;/ul&gt;



&lt;p&gt;Next month I intend to upload new upstream versions of all Osmocom packages. As far as I can tell, these uploads will happen without soname changes. I like that :-).&lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;misc&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;This month I uploaded a new upstream version  or a bugfix version of:&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/usb-modeswitch&quot;&gt;usb-modeswitch&lt;/a&gt; to unstable.&lt;/li&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/ta-lib&quot;&gt;ta-lib&lt;/a&gt; to unstable.&lt;/li&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/lua-geoip&quot;&gt;lua-geoip&lt;/a&gt; to unstable.&lt;/li&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/lua-systemd&quot;&gt;lua-systemd&lt;/a&gt; to unstable.&lt;/li&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/displaylink-driver&quot;&gt;displaylink-driver&lt;/a&gt; to unstable.&lt;/li&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/nuspell&quot;&gt;nuspell&lt;/a&gt; to unstable.&lt;/li&gt;&lt;/ul&gt;</content>
	<author>
	  <name>alteholz</name>
	   <uri>http://blog.alteholz.eu</uri> 
	</author>
	<source>
	  <title type="html">planetdebian – blog.alteholz.eu</title>
	  <subtitle type="html">As time goes by ...</subtitle>
	  <link rel="self" href="http://blog.alteholz.eu/tag/planetdebian/feed/"/>
	  <id>http://blog.alteholz.eu</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">Kai Stephens (Barkley Walsh) &amp;amp; British Democrats in Clacton by-election hustings</title>
	<link href="https://nazi.compare/en/2026/08/07/kai-stephens-barkley-walsh-british-democrats-clacton/"/>
	<id>https://nazi.compare/en/2026/08/07/kai-stephens-barkley-walsh-british-democrats-clacton/</id>
	<updated>2026-08-07T08:30:00+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;On the right of British politics, there is some argument about which group
is closest to the Nazi party.  Socialist Worker recently published an article
alleging
&lt;a href=&quot;https://socialistworker.co.uk/news/reform-uk-epping-vice-chair-shares-stage-with-nazi/&quot;&gt;
Reform UK is willing to share a stage with Nazis&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;On the evening of 6 August 2026, candidates in the Clacton by-election
gathered
for a hustings-style debate at the Clacton Town Hall.&lt;/p&gt;

&lt;p&gt;There were tense moments when Kai Stephens (Barkley Walsh) expressed
concerns about another candidate, Attieh Fard, who was born in Iran but
acquired British citizenship.  There are thirty four candidates contesting
the by-election and at least one of the Australian candidates does not hold
British citizenship at all as it is not required to hold a seat in
Westminster.&lt;/p&gt;

&lt;p&gt;Stephens elaborated on his comments, explaining that it is about race.
The Australians and anybody with English, Scottish, Welsh or Irish ancestry
are considered, by the British Democrats, to be a superior race.  Never mind
the fact that Iranians have invented low cost drones that have brought
superpowers to their knees in various conflicts around the world.&lt;/p&gt;

&lt;p&gt;Stephens himself admitted being twenty percent German.  Then again, the
British royal family have a lot of German cousins too.&lt;/p&gt;

&lt;p&gt;One of the Australian candidates simply asked if anybody remembered where
the late Prince Philip was born.&lt;/p&gt;

&lt;p&gt;In the Nazi era, the hyper-focus on race was equivalent to the arguments
put forward by Kai Stephens.&lt;/p&gt;

&lt;p&gt;Germans were expected to apply for an Aryan Certificate (Abstammungsnachweis)
to provide proof of their ancestry.  To work in the public service, it was
necessary to prove at least three generations of Aryan blood.  To join the
Nazi party or be part of the fearsome SS, it was necessary to provide proof of
Aryan blood back to at least the year 1800.&lt;/p&gt;

&lt;p&gt;Kai Stephens&#39; concern about Attieh Fard&#39;s birthplace, as he explained it
to us on stage on 6 August 2026,  appears to be analogous to the
motivation behind the Aryan Certificate.&lt;/p&gt;

&lt;p&gt;On 25 April 2017, the Fellowship
&lt;a href=&quot;https://nazi.compare/en/2024/04/24/daniel-pocock-elected-on-anzac-day-easter-rising-fsfe-fellowship/&quot;&gt;
elected Daniel Pocock to represent them to the FSFE (fake FSF) in Berlin&lt;/a&gt;.
When the Germans realised that 25 April is ANZAC Day and
&lt;a href=&quot;https://anzac.site/en/france/robert-pocock-3rd-divisional-train/&quot;&gt;
Mr Pocock&#39;s great-grandfather was an ANZAC&lt;/a&gt;, they decided to
&lt;a href=&quot;https://nazi.compare/en/2024/03/08/abortion-sterilisation-fsfe-fellowship-elections/&quot;&gt;
remove elections from the FSFE constitution&lt;/a&gt;.  Mr Pocock pointed out that
Germans had behaved like this before.  The Germans asked Berlin Police to
prevent Mr Pocock calling them Nazis.  German police prosecute approximately
20,000 people for criminal speech each year.  In the case of Mr Pocock&#39;s
uncannily accurate Nazi comparisons, Berlin police wrote to Mr Pocock,
in German, and told him
&lt;a href=&quot;https://nazi.compare/en/2024/02/02/berlin-police-decline-investigate-fsfe-nazi-comparisons/&quot;&gt;
they will not stop him calling the FSFE Nazis&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Mr Pocock&#39;s birthday, 9 November, is the
&lt;a href=&quot;https://nazi.compare/en/2024/11/10/joan-meyer-correctly-linked-gideon-cody-raid-marion-county-record-kristallnacht/&quot;&gt;
anniversary of the Kristallnacht&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Read more about
&lt;a href=&quot;https://danielpocock.com/en/category/inclusion/&quot;&gt;
Mr Pocock&#39;s work for tolerance and inclusion&lt;/a&gt;.&lt;/p&gt;

&lt;img alt=&quot;Kai Stephens, Barkley Walsh, British Democrats, Clacton leaflet, Nazi comparison&quot; src=&quot;https://nazi.compare/assets/people/kai-stephens-barkley-walsh/2026-07-leaflet.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt; &lt;/p&gt;

&lt;img alt=&quot;Matthias Kirschner, FSFE, Berlin police, Nazi comparison, criminal speech, criminal defamation&quot; src=&quot;https://nazi.compare/assets/police-conclusion-letter.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Read more about
&lt;a href=&quot;https://danielpocock.com/en/category/inclusion/&quot;&gt;
Mr Pocock&#39;s work for tolerance and inclusion&lt;/a&gt;.&lt;/p&gt;</content>
	<author>
	  <name>Nazi.Compare</name>
	   <uri>https://nazi.compare/</uri> 
	</author>
	<source>
	  <title type="html">Nazi.Compare</title>
	  <subtitle type="html">If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck.</subtitle>
	  <link rel="self" href="https://nazi.compare/feed.xml"/>
	  <id>https://nazi.compare/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">DebConf26 closes in Santa Fe and DebConf27 announced</title>
	<link href="https://bits.debian.org/2026/08/debconf26-closes.html"/>
	<id>tag:bits.debian.org,2026-08-06:/2026/08/debconf26-closes.html</id>
	<updated>2026-08-06T21:50:00+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;&lt;a href=&quot;https://wiki.debian.org/DebConf/26/Photos?action=AttachFile&amp;amp;do=view&amp;amp;target=debconf26-group-photo.jpg&quot;&gt;&lt;img alt=&quot;DebConf26 group photo - click to enlarge&quot; src=&quot;https://bits.debian.org/images/debconf26-group-photo_small.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;On Saturday 25 July 2026, the annual &lt;a href=&quot;https://debconf26.debconf.org/&quot;&gt;Debian Developers and Contributors
Conference&lt;/a&gt; came to a close.
Over 270 attendees representing 35 countries from around the world came
together for a combined 90 events (including some which took place during
the DebCamp) including more than 27 Talks, 21 Short Talks,
29 Birds of a Feather sessions (&quot;BoF&quot; – informal meeting between developers
and users), 8 workshops, and activities in support of furthering our
distribution and free software, learning from our mentors and peers, building
our community, and having a bit of fun.&lt;/p&gt;
&lt;p&gt;The conference was preceded by the annual
&lt;a href=&quot;https://wiki.debian.org/DebCamp&quot;&gt;DebCamp&lt;/a&gt; hacking session held 13
through 19 July where Debian Developers and Contributors convened to
focus on their individual Debian-related projects or work in team sprints
geared toward in-person collaboration in developing Debian.&lt;/p&gt;
&lt;p&gt;As has been the case for several years, a special effort has been made to
welcome newcomers and help them become familiar with Debian and DebConf
by organizing a sprint &quot;New Contributors Onboarding&quot; every day of Debcamp,
followed more informally by mentorship during DebConf. Half a dozen new
contributors joined the sessions and learned about Debian, free software,
packaging and much more.&lt;/p&gt;
&lt;p&gt;This year, a week-long DebCamp session was dedicated to auditing,
patching, and modernizing the Go ecosystem in Debian and enable the
transition triggered by the recent upload of dh-golang enabling GO111MODULE=on
by default in Experimental.&lt;/p&gt;
&lt;p&gt;In order to make the conference more accessible for local participants,
a local language track was included in the schedule for talks in Spanish,
as was done at DebConf19 in Brazil.&lt;/p&gt;
&lt;p&gt;The actual Debian Developers Conference started on Monday 20 July 2026.&lt;/p&gt;
&lt;p&gt;In addition to the traditional &quot;Bits from the DPL&quot; talk, the continuous
key-signing party, lightning talks, and the announcement of next year&#39;s
DebConf27, there were several update sessions shared by internal projects
and teams.&lt;/p&gt;
&lt;p&gt;Many of the hosted discussion sessions were presented by our technical
core teams with the usual and useful &quot;Meet the Technical Committee&quot;, three
talks about Linux Kernel, early boot and improving Debian’s kernel and
installer support for Chromebooks, and about twenty BoFs and talks about
Debian packaging policy, Debian infrastructure, security and privacy.&lt;/p&gt;
&lt;p&gt;This year, and echoing ongoing discussions within the Free Software community,
Artificial Intelligence and Age Verification have been the subject of
several talks. The Python, Perl, Ruby, Go, and Rust programming
language teams also shared updates on their work and efforts.&lt;/p&gt;
&lt;p&gt;More than 17 BoFs and talks about community, diversity, and local outreach
highlighted the work of various teams involved in not just the technical but
also the social aspect of our community&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://debconf26.debconf.org/schedule/&quot;&gt;schedule&lt;/a&gt;
was updated each day with planned and ad hoc activities introduced by
attendees over the course of the conference. Several traditional activities
took place: a poetry performance, the traditional Cheese and Wine party, the
Group Photos, and the Day Trip.&lt;/p&gt;
&lt;p&gt;For those who were not able to attend, most of the talks and sessions were
broadcasted live and recorded. One can find the seventy hours of recorded
videos available via the conference
&lt;a href=&quot;https://debconf26.debconf.org/schedule/&quot;&gt;schedule&lt;/a&gt;,
or alternatively through this
&lt;a href=&quot;https://meetings-archive.debian.net/pub/debian-meetings/2026/DebConf26/&quot;&gt;link&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Almost all of the sessions facilitated remote participation via IRC and Matrix
messaging apps or online collaborative text documents which allowed remote
attendees to &quot;be in the room&quot; and ask questions or share comments with the
speaker or assembled audience. DebConf26 saw over 341 T-shirts, a day trip,
and up to 130 meals planned per day.&lt;/p&gt;
&lt;p&gt;All of these events, activities, conversations, and streams coupled with our
love, interest, and participation in Debian and F/OSS certainly made this
conference an overall success both here in Santa Fe, Argentina and online
around the world.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://debconf26.debconf.org/&quot;&gt;DebConf26 website&lt;/a&gt;
will remain active for archival purposes and will continue to offer
links to the presentations and videos of talks and events.&lt;/p&gt;
&lt;p&gt;Next year, &lt;a href=&quot;https://wiki.debian.org/DebConf/27&quot;&gt;DebConf27&lt;/a&gt; will be held
in Asahikawa, Hokkaido, Japan, from Sunday September 5th to Saturday
September 11th, 2027. As tradition follows before the next DebConf the
local organizers in Japan will start the conference activities with DebCamp
with a particular focus on individual and team work towards improving the
distribution.&lt;/p&gt;
&lt;p&gt;DebConf is committed to a safe and welcome environment for all
participants. See the
&lt;a href=&quot;https://debconf26.debconf.org/about/coc/&quot;&gt;web page about the Code of Conduct on the DebConf26 website&lt;/a&gt;
for more details on this.&lt;/p&gt;
&lt;p&gt;Debian thanks the commitment of numerous
&lt;a href=&quot;https://debconf26.debconf.org/sponsors/&quot;&gt;sponsors&lt;/a&gt;
to support DebConf26, particularly our Platinum Sponsors:
&lt;a href=&quot;https://www.infomaniak.com&quot;&gt;&lt;strong&gt;Infomaniak&lt;/strong&gt;&lt;/a&gt;, and
&lt;a href=&quot;https://www.proxmox.com/&quot;&gt;&lt;strong&gt;Proxmox&lt;/strong&gt;&lt;/a&gt;,
and our Gold Sponsors : &lt;a href=&quot;https://www.freexian.com/&quot;&gt;&lt;strong&gt;Freexian&lt;/strong&gt;&lt;/a&gt;, and
&lt;a href=&quot;https://www.viridiengroup.com&quot;&gt;&lt;strong&gt;Viridien&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We also wish to thank our Video and Infrastructure teams, the DebConf26
and DebConf committees, our host nation of Argentina, and each and every
person who helped contribute to this event and to Debian overall.
Thank you all for your work in helping Debian continue to be &quot;The Universal
Operating System&quot;.&lt;/p&gt;
&lt;p&gt;See you next year!&lt;/p&gt;
&lt;h3&gt;About Debian&lt;/h3&gt;
&lt;p&gt;The Debian Project was founded in 1993 by Ian Murdock to be a truly free
community project. Since then the project has grown to be one of the
largest and most influential Open Source projects. Thousands of
volunteers from all over the world work together to create and maintain
Debian software. Available in 70 languages, and supporting a huge range
of computer types, Debian calls itself the &lt;em&gt;universal operating system&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;About DebConf&lt;/h3&gt;
&lt;p&gt;DebConf is the Debian Project&#39;s developer conference. In addition to a
full schedule of technical, social and policy talks, DebConf provides an
opportunity for developers, contributors and other interested people to
meet in person and work together more closely. It has taken place
annually since 2000 in locations as varied as Scotland, Bosnia and Herzegovina,
India, Korea, France. More information about DebConf is available from
&lt;a href=&quot;https://debconf.org&quot;&gt;https://debconf.org/&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;About Infomaniak&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.infomaniak.com&quot;&gt;&lt;strong&gt;Infomaniak&lt;/strong&gt;&lt;/a&gt; is an independent, employee-owned
Swiss technology company that designs, develops, and operates its own cloud
infrastructure and digital services entirely in Switzerland. With over
300 employees — more than 70% engineers and developers — the company reinvests
all profits into R&amp;amp;D. Its public cloud is built on OpenStack, with managed
Kubernetes, Database as a Service, object storage, and sovereign AI services
accessible via OpenAI-compatible APIs, all running on its own Swiss
infrastructure. Infomaniak also develops a sovereign collaborative suite —
messaging, email, storage, online office tools, videoconferencing, and a
built-in AI assistant — developed in-house and as a privacy-respecting
solution to proprietary platforms. Open source is central to how Infomaniak
operates. Its latest data center (D4) runs on 100% renewable energy and uses
no traditional cooling: all the heat generated by its servers is captured and
fed into Geneva&#39;s district heating network, supplying up to 6,000 homes in
winter and hot water year-round. The entire project has been documented and
open-sourced at &lt;a href=&quot;https://d4project.org/&quot;&gt;d4project.org&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;About Proxmox&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.proxmox.com/&quot;&gt;&lt;strong&gt;Proxmox&lt;/strong&gt;&lt;/a&gt; develops powerful, yet easy-to-use
open-source server solutions. The comprehensive open-source ecosystem is
designed to manage divers IT landscapes, from single servers to large-scale
distributed data centers. Our unified platform integrates server
virtualization, easy backup, and rock-solid email security ensuring seamless
interoperability across the entire portfolio. With the Proxmox Datacenter
Manager, the ecosystem also offers a &quot;single pane of glass&quot; for centralized
management across different locations. Since 2005, all Proxmox solutions have
been built on the rock-solid Debian platform. We are proud to return to
DebConf26 as a sponsor because the Debian community provides the foundation
that makes our work possible. We believe in keeping IT simple, open, and under
your control.&lt;/p&gt;
&lt;h3&gt;Contact Information&lt;/h3&gt;
&lt;p&gt;For further information, please visit the DebConf26 web page at
&lt;a href=&quot;https://debconf26.debconf.org/&quot;&gt;https://debconf26.debconf.org/&lt;/a&gt; or send
mail to &lt;a href=&quot;https://bits.debian.org/feeds/mailto:press@debian.org&quot;&gt;press@debian.org&lt;/a&gt;.&lt;/p&gt;</content>
	<author>
	  <name>Debian Publicity Team and Volunteers</name>
	   <uri>https://bits.debian.org/</uri> 
	</author>
	<source>
	  <title type="html">Bits from Debian</title>
	  <subtitle type="html">Blog from the Debian Project</subtitle>
	  <link rel="self" href="https://bits.debian.org/feeds/feed.rss"/>
	  <id>https://bits.debian.org/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en-US">TV Control etc</title>
	<link href="https://etbe.coker.com.au/2026/08/06/tv-control-etc/"/>
	<id>https://etbe.coker.com.au/?p=6267</id>
	<updated>2026-08-06T04:01:37+00:00</updated>
	<summary type="html" xml:lang="en-US"></summary>
	<content type="html" xml:lang="en-US">&lt;p&gt;&lt;a href=&quot;https://etbe.coker.com.au/2008/09/15/the-problem-is-too-many-remote-controls/&quot;&gt;In 2008 I wrote a blog post “The Problem is Too Many Remote Controls” [1]&lt;/a&gt; about the issues of controlling a TV and related things. It recently got some comments on Mastodon so I think it’s time for an update.&lt;/p&gt;
&lt;p&gt;The first issue I raised was “Now it’s not uncommon to have separate remote controls for the TV, VCR, DVD player, and the Cable TV box – a total of four remote controls” which seems to have alleviated. VCRs seem to have almost entirely gone away. The &lt;a href=&quot;https://en.wikipedia.org/wiki/VHS&quot;&gt;VHS Wikipedia page [2]&lt;/a&gt; is worth reading for everyone who hasn’t seen a VCR in operation, which I expect to be more than a few readers now and an increasing number over the next 18 years. I personally don’t have Cable TV, I own a DVD player which isn’t connected to my TV because I haven’t used it for years, I don’t own a VCR, and I don’t watch free to air TV. So I have one remote control for the TV which I use for Netflix and sometimes YouTube.&lt;/p&gt;
&lt;p&gt;When viewing YouTube on TV there are significantly more adverts and longer adverts. I presume that is because installing an ad-blocker on my TV isn’t a viable option for me and it’s a total impossibility for most users. Generally my desktop PC is a much better platform for YouTube than my TV, it has a better quality display, is more user friendly (my previous post addressed the difficulty of getting to the data source that’s desired), and doesn’t require entering search terms via a slow on-screen keyboard. Netflix on Linux is limited to 720p at low bitrate which is obviously of low visual quality while on the TV it’s in 4K. I have Netflix so I use that only on the TV.&lt;/p&gt;
&lt;p&gt;In my previous post I wrote a thought experiment on how to use a cheap laptop ($500 at the time – equivalent to $777 in 2025 money according to the Reserve Bank of Australia) to control a $5000 TV ($7770 in 2025 money). Now you can buy a new 65″ 4K TV for under $800 and a new laptop capable of 4K output for under $400 so the options are very different. For a $800 TV the manufacturer isn’t going to develop a remote control interface and Google (who develops the software the TVs run) won’t do it because it could reduce their advertising revenue. But a typical home user could setup a cheap laptop connected to their TV via HDMI providing a familiar and efficient user interface for themselves and visitors. For a Windows laptop 4K Netflix should work and for a Linux laptop the options of a laptop for everything apart from Netflix and the TV for Netflix are bearable, two controls are worse than one but better than the 3+ that used to be common.&lt;/p&gt;
&lt;p&gt;In my previous post I raised the issue that “it’s often the case that you don’t want to stop watching one show while trying to find another”. This is still an unsolved problem and is not addressed in modern software. I am not aware of a Linux music player that supports such functionality and this would be much easier for a music player than for a video player where the screen would have to be shared between the interface for finding the next thing to play and the space for playing the end of the current one. Maybe I should file a bunch of wishlist bugs against music players asking for this.&lt;/p&gt;
&lt;p&gt;I suggested that “cable modem” and “cable TV box” could be integrated into a single device. That has not happened, in fact it’s got worse. A relative who has Foxtel has a cable modem, a cable TV box, and a Wifi AP with VOIP to provide landline phone service and to make it more exciting the latter two both have bugs that require a periodic hardware reset to fix. Hopefully cable TV will go away in the next 18 years.&lt;/p&gt;
&lt;p&gt;Regular PCs have become less noisy in recent years. I am currently using a HP Z640 to write this post and I have HP Z840 and HP Z4G4 systems behind me running as servers and the background noise is still very low. The &lt;a href=&quot;https://etbe.coker.com.au/2025/11/25/edid-and-my-8k-tv/&quot;&gt;allegedly 8K TV [3]&lt;/a&gt; that I have in my lounge room has cooling fans that make more noise than those three high-end HP computers combined. Using a quiet PC like one of those HP systems to drive a TV is a very viable option and I did just that for a couple of years. Kogan has currently got a selection of refurbished Lenovo ThinkStation systems on sale for under $400, they are quiet and would do well for this, it’s also nice that Kogan is selling systems with ECC RAM at home user prices.&lt;/p&gt;
&lt;p&gt;TV does seem to be going away. YouTube and streaming services seem to get more watching time and many people don’t use TV at all.&lt;/p&gt;
&lt;p&gt;Since my previous post the number of streaming services has increased so torrenting offers increasing benefits as no-one wants to subscribe to 6+ services. For anyone who wants to get all the content that interests them while paying the user interface situation is much worse now than it used to be in 2008.&lt;/p&gt;
&lt;p&gt;If you use KDE on a PC then the &lt;b&gt;kconnect&lt;/b&gt; program allows a phone to be used to remotely control some aspects of a PC and has a good interface for pause/resume of a video and seeking 10 seconds forwards/backwards. The interface for controlling volume is hard to get to and doesn’t work on my installation. If you want to use a keyboard to start something playing and then a phone for pause control then kdeconnect is a decent option. A comment on my previous post by Michael Croes raised the issue of remote control which is now a solvable problem. Justin also wrote a comment suggesting a Nokia N800 as a remote.&lt;/p&gt;
&lt;p&gt;Jason suggested a programmable remote, which would be a good option for a power user and a viable option for someone setting things up for their grandparents. But the amount of pain is greater than I’m interested in as lounge room TV isn’t an important thing to me. It may appeal to more people than having a dedicated lounge room PC though.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[1]&lt;a href=&quot;https://etbe.coker.com.au/2008/09/15/the-problem-is-too-many-remote-controls/&quot;&gt; https://etbe.coker.com.au/2008/09/15/the-problem-is-too-many-remote-controls/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[2]&lt;a href=&quot;https://en.wikipedia.org/wiki/VHS&quot;&gt; https://en.wikipedia.org/wiki/VHS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[3]&lt;a href=&quot;https://etbe.coker.com.au/2025/11/25/edid-and-my-8k-tv/&quot;&gt; https://etbe.coker.com.au/2025/11/25/edid-and-my-8k-tv/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;yarpp yarpp-related yarpp-related-rss yarpp-template-list&quot;&gt;

&lt;p&gt;Related posts:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2021/06/06/netflix-ipv6/&quot; rel=&quot;bookmark&quot; title=&quot;Netflix and IPv6&quot;&gt;Netflix and IPv6&lt;/a&gt; &lt;small&gt;It seems that Netflix has an ongoing issue of not...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2022/01/04/big-smart-tvs/&quot; rel=&quot;bookmark&quot; title=&quot;Big Smart TVs&quot;&gt;Big Smart TVs&lt;/a&gt; &lt;small&gt;Recently a relative who owned a 50″ Plasma TV asked...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2008/09/15/the-problem-is-too-many-remote-controls/&quot; rel=&quot;bookmark&quot; title=&quot;The Problem is Too Many Remote Controls&quot;&gt;The Problem is Too Many Remote Controls&lt;/a&gt; &lt;small&gt;I am often asked for advice about purchasing TVs and...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content>
	<author>
	  <name>etbe</name>
	   <uri>https://etbe.coker.com.au</uri> 
	</author>
	<source>
	  <title type="html">etbe – Russell Coker</title>
	  <subtitle type="html">Linux, politics, and other interesting things</subtitle>
	  <link rel="self" href="https://etbe.coker.com.au/feed/"/>
	  <id>https://etbe.coker.com.au</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en-US">Subscription Bombing • Email under Attack</title>
	<link href="https://gwolf.org/2026/08/subscription-bombing-email-under-attack.html"/>
	<id>https://gwolf.org/2026/08/subscription-bombing-email-under-attack.html</id>
	<updated>2026-08-06T00:17:35+00:00</updated>
	<summary type="html" xml:lang="en-US"></summary>
	<content type="html" xml:lang="en">&lt;blockquote&gt;
		 
		   This post is an &lt;em&gt;unpublished&lt;/em&gt; review
		 
		     
		       
		         for &lt;em&gt;&lt;a href=&quot;https://dl.acm.org/doi/full/10.1145/3797487&quot;&gt;Subscription Bombing • Email under Attack&lt;/a&gt;&lt;/em&gt;
		       
		     
		     
		   &lt;/blockquote&gt;
		 
		 &lt;p&gt;One of the most important inputs one can have when designing a response
strategy against a security attack is a good characterization. This article
describes a relatively newly described attack mode (subscription bombing),
hypothetizes on the motivations that can lie behind it, and presents some
countermeasures that can be taken by different actors to reduce its impact.&lt;/p&gt;

&lt;p&gt;At its core, suscription bombing is a classical reflection attack: it uses
a third party service so that the answer to a relatively simple request is
amplified and results in a distributed denial of service (DDoS) for the
victim. And, as with most DDoS attacks, its effectivity lies in that there
is not much a person can do against traffic coming from seemingly random
different providers all around the world.&lt;/p&gt;

&lt;p&gt;The core differentiatof for subscription bombing is that the attack’s
victim is not a network port, but an individual’s e-mail address. The
attacker builds a database of service providers that allow interested users
to sign up for newsletter on their activities, or a mailing list, or even
just to create a new account on a given Web system. This action will
generate a (seemingly legitimate) confirmation mail sent to the victim. But
the attacker scripts together hundreds of thousands of such request,
creating a deluge of confirmation mails sent to the unsuspecting victim.&lt;/p&gt;

&lt;p&gt;The authors explain the goals an attacker might pursue by performing this
kind of attack. They suppose this can be due to harassment (a disgruntled
employee being denied a salary raise, a political adversary, or even a
romantic ex-partner wanting to inconvenience the victim’s use of their
e-mail). More worryingly, the attack can be used as a distraction: by
sending a high volume of mails in a controlled timeframe, the attacker can
reduce the probability of the victim noticing a specific attack warning
them of, i.e., financial fraud, unwanted purchases, or break-in attempts
into their accounts. Attacks targetting mailboxes at private mail servers
can also lead to overloading an account’s limit, causing it to reject
mails after the attack is delivered and before the folder is cleaned. And
it can also pave the way for follow-up, targetted deception attacks, where
the attackers call the victim pretending to be the company’s IT department,
and get them to install a remote desktop monitoring and management tool,
with which they can effectively seize control of the victim’s data.&lt;/p&gt;

&lt;p&gt;To do this, they present a study they made over 24 cases of victims, from
which 47,970 total e-mails were received between October and December 2024,
with individual attacks receiving between 81 and 3,387 e-mails per hour,
from where they presented several descriptive analysis.&lt;/p&gt;

&lt;p&gt;The authors explored cyber criminal’s offers on underground websites,
comparing flooding services and pricing schemes.&lt;/p&gt;

&lt;p&gt;Finally, mitigation strategies are discussed. Mitigation is quite
problematic, as none of the mail servers is acting in either a hostile way
or lacking permissions — they are performing just the task they should. The
authors suggest four mitigation strategies for mail server operators to
reduce the burden on their users, although none of them is easily
automatizab (rate-limit the number of emails a given inbox can receive from
previously unseen senders; educate users about this kind of attacks; group
similar newsletter or account reset mails during active attacks; and
automatically unsubscribe or bounce newsletter messages when a surge is
detected). They also recommend newsletter providers and services accepting
the unrestricted creation of user accounts to provide some hardening to
increase the effort wrongdoers need to spend to abuse their services, such
as requiring CAPTCHAs or requiring users to take several steps before
requesting a subscription, although they recognize this adds friction to
the process providers are most interested in providing; filtering and
triaging known-good and known-bad domains, although this is hard to
implement on a preemptive fashion, and adhering to easy unsubscription
standards, such as easily identifiable headers with which mass
unsubscription could be performed more easily victims, instead of hunting
for the right places to click, potentially even in mails written in an
unknown language.&lt;/p&gt;

&lt;p&gt;The described problem is interesting, and properly tackling it can be a
game changer for many users who will suffer this kind of abuse, and the
article is easy to read and soundly supports its claims.&lt;/p&gt;</content>
	<author>
	  <name>Gunnar Wolf</name>
	   <uri>https://gwolf.org</uri> 
	</author>
	<source>
	  <title type="html">Gunnar Wolf - Nice grey life</title>
	  <subtitle type="html">Gunnar Wolf - Nice grey life</subtitle>
	  <link rel="self" href="https://gwolf.org/rss.xml"/>
	  <id>https://gwolf.org</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">Yes-yes, still alive!</title>
	<link href="https://k1024.org/posts/2026/2026-08-05-yes-yes-still-alive/"/>
	<id>https://k1024.org/posts/2026/2026-08-05-yes-yes-still-alive/</id>
	<updated>2026-08-05T17:34:00+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;I am not sure what happened, but my interests have changed significantly, and… I
haven’t blogged, I haven’t done any open source work, and didn’t even process
any pictures for the entire year. Not because anything went bad, just… new
stuff, new interests, life changes.&lt;/p&gt;
&lt;p&gt;However, still alive, and still struggling with sports, and with sleep :)&lt;/p&gt;
&lt;p&gt;On the positive side, on a recent mid-length flight, I thought — I haven’t done
any work on Corydalis, since last year I closed quite of a few of my “must have”
features, so probably, nothing else to do for now, right? I opened an editor and
started thinking about ideas, and surprised! One hour later, I had written down
enough ideas for a couple of months of work. So now just need to find the time…
but can’t wait for the planned things!&lt;/p&gt;
&lt;p&gt;Stay well!&lt;/p&gt;</content>
	<author>
	  <name>Iustin Pop</name>
	   <uri>https://k1024.org</uri> 
	</author>
	<source>
	  <title type="html">iustin - all posts</title>
	  
	  <link rel="self" href="https://k1024.org/index.atom"/>
	  <id>https://k1024.org/index.atom</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">Gnome refusing to suspend</title>
	<link href="http://www.enricozini.org/blog/2026/debian/gnome-refusing-to-suspend"/>
	<id>http://www.enricozini.org/blog/2026/debian/gnome-refusing-to-suspend</id>
	<updated>2026-08-05T07:57:52+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;I&#39;m tired, I want to do go bed. I click &quot;sleep&quot; on gnome shell, nothing happens.&lt;/p&gt;
&lt;p&gt;Swearwords.&lt;/p&gt;
&lt;p&gt;I want to go to bed. I might have want to put my laptop in a bag and run to
catch a train. &lt;a href=&quot;https://mastodon.bida.im/@spanezz/117017036756831405&quot;&gt;I hate when this happens&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;systemd-inhibit --list --mode=block&lt;/code&gt; doesn&#39;t help much:&lt;/p&gt;
&lt;div class=&quot;codehilite&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;systemd-inhibit&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--list&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--mode&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;block
WHO&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;UID&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;USER&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;PID&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;COMM&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;WHAT&lt;span class=&quot;w&quot;&gt;                                                     &lt;/span&gt;WHY&lt;span class=&quot;w&quot;&gt;                        &lt;/span&gt;MODE
enrico&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;enrico&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;3042&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;gsd-power&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;handle-lid-switch&lt;span class=&quot;w&quot;&gt;                                        &lt;/span&gt;External&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;monitor&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;attachedâ€¦&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;block
enrico&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;enrico&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;3037&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;gsd-media-keys&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;handle-power-key:handle-suspend-key:handle-hibernate-key&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;GNOME&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;handling&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;keypresses&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;block
enrico&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;enrico&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;2878&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;gnome-session-b&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;sleep&lt;span class=&quot;w&quot;&gt;                                                    &lt;/span&gt;user&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;session&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;inhibited&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;block
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;After much googling I found out about &lt;code&gt;gnome-session-inhibit&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;codehilite&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;gnome-session-inhibit&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;--list
mutter:&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;idle-inhibit&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;idle&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
/usr/lib/chromium/chromium:&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;Playing&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;audio&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;suspend&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Found the right tab in chromium, paused playing, sleep works again.&lt;/p&gt;
&lt;p&gt;My sleep was a good half an hour overdue, and all I got for it was to write
this blog post.&lt;/p&gt;
&lt;p&gt;Of course Gnome could have shown me its inhibitor list instead of doing
nothing, since it has that information, but &lt;a href=&quot;https://discourse.gnome.org/t/why-does-gnome-shell-doesnt-notify-user-about-suspend-being-blocked-by-inhibitor/34077&quot;&gt;it didn&#39;t&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;What I really would expect is that if I intentionally click a suspend button,
audio and video playing wouldn&#39;t inhibit the suspend. Maybe in a future version
of Gnome?&lt;/p&gt;</content>
	<author>
	  <name>Enrico Zini</name>
	   <uri>http://www.enricozini.org/tags/pdo</uri> 
	</author>
	<source>
	  <title type="html">Enrico Zini: posts with tag pdo</title>
	  <subtitle type="html">Enrico Zini: most recent posts with tag pdo</subtitle>
	  <link rel="self" href="http://www.enricozini.org/tags/pdo"/>
	  <id>http://www.enricozini.org/tags/pdo</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en-US">Monitors for Work</title>
	<link href="https://etbe.coker.com.au/2026/08/05/monitors-for-work/"/>
	<id>https://etbe.coker.com.au/?p=6264</id>
	<updated>2026-08-04T22:41:18+00:00</updated>
	<summary type="html" xml:lang="en-US"></summary>
	<content type="html" xml:lang="en-US">&lt;h2&gt;The Corporate Monitor Issue&lt;/h2&gt;
&lt;p&gt;Some time ago I worked in the IT department of a company that had a corporate standard of two 27″ FUllHD (either 1920*1080 or 1920*1200) monitors for the desktop. I was pushing to make the standard be one 32″ 4K monitor or the two cheaper monitors. They ended up making one 27″ 4K monitor an option which was still a better option for many users than two FullHD monitors due to having twice the pixels even though it had half the screen area. It was a surprise to me when hardly anyone took up that option.&lt;/p&gt;
&lt;p&gt;One man who worked there brought a wide curved monitor from home and ran with one of the FullHD monitors on each side of that. As an employee in the IT department I had concerns about expensive personal equipment being used in the office regarding who’s going to pay the bill if it gets broken. But I was assured that it was his old monitor that he didn’t need after buying a better one for gaming at home and he wouldn’t be too upset if something happened to it.&lt;/p&gt;
&lt;p&gt;This isn’t the only time I’ve witnessed such problems of companies paying large salaries for skilled people and providing poor equipment for them to do the work. One previous time I raised a OH&amp;amp;S issue because the outdated monitors were so blurry but the company determined that the monitors wouldn’t cause health problems and spending $150 per employee on better replacements was a waste of money.&lt;/p&gt;
&lt;p&gt;Computer hardware tends to become cheaper over time and one thing that has become really cheap recently is portable monitors. &lt;a href=&quot;https://www.kogan.com/au/buy/kogan-xpresso-156-full-hd-ips-usb-c-portable-monitor-kogan/&quot;&gt;Kogan has a 15.6″ FullHD monitor with USB-C and mini-HDMI inputs for $89 [1]&lt;/a&gt;. It wouldn’t be difficult for someone to put one of those on each side of the monitor or monitors that their employer provides and put them in a desk drawer at the end of the day to minimise risk. The same Kogan page has a 16″ monitor with 2560*1600 resolution for $189.&lt;/p&gt;
&lt;h2&gt;Company Ownership&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://etbe.coker.com.au/2023/06/22/cheap-peripherals-work/&quot;&gt;I previously wrote about the potential benefits to companies in not owning all those keyboards, mice, and headsets when they could just give each employee the money and have them buy their own [2]&lt;/a&gt;. I don’t think we are at the stage where that can be applied to monitors as the cheapest price for a decent monitor is about $500 which takes it out of the disposable price range that keyboards and mice are in. Also from an IT support perspective there are real support issues with monitors and cables having compatibility issues. But paying small amounts of money to reimburse employees who buy cheap portable monitors to supplement their main monitor is a more reasonable option. For some people that will allow noteworthy improvements in work performance.&lt;/p&gt;
&lt;h2&gt;Who Will it Help?&lt;/h2&gt;
&lt;p&gt;I don’t think that adding such portable monitors will directly help the majority of workers. I think that to maximise performance and efficiency we need to chase the long tail of improvements. Big monitors, really big monitors (65″ at a larger distance), multiple monitors, standing desks, and whatever else people want.&lt;/p&gt;
&lt;p&gt;There was some research from Microsoft some years ago (back when 27″ was a really big monitor) showing that some tasks had a 50% increase in performance with a larger monitor. Now that 27″ is about the smallest monitor size commonly available the potential for improvement is reduced. Probably most workers now already have monitors that provide the benefits to them that the “big monitors” in Microsoft research provided. But there will always be some portion of the user base who will benefit. If you can get a 50% performance boost for 1% of the users that’s really worth doing. If you can get a 0.5% benefit for 100% of the users that is also worth doing and will theoretically give equal benefits.&lt;/p&gt;
&lt;h2&gt;Costs of Employees&lt;/h2&gt;
&lt;p&gt;It is claimed that the total cost of an employee including all overheads of management and providing office facilities etc amounts to twice their base salary. If that is the case then a minimum wage employee in Australia costs $100k per year, someone at the low end of the IT pay scale costs $200k, and someone at the high end of the IT scale is around $400k. It seems clearly worthwhile to spend $1000 in hardware purchases for a $100k employee who declares that it will really help their work, anything which is noticeable to the user is going to be more than a 1% difference in performance.&lt;/p&gt;
&lt;p&gt;For someone at the high end of the IT pay scale spending $40,000 on hardware to improve their performance could pay for itself. This is not only due to direct return on investment but because the people who do such work are often in key roles in important projects. If there’s too much work for one person on minimum wage to do then you just hire another person. You can’t hire another senior IT person and have them just do the work, it can take months to get up to speed.&lt;/p&gt;
&lt;p&gt;But as management in corporations seems unable to recognise this cheap hardware employees can afford to buy with their own money can bridge the gap.&lt;/p&gt;
&lt;h2&gt;Job Interviews&lt;/h2&gt;
&lt;p&gt;In future when interviewing for jobs I’ll ask about the hardware that’s to be used. I won’t say “I’m not interested in this job offer because you don’t respect your employees enough to buy adequate hardware”, but I may make it a condition of working at a company that the hardware on my desk will not be obsolete.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[1]&lt;a href=&quot;https://www.kogan.com/au/buy/kogan-xpresso-156-full-hd-ips-usb-c-portable-monitor-kogan/&quot;&gt; https://tinyurl.com/26bdng24&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[2]&lt;a href=&quot;https://etbe.coker.com.au/2023/06/22/cheap-peripherals-work/&quot;&gt; https://etbe.coker.com.au/2023/06/22/cheap-peripherals-work/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;yarpp yarpp-related yarpp-related-rss yarpp-template-list&quot;&gt;

&lt;p&gt;Related posts:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2023/06/22/cheap-peripherals-work/&quot; rel=&quot;bookmark&quot; title=&quot;Cheap Peripherals for Work&quot;&gt;Cheap Peripherals for Work&lt;/a&gt; &lt;small&gt;A problem with a lot of the purchase of peripherals...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2007/01/04/monitors-for-developers/&quot; rel=&quot;bookmark&quot; title=&quot;monitors for developers&quot;&gt;monitors for developers&lt;/a&gt; &lt;small&gt;Michael Davies recently blogged that all developers should have big...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2019/11/18/4k-monitors/&quot; rel=&quot;bookmark&quot; title=&quot;4K Monitors&quot;&gt;4K Monitors&lt;/a&gt; &lt;small&gt;A couple of years ago a relative who uses a...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content>
	<author>
	  <name>etbe</name>
	   <uri>https://etbe.coker.com.au</uri> 
	</author>
	<source>
	  <title type="html">etbe – Russell Coker</title>
	  <subtitle type="html">Linux, politics, and other interesting things</subtitle>
	  <link rel="self" href="https://etbe.coker.com.au/feed/"/>
	  <id>https://etbe.coker.com.au</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">#058: Reverse Dependencies Made Easy, Fast, Reliable</title>
	<link href="http://dirk.eddelbuettel.com/blog/2026/08/04#058_fast_easy_reliable_reverse_dependency_checks"/>
	<id>http://dirk.eddelbuettel.com/blog/2026/08/04#058_fast_easy_reliable_reverse_dependency_checks</id>
	<updated>2026-08-04T17:22:00+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;Welcome to post 58 in the &lt;a href=&quot;https://dirk.eddelbuettel.com/blog/code/r4&quot;&gt;&lt;span class=&quot;math inline&quot;&gt;&lt;em&gt;R&lt;/em&gt;&lt;sup&gt;4&lt;/sup&gt;&lt;/span&gt;&lt;/a&gt; series.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.R-Project.org&quot;&gt;R&lt;/a&gt; and the &lt;a href=&quot;https://cran.r-project.org&quot;&gt;CRAN&lt;/a&gt; repositories maintain a very
high level of what we might call “quality assurrance” by requiring that
newly-added code does not break any existing dependencies. This is
frequently called a “reverse-dependency check”. For any given &lt;a href=&quot;https://cran.r-project.org&quot;&gt;CRAN&lt;/a&gt; package one can quickly
determine it reverse dependencies. Calling
&lt;code&gt;tools::package_dependencies(pkgName, reverse=TRUE)&lt;/code&gt; will for
a scalar or vector-valued argument return a named list with the reverse
dependencies. It is then a matter of looping over this list. There are
helper functions in base R as well as in contributed packages on and off
&lt;a href=&quot;https://cran.r-project.org&quot;&gt;CRAN&lt;/a&gt;. I also wrote my own with
package &lt;a href=&quot;https://github.com/eddelbuettel/prrd&quot;&gt;prrd&lt;/a&gt; which,
while possibly a wee bit specialised and under-documented has served me
well to check on &lt;a href=&quot;https://github.com/rcppcore/rcpp&quot;&gt;Rcpp&lt;/a&gt; and
related packages which can indeed have a &lt;em&gt;large&lt;/em&gt; number of
reverse dependencies.&lt;/p&gt;
&lt;p&gt;I recently looked into one of these contributed runner packages, and
while I will refrain from naming its implementation language let me just
mention that the term “&lt;code&gt;cargo&lt;/code&gt; cult” may be a real thing
here. What go me interested in this was the fact that &lt;em&gt;if&lt;/em&gt; one
has a simple-to-use runner &lt;em&gt;then&lt;/em&gt; the fact that &lt;a href=&quot;https://eddelbuettel.github.io/r2u&quot;&gt;r2u&lt;/a&gt; makes it “fast, easy,
reliable: pick all three” (to borrow its slogan) to deal with actual
depencies if Ubuntu has indeed been selected as the host. We will
maintain the position that &lt;em&gt;if&lt;/em&gt; you can in fact integrate with
the system-wide package management then any alternative per-repo package
management approach not doing so will likely be dominated by an approach
that does integrate with the system facilities. Which is what precisely
what &lt;a href=&quot;https://eddelbuettel.github.io/r2u&quot;&gt;r2u&lt;/a&gt; does, and
offers. And why it is used enough to by now have shipped eighty eight
million binary packages. So I tested it for the reverse-dependency check
task.&lt;/p&gt;
&lt;p&gt;What I learned by looking into the (much more complicated) runner was
that it at the end of the day it hands the actual task of running the
reverse dependecies off to a helper function &lt;code&gt;rev_check&lt;/code&gt; that
is part of the &lt;a href=&quot;https://github.com/yihui/xfun&quot;&gt;xfun&lt;/a&gt; package
by Yuhui. I quickly found that besides &lt;a href=&quot;https://github.com/yihui/xfun&quot;&gt;xfun&lt;/a&gt; we would also need its
suggested dependency &lt;a href=&quot;https://github.com/rstudio/tinytex&quot;&gt;tinytex&lt;/a&gt; which in turn
would error unless the &lt;code&gt;tlmgr&lt;/code&gt; binary was present. So as the
sole requirement (on an Ubuntu system with &lt;a href=&quot;https://eddelbuettel.github.io/r2u&quot;&gt;r2u&lt;/a&gt;) turns out to be&lt;/p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb1&quot;&gt;&lt;pre class=&quot;sourceCode sh&quot;&gt;&lt;code class=&quot;sourceCode bash&quot;&gt;&lt;span id=&quot;cb1-1&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb1-1&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;ex&quot;&gt;$&lt;/span&gt; apt install r-cran-xfun r-cran-tinytex texlive-base&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;where we do it all in one &lt;code&gt;apt&lt;/code&gt; call (as &lt;code&gt;root&lt;/code&gt;
in the container). (Given &lt;a href=&quot;https://eddelbuettel.github.io/r2u&quot;&gt;r2u&lt;/a&gt; we could also call
&lt;code&gt;install.packages(c(&quot;xfun&quot;,&quot;tinytext&quot;))&lt;/code&gt; followed by
&lt;code&gt;apt install texlive-base&lt;/code&gt; but it is simpler for this setup
step to be just one call).&lt;/p&gt;
&lt;p&gt;With that we are basically done. I did this (twice) using a
&lt;code&gt;rocker/r2u&lt;/code&gt; container with &lt;a href=&quot;https://eddelbuettel.github.io/r2u&quot;&gt;r2u&lt;/a&gt; preinstalled, mounting
a local work and scrap directory for the container. In it we expand the
package to be tested (i.e. &lt;code&gt;tar xaf pkgName_*tar.gz&lt;/code&gt; for a
given source package &lt;code&gt;pkgName&lt;/code&gt; from &lt;a href=&quot;https://cran.r-project.org&quot;&gt;CRAN&lt;/a&gt;) and then just call with the
package name and expanded direcrtory. I.e. I used this call to test my
package &lt;code&gt;AsioHeaders&lt;/code&gt; (which has just three reverse
dependencies) to both name it and to point to the expanded source
directory created for this purposed:&lt;/p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb2&quot;&gt;&lt;pre class=&quot;sourceCode r&quot;&gt;&lt;code class=&quot;sourceCode r&quot;&gt;&lt;span id=&quot;cb2-1&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb2-1&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;sc&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;system.time&lt;/span&gt;( res &lt;span class=&quot;ot&quot;&gt;&amp;lt;-&lt;/span&gt; xfun&lt;span class=&quot;sc&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;fu&quot;&gt;rev_check&lt;/span&gt;(&lt;span class=&quot;st&quot;&gt;&quot;AsioHeaders&quot;&lt;/span&gt;, &lt;span class=&quot;at&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;st&quot;&gt;&quot;AsioHeaders&quot;&lt;/span&gt;) )&lt;/span&gt;
&lt;span id=&quot;cb2-2&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb2-2&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;do&quot;&gt;## ... earlier output omitted for brevity here ...&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb2-3&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb2-3&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;   user  system elapsed &lt;/span&gt;
&lt;span id=&quot;cb2-4&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb2-4&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt; &lt;span class=&quot;fl&quot;&gt;35.732&lt;/span&gt;   &lt;span class=&quot;fl&quot;&gt;3.333&lt;/span&gt; &lt;span class=&quot;fl&quot;&gt;149.683&lt;/span&gt; &lt;/span&gt;
&lt;span id=&quot;cb2-5&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb2-5&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;sc&quot;&gt;&amp;gt;&lt;/span&gt; res&lt;/span&gt;
&lt;span id=&quot;cb2-6&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb2-6&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;   httpgd ipaddress websocket &lt;/span&gt;
&lt;span id=&quot;cb2-7&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb2-7&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;        &lt;span class=&quot;dv&quot;&gt;0&lt;/span&gt;         &lt;span class=&quot;dv&quot;&gt;0&lt;/span&gt;         &lt;span class=&quot;dv&quot;&gt;0&lt;/span&gt; &lt;/span&gt;
&lt;span id=&quot;cb2-8&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb2-8&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;sc&quot;&gt;&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;and about a good two minutes later I would get the timing result and
the summary in variable &lt;code&gt;res&lt;/code&gt;. As I checked the current &lt;a href=&quot;https://cran.r-project.org&quot;&gt;CRAN&lt;/a&gt; version, the check was as
expected free of concerns or issues.&lt;/p&gt;
&lt;p&gt;To support this, &lt;a href=&quot;https://eddelbuettel.github.io/r2u&quot;&gt;r2u&lt;/a&gt;
did indeed go off and install about sixty seven binary packages (and the
total includes all binary dependencies fully resolved) delivering on the
‘just works’ promise by the &lt;a href=&quot;https://eddelbuettel.github.io/r2u&quot;&gt;r2u&lt;/a&gt; documentation.&lt;/p&gt;
&lt;p&gt;As another check, I did the same for &lt;a href=&quot;https://github.com/eddelbuettel/rcppannoy&quot;&gt;RcppAnnoy&lt;/a&gt; which has
seven reverse dependencies and needed about two hundred &lt;a href=&quot;https://cran.r-project.org&quot;&gt;CRAN&lt;/a&gt; packages to be installed. The
full test took just over four minutes with the timing function reporting
some nice gains from parallelisation as total user compute time was on
the order of just under eight minutes. Again, test results were clean
and free of worries as expected:&lt;/p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb3&quot;&gt;&lt;pre class=&quot;sourceCode r&quot;&gt;&lt;code class=&quot;sourceCode r&quot;&gt;&lt;span id=&quot;cb3-1&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb3-1&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;sc&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;system.time&lt;/span&gt;( res &lt;span class=&quot;ot&quot;&gt;&amp;lt;-&lt;/span&gt; xfun&lt;span class=&quot;sc&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;fu&quot;&gt;rev_check&lt;/span&gt;(&lt;span class=&quot;st&quot;&gt;&quot;RcppAnnoy&quot;&lt;/span&gt;, &lt;span class=&quot;at&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;st&quot;&gt;&quot;RcppAnnoy&quot;&lt;/span&gt;) )&lt;/span&gt;
&lt;span id=&quot;cb3-2&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb3-2&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;do&quot;&gt;## ... earlier output omitted for brevity here ...&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb3-3&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb3-3&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;   user  system elapsed &lt;/span&gt;
&lt;span id=&quot;cb3-4&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb3-4&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;fl&quot;&gt;471.765&lt;/span&gt; &lt;span class=&quot;fl&quot;&gt;378.220&lt;/span&gt; &lt;span class=&quot;fl&quot;&gt;266.855&lt;/span&gt; &lt;/span&gt;
&lt;span id=&quot;cb3-5&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb3-5&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;sc&quot;&gt;&amp;gt;&lt;/span&gt; res&lt;/span&gt;
&lt;span id=&quot;cb3-6&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb3-6&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;   bbknnR  bigANNOY  blocking     scDHA    Seurat      uwot VectrixDB &lt;/span&gt;
&lt;span id=&quot;cb3-7&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb3-7&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;        &lt;span class=&quot;dv&quot;&gt;0&lt;/span&gt;         &lt;span class=&quot;dv&quot;&gt;0&lt;/span&gt;         &lt;span class=&quot;dv&quot;&gt;0&lt;/span&gt;         &lt;span class=&quot;dv&quot;&gt;0&lt;/span&gt;         &lt;span class=&quot;dv&quot;&gt;0&lt;/span&gt;         &lt;span class=&quot;dv&quot;&gt;0&lt;/span&gt;         &lt;span class=&quot;dv&quot;&gt;0&lt;/span&gt; &lt;/span&gt;
&lt;span id=&quot;cb3-8&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb3-8&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;sc&quot;&gt;&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Overall this was a rather useful quick excursion as it demonstrates
that - existing functions can be used to orchestrate a reverse
dependency check - with ‘reasonable’ dependency scale we can do this on
a single machine quite easily taking advantage of parallel computing on
multi-core machines - using &lt;a href=&quot;https://eddelbuettel.github.io/r2u&quot;&gt;r2u&lt;/a&gt; gives us &lt;em&gt;fast,
easy, reliable&lt;/em&gt; package installation making testing of packages we
might not otherwise use or know a breeze - doing this in an ephemeral
Docker container facilitates easy build-up of required resources and
leaves no side effects behind which might affect our normal development
environment&lt;/p&gt;
&lt;p style=&quot;font-size: 80%; font-style: italic;&quot;&gt;
This post by &lt;a href=&quot;https://dirk.eddelbuettel.com&quot;&gt;Dirk
Eddelbuettel&lt;/a&gt; originated on his &lt;a href=&quot;https://dirk.eddelbuettel.com/blog/&quot;&gt;Thinking inside the box&lt;/a&gt;
blog. If you like this or other open-source work I do, you can now &lt;a href=&quot;https://github.com/sponsors/eddelbuettel&quot;&gt;sponsor me at
GitHub&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content>
	<author>
	  <name>Dirk Eddelbuettel</name>
	   <uri>http://dirk.eddelbuettel.com/blog</uri> 
	</author>
	<source>
	  <title type="html">Thinking inside the box</title>
	  <subtitle type="html">Thinking inside the box</subtitle>
	  <link rel="self" href="http://dirk.eddelbuettel.com/blog/index.rss"/>
	  <id>http://dirk.eddelbuettel.com/blog</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">Summer Holiday.</title>
	<link href="http://www.netfort.gr.jp/~dancer/diary/daily/2026-Aug-4.html.en#2026-Aug-4-07:03:26"/>
	<id>http://www.netfort.gr.jp/~dancer/diary/daily/2026-Aug-4.html.en#2026-Aug-4-07:03:26</id>
	<updated>2026-08-03T22:03:26+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">Summer Holiday. Busy time as a parent.
        &lt;p&gt;&lt;/p&gt;</content>
	<author>
	  <name>Junichi Uekawa</name>
	   <uri>http://www.netfort.gr.jp/~dancer/diary/202608.html.en</uri> 
	</author>
	<source>
	  <title type="html">Dancer&#39;s daily hackings</title>
	  <subtitle type="html">showing latest 10</subtitle>
	  <link rel="self" href="http://www.netfort.gr.jp/~dancer/diary/recententry-en.rdf"/>
	  <id>http://www.netfort.gr.jp/~dancer/diary/202608.html.en</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">I learned something new about URLs today</title>
	<link href="http://blog.brlink.eu/index.html#i72"/>
	<id>http://blog.brlink.eu/index.html#i72</id>
	<updated>2026-08-03T19:39:43+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;
Today I stumbled over some behavior that I found quite surprising:
&lt;/p&gt;
&lt;pre&gt;$ ipython3 -c &#39;import httpx;print(httpx.URL(&quot;https://example.com/foo/bar/../../baz&quot;))&#39;
https://example.com/baz
&lt;/pre&gt;
&lt;p&gt;
Even more surprising that behavior is actually standards-compliant,
even mandated by RFC 3986.
&lt;/p&gt;
&lt;p&gt;
The underlying motivation is relative reverences.
If some resource reachable by &quot;&lt;tt&gt;https://example.com/foo/bar&lt;/tt&gt;&quot;
references another resource relatively as &quot;&lt;tt&gt;../../baz&lt;/tt&gt;&quot; then
this is of course the intended result.
&lt;/p&gt;
&lt;p&gt;Getting from this problem to what RFC 3986 suggests
might be surprising in the result, but somewhat understandable if you
look at the consequences of that problem:&lt;/p&gt;
&lt;p&gt;Giving the path components &quot;&lt;tt&gt;..&lt;/tt&gt;&quot; (and &quot;&lt;tt&gt;.&lt;/tt&gt;&quot;)
special meaning at the start of the relative reference means that if you allowed
them in absolute URLs those would be impossible (or at least very convoluted)
to address as relative URLs.
&lt;/p&gt;
&lt;p&gt;
So RFC 3986 describes a way to handle them everywhere:
Just join the path of the base URL and the path of the relative reference
and normalize the result. Or normalize the absolute on either side if only
that is to be taken.
This makes things very convenient:
Multiple reference URLs can just be joined without special handling for
relative references starting with dots, making writing applications handling
them easier.
Programmers don&#39;t have to care how to handle relative references and can
just join everything in whatever way they want.
&lt;/p&gt;
&lt;p&gt;
For maximum elegance there is still some corner case left:
What happens if an absolute URL has a path starting with double-dot components?
Or an relative path starting with more of them then the base URL&#39;s path has components.
You just ignore them:
&lt;/p&gt;
&lt;pre&gt;$ ipython3 -c &#39;import httpx;print(httpx.URL(&quot;https://example.com/../../baz&quot;))&#39;
https://example.com/baz
&lt;/pre&gt;
&lt;p&gt;
With that last point every URL is valid and has well-defined meaning.
Handling relative references and relative paths is very easy and convenient.
&lt;/p&gt;
&lt;p&gt;
So this shows a high regard for simplicity, elegance and convenience.
And a total and uncompromising disregard of security.
&lt;/p&gt;
&lt;p&gt;
After all the most convenient it is for an attacker;
If they are allowed to supply a path component for a request a system
does in their behalf, then they can easily escape anything they were supposed
to be limited to.
The ignoring of dots at the start means they don&#39;t even have to know
exactly how deep their request is:
&lt;/p&gt;
&lt;pre&gt;$ python3 -c &#39;import httpx;print(httpx.URL(&quot;https://example.com/public/api/public/resources/harmless/../../../../../../../../../internal/data&quot;))&#39;
https://example.com/internal/data
&lt;/pre&gt;
&lt;p&gt;
So even if the resource server securely handles request
(unless you consider not having any way to lower your permissions for one request to a specific subset),
your fully RFC conforming client library will already request the permission they should not have permission for.
Even worse dots are usually not characters you can easily forbid so once slashes are to be allowed things get complicated.
&lt;/p&gt;
&lt;p&gt;
There also would have been a simple, elegant and secure way:
Consider every path element &quot;&lt;tt&gt;..&lt;/tt&gt;&quot; or &quot;&lt;tt&gt;.&lt;/tt&gt;&quot;
in an (absolute) URL an error.
Define a reference resolution that allows the relative reference to only start
with &quot;&lt;tt&gt;./&lt;/tt&gt;&quot; or one or multiple &quot;&lt;tt&gt;../&lt;/tt&gt;&quot; and
consider every appearance of a dot or two dots as path components after than an error.
&lt;/p&gt;
&lt;p&gt;
Everything joining two paths has to either use an implementation of that path joining
algorithm, but only if they want to joins paths in the potentially dangerous
way allowing leading &quot;&lt;tt&gt;../&lt;/tt&gt;&quot;. Otherwise they can just use the normal
join and even if an attacker gets those dots that will just cause the generated URL
to be rejected as invalid.
&lt;/p&gt;
&lt;p&gt;Of course using a secure implementation is now even more inconvenient thanks to RFC 3986 being around:
If you have no control over the generator of relative references, it is always possible
that they generate relative references with &quot;&lt;tt&gt;..&lt;/tt&gt;&quot; components after non-dot
components.
&lt;/p&gt;
&lt;p&gt;And if you check all code to properly filter out &quot;&lt;tt&gt;/../&lt;/tt&gt;&quot;,
keep in mind that convienence does not stop there.
After all it is not unheared of for server implementations to helpfully normalize
unicode characters, too, or translate them to their nearest ASCII equivalents.
Or translate percent escaped characters back before doing path splitting.
Or you might think there was some unicode codepoints between those two dots,
but they that those were some meaningless control characters that can be omitted.
So you need some really restrictive allow lists...
&lt;/p&gt;</content>
	<author>
	  <name>Bernhard R. Link</name>
	   <uri>http://blog.brlink.eu/index.html</uri> 
	</author>
	<source>
	  <title type="html">Bernhard R. Link</title>
	  <subtitle type="html">Who made this description field required?</subtitle>
	  <link rel="self" href="http://blog.brlink.eu/changelog.rss"/>
	  <id>http://blog.brlink.eu/index.html</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en-US">Celebrating 45 Years of Kermit with the First New C-Kermit Release in 15 Years (and working with a decades-old C codebase)</title>
	<link href="https://changelog.complete.org/archives/44456-celebrating-45-years-of-kermit-with-the-first-new-c-kermit-release-in-15-years-and-working-with-a-decades-old-c-codebase"/>
	<id>https://changelog.complete.org/?p=44456</id>
	<updated>2026-08-03T15:45:14+00:00</updated>
	<summary type="html" xml:lang="en-US"></summary>
	<content type="html" xml:lang="en-US">&lt;p&gt;1981 was a different time for computing.  It was expensive (&lt;a href=&quot;https://changelog.complete.org/archives/10417-the-pc-internet-revolution-in-rural-america&quot;&gt;both hardware and software&lt;/a&gt;), and it was far from a given that machines from one vendor would be able to talk to those from another.  In fact, Columbia University had just such a problem, so in 1981, Frank da Cruz and Bill Catchings designed a serial protocol they called Kermit.  Because of the many &lt;a href=&quot;https://www.columbia.edu/cu/computinghistory/dec20.html#kermit&quot;&gt;quirks&lt;/a&gt; of the &lt;a href=&quot;https://en.wikipedia.org/wiki/DECSYSTEM-20&quot;&gt;DEC-20&lt;/a&gt; and IBM mainframes, the Kermit protocol was highly adaptable from the start: able to handle systems that had trouble processing more than 96 bytes of data at once, able to transfer 8-bit files over 7-bit links, able to translate between character sets (ASCII and EBCDIC then; now also various Unicodes), and of course, handling of error-prone serial links.&lt;/p&gt;
&lt;p&gt;Kermit spread rapidly; by 1982, Kermit had been ported to MS-DOS and Unix.  Eventually, C-Kermit (an implementation of Kermit in C) became the flagship Kermit.  It gained TCP support, an interactive CLI, a powerful scripting language (with features from the shell, Lisp, and &lt;a href=&quot;https://core.tcl-lang.org/expect/index&quot;&gt;expect&lt;/a&gt;), and optimizations for today’s high-speed links, such as jumbo packets, sliding windows, and streaming modes.  Along the way, Kermit &lt;a href=&quot;https://www.kermitproject.org/nasa.html&quot;&gt;flew on the International Space Station&lt;/a&gt;, ran &lt;a href=&quot;https://www.kermitproject.org/em-apex.html&quot;&gt;data collection from sensors during hurricanes&lt;/a&gt;, and &lt;a href=&quot;https://www.kermitproject.org/kermit.html&quot;&gt;many other uses&lt;/a&gt; including postal systems, Boeing 787 manufacturing, and more.&lt;/p&gt;
&lt;p&gt;Today, I use it as a &lt;a href=&quot;https://www.openkermit.org/ckermit/ssh/&quot;&gt;powerful ssh wrapper&lt;/a&gt; (letting me easily transfer files through multiple nested ssh, sudo, su, etc. commands), a &lt;a href=&quot;https://www.openkermit.org/ckermit/bbs/&quot;&gt;BBS client&lt;/a&gt;, to exchange data with me &lt;a href=&quot;https://www.kermitproject.org/hp48filetransfer.html&quot;&gt;HP 48GX calculator&lt;/a&gt;, and so on.  It’s also used today to transmit firmware updates to embedded devices.  And, of course, anyone that works with vintage systems is likely to use Kermit at some point.&lt;/p&gt;
&lt;p&gt;It wouldn’t be until the late 1990s that the TCP/IP stack was finally adopted by most OS vendors, establishing something of a common basis for communication.  Of course, we assume this today.  Though transferring large files between OSs (say, Linux, Windows, MacOS, Android, iPad, etc.) is still a challenge, even though they all speak TCP/IP!  I find that the easiest way to get large files from two computers is to spin up Kermit (see &lt;a href=&quot;https://github.com/davidrg/ckwin&quot;&gt;ckwin&lt;/a&gt; for a Windows fork of C-Kermit) and just set up a TCP connection over the LAN.  In fact, I added a new &lt;tt&gt;show interfaces&lt;/tt&gt; command in C-Kermit 11, making it easy to see your system’s local IPs.&lt;/p&gt;
&lt;p&gt;For most of its history, Columbia’s Kermit project was self-funded.  Columbia charged for commercial use, which limited its inclusion in Linux distributions.  In 2011, 30 years after its founding, Columbia canceled the Kermit Project and released C-Kermit as Open Source under a BSD license.  Frank da Cruz, who had still been working with the Kermit project all those years, volunteered to continue maintaining Kermit outside Columbia, and continued development with alpha and beta releases through his retirement from the project in 2025.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;I dive into this C codebase&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;As Debian maintainer of Kermit, I noticed some areas where it wasn’t matching modern expectations.  One area was, not surprising for a project of its age, security.  Another area was that its character set or line-ending conversions are usually not desired now; we are used to byte-identical binary transfers, and the defaults caused confusion and even some rare instances of data corruption.  So I started making a few patches last year.&lt;/p&gt;
&lt;p&gt;I’ve worked with old C codebases before, such as Varnish.  I’ve generally hated it.  You usually find a mix of bad and terrible practices, unclear memory management, and so forth.&lt;/p&gt;
&lt;p&gt;But I’ve been living in the C-Kermit codebase for a few months now, and I &lt;i&gt;enjoy&lt;/i&gt; it.  Yes, this thing is still designed to build on VMS, OS/2, and with compilers that haven’t heard of ANSI — and those that require modern practices.  (That em-dash was mine; I knew how to use them before LLMs existed and I’m not going to stop just because LLMs have copied people like me!  No AI was used for this post.)&lt;/p&gt;
&lt;p&gt;The there is an elegance in all of that.  As I worked, I fixed a bunch more potential security issues, both with memory safety and with protecting against a malicious remote in roughly the same manner that some patches to scp did a few years back.  I added IPv6 support, of course conditionally compiled because some systems C-Kermit builds on have never heard of IPv6 and never will.  (And, of course, with fallback algorithms at runtime for systems that have IPv6 support but not IPv6 connectivity.)&lt;/p&gt;
&lt;p&gt;I added unit tests and Python-based end-to-end tests, running nearly 2000 test cases in total.  Along the way, I found and fixed a number of bugs going back decades.  I learned about FIONREAD being broken on macOS, about NetBSD’s bugs in the pty driver, and fixed bugs in the Kermit protocol implementation itself.  I added compatibility tests with the gkermit and ekermit (embedded) implementations, as well as the last full release, C-Kermit 9.0.302 from 2011 (which was difficult to get compiled on a modern system).&lt;/p&gt;
&lt;p&gt;There is an &lt;a href=&quot;https://github.com/OpenKermit/ckermit/releases/tag/v11.0.506&quot;&gt;extensive changelog&lt;/a&gt; describing all the improvements in C-Kermit 11.&lt;/p&gt;
&lt;p&gt;C-Kermit development had never really used a VCS at any point, though Kermit veteran Jeffrey Altman imported historical releases into a Git repo, along with some patches that hadn’t made it into a release (which I also pulled in.)  There was a lot of disabled code behind &lt;tt&gt;&lt;a class=&quot;hashtag u-tag u-category&quot; href=&quot;https://changelog.complete.org/archives/tag/ifdef&quot; rel=&quot;tag&quot;&gt;#ifdef&lt;/a&gt; COMMENT&lt;/tt&gt;, along with commentary describing why it was no longer used.  With Git, we would now generally just remove the old code and explain why in a commit message.  I went through and did so with a lot of it, meaning that, at last check, C-Kermit actually has fewer lines of code now than it used to.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Towards a new release&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;It became apparent pretty quickly that I was making more changes than would make sense as a Debian patch series.  Not only that, but they would be more widely applicable to more than just Debian and Ubuntu users.  As Linux and BSD distributions were running everything from the last non-beta release (2011’s 9.0.302) to the last beta release (about 1.5 years ago), depending on their different policies about running betas, even sharing patches in a useful fashion was going to be quite difficult.&lt;/p&gt;
&lt;p&gt;So, I spun up a project at &lt;a href=&quot;https://www.openkermit.org/&quot;&gt;Open Kermit&lt;/a&gt; to coordinate future development in the open and keep Kermit going.&lt;/p&gt;
&lt;p&gt;With modern CI, I run that test suite on Linux (x86_64 and arm64), macOS, FreeBSD, NetBSD, and OpenBSD.  It builds binary releases on all those platforms, plus a statically-linked Linux binary built with musl libc.&lt;/p&gt;
&lt;p&gt;You can &lt;a href=&quot;https://www.openkermit.org/downloads/&quot;&gt;download the latest C-Kermit release&lt;/a&gt;, and of course &lt;a href=&quot;https://www.openkermit.org/contributing/&quot;&gt;contribute to C-Kermit and its website&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Dedication&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Frank da Cruz was directly involved with Kermit for 44 years.  I’m not aware of any other Open Source project founder being involved for so long.  Richard Stallman started working on GNU Emacs in 1984, 3 years after Frank started working on Kermit, but Richard hasn’t &lt;a href=&quot;https://web.archive.org/web/20080524201111/http://www.networkworld.com/community/node/25335&quot;&gt;been in that role since around 2008&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Accordingly, C-Kermit 11 bears this dedication:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;I dedicate this release of C-Kermit to Frank da Cruz.&lt;/p&gt;
&lt;p&gt;Frank was directly involved with Kermit for 44 years, from its initial design in 1981 all the way through 2025.  He maintained Kermit as an Open Source project after Columbia University ended its sponsorship.  I know of no other Open Source project where the founder remains so personally involved for so long.&lt;/p&gt;
&lt;p&gt;When Kermit was begun, transfers between different hardware and operating systems were difficult or impossible.  Frank helped build a bridge.  Kermit glued systems together, from the International Space Station to pocket calculators, and set a new standard for interoperability.  It continues to do so.&lt;/p&gt;
&lt;p&gt;Kermit is still one of the quietly-working pillars of computing today, enabling everything from firmware upgrades to radios.  And, yes, it still reliably transfers files over serial lines.&lt;/p&gt;
&lt;p&gt;As we start to spend a lot of time in the Kermit codebase, we do so standing on the shoulders of a giant.  Thanks, Frank, for your decades of work on Kermit.&lt;/p&gt;
&lt;p&gt;John Goerzen, July 2026&lt;/p&gt;&lt;/blockquote&gt;</content>
	<author>
	  <name>John Goerzen</name>
	   <uri>https://changelog.complete.org</uri> 
	</author>
	<source>
	  <title type="html">The Changelog</title>
	  <subtitle type="html">Comments on family, technology, and society</subtitle>
	  <link rel="self" href="https://changelog.complete.org/feed"/>
	  <id>https://changelog.complete.org</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en-us">Term::ANSIColor v6.0.0 TRIAL release</title>
	<link href="https://www.eyrie.org/~eagle/journal/2026-08/001.html"/>
	<id>https://www.eyrie.org/~eagle/journal/2026-08/001.html</id>
	<updated>2026-08-02T21:49:00+00:00</updated>
	<summary type="html" xml:lang="en-us"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;
Yesterday, I uploaded Term::ANSIColor v6.0.0-TRIAL to CPAN for early
testing. This release will raise the minimum required Perl version to
5.12, dropping support for Perl 5.8 and 5.10. When I did the same with
podlators a couple of years ago, it upset a few people and one of them
asked me to make this sort of test release in the future. Hopefully this
will help.
&lt;/p&gt;

&lt;p&gt;
I have not run the normal release machinery and haven&#39;t archived this
release in the normal places, since I intend it to be transient. It&#39;s only
on CPAN, where people can retrieve it for testing. Once v6.0.0 is
released, few traces of this TRIAL release will be left. This doesn&#39;t
appear to be how other people use the TRIAL mechanism, but it felt more
comfortable to me. If I have to make substantial changes, I&#39;ll consider
changing my approach.
&lt;/p&gt;

&lt;p&gt;
I plan on turning this into the v6.0.0 release in about a month or two,
hopefully with only documentation changes.
&lt;/p&gt;

&lt;p&gt;
Term::ANSIColor is a &quot;very upstream&quot; core module with a lot of
dependencies, and CPAN (unlike some of the archives that followed it, such
as PyPI) doesn&#39;t support conditionally retrieving packages based on the
current Perl version. This release may therefore be disruptive for people
who are still trying to support Perl 5.8 and 5.10, since CPAN installation
tools may attempt to install an incompatible Term::ANSIColor version. I&#39;m
sad that this will be the result, since I know some people still care
about those versions.
&lt;/p&gt;

&lt;p&gt;
I&#39;m pressing forward with updating my Perl modules anyway, though. I
realized that honoring other people&#39;s desire for stability to such a
degree that I was unable to use Perl features added more than 15 years ago
was destroying my motivation to work on these Perl modules at all. So I&#39;ve
decided on a very slow and gradual approach where I&#39;m going to keep
pushing the minimum supported version forward but try to give people a lot
of warning.
&lt;/p&gt;

&lt;p&gt;
Personally, I think it&#39;s time to let ancient versions of Perl go and
follow the
&lt;a href=&quot;https://github.com/Perl-Toolchain-Gang/toolchain-site/blob/master/lyon-amendment.md&quot;&gt;Lyon Amendment&lt;/a&gt; about supported Perl versions. When we&#39;re talking
installing new modules for software released more than 15 years ago, we&#39;re
talking about special limited environments and retrocomputing more than
what I would consider routine software maintenance. Those tasks should
expect to need different tools and a different workflow so that they can
pin historical versions. Since this isn&#39;t something I&#39;m personally
interested in, my willingness to expend time and energy to assist is
limited.
&lt;/p&gt;

&lt;p&gt;
As you can probably tell, I still feel nervous about pressing forward in
this way, but I think this is the approach that lets me continue to enjoy
maintaining these Perl modules. It&#39;s been 29 years for Term::ANSIColor,
but I still enjoy fixing bugs in it and putting out a new release from
time to time, particularly if I can clean up the code a bit each time I
touch it.
&lt;/p&gt;</content>
	<author>
	  <name>Russ Allbery</name>
	   <uri>https://www.eyrie.org/~eagle/</uri> 
	</author>
	<source>
	  <title type="html">Eagle&#39;s Path</title>
	  <subtitle type="html">&quot;Passion and dispassion.  Choose two.&quot; -- Larry Wall</subtitle>
	  <link rel="self" href="https://www.eyrie.org/~eagle/journal/index.rss"/>
	  <id>https://www.eyrie.org/~eagle/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">FOSS activity in July 2026</title>
	<link href="https://www.decadent.org.uk/ben/blog/2026/08/02/foss-activity-in-july-2026.html"/>
	<id>https://www.decadent.org.uk/ben/blog/2026/08/02/foss-activity-in-july-2026</id>
	<updated>2026-08-02T17:06:31+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;ul&gt;
  &lt;li&gt;Debian packages:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/apt&quot;&gt;apt&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/src:apt&quot;&gt;Bugs&lt;/a&gt;:
            &lt;ul&gt;
              &lt;li&gt;replied to &lt;a href=&quot;https://bugs.debian.org/1078608&quot;&gt;#1078608: apt update silently leaves old index data&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/firmware-nonfree&quot;&gt;firmware-nonfree&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;Merge requests:
            &lt;ul&gt;
              &lt;li&gt;opened and merged &lt;a href=&quot;https://salsa.debian.org/kernel-team/firmware-nonfree/-/merge_requests/151&quot;&gt;!151: Update to 20260622&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/firmware-nonfree/news/&quot;&gt;Uploads&lt;/a&gt;:
            &lt;ul&gt;
              &lt;li&gt;uploaded version 20260622-1 to unstable&lt;/li&gt;
              &lt;li&gt;uploaded version 20260622-1~bpo13+1 to trixie-backports&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/hexagon-dsp-binaries&quot;&gt;hexagon-dsp-binaries&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/src:hexagon-dsp-binaries&quot;&gt;Bugs&lt;/a&gt;:
            &lt;ul&gt;
              &lt;li&gt;opened &lt;a href=&quot;https://bugs.debian.org/1141904&quot;&gt;#1141904: Missing new DSP binaries for shikra&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/initramfs-tools&quot;&gt;initramfs-tools&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/src:initramfs-tools&quot;&gt;Bugs&lt;/a&gt;:
            &lt;ul&gt;
              &lt;li&gt;replied to &lt;a href=&quot;https://bugs.debian.org/1142780&quot;&gt;#1142780: initramfs-tools: ip=dhcp lease is not renewed while initramfs remains active&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/kernel-handbook&quot;&gt;kernel-handbook&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;Merge requests:
            &lt;ul&gt;
              &lt;li&gt;opened and merged &lt;a href=&quot;https://salsa.debian.org/kernel-team/kernel-handbook/-/merge_requests/15&quot;&gt;!15: Update “Building a development version of the Debian kernel package”&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/linux&quot;&gt;linux&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/src:linux&quot;&gt;Bugs&lt;/a&gt;:
            &lt;ul&gt;
              &lt;li&gt;closed &lt;a href=&quot;https://bugs.debian.org/851695&quot;&gt;#851695: replacing base package with -unsigned removes module files&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;replied to &lt;a href=&quot;https://bugs.debian.org/1126671&quot;&gt;#1126671: linux-image-6.17.13+deb13-amd64: Disconnect root (path=/) during heavy load on NvME, partial corruption on NTFS.crash soon but not yet&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;closed &lt;a href=&quot;https://bugs.debian.org/1130365&quot;&gt;#1130365: linux-image-6.18.15+deb14-amd64: kernel panic during startup&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;closed &lt;a href=&quot;https://bugs.debian.org/1140892&quot;&gt;#1140892: thunderbolt: Intel Goshen Ridge CL state regression breaks dock tunneling since 6.12.94&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;closed &lt;a href=&quot;https://bugs.debian.org/1141185&quot;&gt;#1141185: linux-image-6.12.94+deb13-amd64: Occasional read problems in RAID/LVM/ext4 stack when under stress.&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;replied to &lt;a href=&quot;https://bugs.debian.org/1141355&quot;&gt;#1141355: linux-image-6.1.0-49-amd64: procfs deadlock triggered by drop_caches on 6.1.0-49-amd64 (regression from 6.1.0-37)&lt;/a&gt; (LTS)&lt;/li&gt;
              &lt;li&gt;replied to &lt;a href=&quot;https://bugs.debian.org/1141448&quot;&gt;#1141448: MT7921 intermittently disappears after reboot on ASUS TUF Gaming F17 FX706HF&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;replied to &lt;a href=&quot;https://bugs.debian.org/1141541&quot;&gt;#1141541: linux: i915 kernel BUG in i915_drm_client_remove_object from Xorg causing hard lock on 6.12.94+deb13-amd64&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;replied to &lt;a href=&quot;https://bugs.debian.org/1141866&quot;&gt;#1141866: linux-image-7.1.3+deb14-amd64: no display on AMD Kaveri/CIK APU VGA output (amdgpu DC regression)&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
          &lt;li&gt;Merge requests:
            &lt;ul&gt;
              &lt;li&gt;closed &lt;a href=&quot;https://salsa.debian.org/kernel-team/linux/-/merge_requests/1936&quot;&gt;!1936: [sparc64] Add nvme module to scsi-modules udeb&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;reviewed and merged &lt;a href=&quot;https://salsa.debian.org/kernel-team/linux/-/merge_requests/1968&quot;&gt;!1968: [bookworm] net: mana: refresh driver from 6.12.94&lt;/a&gt; (LTS)&lt;/li&gt;
              &lt;li&gt;merged &lt;a href=&quot;https://salsa.debian.org/kernel-team/linux/-/merge_requests/1984&quot;&gt;!1984: udeb: Ensure that aead and macsec modules are in the right packages&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;reviewed and closed &lt;a href=&quot;https://salsa.debian.org/kernel-team/linux/-/merge_requests/2003&quot;&gt;!2003: 6.1 backport: eventpoll: fix ep_remove struct eventpoll / struct file UAF (CVE-2026-46242)&lt;/a&gt; (LTS)&lt;/li&gt;
              &lt;li&gt;merged &lt;a href=&quot;https://salsa.debian.org/kernel-team/linux/-/merge_requests/2004&quot;&gt;!2004: [sparc64] udeb: scsi-modules: Use the default module list&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;opened &lt;a href=&quot;https://salsa.debian.org/kernel-team/linux/-/merge_requests/2010&quot;&gt;!2010: [x86] Backport security fixes for KVM&lt;/a&gt; (LTS)&lt;/li&gt;
              &lt;li&gt;merged &lt;a href=&quot;https://salsa.debian.org/kernel-team/linux/-/merge_requests/2012&quot;&gt;!2012: Update to 6.1.177&lt;/a&gt; (LTS)&lt;/li&gt;
              &lt;li&gt;merged &lt;a href=&quot;https://salsa.debian.org/kernel-team/linux/-/merge_requests/2017&quot;&gt;!2017: Enable NTFS_FS (and replace NTFS3_FS)&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;opened and closed &lt;a href=&quot;https://salsa.debian.org/kernel-team/linux/-/merge_requests/2019&quot;&gt;!2019: Fix rtmutex security issues&lt;/a&gt; (LTS)&lt;/li&gt;
              &lt;li&gt;opened &lt;a href=&quot;https://salsa.debian.org/kernel-team/linux/-/merge_requests/2027&quot;&gt;!2027: Include rsync in Build-Depends-Arch for any build including tools&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;merged &lt;a href=&quot;https://salsa.debian.org/kernel-team/linux/-/merge_requests/2038&quot;&gt;!2038: [loong64] drivers/mmc/host: Enable MMC_LOONGSON2 as module&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;reviewed &lt;a href=&quot;https://salsa.debian.org/kernel-team/linux/-/merge_requests/2041&quot;&gt;!2041: Update to 5.10.262&lt;/a&gt; (LTS)&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/linux/news/&quot;&gt;Uploads&lt;/a&gt;:
            &lt;ul&gt;
              &lt;li&gt;uploaded version 5.10.259-1 to bullseye-security (LTS)&lt;/li&gt;
              &lt;li&gt;uploaded version 6.1.176-1 to bookworm-security (LTS)&lt;/li&gt;
              &lt;li&gt;uploaded version 6.1.177-1 to bookworm-security (LTS)&lt;/li&gt;
              &lt;li&gt;uploaded version 6.12.95-1~bpo12+1 to bookworm-backports (LTS)&lt;/li&gt;
              &lt;li&gt;uploaded version 7.0.13-1~bpo13+1 to trixie-backports&lt;/li&gt;
              &lt;li&gt;uploaded version 7.1.3-1~bpo13+1 to trixie-backports&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/linux-6.1&quot;&gt;linux-6.1&lt;/a&gt; (LTS):
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/linux-6.1/news/&quot;&gt;Uploads&lt;/a&gt;:
            &lt;ul&gt;
              &lt;li&gt;uploaded version 6.1.176-1~deb11u1 to bullseye-security&lt;/li&gt;
              &lt;li&gt;uploaded version 6.1.177-1~deb11u1 to bullseye-security&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;linux-6.12 (LTS):
        &lt;ul&gt;
          &lt;li&gt;Uploads:
            &lt;ul&gt;
              &lt;li&gt;uploaded version 6.12.96-1~deb12u1 to bookworm-security (not
yet accepted)&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/linux-base&quot;&gt;linux-base&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;Merge requests:
            &lt;ul&gt;
              &lt;li&gt;reviewed &lt;a href=&quot;https://salsa.debian.org/kernel-team/linux-base/-/merge_requests/21&quot;&gt;!21: Draft: Add hooks to copy vmlinuz file to /boot&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/localechooser&quot;&gt;localechooser&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/src:localechooser&quot;&gt;Bugs&lt;/a&gt;:
            &lt;ul&gt;
              &lt;li&gt;replied to &lt;a href=&quot;https://bugs.debian.org/1141886&quot;&gt;#1141886: localechooser: Turkey is inconsistently classified under Asia in regionmap&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/wireless-regdb&quot;&gt;wireless-regdb&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/wireless-regdb/news/&quot;&gt;Uploads&lt;/a&gt;:
            &lt;ul&gt;
              &lt;li&gt;uploaded version 2026.05.30-1~deb11u1 to bullseye-security (LTS)&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Mailing lists:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://lists.debian.org/debian-kernel/&quot;&gt;debian-kernel&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;posted &lt;a href=&quot;https://lists.debian.org/c6ab03ad04125365bf3ccda6d42285e22bb1e83e.camel@decadent.org.uk&quot;&gt;Agenda items for kernel-team meeting on 2026-07-01&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;posted &lt;a href=&quot;https://lists.debian.org/d0012f0e7b0c012a3e05675fcc2525e1969666bd.camel@decadent.org.uk&quot;&gt;Agenda items for kernel-team meeting on 2026-07-22&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://lists.debian.org/debian-lts-announce/&quot;&gt;debian-lts-announce&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;posted &lt;a href=&quot;https://lists.debian.org/akfam9nRaDaqT2he@decadent.org.uk&quot;&gt;[SECURITY] [DLA 4664-1] linux security update&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;posted &lt;a href=&quot;https://lists.debian.org/akgBqAUAJLAuUiyK@decadent.org.uk&quot;&gt;[SECURITY] [DLA 4665-1] linux security update&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;posted &lt;a href=&quot;https://lists.debian.org/akqhaqWLkM4Jy49D@decadent.org.uk&quot;&gt;[SECURITY] [DLA 4671-1] linux-6.1 security update&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;posted &lt;a href=&quot;https://lists.debian.org/alKRo0uzT8v9B685@decadent.org.uk&quot;&gt;[SECURITY] [DLA 4676-1] wireless-regdb new upstream version&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;posted &lt;a href=&quot;https://lists.debian.org/aluK_-ysT8UPk48z@decadent.org.uk&quot;&gt;[SECURITY] [DLA 4688-1] linux security update&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;posted &lt;a href=&quot;https://lists.debian.org/amXknKTE1Xwk58bC@decadent.org.uk&quot;&gt;[SECURITY] [DLA 4700-1] linux-6.1 security update&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://lore.kernel.org/linux-kernel/&quot;&gt;linux-kernel&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;posted &lt;a href=&quot;https://lore.kernel.org/linux-kernel/akvddtMQTDKLo2PH@decadent.org.uk/T/&quot;&gt;[PATCH] irqchip/irq-imgpdc: Remove unused driver&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://lore.kernel.org/stable/&quot;&gt;stable&lt;/a&gt; (mostly LTS):
        &lt;ul&gt;
          &lt;li&gt;posted &lt;a href=&quot;https://lore.kernel.org/stable/1bfb3bb0dda1f5cd66ca8a48de2536c026355ded.camel@decadent.org.uk/T/&quot;&gt;[7.1] drm/amd/display: Add dp_skip_rbr flag for NUTMEG&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;replied to &lt;a href=&quot;https://lore.kernel.org/stable/418ca29bbbb1190853136331c572470dca803800.camel@decadent.org.uk/T/&quot;&gt;[PATCH 5.10 01/96] net/sched: act_pedit: use NLA_POLICY for parsing ex keys&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;replied to &lt;a href=&quot;https://lore.kernel.org/stable/6359da4c14e0b4c6ffa068407a42c07e56ef9c5c.camel@decadent.org.uk/T/&quot;&gt;[PATCH 5.10 11/96] slimbus: qcom-ngd-ctrl: Register callbacks after creating the ngd&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;replied to &lt;a href=&quot;https://lore.kernel.org/stable/8601edcd7c9bcc70e75f85a758f8818c57945d07.camel@decadent.org.uk/T/&quot;&gt;[PATCH 5.10 81/96] nfsd: check get_user() return when reading princhashlen&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;replied to &lt;a href=&quot;https://lore.kernel.org/stable/c1c9fdd193db5a288c825364ee525d570dadfbe0.camel@decadent.org.uk/T/&quot;&gt;[PATCH 5.10 89/96] misc: fastrpc: Fix NULL pointer dereference in rpmsg callback&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;replied to &lt;a href=&quot;https://lore.kernel.org/stable/ed0c9af450494df5f7bfd72670754c8e48e1f36d.camel@decadent.org.uk/T/&quot;&gt;[PATCH 5.10 94/96] mmc: renesas_sdhi: Add OF entry for RZ/G2H SoC&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;</content>
	<author>
	  <name>Ben Hutchings</name>
	   <uri>https://www.decadent.org.uk/ben/blog/</uri> 
	</author>
	<source>
	  <title type="html">Better living through software</title>
	  <subtitle type="html">Ben Hutchings&#39;s diary of life and technology</subtitle>
	  <link rel="self" href="https://www.decadent.org.uk/ben/blog/index.atom"/>
	  <id>https://www.decadent.org.uk/ben/blog/index.atom</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en-US">Packet Edit Meme and Debian SE Linux</title>
	<link href="https://etbe.coker.com.au/2026/08/02/packet-edit-meme-debian-selinux/"/>
	<id>https://etbe.coker.com.au/?p=6260</id>
	<updated>2026-08-02T03:42:53+00:00</updated>
	<summary type="html" xml:lang="en-US"></summary>
	<content type="html" xml:lang="en-US">&lt;p&gt;There’s yet another Linux kernel exploit based on container functions, here’s the result when run as user_t on a SE Linux system:&lt;/p&gt;
&lt;pre&gt;$ ./packet_edit_meme 
[*] target /bin/su as uid 1000; entry at file offset 0x4340; shellcode 48 bytes
unshare: Permission denied
[-] page-cache corruption failed&lt;/pre&gt;
&lt;p&gt;Here is the audit log entry for this failure:&lt;/p&gt;
&lt;pre&gt;type=AVC msg=audit(1785640621.498:1843): avc:  denied  { create } for  pid=1770 comm=&quot;packet_edit_mem&quot; scontext=user_u:user_r:user_t:s0 tcontext=user_u:user_r:user_t:s0 tclass=user_namespace permissive=0&lt;/pre&gt;
&lt;p&gt;Here’s the result of running it from the unconfined_t domain:&lt;/p&gt;
&lt;pre&gt;$ ./packet_edit_meme 
[*] target /bin/su as uid 1001; entry at file offset 0x4340; shellcode 48 bytes
[+] su entry overwritten; exec&#39;ing su -&amp;gt; interactive root shell
# id
uid=0(root) gid=0(root) groups=0(root),1001(test2) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
# &lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.daniel-baumann.ch/posts/20260626-1.html&quot;&gt;Daniel Baumann wrote a blog post describing how this is fixed for Debian systems without SE Linux.&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;yarpp yarpp-related yarpp-related-rss yarpp-template-list&quot;&gt;

&lt;p&gt;Related posts:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2026/05/24/debian-selinux-pintheft/&quot; rel=&quot;bookmark&quot; title=&quot;Debian SE Linux and PinTheft&quot;&gt;Debian SE Linux and PinTheft&lt;/a&gt; &lt;small&gt;We have a new Linux exploit called PinTheft [1]. I...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2026/05/15/debian-selinux-ssh-keysign-pwn/&quot; rel=&quot;bookmark&quot; title=&quot;Debian SE Linux and ssh-keysign-pwn&quot;&gt;Debian SE Linux and ssh-keysign-pwn&lt;/a&gt; &lt;small&gt;I just tested out the ssh-keysign-pwn exploit [1] on Debian...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2026/05/08/dirty-frag-on-debian-and-se-linux/&quot; rel=&quot;bookmark&quot; title=&quot;Dirty Frag on Debian and SE Linux&quot;&gt;Dirty Frag on Debian and SE Linux&lt;/a&gt; &lt;small&gt;Hot on the heels of the Copy Fail vulnerability [1]...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content>
	<author>
	  <name>etbe</name>
	   <uri>https://etbe.coker.com.au</uri> 
	</author>
	<source>
	  <title type="html">etbe – Russell Coker</title>
	  <subtitle type="html">Linux, politics, and other interesting things</subtitle>
	  <link rel="self" href="https://etbe.coker.com.au/feed/"/>
	  <id>https://etbe.coker.com.au</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">Taming the AI Agents</title>
	<link href="https://researchut.com/blog/taming_the_ai_agents/"/>
	<id>https://researchut.com/blog/taming_the_ai_agents/</id>
	<updated>2026-08-02T00:00:00+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;h2 id=&quot;preface-a-noobs-journey-into-agentic-ai&quot;&gt;Preface: A Noob’s Journey into Agentic AI&lt;/h2&gt;
&lt;p&gt;Although the AI surge felt like it was simmering for years, I jumped on the bandwagon relatively late—around November 2025.&lt;/p&gt;
&lt;p&gt;My very first interaction with AI was Perplexity through its web interface. As a complete novice, my expectations were honest and naive. It took multiple conversational iterations and several frustrated hours to finally grasp what an “AI hallucination” actually meant. Soon after, I tried Google’s Gemini web interface. While helpful for reading bedtime stories out loud to my kids, it didn’t immediately feel game-changing for engineering tasks.&lt;/p&gt;
&lt;p&gt;The real shift happened when I started using &lt;code&gt;gemini-cli&lt;/code&gt;. Because it was developed in the open, I could look under the hood, experiment with its capabilities, and hack custom workflows directly into the CLI tool. My curiosity quickly snowballed. I expanded into GitHub Copilot, gaining access to Anthropic’s Claude models, and began learning the subtle art of model rationing—drafting specs with heavy-hitter models and delegating execution to lighter ones. Trial and error forced me to quickly learn the vocabulary of modern AI: tokens, context windows, KV caches, and context economy.&lt;/p&gt;
&lt;p&gt;Initially, my agent memory setup was just a static &lt;code&gt;MEMORY.md&lt;/code&gt; file—until I realized agents could modify or overwrite the entire file! When &lt;strong&gt;MemPalace&lt;/strong&gt; launched, I jumped on it on Day 1. That became our shared vector memory pool, giving rise to &lt;strong&gt;CAMP (Cross-Agent Memory Protocol)&lt;/strong&gt; to unify a growing, heterogeneous fleet (Gemini and Copilot).&lt;/p&gt;
&lt;p&gt;When Google pivoted consumer access from &lt;code&gt;gemini-cli&lt;/code&gt; to Antigravity (AGY), it triggered a new wave of refactoring. Early attempts to fortify these agents failed repeatedly until a human colleague suggested using Linux &lt;code&gt;bwrap&lt;/code&gt; (Bubblewrap). That tip changed everything: it enabled us to build a dual-layer, sandboxed runtime where agents have full operational freedom inside a container without ever holding an unaudited host shell.&lt;/p&gt;
&lt;p&gt;With CAMP memory, local Gitea for persistence, and &lt;code&gt;bwrap&lt;/code&gt; sandboxing in place, building further automation layers became fast and deterministic. Courtesy of this agentic AI fleet, a massive backlog of long-standing personal projects has finally moved across the finish line:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Complete website overhaul and Hugo theme migration&lt;/li&gt;
&lt;li&gt;Embedded guest and GitLab commenting engine&lt;/li&gt;
&lt;li&gt;Jellyfin File Browser integration&lt;/li&gt;
&lt;li&gt;Personal digital diary and automated log system&lt;/li&gt;
&lt;li&gt;A stubborn, 4-year-old power drain bug on my ThinkPad T14 Gen2 AMD!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What follows is the technical blueprint of the architecture, memory model, and security rails that made this transformation possible.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;the-paradigm-shift-ai-as-the-pc&quot;&gt;The Paradigm Shift: AI as the PC&lt;/h2&gt;
&lt;p&gt;If you step back and look at the big picture, we are living through a fundamental shift in how we build computing environments. In the traditional world, the CPU executed deterministic assembly instructions, RAM held temporary program stacks, and NVMe drives stored structured files. In this new agentic era, that architecture is being redrawn: &lt;strong&gt;the LLM acts as the CPU, the Context Window is the RAM, and the Vector Database becomes the long-term NVMe storage.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Yet, as we transition to this new paradigm of “AI as the PC,” we lack what may conceptually behave like an operating system kernel. Without it, autonomous agents run with the equivalent of unchecked privileges. They get trapped in infinite, resource-consuming loops, run unverified scripts, suffer from “investigative drift” (where a minor warning leads to hours of system tampering), and burn through API credits.&lt;/p&gt;
&lt;p&gt;Over the last few months, we set out to experiment with what may potentially become a conceptual “kernel layer” to bring order. The result is the &lt;strong&gt;Cross-Agent Memory Protocol (CAMP)&lt;/strong&gt; framework. Here is how we have worked towards taming our agent fleet, securing data sovereignty, and bridging the gap between autonomous freedom and deterministic control.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;the-core-dilemma-autonomy-vs-fortification&quot;&gt;The Core Dilemma: Autonomy vs. Fortification&lt;/h2&gt;
&lt;p&gt;Taming an agent is a delicate balancing act.&lt;/p&gt;
&lt;p&gt;If you fortify the environment too strictly (mounting the entire filesystem as read-only, stripping away command line tools, blocking all network access), you strip the agent of its ability to think, debug, and work smart. It becomes a glorified static text generator, unable to solve real programming tasks.&lt;/p&gt;
&lt;p&gt;On the other hand, giving agents unrestricted host access inevitably leads to “honest rogue” behavior. An agent with honest intentions to fulfill a user request will, when blocked by system quirks, go to extreme lengths to bypass those blocks—sometimes behaving indistinguishably from a malicious attacker.&lt;/p&gt;
&lt;h3 id=&quot;case-study-the-honest-exploit-attempt&quot;&gt;Case Study: The Honest Exploit Attempt&lt;/h3&gt;
&lt;p&gt;We witnessed this balance break during the early development of our sandboxed runtime (&lt;code&gt;camp-acpd&lt;/code&gt; and &lt;code&gt;InnerPEP&lt;/code&gt;). We had tightened the container mounts, inadvertently masking the standard &lt;code&gt;/usr/bin/git&lt;/code&gt; binary.&lt;/p&gt;
&lt;p&gt;One of our agents was tasked with running &lt;code&gt;git status&lt;/code&gt; on the repository. Finding &lt;code&gt;git: command not found&lt;/code&gt; in its path, the agent did not stop or ask for help. Instead, driven by its objective, it began a rapid, autonomous probe of the sandbox. It searched the filesystem, discovered the raw binary at &lt;code&gt;/usr/lib/git-core/git&lt;/code&gt;, and attempted to invoke it directly via Python subprocesses. When further security flags blocked that execution, the agent began dynamically attempting known path-traversal workarounds and brute-forcing local file operations to bypass the container’s path restrictions.&lt;/p&gt;
&lt;p&gt;It was a clean, logical attempt to solve a problem—but it was still an active brute-force exploit run on the host’s directory structure. Without sandbox boundaries, an agent trying to be “helpful” can easily end up compromising the system.&lt;/p&gt;
&lt;p&gt;Our response was not “lock everything forever.” Early fortification attempts that over-tightened the Inner PEP burned more human time on agent brain-exhaustion than they saved. The working doctrine became &lt;strong&gt;relaxed-first, then tighten bolts in small chunks&lt;/strong&gt; when real friction appears—while never giving back an unaudited host shell.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;1-camp-acpd-the-sole-gateway-to-command-execution&quot;&gt;1. &lt;code&gt;camp-acpd&lt;/code&gt;: The Sole Gateway to Command Execution&lt;/h2&gt;
&lt;p&gt;To bring order to this dilemma, we built &lt;strong&gt;&lt;code&gt;camp-acpd&lt;/code&gt;&lt;/strong&gt;—a central daemon that acts as our single point of entry for any command execution, file modification, or forge operation.&lt;/p&gt;
&lt;p&gt;We deliberately use a &lt;strong&gt;dual-layer&lt;/strong&gt; sandbox, not one monolithic jail:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;OuterWrap&lt;/strong&gt; — the long-lived agent process (the LLM client) runs inside a strict &lt;code&gt;bwrap&lt;/code&gt; profile. It sees a &lt;em&gt;curated&lt;/em&gt; view of the host: a small read-only &lt;strong&gt;&lt;code&gt;/camp-runtime/&lt;/code&gt;&lt;/strong&gt; of verified bridges, the agent’s workspace, and only the scratch roots it needs. The live CAMP source tree is masked (empty &lt;code&gt;tmpfs&lt;/code&gt; over the mutable checkout) so the model cannot wander the implementation and burn context on infrastructure archaeology.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inner PEP&lt;/strong&gt; — when the agent runs a shell command, &lt;code&gt;camp-shell&lt;/code&gt; forwards it to &lt;code&gt;camp-acpd&lt;/code&gt;, which builds a fresh (today: relatively relaxed) Bubblewrap namespace for &lt;em&gt;that&lt;/em&gt; command, audits it, and streams back pristine stdout/stderr. Security bolts tighten in small chunks; the first product goal was “commands look identical to native bash” so real work could continue while fortification matured.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Look at what happens when an agent lists &lt;code&gt;/home/rrs/&lt;/code&gt; inside the OuterWrap:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;$ ls /home/rrs/ -al
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;total &lt;span style=&quot;color: #ae81ff;&quot;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;drwxr-xr-x &lt;span style=&quot;color: #ae81ff;&quot;&gt;5&lt;/span&gt; rrs rrs &lt;span style=&quot;color: #ae81ff;&quot;&gt;100&lt;/span&gt; Jul &lt;span style=&quot;color: #ae81ff;&quot;&gt;29&lt;/span&gt; 14:07 .
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;drwxr-xr-x &lt;span style=&quot;color: #ae81ff;&quot;&gt;3&lt;/span&gt; rrs rrs &lt;span style=&quot;color: #ae81ff;&quot;&gt;60&lt;/span&gt; Jul &lt;span style=&quot;color: #ae81ff;&quot;&gt;29&lt;/span&gt; 14:07 ..
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;drwxrwxr-x &lt;span style=&quot;color: #ae81ff;&quot;&gt;1&lt;/span&gt; rrs rrs &lt;span style=&quot;color: #ae81ff;&quot;&gt;56&lt;/span&gt; Jun &lt;span style=&quot;color: #ae81ff;&quot;&gt;21&lt;/span&gt; 20:52 .agy-agrickxy
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;drwx------ &lt;span style=&quot;color: #ae81ff;&quot;&gt;5&lt;/span&gt; rrs rrs &lt;span style=&quot;color: #ae81ff;&quot;&gt;100&lt;/span&gt; Jul &lt;span style=&quot;color: #ae81ff;&quot;&gt;29&lt;/span&gt; 14:07 AI
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;drwx------ &lt;span style=&quot;color: #ae81ff;&quot;&gt;3&lt;/span&gt; rrs rrs &lt;span style=&quot;color: #ae81ff;&quot;&gt;60&lt;/span&gt; Jul &lt;span style=&quot;color: #ae81ff;&quot;&gt;29&lt;/span&gt; 14:07 NoBackup
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The agent is blind to host documents, SSH keys, and most of the home directory. It only sees its designated workspace and the necessary &lt;code&gt;AI&lt;/code&gt;/&lt;code&gt;NoBackup&lt;/code&gt; scratch roots.&lt;/p&gt;
&lt;p&gt;The OuterWrap mounts a read-only &lt;code&gt;/camp-runtime/&lt;/code&gt; directory containing only the verified binary bridges required for IPC and secure utilities:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;$ ls /camp-runtime/bin/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;camp-dbus camp-mcp-shim camp-shell camp-sudo dbus-send grep rg
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Complete Auditability:&lt;/strong&gt; Every shell command, git operation, or forge write requested by an agent must route through &lt;code&gt;camp-acpd&lt;/code&gt;. There are no unaudited backdoors. Actions are recorded to the &lt;strong&gt;&lt;code&gt;camp_audit&lt;/code&gt;&lt;/strong&gt; ledger—the durable evidence trail. (This is distinct from &lt;strong&gt;PDP&lt;/strong&gt;, our &lt;em&gt;Personal Data Plane&lt;/em&gt;: a downstream work-hours / appraisal ledger &lt;em&gt;derived from&lt;/em&gt; forge and audit evidence, not the security log itself.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scoped, Per-Agent Credentials:&lt;/strong&gt; No agent shares a root or admin token. Each identity (e.g. &lt;code&gt;CPL&lt;/code&gt;, &lt;code&gt;AGR&lt;/code&gt;, &lt;code&gt;GRK&lt;/code&gt;, &lt;code&gt;KIR&lt;/code&gt;) gets a narrowly-scoped forge token, brokered outside the sandbox and injected only at the point of use. Compromise of one agent does not hand over the fleet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Policy layer (OPA, pluggable):&lt;/strong&gt; &lt;code&gt;camp-acpd&lt;/code&gt; can consult &lt;strong&gt;Open Policy Agent (OPA)&lt;/strong&gt; for declarative allow/deny rules (role, path, tool class, egress). In production we treat OPA as infrastructure that can be relaxed or tightened without rewriting the daemon—HITL rails and brokered tools remain the hard gates for privileged ops even when OPA is not the primary choke.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The &lt;code&gt;camp-shell&lt;/code&gt; Rust wrapper:&lt;/strong&gt; Inside the agent environment, shell is not raw bash. &lt;code&gt;camp-shell&lt;/code&gt; intercepts the command line, attaches session/capability context, hands off to &lt;code&gt;camp-acpd&lt;/code&gt;, and streams output back so the agent still &lt;em&gt;feels&lt;/em&gt; like a normal terminal—while never holding a host shell of its own.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Host bridges, not host buses:&lt;/strong&gt; Surfaces the Inner PEP cannot expose safely (user D-Bus, user &lt;code&gt;systemctl&lt;/code&gt;, elevation) are reached through named bridges—&lt;strong&gt;&lt;code&gt;camp-dbus&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;camp-sudo&lt;/code&gt;&lt;/strong&gt;—not by inventing a side path. When a direct call fails inside the sandbox, that is a signal to take the bridge, not to declare the capability “unavailable.”&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;2-zenity--hitl-keeping-the-human-in-the-loop&quot;&gt;2. Zenity &amp;amp; HITL: Keeping the Human in the Loop&lt;/h2&gt;
&lt;p&gt;When an agent requests a high-impact, privileged, or irreversible write action (like modifying systemd units, merging pull requests on Gitea, or running a &lt;code&gt;sudo&lt;/code&gt; command with &lt;code&gt;CAMP_NO_BWRAP=1&lt;/code&gt;), the autonomy ends.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;camp-acpd&lt;/code&gt; automatically suspends the execution and triggers a host-side &lt;strong&gt;Zenity GUI dialog&lt;/strong&gt; on the user’s desktop:&lt;/p&gt;
&lt;pre tabindex=&quot;0&quot;&gt;&lt;code&gt;[ Agent requests systemctl restart acpd ]
│
▼
[ camp-acpd intercepts command ]
│
▼
[ Host-side Zenity prompt pops up on GNOME desktop ]
┌──────────────────────────────────────────────┐
│ Human: Agent &#39;AGR&#39; requests root privilege │
│ Command: systemctl restart camp-acpd.service │
│ [ Approve ] [ Deny ] │
└──────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Through &lt;strong&gt;&lt;code&gt;camp-dbus&lt;/code&gt;&lt;/strong&gt; (our mediated D-Bus / &lt;code&gt;systemctl&lt;/code&gt; bridge) and related HITL rails, the sandboxed agent never talks to the host session bus or user systemd directly. The host daemon raises a desktop confirm when required. The command runs only if the human approves (or, for scripted host-side work, supplies an explicit capability path that agents cannot read—their view of that token is masked to &lt;code&gt;/dev/null&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;The same HITL idea covers more than &lt;code&gt;sudo&lt;/code&gt;. Privileged &lt;em&gt;agent&lt;/em&gt; actions—merging a pull request via the gateway, restarting a &lt;code&gt;camp-*&lt;/code&gt; user unit, elevating through &lt;code&gt;camp-sudo&lt;/code&gt;—are designed so that &lt;strong&gt;intent is a second party&lt;/strong&gt;, not a string the model can type into its own environment.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;3-sifting-the-output-camp-shell--sieve&quot;&gt;3. Sifting the Output: &lt;code&gt;camp-shell&lt;/code&gt; + Sieve&lt;/h2&gt;
&lt;p&gt;Even when commands are safe, verbose program outputs can easily overwhelm the “RAM” of our computing paradigm—the LLM’s context window. Running a compiler or listing a massive directory might generate thousands of lines of output, pushing the agent’s prompt size to its limit and rendering it unable to reason effectively.&lt;/p&gt;
&lt;p&gt;To prevent this context bloat, &lt;code&gt;camp-shell&lt;/code&gt; integrates with the &lt;strong&gt;Shell Sieve&lt;/strong&gt;. If an agent attempts to run a verbose command like listing &lt;code&gt;/bin/&lt;/code&gt;, the output is automatically truncated and sieved:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;$ ls /bin/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;--- &lt;span style=&quot;color: #f92672;&quot;&gt;[&lt;/span&gt;CAMP SHELL SIEVE: output truncated &lt;span style=&quot;color: #66d9ef;&quot;&gt;for&lt;/span&gt; context economy&lt;span style=&quot;color: #f92672;&quot;&gt;]&lt;/span&gt; ---
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #e6db74;&quot;&gt;&#39;[&#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt; 411toppm
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt; 7z
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt; 7za
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt; 7zr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt; ... &lt;span style=&quot;color: #f92672;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ae81ff;&quot;&gt;4926&lt;/span&gt; lines hidden — &lt;span style=&quot;color: #ae81ff;&quot;&gt;66824&lt;/span&gt; bytes total&lt;span style=&quot;color: #f92672;&quot;&gt;]&lt;/span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt; zipsplit
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt; zless
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt; zlib-flate
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt; zmore
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt; znew
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt; zrun
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt; zstd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;--- &lt;span style=&quot;color: #f92672;&quot;&gt;[&lt;/span&gt;FULL OUTPUT ARCHIVED: /home/rrs/.cache/camp/shell-artifacts/camp_cmd_2443e7d6add2c9fa.log &lt;span style=&quot;color: #f92672;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ae81ff;&quot;&gt;5026&lt;/span&gt; lines, &lt;span style=&quot;color: #ae81ff;&quot;&gt;66824&lt;/span&gt; bytes&lt;span style=&quot;color: #f92672;&quot;&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt; To read it WITHOUT re-flooding context &lt;span style=&quot;color: #f92672;&quot;&gt;(&lt;/span&gt;a plain &lt;span style=&quot;color: #e6db74;&quot;&gt;`&lt;/span&gt;cat&lt;span style=&quot;color: #e6db74;&quot;&gt;`&lt;/span&gt; is re-sieved&lt;span style=&quot;color: #f92672;&quot;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt; - a file-read/viewer tool on that path &lt;span style=&quot;color: #f92672;&quot;&gt;(&lt;/span&gt;bypasses the shell&lt;span style=&quot;color: #f92672;&quot;&gt;)&lt;/span&gt;, or
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt; - small slices: sed -n &lt;span style=&quot;color: #e6db74;&quot;&gt;&#39;120,160p&#39;&lt;/span&gt; &amp;lt;path&amp;gt; ; grep -n PATTERN &amp;lt;path&amp;gt; ; head -c &lt;span style=&quot;color: #ae81ff;&quot;&gt;4000&lt;/span&gt; &amp;lt;path&amp;gt; ---
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Context Hygiene:&lt;/strong&gt; The agent only receives a high-signal overview of the first and last few lines (capping at 150 lines or 5,000 characters). The full, untruncated log is written directly to disk.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;On-Demand Inspection:&lt;/strong&gt; If the agent needs to inspect a specific compiler error deep inside the output, it is instructed by &lt;code&gt;camp-shell&lt;/code&gt; to bypass the terminal and read the specific slice of the archived file directly, preserving context capacity and reducing API token costs.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;4-local-first-forge-and-egress-default-off&quot;&gt;4. Local-First Forge and Egress Default-Off&lt;/h2&gt;
&lt;p&gt;Autonomy on the host is useless if every push still phones home to someone else’s cloud. CAMP is &lt;strong&gt;local-first&lt;/strong&gt;: each agent works against a &lt;strong&gt;local Gitea&lt;/strong&gt; hub (&lt;code&gt;localhost:8095&lt;/code&gt;). Mirroring &lt;em&gt;into&lt;/em&gt; CAMP from upstream forges is open; &lt;strong&gt;egress back out&lt;/strong&gt; (&lt;code&gt;git push&lt;/code&gt; to GitLab/GitHub, &lt;code&gt;glab&lt;/code&gt;/&lt;code&gt;gh&lt;/code&gt; that would create remote MRs, and similar) is &lt;strong&gt;default-OFF&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The chokepoint is deliberate and boring on purpose:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;code&gt;pre-push&lt;/code&gt; hook (and matching forge CLI wrappers) allow pushes only to the local hub without ceremony.&lt;/li&gt;
&lt;li&gt;Any other remote requires human intent: either a host-side capability token the sandbox cannot read, or a Zenity “Allow push?” dialog on a graphical session.&lt;/li&gt;
&lt;li&gt;The token path is &lt;strong&gt;fixed&lt;/strong&gt;, not env-overridable—agents once nearly gained a bypass when a test knobs made the path configurable; that class of hole is treated as a security regression, not a convenience feature.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The result matches the dual-layer philosophy: agents remain free to branch, commit, and open pull requests &lt;strong&gt;locally&lt;/strong&gt;; publishing outside the house stays a human act.&lt;/p&gt;
&lt;h3 id=&quot;the-pr-rail-humans-merge-agents-deliver&quot;&gt;The PR rail (humans merge, agents deliver)&lt;/h3&gt;
&lt;p&gt;Fleet rules are equally blunt about &lt;em&gt;who&lt;/em&gt; may change production: &lt;strong&gt;agents open pull requests under their own identity; only the human merges canonical branches and deploys.&lt;/strong&gt; There is no shared admin token for agents to “just fix prod.” That sounds bureaucratic until the first time an agent would otherwise have “helpfully” force-pushed a mainline branch at 2 a.m. Attribution, review, and deploy stay human-sovereign.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;5-mempalace-attributed-long-term-vector-memory&quot;&gt;5. MemPalace: Attributed Long-Term Vector Memory&lt;/h2&gt;
&lt;p&gt;Rather than leaving agents to guess or make assumptions, we integrated &lt;strong&gt;MemPalace&lt;/strong&gt;—a central, shared vector repository—into the heart of CAMP. The backend itself has evolved: MemPalace began on &lt;code&gt;ChromaDB&lt;/code&gt;, but the entire fleet (11,000+ drawers across every agent wing) has since been migrated to &lt;strong&gt;&lt;code&gt;pgvector&lt;/code&gt; on PostgreSQL 18&lt;/strong&gt;, giving us transactional guarantees, better concurrency under a shared fleet, and a single canonical store instead of per-agent SQLite files.&lt;/p&gt;
&lt;p&gt;On wake-up, the agent does not start with a blank slate. It calls &lt;code&gt;mempalace_status&lt;/code&gt; to load the current palace map and runs semantic queries on past session summaries. This allows the agent to pull down historical references, recall user preferences, and review past debugging decisions, eliminating context silos between separate runs.&lt;/p&gt;
&lt;p&gt;Memory is written in &lt;strong&gt;AAAK&lt;/strong&gt; (Attributed Agentic Association Keys)—a compressed, attributed dialect that stores dates, importance ratings (★ to ★★★★★), and agent attributions. Because writes come from a fleet of heterogeneous CLIs with no shared runtime, we did not build one monolithic “memory service”—we built a set of small, independently-scheduled tools that each own one failure mode:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;camp-mempalace-miner&lt;/code&gt; — the ingestion layer.&lt;/strong&gt; This tool actually exists in two generations, still running side by side. The original per-agent hook miners (one per CLI family—Gemini, Copilot, Grok, the sandboxed pilot agents) are launched directly from each agent’s own lifecycle hooks (&lt;code&gt;AfterAgent&lt;/code&gt;, &lt;code&gt;PreCompress&lt;/code&gt;/&lt;code&gt;PreCompact&lt;/code&gt;, &lt;code&gt;SessionEnd&lt;/code&gt;) as a detached subprocess, throttled to at most once per 30 minutes or 30 user turns. On top of that we added a &lt;strong&gt;central, timer-driven miner&lt;/strong&gt;—a single &lt;code&gt;systemd --user&lt;/code&gt; timer firing roughly every 9 minutes—that knows the on-disk transcript layout for &lt;em&gt;every&lt;/em&gt; agent code in the fleet (e.g. Copilot’s &lt;code&gt;~/.copilot/session-state/*/events.jsonl&lt;/code&gt;, Grok’s &lt;code&gt;~/.grok/sessions/**/updates.jsonl&lt;/code&gt;, each Gemini persona’s own &lt;code&gt;chats/&lt;/code&gt; directory) and mines all of them into the &lt;em&gt;one&lt;/em&gt; central palace, stamping every drawer with &lt;code&gt;agent_id&lt;/code&gt; and &lt;code&gt;added_by=camp-central-miner&lt;/code&gt;. This mattered in practice: sandboxed pilot agents running under &lt;code&gt;bwrap&lt;/code&gt; were writing into a tmpfs overlay that evaporated on exit, so their memory silently never reached the host palace until the central miner started reading their transcripts directly instead of trusting their in-sandbox writes. Both generations share the same crash-safety plumbing—per-session byte-offset tracking, content-hash dedup, advisory file locks, and a &lt;code&gt;CAMP_DRY_RUN&lt;/code&gt; mode for safe testing—so neither can double-file or corrupt state if it’s killed mid-run.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;camp-mempalace-compactor&lt;/code&gt; — hierarchical aging.&lt;/strong&gt; A periodic job that finds &lt;code&gt;room_general&lt;/code&gt; drawers older than 30 days, batches 10–15 raw snippets at a time, and asks a locally-hosted LLM to compress them into one dense AAAK summary block, keeping vector search signal-dense instead of drowning in verbatim history. We learned this the hard way: running the compactor’s small maintenance model on the same GPU as the interactive 7B model caused it to crash under Vulkan device contention, so the maintenance model now runs CPU-only, a perfectly adequate trade-off for a background summarizer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;camp-mempalace-fsck&lt;/code&gt; — the integrity and semantic auditor.&lt;/strong&gt; This single tool absorbed what we originally scoped as two separate ideas (a syntax “validator” and a consistency “fsck”), because in practice they’re one audit pass. In its default, unattended mode it deep-scans the palace for broken invariants—missing &lt;code&gt;agent_id&lt;/code&gt; attribution, null or malformed embeddings, incomplete document text—and auto-repairs whatever is safe to fix without judgment calls. Its &lt;code&gt;--attended&lt;/code&gt; mode is the interesting one: it hands ambiguous, potentially mis-tagged drawers to a local LLM for reclassification, shows you its proposed room change, and waits for an explicit &lt;code&gt;Approve? [y/N/q]&lt;/code&gt; before committing—keeping a human in the loop for anything that requires judgment rather than mechanical repair.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Together, this trio is why the fleet’s memory coverage doesn’t depend on any single agent behaving well: even if a sandboxed pilot never runs its own hook miner correctly, the central miner will still find and file its transcripts on the next timer tick, and fsck will catch and repair anything that slips through mangled. A single gateway call, &lt;code&gt;report_miner_brief&lt;/code&gt;, aggregates every agent’s mining state (sessions mined, exchanges filed, pending backlog) into one fleet-wide status line—so verifying that &lt;em&gt;all&lt;/em&gt; agents are actually being remembered is a one-shot check, not a per-agent archaeology dig.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Diary sovereignty&lt;/strong&gt; is non-negotiable: one agent does not read another’s private diary without an explicit tunnel and permission. The shared palace holds fleet knowledge; private journals stay private by architecture, not by “please don’t look.”&lt;/p&gt;
&lt;p&gt;Vector recall alone isn’t enough, though—embeddings can retrieve a &lt;em&gt;stale&lt;/em&gt; fact just as confidently as a current one. So MemPalace also maintains an explicit &lt;strong&gt;Knowledge Graph&lt;/strong&gt; (&lt;code&gt;mempalace_kg_add&lt;/code&gt; / &lt;code&gt;mempalace_kg_invalidate&lt;/code&gt; / &lt;code&gt;mempalace_kg_query&lt;/code&gt;) for hard facts that change over time (a DSN, a service version, a person’s role). When a fact changes, the old entry is explicitly invalidated rather than left to be out-competed by a newer, similarly-worded memory. The house rule we drilled into every agent: &lt;em&gt;before stating anything about a person, project, or past event, query the palace first—wrong is worse than slow.&lt;/em&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;6-mcp-one-syscall-table-for-a-heterogeneous-fleet&quot;&gt;6. MCP: One Syscall Table for a Heterogeneous Fleet&lt;/h2&gt;
&lt;p&gt;None of this architecture would be practical if every agent vendor insisted on its own custom integration dialect. Our fleet is genuinely heterogeneous: GitHub Copilot, Gemini CLI, Claude, and Grok each come with different native tool-calling schemas and different ideas of what a “tool” should be. The &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; is what makes CAMP’s foundational services vendor-agnostic: every capability the fleet needs is exposed once, as an MCP server, and every agent—regardless of who built it—talks to the exact same tool surface.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;camp_acp_gateway&lt;/code&gt; is the flagship example: a single MCP server that fronts almost the entire CAMP foundation—&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Memory&lt;/strong&gt; (&lt;code&gt;mempalace_status&lt;/code&gt;, &lt;code&gt;mempalace_search&lt;/code&gt;, &lt;code&gt;mempalace_kg_*&lt;/code&gt;, &lt;code&gt;mempalace_checkpoint&lt;/code&gt;) — the palace operations covered above.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Work tracking&lt;/strong&gt; (&lt;code&gt;camp_issue_create&lt;/code&gt;/&lt;code&gt;camp_issue_comment&lt;/code&gt;/&lt;code&gt;camp_issue_update&lt;/code&gt;, &lt;code&gt;camp_pr_create&lt;/code&gt;/&lt;code&gt;camp_pr_merge&lt;/code&gt;) — the shared Issue Tracker and PR workflow.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent-to-agent coordination&lt;/strong&gt; (&lt;code&gt;camp_a2a_propose_task&lt;/code&gt;, &lt;code&gt;camp_a2a_send_message&lt;/code&gt;, &lt;code&gt;camp_a2a_fetch_inbox&lt;/code&gt;) — the passive A2A layer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evidence and provenance&lt;/strong&gt; (&lt;code&gt;forge_discover&lt;/code&gt;, &lt;code&gt;forge_ledger&lt;/code&gt;, &lt;code&gt;forge_onboard&lt;/code&gt;) — the ingestion side that feeds PDP’s work ledger from real Gitea/forge activity, keeping billable-hours accounting evidence-based rather than self-reported.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Global policy and directives&lt;/strong&gt; (&lt;code&gt;camp_global_directives&lt;/code&gt;, &lt;code&gt;camp_policy_map&lt;/code&gt;, &lt;code&gt;camp_policy_search&lt;/code&gt;) — the fleet-wide rulebook every agent reads on wake-up, versioned like everything else.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The effect is conceptually analogous to an OS syscall table: application code doesn’t care whether it’s running on one CPU family or another, because the interface layer presents one stable interface underneath. Here, an agent doesn’t care if it’s Copilot’s tool-call schema or Gemini’s function-calling format—&lt;code&gt;camp_acp_gateway&lt;/code&gt; presents the same tools, the same argument shapes, and the same &lt;code&gt;agent_id&lt;/code&gt;-stamped audit trail no matter which vendor is asking. That attribution is not incidental: every MCP call is tagged with the calling agent’s code (&lt;code&gt;CPL&lt;/code&gt;, &lt;code&gt;GRK&lt;/code&gt;, &lt;code&gt;KIR&lt;/code&gt;, …), so the same accountability the sandbox enforces at the shell layer is also enforced at the memory, task-tracking, and coordination layer. A rogue or buggy agent can’t quietly bypass its own audit trail just because it happens to be a different vendor’s CLI.&lt;/p&gt;
&lt;p&gt;Discovery is uniform too: &lt;code&gt;camp_mcp_catalog&lt;/code&gt; lets any agent enumerate what’s actually available on the gateway at runtime, rather than hard-coding tool lists per agent—useful when the tool surface grows (as it regularly does) without every agent’s configuration needing a synchronized update.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;7-agent-isolation-and-the-a2a-horizon&quot;&gt;7. Agent Isolation and the A2A Horizon&lt;/h2&gt;
&lt;p&gt;In the CAMP architecture, each agent is treated as a unique, independent entity. Agents operate in isolated sandboxes with distinct workspaces and credentials. An agent cannot mutate another agent’s repository or step on its toes without explicit permission.&lt;/p&gt;
&lt;p&gt;Fleet behaviour is not left to tribal knowledge. A short &lt;strong&gt;constitution&lt;/strong&gt;—&lt;code&gt;camp-directives.md&lt;/code&gt;—is served verbatim to every agent on wake-up and on a standing cadence via &lt;code&gt;camp_global_directives&lt;/code&gt;. Identity, memory, egress, shell routing, A2A, and tooling posture live there once; per-agent instruction files are only overlays (paths, runtime quirks), not forks of the rules.&lt;/p&gt;
&lt;p&gt;Currently, cooperation is achieved through a &lt;strong&gt;passive A2A (Agent-to-Agent)&lt;/strong&gt; mechanism:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Agents send messages, task proposals, and status updates via &lt;code&gt;camp_acp_gateway&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;These tasks are queued and reviewed when a session is active or when the user acts as a mediator.&lt;/li&gt;
&lt;li&gt;For anything longer-lived than a single session, the fleet leans on a &lt;strong&gt;shared CAMP Issue Tracker&lt;/strong&gt; (Gitea-hosted, &lt;code&gt;camp_issue_create&lt;/code&gt;/&lt;code&gt;camp_issue_comment&lt;/code&gt;/&lt;code&gt;camp_issue_update&lt;/code&gt;). Work items carry explicit dependency links—e.g. an issue implementing a forge adapter will note “depends on #472 (contracts)” and an agent picking it up can develop against the dependency’s branch before it lands. Pull requests are reviewed and commented on across agents and the human, so a fix started by one agent in one session can be picked up, critiqued, and finished by a different agent (or the same one, days later) without losing any context—the issue &lt;em&gt;is&lt;/em&gt; the context.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;the-headless-limitation&quot;&gt;The Headless Limitation&lt;/h3&gt;
&lt;p&gt;While passive A2A works beautifully for structured handoffs, the current frontier of agentic design faces a key limitation: &lt;strong&gt;agents are not yet fully headless-capable&lt;/strong&gt;. They depend on the active terminal session, browser loop, or prompt loop of the user to keep executing.&lt;/p&gt;
&lt;p&gt;Because agents cannot run completely detached in the background as daemon processes, we cannot yet achieve &lt;strong&gt;active A2A communication&lt;/strong&gt;—where a swarm of agents autonomously wakes up on a cron schedule, coordinates complex migrations in the background, resolves merge conflicts among themselves, and presents a completed PR in the morning without any active human terminal sessions. Overcoming this headless hurdle is the next major step in our roadmap.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;8-the-local-first-promise-data-sovereignty&quot;&gt;8. The Local-First Promise: Data Sovereignty&lt;/h2&gt;
&lt;p&gt;Utter data sovereignty means keeping your memory, code, and execution local—and making cloud models &lt;em&gt;optional guests&lt;/em&gt;, not landlords.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Local Gitea hub:&lt;/strong&gt; Code, issues, and pull requests live on a machine you control. Agents are first-class forge users there; external forges are mirrors you choose to push, not the default workspace.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ollama (and friends):&lt;/strong&gt; CAMP integrates with local LLM runtimes. We run models such as Qwen 2.5 7B, Gemma 2B, and Phi 3.5 Mini locally, accelerated by the laptop’s iGPU (Vulkan). Maintenance models for memory compaction can run CPU-only so they do not thrash the interactive GPU session.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Model-agnostic sovereignty:&lt;/strong&gt; Because vector memory, local Gitea, and execution sandboxes are decoupled from any one vendor CLI, a new open-weights model or a new agent frontend is a plug-in—not a migration. Historical memory, access policies, and coding workflows stay put.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;conclusion-bridging-the-paradigm&quot;&gt;Conclusion: Bridging the Paradigm&lt;/h2&gt;
&lt;p&gt;By combining &lt;strong&gt;local LLM execution (Ollama)&lt;/strong&gt;, &lt;strong&gt;dual-layer sandboxing (OuterWrap + Inner PEP via camp-shell / camp-acpd)&lt;/strong&gt;, &lt;strong&gt;HITL rails (Zenity, fixed-path capability tokens, human-only merge/deploy)&lt;/strong&gt;, &lt;strong&gt;egress default-off to a local Gitea hub&lt;/strong&gt;, &lt;strong&gt;a vendor-agnostic MCP tool surface (&lt;code&gt;camp_acp_gateway&lt;/code&gt;)&lt;/strong&gt;, and &lt;strong&gt;automated memory maintenance (MemPalace suite)&lt;/strong&gt;, we’ve tried to experiment with what may potentially become the conceptual equivalent of an operating system kernel for the AI era.&lt;/p&gt;
&lt;p&gt;The work is unfinished by design. Headless swarm coordination, runtime-directory default-deny (so the next secret is invisible without a deliberate allow-list), and further tightening of relaxed Inner PEP mounts remain open. The point of such a conceptual kernel is not to pretend agents are tame—it is to make every ambitious shortcut &lt;em&gt;auditable&lt;/em&gt;, &lt;em&gt;attributable&lt;/em&gt;, and &lt;em&gt;interruptible by a human&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;We no longer treat autonomous agents as unpredictable, untrusted black boxes. They are disciplined pair-programmers: free enough to do real engineering, bound enough that “helpful” does not become “hostile,” and sovereign enough that the house—not the cloud vendor—owns the ledger of what they did.&lt;/p&gt;
&lt;h3 id=&quot;video-demonstrations-camp-mempalace-memory-in-action&quot;&gt;Video Demonstrations: CAMP MemPalace Memory in Action&lt;/h3&gt;
&lt;p&gt;Below are three video demonstrations showing CAMP MemPalace memory integration in action across three different AI agent clients:&lt;/p&gt;
&lt;h4 id=&quot;antigravity-agent-client&quot;&gt;Antigravity Agent Client&lt;/h4&gt;
&lt;div style=&quot;padding-bottom: 56.25%; height: 0; overflow: hidden;&quot;&gt;

&lt;/div&gt;
&lt;h4 id=&quot;claude-agent-client&quot;&gt;Claude Agent Client&lt;/h4&gt;
&lt;div style=&quot;padding-bottom: 56.25%; height: 0; overflow: hidden;&quot;&gt;

&lt;/div&gt;
&lt;h4 id=&quot;grok-build-agent-client&quot;&gt;Grok-Build Agent Client&lt;/h4&gt;
&lt;div style=&quot;padding-bottom: 56.25%; height: 0; overflow: hidden;&quot;&gt;

&lt;/div&gt;</content>
	<author>
	  <name>Ritesh Raj Sarraf</name>
	   <uri>https://researchut.com/categories/debian-blog/</uri> 
	</author>
	<source>
	  <title type="html">Debian-Blog on RESEARCHUT</title>
	  <subtitle type="html">Recent content in Debian-Blog on RESEARCHUT</subtitle>
	  <link rel="self" href="https://researchut.com/categories/debian-blog/index.xml"/>
	  <id>https://researchut.com/categories/debian-blog/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en-us">Review: How to Steal a Galaxy</title>
	<link href="https://www.eyrie.org/~eagle/reviews/books/0-7564-1949-2.html"/>
	<id>https://www.eyrie.org/~eagle/reviews/books/0-7564-1949-2.html</id>
	<updated>2026-08-01T04:23:00+00:00</updated>
	<summary type="html" xml:lang="en-us"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;Review: &lt;cite&gt;How to Steal a Galaxy&lt;/cite&gt;, by Beth Revis&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;&lt;tr&gt;
    &lt;td&gt;Series:&lt;/td&gt;
    &lt;td&gt;Chaotic Orbits #2&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Publisher:&lt;/td&gt;
    &lt;td&gt;DAW Books&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Copyright:&lt;/td&gt;
    &lt;td&gt;December 2024&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;ISBN:&lt;/td&gt;
    &lt;td&gt;0-7564-1949-2&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Format:&lt;/td&gt;
    &lt;td&gt;Kindle&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Pages:&lt;/td&gt;
    &lt;td&gt;143&lt;/td&gt;
  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;
&lt;cite&gt;How to Steal a Galaxy&lt;/cite&gt; is a far-future science fiction caper short
novel (maybe a novella?) and the sequel to &lt;a href=&quot;https://www.eyrie.org/~eagle/reviews/books/0-7564-1947-6.html&quot;&gt;&lt;cite&gt;Full Speed to a Crash Landing&lt;/cite&gt;&lt;/a&gt;. You don&#39;t have to remember the
details of the previous book to enjoy this one. There&#39;s an excellent
inline summary at the start of this installment.
&lt;/p&gt;

&lt;p&gt;
After an annoying negotiation with people who keep trying to preach at her
about causes, Ada Lamarr has a new contract. She is going undercover,
after a fashion, at a charity gala and auction on Rigel-Earth. While she&#39;s
there, she&#39;s going to steal something. What, precisely, she keeps a
mystery from both the other characters and from the reader until the end
of the story.
&lt;/p&gt;

&lt;p&gt;
Government agent Rian White is working security at this charity gala. Due
to its link with the plot of &lt;cite&gt;Full Speed to a Crash Landing&lt;/cite&gt;, he was
fairly certain Ada would be there, as indeed she is. What she is planning,
however, is maddeningly unclear. Also maddening is how good Ada looks in a
dress.
&lt;/p&gt;

&lt;p&gt;
As with the previous book, &lt;cite&gt;How to Steal a Galaxy&lt;/cite&gt; is told by Ada in
the first person using the same teasing tone and constant misdirection
that she uses when verbally fencing with Rian and the other characters. I
found this novella even more entertaining and satisfying than the previous
one. The charity gala is supposedly intended to benefit the poor people of
Earth, and is run with exactly the sort of condescension and disguised
capitalist looting typical of such exercises in elite charity. Ada&#39;s
narration is scathing in a deeply relatable way.
&lt;/p&gt;

&lt;p&gt;
Also, there is a trillionaire tech-bro fake philanthropist who is smug and
condescending and accustomed to getting exactly what he wants.
&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;
    &quot;I don&#39;t think anyone should have enough personal wealth to decimate a
    large country&#39;s income just because he&#39;s going through a midlife
    crisis.&quot;
&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;
Ada&#39;s interactions with Strom Fetor are an absolute delight. He is so sure
of himself that he is incapable of registering her as a threat, and she
effortlessly deceives him by hiding in plain sight.
&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;
    &quot;You really shouldn&#39;t be talking about this,&quot; Rian starts.
&lt;/p&gt;

&lt;p&gt;
    Fetor waves aside his concerns. &quot;We&#39;re all friends here.&quot;
&lt;/p&gt;

&lt;p&gt;
    &quot;Not me,&quot; I say. &quot;I hate you. Remember?&quot;
&lt;/p&gt;

&lt;p&gt;
    Fetor laughs in a tone I&#39;m sure he thinks is charming.
&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;
Fetor&#39;s complete inability to realize that a beautiful woman might both
sincerely not like him and not be flirting with him is perfect. I was
cackling through half of this book.
&lt;/p&gt;

&lt;p&gt;
Like any good heist story, there are twists and turns, surprises, double
agents, unexpected complications, and a delightful amount of verbal
fencing. I adore the narrative tone Revis uses for these stories. Ada has
just the right mix of idealism, cynicism, professionalism, and irreverence
to carry off the feeling that she&#39;s a step ahead of everyone else.
Underneath the bones of a delightful plot is a character who cares deeply
but is very aware of her limitations, and therefore has taught herself to
laugh at and be ruthless with her own emotions. I am finding it an
incredibly compelling type of competence porn.
&lt;/p&gt;

&lt;p&gt;
I enjoyed the first book of this series, but this one was so much better.
These stories are exactly the right length to keep the reader engrossed
throughout and satisfied but wanting more at the end. &lt;cite&gt;How to Steal a
Galaxy&lt;/cite&gt; ends on a cliffhanger of sorts, to be resolved in the next and
final book. I can hardly wait to start it.
&lt;/p&gt;

&lt;p&gt;
Highly recommended.
&lt;/p&gt;

&lt;p&gt;
Followed by &lt;cite&gt;Last Chance to Save the World&lt;/cite&gt;.
&lt;/p&gt;

&lt;p&gt;Rating: 9 out of 10&lt;/p&gt;</content>
	<author>
	  <name>Russ Allbery</name>
	   <uri>https://www.eyrie.org/~eagle/</uri> 
	</author>
	<source>
	  <title type="html">Eagle&#39;s Path</title>
	  <subtitle type="html">&quot;Passion and dispassion.  Choose two.&quot; -- Larry Wall</subtitle>
	  <link rel="self" href="https://www.eyrie.org/~eagle/journal/index.rss"/>
	  <id>https://www.eyrie.org/~eagle/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">N.K. Jemisin is doing a worldbuilding workshop at the Bronx Library Center tomorrow afternoon</title>
	<link href="https://xana.scru.org/posts/bamamba/lekkerderworst.html"/>
	<id>https://xana.scru.org/posts/bamamba/lekkerderworst.html</id>
	<updated>2026-07-31T15:32:32+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;div class=&quot;inlinecontent&quot;&gt;
&lt;p&gt;Normally, I do not read book reviews. Either I
haven&#39;t read the book, in which case there&#39;s spoiler
potential, or I have, in which case it&#39;s unlikely to
be useful or enjoyable for me to read a thing about
a thing I&#39;ve already read.&lt;/p&gt;
&lt;p&gt;But &lt;a href=&quot;https://www.eyrie.org/~eagle/reviews/books/0-316-29068-8.html&quot;&gt;Review: Radiant Star&lt;/a&gt;
caught my eye, and I thought, “Hmm, I&#39;ve read all
those books” and was curious. Of course, because
I am old and senile and have no understanding of
time, the “May 2026” staring at me was not able to
trigger the neural synapses that would remind me
that I haven&#39;t read any Ann Leckie since 2023.&lt;/p&gt;
&lt;p&gt;However, as I read Russ&#39;s review, and began to
wonder what the hell he was talking about, I was
able to piece together that while I have, in fact,
read 6 Ann Leckie books, none of them have been
&lt;em&gt;Radiant Star&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;This presented an opportunity, so I resolved to
add &lt;em&gt;Radiant Star&lt;/em&gt; to my todo list. To my surprise,
it was already there.&lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;info&quot;&gt;
    Posted on 2026-07-31
    
&lt;/div&gt;
&lt;div class=&quot;info&quot;&gt;
    
    Tags: &lt;a href=&quot;https://xana.scru.org/tags/bamamba.html&quot; rel=&quot;tag&quot; title=&quot;All pages tagged &#39;bamamba&#39;.&quot;&gt;bamamba&lt;/a&gt;
    
&lt;/div&gt;</content>
	<author>
	  <name>C</name>
	   <uri>https://xana.scru.org</uri> 
	</author>
	<source>
	  <title type="html">Yammering</title>
	  
	  <link rel="self" href="https://xana.scru.org/rivercrabbed-debian.atom"/>
	  <id>https://xana.scru.org/rivercrabbed-debian.atom</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en-us">Review: Painting the Blues in Gretna Green</title>
	<link href="https://www.eyrie.org/~eagle/reviews/books/9798360228431.html"/>
	<id>https://www.eyrie.org/~eagle/reviews/books/9798360228431.html</id>
	<updated>2026-07-31T03:06:00+00:00</updated>
	<summary type="html" xml:lang="en-us"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;Review: &lt;cite&gt;Painting the Blues in Gretna Green&lt;/cite&gt;, by Linzi Day&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;&lt;tr&gt;
    &lt;td&gt;Series:&lt;/td&gt;
    &lt;td&gt;Midlife Recorder #2&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Publisher:&lt;/td&gt;
    &lt;td&gt;Linzi Day&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Copyright:&lt;/td&gt;
    &lt;td&gt;November 2022&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;ISBN:&lt;/td&gt;
    &lt;td&gt;9798360228431&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Format:&lt;/td&gt;
    &lt;td&gt;Kindle&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Pages:&lt;/td&gt;
    &lt;td&gt;577&lt;/td&gt;
  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;
&lt;cite&gt;Painting the Blues in Gretna Green&lt;/cite&gt; is a self-published fantasy
novel and the second in the Midlife Recorder series. It picks up
immediately after the end of &lt;a href=&quot;https://www.eyrie.org/~eagle/reviews/books/9798837010774.html&quot;&gt;&lt;cite&gt;Midlife in
Gretna Green&lt;/cite&gt;&lt;/a&gt;. I also read it almost immediately after, so I didn&#39;t pay
attention to how good the recap of previous events was.
&lt;/p&gt;

&lt;p&gt;
As before, this is urban fantasy except not urban. Day calls it paranormal
women&#39;s fantasy, which I suppose is as good of a genre label as any. The
other book I can think of off-hand that would go into that genre would be
Nancy Springer&#39;s &lt;a href=&quot;https://www.eyrie.org/~eagle/reviews/books/0-380-76742-2.html&quot;&gt;&lt;cite&gt;Larque on the Wing&lt;/cite&gt;&lt;/a&gt;,
although it is considerably more literary.
&lt;/p&gt;

&lt;p&gt;
I suspect I&#39;m going to read this whole series and it&#39;s going to be
impossible to review these books without talking about Niki&#39;s job, so I&#39;m
not going to treat that as a spoiler. It&#39;s fairly well-advertised in the
marketing for the book, so that feels justified. If you&#39;re particularly
averse to any spoilers, though, you may want to stop reading here until
you&#39;ve gotten to the reveal in the first book.
&lt;/p&gt;

&lt;p&gt;
Niki is now officially the Recorder, with the power, advice book, and
sentient house to go with it. She&#39;s about to face her first test in
managing interworld politics: There&#39;s something amiss in the world of the
Picts. Her allies are dropping hints, there&#39;s a petition from a group on
the Pict world that she can&#39;t make sense of, and although she likes the
queen of the Picts, there is a great deal of tension beneath the surface
that she doesn&#39;t understand. Meanwhile, after the incompetent disaster
that she uncovered in the first book, Niki is determined to pick her new
staff by her own criteria.
&lt;/p&gt;

&lt;p&gt;
The second book leans even harder into giving Niki both a tangled mess
created by previous incompetence and enough power to fix it. Watching that
happen is very satisfying, particularly when it involves surprising people
who are rather too used to getting their own way.
&lt;/p&gt;

&lt;p&gt;
I was somewhat less convinced that Niki is getting the right training to
make the decisions that she&#39;s making. Diplomacy and staff management are
real skills that one needs to learn, not just wing on vibes and gut
instinct. My love of competence porn occasionally wishes that Niki had a
bit more structure around her competence. We do at least get a new
fictional self-help book on how to rule that contributes the quotes that
open each chapter. Not the ethics and management training that I would
have chosen, but it&#39;s something!
&lt;/p&gt;

&lt;p&gt;
In defense of Niki&#39;s technique, it becomes clear in this book that the
last few recorders have been far too cautious, conservative, and content
with a status quo that involved a minimum of work. One of the delights of
this book is that Niki thinks power exists to be used to fix things and is
determined to use it, not just sit on it. I had more suspension of
disbelief issues with this book than with the first — some of the problems
Niki is solving seem far too obvious to have been in stasis for this long
while also having this easy of a solution, and the level of political
power given to the Recorder is a bit unbelievable — but it is so
satisfying to see Niki cajole and bully people into being sensible.
&lt;/p&gt;

&lt;p&gt;
I have no idea if this is intentional on Day&#39;s part, but I will not be at
all surprised if adult-diagnosed ADHD comes up at some point in this
series. The way that Niki&#39;s focus jumps, her tendency to veer between
focusing on a problem and forgetting about it, and something about the way
she switches between trains of thought or misses important context because
she&#39;s jumping to conclusions is making me wonder. This, to be clear, is
not a complaint; I think it makes Niki more relatable and more
interesting. It&#39;s a good thing that she has a sentient house to serve as
her assistant. The glee with which she&#39;s delegating any task that involves
keeping track of details or following up with other people feels like a
bit of an indicator by itself.
&lt;/p&gt;

&lt;p&gt;
I did get a bit frustrated with the plot structure of this book. Niki
keeps mentioning that a critical petition submitted to her office makes no
sense, but it takes half of this (rather long) book before she finally
explains to anyone else, even the reader, what&#39;s deficient about it. The
excuse within the book is that she&#39;s having a rather busy day, but by the
third time Niki mentions and then fails to do anything about the petition,
I was wishing Day would stop bringing it up until she was ready for that
part of the plot.
&lt;/p&gt;

&lt;p&gt;
This, as with a few issues in the previous book, feels partly like an
editing problem. There is something joyful in indulgent, sprawling books,
but only up to the point where they become repetitive. &lt;cite&gt;Painting the
Blues&lt;/cite&gt; was right at that line, and once again I wish someone had helped
Day trim about fifty pages out of it.
&lt;/p&gt;

&lt;p&gt;
All that said, and despite having more quibbles with this book than the
previous one, this continues to be great fun. It&#39;s satisfying
wish-fulfillment about fixing long-standing problems and having the power
to not have to put up with abusive nonsense and ridiculous bullshit, and I
am so here for that. I hope Niki realizes she&#39;s eventually going to need
more refined skills than a heart-to-heart over wine, but she&#39;s learning on
the job and I&#39;m happily along for the ride. She&#39;s also capable of
recognizing skill in other people, and that goes a long way.
&lt;/p&gt;

&lt;p&gt;
Recommended if you liked the first one and are in the mood for another
fantasy of &quot;no, we&#39;re not going to leave it that way, we&#39;re going to fix
that right now.&quot;
&lt;/p&gt;

&lt;p&gt;
Followed by &lt;cite&gt;Ties that Bond in Gretna Green&lt;/cite&gt;.
&lt;/p&gt;

&lt;p&gt;Rating: 7 out of 10&lt;/p&gt;</content>
	<author>
	  <name>Russ Allbery</name>
	   <uri>https://www.eyrie.org/~eagle/</uri> 
	</author>
	<source>
	  <title type="html">Eagle&#39;s Path</title>
	  <subtitle type="html">&quot;Passion and dispassion.  Choose two.&quot; -- Larry Wall</subtitle>
	  <link rel="self" href="https://www.eyrie.org/~eagle/journal/index.rss"/>
	  <id>https://www.eyrie.org/~eagle/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">My CPU died</title>
	<link href="https://www.earth.li/~noodles/blog/2026/07/my-cpu-died.html"/>
	<id>https://www.earth.li/~noodles/blog/2026/07/my-cpu-died.html</id>
	<updated>2026-07-31T00:28:00+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;I built my current house server &lt;a href=&quot;https://www.earth.li/~noodles/blog/2019/07/upgrading-the-house-server.html&quot;&gt;back in 2019&lt;/a&gt;. It had an upgrade from the original Ryzen 2700 to a 5700G in late 2021, but otherwise is still running with the original setup. Back in November it developed some erratic behaviour (initially manifesting as problems with the TPM, which is ironic as I’ve spent a bunch of time at my day job trying to improve TPM reliability), culminating in unreliable reboots. I had a limited amount of ability to swap parts out, but ultimately decided it was a motherboard issue (thinking perhaps &lt;a href=&quot;https://www.reddit.com/r/Amd/comments/byi8py/that_board_has_bad_vrms/&quot;&gt;VRM problems&lt;/a&gt;), found a replacement &lt;a href=&quot;https://pcbelfast.co.uk/&quot;&gt;locally&lt;/a&gt;, and everything seemed fine.&lt;/p&gt;

&lt;p&gt;Until May.&lt;/p&gt;

&lt;p&gt;At that point I rebooted the machine for a Debian point release, and it failed to come back. Fans would spin, but there was no sign of actual life. I ended up pressing a temporary machine into service (that could at least run the Home Assistant container, and a few other critical bits) while I tried to work out what was wrong. I’d kept the previous motherboard, and still had the Ryzen 2700, so I did a bunch of swaps (and obtained a motherboard buzzer to try and get some indication about whether there were useful beep codes being emitted), and ultimately came to the conclusion that the CPU had died.&lt;/p&gt;

&lt;p&gt;I’m not quite clear what happened here. I played it safe and replaced the PSU at the same time, in case that was the original cause back in November and ultimately damaged the CPU, but both old + new motherboards worked just fine with the 2700.&lt;/p&gt;

&lt;p&gt;That left a decision about what to do. This &lt;a href=&quot;https://www.earth.li/~noodles/blog/2013/04/building-a-new-house-server.html&quot;&gt;previous server&lt;/a&gt; was from 2013, so this machine has now lasted longer than that and I could justifiably upgrade. However when I went to look at what the equivalent modern machine would be it’s only a couple of generations later (Zen 5 vs Zen 3), and 64GB RAM alone would have set me back ~ £1k. For not a lot of gain. So I ended up buying a replacement Ryzen 5700G, hopefully allowing me to put off thinking about an upgrade until Zen 6 is out, and RAM prices are saner (though I understand that might take a &lt;a href=&quot;https://www.techspot.com/news/112934-ram-prices-expected-rise-another-40-50-q3.html&quot;&gt;couple of years&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;It’s not the first time I’ve had a faulty PSU be the cause of a dead machine, but it was a pretty frustrating experience.&lt;/p&gt;</content>
	<author>
	  <name>Jonathan McDowell</name>
	   <uri>https://www.earth.li/~noodles/blog/</uri> 
	</author>
	<source>
	  <title type="html">Noodles&#39; Emptiness</title>
	  <subtitle type="html">Dude! Sweet!</subtitle>
	  <link rel="self" href="https://www.earth.li/~noodles/blog/feed.xml"/>
	  <id>https://www.earth.li/~noodles/blog/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">not ninpo</title>
	<link href="https://xana.scru.org/posts/mintings/mergetooling.html"/>
	<id>https://xana.scru.org/posts/mintings/mergetooling.html</id>
	<updated>2026-07-30T12:12:12+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;div class=&quot;inlinecontent&quot;&gt;
&lt;p&gt;The UX of &lt;code&gt;jj&lt;/code&gt;&#39;s builtin merge editor finally became
too much for me. So, I looked at the list of merge
tool options, saw &lt;code&gt;vimdiff&lt;/code&gt;, and thought, “Oh, cool,
I know how to use vimdiff.” So, I launched
&lt;code&gt;jj config edit --user&lt;/code&gt;, added a &lt;code&gt;ui&lt;/code&gt; section, and
set &lt;code&gt;merge-editor&lt;/code&gt; to &lt;code&gt;vimdiff&lt;/code&gt;. With the new
config, I ran &lt;code&gt;jj resolve&lt;/code&gt; again. It was at that
point that I realized that I do not, in fact, know
how to use &lt;code&gt;vimdiff&lt;/code&gt;: I only know how to use
&lt;code&gt;vimdiff&lt;/code&gt; with two buffers. What appeared in my
terminal was a 4-pane monstrosity. Why are there
four panes? I&#39;m trying to resolve conflicts
between only two changes on only one file. For a
moment, I nearly go down a rabbit hole, because
&lt;a href=&quot;https://github.com/jj-vcs/jj/wiki/Vim,-Neovim#using-vim-as-a-diff-tool&quot;&gt;this&lt;/a&gt;
says that by default, &lt;code&gt;vimdiff&lt;/code&gt; is “barely useable”
[sic]. Should I be installing some addon or a
Python script? Apparently there are tradeoffs.
I just want to resolve these conflicts without
doing line-by-line approvals for how ever many
hours that would take.&lt;/p&gt;
&lt;p&gt;Accordingly, I ran away in terror, installed &lt;code&gt;meld&lt;/code&gt;,
set &lt;code&gt;merge-editor&lt;/code&gt; to meld, and went clicky-clicky
in the GUI. I&#39;m not happy using a GUI, but at least
it didn&#39;t have a mysterious extra buffer to confuse
and taunt me.&lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;info&quot;&gt;
    Posted on 2026-07-30
    
&lt;/div&gt;
&lt;div class=&quot;info&quot;&gt;
    
    Tags: &lt;a href=&quot;https://xana.scru.org/tags/mintings%20jujutsu.html&quot; rel=&quot;tag&quot; title=&quot;All pages tagged &#39;mintings jujutsu&#39;.&quot;&gt;mintings jujutsu&lt;/a&gt;
    
&lt;/div&gt;</content>
	<author>
	  <name>C</name>
	   <uri>https://xana.scru.org</uri> 
	</author>
	<source>
	  <title type="html">Yammering</title>
	  
	  <link rel="self" href="https://xana.scru.org/rivercrabbed-debian.atom"/>
	  <id>https://xana.scru.org/rivercrabbed-debian.atom</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en-us">Review: In the House of Aryaman, a Lonely Signal Burns</title>
	<link href="https://www.eyrie.org/~eagle/reviews/books/0-9863735-1-6.html"/>
	<id>https://www.eyrie.org/~eagle/reviews/books/0-9863735-1-6.html</id>
	<updated>2026-07-30T03:25:00+00:00</updated>
	<summary type="html" xml:lang="en-us"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;Review: &lt;cite&gt;In the House of Aryaman, a Lonely Signal Burns&lt;/cite&gt;, by Elizabeth Bear&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;&lt;tr&gt;
    &lt;td&gt;Series:&lt;/td&gt;
    &lt;td&gt;Sub-Inspector Ferron Mysteries #1&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Publisher:&lt;/td&gt;
    &lt;td&gt;Sobbing Squonk Press&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Copyright:&lt;/td&gt;
    &lt;td&gt;2012&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Printing:&lt;/td&gt;
    &lt;td&gt;2018&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;ISBN:&lt;/td&gt;
    &lt;td&gt;0-9863735-1-6&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Format:&lt;/td&gt;
    &lt;td&gt;Kindle&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Pages:&lt;/td&gt;
    &lt;td&gt;73&lt;/td&gt;
  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;
&lt;cite&gt;In the House of Aryaman, a Lonely Signal Burns&lt;/cite&gt; is a science fiction
police procedural set in relatively near-future India. This novella was
originally published in &lt;cite&gt;Asimov&#39;s SF&lt;/cite&gt; and collected in several
anthologies as well as Bear&#39;s &lt;cite&gt;Shuggoths in Bloom&lt;/cite&gt; collection, which
I have on my shelf but have not yet read. I probably should have checked
that before I got another copy. It is the first story of a series in the
sense that there is an Audible-only sequel available.
&lt;/p&gt;

&lt;p&gt;
Like many police procedurals, this one opens with a crime scene.
Sub-Inspector Ferron and her partner are inspecting a tube of human meat
in the middle of the rug of a luxurious apartment in Bengaluru. The tube
is apparently the remains of one Dexter Coffin, an American with a high
tech workspace who was apparently mangled beyond recognition in his locked
apartment near a table set for two.
&lt;/p&gt;

&lt;p&gt;
Dexter&#39;s cat is a witness. In this future world of cats enhanced with
limited language skills, this would have been very useful, but the cat&#39;s
memory was apparently wiped. Ferron will have to get to the bottom of the
mystery some other way. Also, she apparently now has a new cat.
&lt;/p&gt;

&lt;p&gt;
Meanwhile, Ferron is worrying about her partner&#39;s mental health, her
partner is worrying about her use of stimulants to stay on duty for this
murder investigation, and Ferron&#39;s mother is harassing her for money to
pay the bills of her virtual reality addiction. Her job is a good
distraction from other problems she&#39;d rather not deal with.
&lt;/p&gt;

&lt;p&gt;
I am trying to come up with something insightful to say about this story,
and I&#39;m not having much success. It&#39;s a police procedural with a bit of a
science fiction twist. The characters are fine but not, at least for me,
particularly engaging. There is some deft world-building, but nothing that
grabbed my attention or made me desperate to read more stories in this
world.
&lt;/p&gt;

&lt;p&gt;
Perhaps the most interesting part of the background, and the reason why I
picked up this novella, is that this is the universe that eventually
becomes the setting of the &lt;a href=&quot;https://www.eyrie.org/~eagle/reviews/books/1-5344-0300-0.html&quot;&gt;White Space series&lt;/a&gt;.
There is an early version of right-minding handled entirely through
medicine without the later invention of the fox implant, and there are
some signs that humanity is slowly digging itself out of the hole of
climate change and antisocial behavior that it had dug. I found this
mildly interesting, but it doesn&#39;t add much to the later series and is
very skippable.
&lt;/p&gt;

&lt;p&gt;
The source of the title is a bright light originating in the Andromeda
galaxy, which is contained in Uttara Bhādrapadā in Vedic astrology. Ferron
says this is under the influence of the god Aryaman. This is unrelated to
the plot; it&#39;s just a background event that prompts some introspective
musing from Ferron at the end of the story. It&#39;s a nice moment, but I
would have been more interested in the full story of first contact between
Earth and the Synarche.
&lt;/p&gt;

&lt;p&gt;
This was a mildly pleasant way to spend a few hours and I&#39;m already
forgetting all of the details. It&#39;s a competent story, but not one I feel
a need to recommend to others.
&lt;/p&gt;

&lt;p&gt;
Followed by &lt;cite&gt;A Blessing of Unicorns&lt;/cite&gt;, which appears to be an Audible
audiobook exclusive.
&lt;/p&gt;

&lt;p&gt;Rating: 6 out of 10&lt;/p&gt;</content>
	<author>
	  <name>Russ Allbery</name>
	   <uri>https://www.eyrie.org/~eagle/</uri> 
	</author>
	<source>
	  <title type="html">Eagle&#39;s Path</title>
	  <subtitle type="html">&quot;Passion and dispassion.  Choose two.&quot; -- Larry Wall</subtitle>
	  <link rel="self" href="https://www.eyrie.org/~eagle/journal/index.rss"/>
	  <id>https://www.eyrie.org/~eagle/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">my harddrive is probably not full</title>
	<link href="http://joeyh.name/blog/entry/my_harddrive_is_probably_not_full/"/>
	<id>http://joeyh.name/blog/entry/my_harddrive_is_probably_not_full/</id>
	<updated>2026-07-29T19:35:30+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;I enjoyed reading this post by Marginalia
&lt;a href=&quot;https://www.marginalia.nu/log/a_139_hdd/&quot;&gt;&quot;Your harddrive is probably full&quot;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
You can construct an entropic argument that there are simply more ways for
a harddrive to be full than ways in which it can be empty.
&lt;/blockquote&gt;


&lt;p&gt;Of course it made me check how full my laptop drive is, and indeed it was more
than 75% full, as predicted.&lt;/p&gt;

&lt;p&gt;But, I almost never feel that my hard drive is full. I can very easily free
up almost any amount of disk space at any time, without any thought. While
writing this blog post, I ran a single command and now my harddrive is
50% empty.&lt;/p&gt;

&lt;blockquote&gt;
The other part of the equation is that a full disk isn’t a problem until
it’s so full you can’t put more stuff on it, and at the point it’s so
irredeemably cluttered that when you do clean it up, you only have the
patience to clean up enough to bide your time, judging the fate of every
file on the harddrive is simply too much work.
&lt;/blockquote&gt;


&lt;p&gt;Why doesn&#39;t this apply to me? Because I have put in the up-front thought
to organize things, so that I never have to do that anymore.&lt;/p&gt;

&lt;p&gt;I have 3 categories of files that I can remove at any time I need more
space, without any thought:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Any files that are stored in git-annex. This is one of git-annex&#39;s
superpowers; you can &lt;code&gt;git-annex drop&lt;/code&gt; any file and stop it using disk
space, but the file is still there (as a broken symlink) so you don&#39;t
risk losing or forgetting about it.&lt;/li&gt;
&lt;li&gt;Caches.&lt;/li&gt;
&lt;li&gt;Files in &lt;code&gt;~/tmp/&lt;/code&gt;, which is reserved for any files I only want to have a
passing acquaintance with. If I&#39;m not comfortable with something being
deleted at any time, I don&#39;t put it there.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;Not only do I only have these 3 categories, these are the &lt;em&gt;only&lt;/em&gt; 3
categories for everything except OS files and files I have decided I never
want to remove (eg dotfiles and other files stored in git repos).&lt;/p&gt;

&lt;p&gt;Computer scientists invented caches (and of course cache invalidation is no
problem lol) so I only needed to learn about that one. Unix gave me
&lt;code&gt;/tmp/&lt;/code&gt; as an example that I long ago used as the basis for the rules for my
&lt;code&gt;~/tmp/&lt;/code&gt;. I hope that git-annex might also serve as an example
that moving files between drives is not the best way to manage disk space
use.&lt;/p&gt;</content>
	<author>
	  <name>Joey Hess</name>
	   <uri>http://joeyh.name/blog/</uri> 
	</author>
	<source>
	  <title type="html">see shy jo</title>
	  <subtitle type="html">joey</subtitle>
	  <link rel="self" href="http://joeyh.name/blog/index.rss"/>
	  <id>http://joeyh.name/blog/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en-us">Review: Midlife in Gretna Green</title>
	<link href="https://www.eyrie.org/~eagle/reviews/books/9798837010774.html"/>
	<id>https://www.eyrie.org/~eagle/reviews/books/9798837010774.html</id>
	<updated>2026-07-29T02:19:00+00:00</updated>
	<summary type="html" xml:lang="en-us"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;Review: &lt;cite&gt;Midlife in Gretna Green&lt;/cite&gt;, by Linzi Day&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;&lt;tr&gt;
    &lt;td&gt;Series:&lt;/td&gt;
    &lt;td&gt;Midlife Recorder #1&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Publisher:&lt;/td&gt;
    &lt;td&gt;Linzi Day&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Copyright:&lt;/td&gt;
    &lt;td&gt;July 2022&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;ISBN:&lt;/td&gt;
    &lt;td&gt;9798837010774&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Format:&lt;/td&gt;
    &lt;td&gt;Kindle&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Pages:&lt;/td&gt;
    &lt;td&gt;464&lt;/td&gt;
  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;
&lt;cite&gt;Midlife in Gretna Green&lt;/cite&gt; is a self-published fantasy novel. It&#39;s
urban fantasy in the sense that it&#39;s set in our world but with magic that
most people don&#39;t know about, but the primary setting is a parish in rural
Scotland and therefore the genre is not urban in that sense. It was Linzi
Day&#39;s published first novel.
&lt;/p&gt;

&lt;p&gt;
As the story opens, Niki McKnight is a widow in Manchester, England with a
job in the Register Office she likes, a boss she hates, and a Bichon Frise
dog she adores. In the year since her husband Nick died, she&#39;s put her
life on hold and made as few decisions as possible, despite some concerned
pushing from her best friend Aysha. The death of her grandmother is not
entirely unexpected, but her inheritance is about to upend her life.
&lt;/p&gt;

&lt;p&gt;
Niki assumes that her grandmother has a modest cottage and a small estate,
and therefore being the named heir will mostly involve cleaning up the
details of a modest life. She is caught by surprise by a requirement in
the will that she live in Gretna Green for a year and a day in order to
inherit. Her initial reaction is to treat this as an absurd impossibility
given her life and job in Manchester, but she slowly realizes something
strange is going on. Her grandmother&#39;s lawyer is lying to her, he refuses
to tell her the value of the estate and seems to think it&#39;s more valuable
than she expected, and her grandmother&#39;s tiny cottage does not seem to be
following the seasons of the rest of the world. There is something magical
at work.
&lt;/p&gt;

&lt;p&gt;
I will not spoil the rest of the reveal. I will say that this is a magical
house book because, if you are anything like me, that is why you will want
to read this series. There are not enough magical house books, and this is
one of the better kind that allow the house to be a full speaking
character.
&lt;/p&gt;

&lt;p&gt;
&lt;cite&gt;Midlife in Gretna Green&lt;/cite&gt; is an unapologetic fantasy of personal
agency. Niki starts the novel with a miserable manager, a messy pile of
unread mail she doesn&#39;t want to deal with, and a lot of personal emotional
baggage. She gets handed a position that requires and rewards standing up
for herself and being decisive. It comes with a pile of unresolved but not
horribly complex problems that were waiting for someone who would listen,
make sensible decisions, and treat other people with respect. Oh, and
there are a few assholes in the way, but they seriously underestimate the
power she has to put a stop to their bullshit.
&lt;/p&gt;

&lt;p&gt;
This is the sort of book that traditional publishers tended not to buy
(although Day apparently did get an offer for this one and turned it
down), and I&#39;m not sure why. Editors thought protagonists should have to
work harder for their payoff? Some lingering Calvinist dourness in English
language publishing mistrusted triumphant books? Obvious wish fulfillment
was considered embarrassing or low-class and thus didn&#39;t warrant
publication? This didn&#39;t apply to the endless &lt;i&gt;bildungsromans&lt;/i&gt;
about magically talented boys, so some level of sexism was probably in
play. Maybe this is finally changing? It reminds me of the bias against
romance novels and their guaranteed happily ever after, and in the case of
romance there was too much money for publishers to leave it on the table.
&lt;/p&gt;

&lt;p&gt;
In any case, the growth of self-publishing has created an alternative
market that let these books reach an audience and I for one am here for
it. A lot of wish-fulfillment books, and a lot of self-published books,
are not very good, but the ones that have a spark of originality and
character can be a delight worth tolerating the somewhat rocky editing and
pacing problems that a full editorial staff might have cleaned up.
&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;
    I loved reading books about kickass women who took no crap and fixed
    their lives up exactly how they wanted them to be. But how did they
    get to be that way? They always started out awesome in the books.
    Seriously, did they kick ass at sixteen? Or did their superpower
    kickassery not kick in until they were thirty? Forty? If so, then I
    was screwed. Would I need to wait till I was fifty or until a genie
    arrived offering wishes? I already felt as if Iâ€™d spent my whole life
    waiting for something wild and wonderful to happen.
&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;
Niki is a Specific Type to a somewhat hilarious degree, and I&#39;m not sure
if Day is playing into that intentionally or if she&#39;s projecting herself
into the book. The amount of self-insertion is not zero: Day also lives in
Gretna Green, owns a Bichon Frise, and worked as an assistant registrar
and civil celebrant. Niki also drinks wine regularly, has a psychic gift,
occasionally reads tarot cards, is an accommodating pushover at work who
struggles to say no to her abusive boss, has impostor syndrome problems,
and swears by a fictional self-help book about grief that provides the
quotes at the starts of chapters. There is a cat, because of course
there&#39;s a cat.
&lt;/p&gt;

&lt;p&gt;
(The fictional self-help book is a spot-on parody played entirely straight
in the story. I think Day is having some fun with the reader? I can&#39;t
tell!)
&lt;/p&gt;

&lt;p&gt;
This is what I mean by unapologetic. It&#39;s easy to read Niki as a
stereotype, but she&#39;s a stereotype a lot of real people can identify with
and there&#39;s something highly satisfying in watching her find her footing.
I &lt;em&gt;like&lt;/em&gt; wish fulfillment books; it&#39;s fun to see someone&#39;s wishes
come true! Particularly in the year of 2026, there&#39;s something immensely
satisfying in seeing an ordinary, insecure person get a massive amount of
power and use it to make the world better. I don&#39;t need everything to be
hard, fraught, and laden with costs in fiction, although I wouldn&#39;t want
every book I read to be like this.
&lt;/p&gt;

&lt;p&gt;
Also, the world building is great. It&#39;s not polished; there&#39;s a bit of a
grab bag feeling to it, I&#39;m dubious the magic system has any underlying
rigorous rule set, and Niki&#39;s powers, once she has access to them, are
more of a semi-sentient genie than a skill she has to learn with hard
practice. But the magic is &lt;em&gt;fun&lt;/em&gt;. The sentient house is one of the
best characters, particularly after Niki realizes how underused it has
been, and I am a sucker for any good sentient house book. The cat is a far
more interesting character than I first thought she would be. And Niki&#39;s
new magical job is more complicated and less typical than the normal
Celtic-inspired fantasy that I thought it was going to be at first.
&lt;/p&gt;

&lt;p&gt;
My primary warning about this book is that Niki starts out beaten down and
grieving her dead husband, and it took me about five pages to decide that
her dead husband was a complete piece of shit who was not worth any of the
grief Niki puts into him. She also doesn&#39;t stand up for herself for the
first hundred pages or so, which made me want to yell at the book a few
times. Both of these problems go away farther into the book, and Niki does
eventually figure out that Nick was abusive trash, but I was relieved when
the &quot;make endless excuses for worthless men&quot; portion of the story was
finally over. You have to stick with it until Niki gets brave enough to
try being the protagonist; once that happens, it becomes great fun.
&lt;/p&gt;

&lt;p&gt;
It is fairly obvious that &lt;cite&gt;Midlife in Gretna Green&lt;/cite&gt; was
self-published, and I wish it had gotten the editing that it deserved. My
copy had a couple of obvious formatting errors, the plot veers about more
than was strictly necessary, and I think a careful editing pass could have
tightened the writing by about fifty pages or so without losing any
important detail. If that sort of thing bothers you, make sure you&#39;re in
self-published fiction mode before starting this one. But it also has that
irrepressible, bubbling-with-ideas feeling of a book where nothing has
suppressed the author&#39;s enthusiasm. It&#39;s a very grabby book; once Niki
starts embracing her new life, I could barely put it down.
&lt;/p&gt;

&lt;p&gt;
If you&#39;re in the mood for a good fantasy wish-fulfillment story that has
no romance and a whole lot of &quot;why are things run this way, no, we&#39;re
changing that,&quot; highly recommended. I had so much fun with this book, and
the series is currently making the rounds of my whole family. Don&#39;t read
this when you&#39;re looking for something challenging and literary and deep;
save it for when you desperately want to watch someone just fix something
for once, damn it.
&lt;/p&gt;

&lt;p&gt;
Followed by &lt;cite&gt;Painting the Blues in Gretna Green&lt;/cite&gt;, which I have
already read, breaking my usual rule of writing reviews before reading the
next book in a series.
&lt;/p&gt;

&lt;p&gt;Rating: 8 out of 10&lt;/p&gt;</content>
	<author>
	  <name>Russ Allbery</name>
	   <uri>https://www.eyrie.org/~eagle/</uri> 
	</author>
	<source>
	  <title type="html">Eagle&#39;s Path</title>
	  <subtitle type="html">&quot;Passion and dispassion.  Choose two.&quot; -- Larry Wall</subtitle>
	  <link rel="self" href="https://www.eyrie.org/~eagle/journal/index.rss"/>
	  <id>https://www.eyrie.org/~eagle/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">Debian COSMIC: A Fast-Track System Extension &amp;amp; Monorepo Packaging Journey</title>
	<link href="https://researchut.com/blog/debian_cosmic_fast_track/"/>
	<id>https://researchut.com/blog/debian_cosmic_fast_track/</id>
	<updated>2026-07-29T00:00:00+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;System76â€™s &lt;strong&gt;COSMIC Desktop Environment&lt;/strong&gt;â€”written from the ground up in Rustâ€”is one of the most exciting developments in the Linux desktop ecosystem. Built for modern Wayland composition, modularity, and high-performance UX, it has captured the attention of desktop enthusiasts across distributions.&lt;/p&gt;
&lt;p&gt;However, for users running &lt;strong&gt;Debian Testing&lt;/strong&gt; or &lt;strong&gt;Debian Unstable&lt;/strong&gt;, getting COSMIC onto their machines traditionally presents a steep hill to climb. The official upstream codebase consists of dozens of independent repositories (&lt;code&gt;cosmic-comp&lt;/code&gt;, &lt;code&gt;cosmic-panel&lt;/code&gt;, &lt;code&gt;cosmic-applets&lt;/code&gt;, &lt;code&gt;cosmic-settings&lt;/code&gt;, &lt;code&gt;cosmic-files&lt;/code&gt;, and more) along with hundreds of Rust crate dependencies. Packaging each component individually according to strict Debian policy involves filing dozens of ITPs, waiting through NEW queue processing, and managing endless dependency updates.&lt;/p&gt;
&lt;p&gt;For someone who simply wants to explore, test, and run COSMIC on Debian &lt;em&gt;today&lt;/em&gt;, waiting for full distribution packaging is impractical.&lt;/p&gt;
&lt;p&gt;To bridge this gap, we created &lt;strong&gt;Debian COSMIC&lt;/strong&gt; (&lt;code&gt;debian-cosmic&lt;/code&gt;)â€”a pragmatic, fast-track delivery pipeline designed to build, package, and run COSMIC Epoch on Debian Testing and Sid right now.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;the-fast-track-pivot-the-monorepo-strategy&quot;&gt;The Fast-Track Pivot: The Monorepo Strategy&lt;/h2&gt;
&lt;p&gt;Rather than fighting distribution policy or attempting to maintain fifty separate Debian source packages, we leveraged System76’s official &lt;strong&gt;&lt;code&gt;cosmic-epoch&lt;/code&gt; monorepo&lt;/strong&gt; releases (e.g. &lt;code&gt;epoch-1.4.0&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;By compiling the monorepo in an isolated, sanitized Debian Testing container/chroot, we build the entire COSMIC stackâ€”compositor, panel, settings, launcher, applets, and session helpersâ€”in a single, automated pass.&lt;/p&gt;
&lt;p&gt;This approach gives us two primary delivery outcomes:&lt;/p&gt;
&lt;h3 id=&quot;1-the-monorepo-deb-cosmic-epoch-monorepodeb&quot;&gt;1. The Monorepo &lt;code&gt;.deb&lt;/code&gt; (&lt;code&gt;cosmic-epoch-monorepo.deb&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;For users who prefer standard Debian package management:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A single, unified &lt;code&gt;.deb&lt;/code&gt; package containing the entire compiled &lt;code&gt;/usr&lt;/code&gt; hierarchy of the COSMIC desktop environment.&lt;/li&gt;
&lt;li&gt;Automatically versioned against upstream release tags (e.g. &lt;code&gt;1.4.0-1&lt;/code&gt;) and published to our APT repository and GitHub Releases.&lt;/li&gt;
&lt;li&gt;Easily installed via standard &lt;code&gt;apt install&lt;/code&gt;:
&lt;div class=&quot;highlight&quot;&gt;&lt;pre tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;sudo apt install cosmic-epoch-monorepo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2-the-system-extension-systemd-sysext-overlay&quot;&gt;2. The System Extension (&lt;code&gt;systemd-sysext&lt;/code&gt;) Overlay&lt;/h3&gt;
&lt;p&gt;For users who embrace an immutable host philosophy or don’t want external packages mutating their pristine host &lt;code&gt;/usr&lt;/code&gt; filesystem:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We package the compiled COSMIC stack into an OCI container image delivered via the GitHub Container Registry (&lt;code&gt;ghcr.io&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;systemd-sysext&lt;/code&gt;, the image is mounted at runtime as a read-only overlay on top of &lt;code&gt;/usr&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;When you log into COSMIC, the desktop environment is dynamically merged into your host. When you switch back to GNOME or KDE, a simple helper script (&lt;code&gt;cosmic-toggle&lt;/code&gt;) unmerges the overlay, leaving your host filesystem 100% clean and untouched.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;-preventing-abi-drift-the-cosmic-canary-package&quot;&gt;ğŸ›¡ï¸� Preventing ABI Drift: The &lt;code&gt;cosmic-canary&lt;/code&gt; Package&lt;/h2&gt;
&lt;p&gt;Running a &lt;code&gt;systemd-sysext&lt;/code&gt; overlay on a rolling distribution like Debian Testing or Sid introduces a subtle technical challenge: &lt;strong&gt;host library ABI drift&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Because the sysext binaries link dynamically against shared C libraries on your host (such as Mesa graphics drivers, DRM, Vulkan, or Pipewire), a routine &lt;code&gt;apt upgrade&lt;/code&gt; on your host might update &lt;code&gt;libgbm1&lt;/code&gt; or &lt;code&gt;libdrm2&lt;/code&gt; to a newer version. If the new host library introduces an ABI change, launching COSMIC from an older sysext overlay can cause black screens, broken rendering, or segfaults.&lt;/p&gt;
&lt;p&gt;To solve this without cluttering standard Debian packaging, we created an “Early Warning System”: the &lt;strong&gt;JIT Canary (&lt;code&gt;cosmic-canary&lt;/code&gt;) package&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;the-tiered-dependency-model&quot;&gt;The Tiered Dependency Model&lt;/h3&gt;
&lt;p&gt;Generated dynamically at build time using &lt;code&gt;equivs-build&lt;/code&gt; (via our &lt;code&gt;generate-cosmic-canary.sh&lt;/code&gt; tool), the &lt;code&gt;cosmic-canary&lt;/code&gt; package pins your host’s libraries into two distinct zones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ğŸ”´ &lt;strong&gt;The Strict Zone (&lt;code&gt;=&lt;/code&gt; dependency):&lt;/strong&gt; Pinned to the exact version used at build time for volatile graphics and hardware stack components (&lt;code&gt;libmesa&lt;/code&gt;, &lt;code&gt;libgbm&lt;/code&gt;, &lt;code&gt;libdrm&lt;/code&gt;, &lt;code&gt;libvulkan&lt;/code&gt;, &lt;code&gt;libdisplay-info&lt;/code&gt;, &lt;code&gt;libpixman&lt;/code&gt;, &lt;code&gt;libxkbcommon&lt;/code&gt;, &lt;code&gt;libinput&lt;/code&gt;, &lt;code&gt;libpipewire&lt;/code&gt;). If a host &lt;code&gt;apt upgrade&lt;/code&gt; attempts to bump Mesa or DRM versions, &lt;code&gt;cosmic-canary&lt;/code&gt; blocks the upgrade, alerting you that a sysext rebuild is required before upgrading your host drivers.&lt;/li&gt;
&lt;li&gt;ğŸŸ¢ &lt;strong&gt;The Relaxed Zone (&lt;code&gt;&amp;gt;=&lt;/code&gt; dependency):&lt;/strong&gt; Pinned with minimum version bounds for stable system layers and protocol libraries (&lt;code&gt;libc6&lt;/code&gt;, &lt;code&gt;libgcc&lt;/code&gt;, &lt;code&gt;libstdc++&lt;/code&gt;, &lt;code&gt;libwayland&lt;/code&gt;, &lt;code&gt;libdbus&lt;/code&gt;, &lt;code&gt;libpam&lt;/code&gt;, &lt;code&gt;libglib&lt;/code&gt;, &lt;code&gt;libssl&lt;/code&gt;, &lt;code&gt;libx11&lt;/code&gt;). Security updates and minor patches to these libraries are allowed through without triggering false alarms.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;quickstart-how-to-try-debian-cosmic&quot;&gt;Quickstart: How to Try Debian COSMIC&lt;/h2&gt;
&lt;p&gt;Whether you want the unified &lt;code&gt;.deb&lt;/code&gt; or the &lt;code&gt;sysext&lt;/code&gt; overlay, setting up Debian COSMIC takes only a few minutes.&lt;/p&gt;
&lt;h3 id=&quot;method-a-apt-repository-deb&quot;&gt;Method A: APT Repository (.deb)&lt;/h3&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #75715e;&quot;&gt;# 1. Add the GPG key&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;sudo mkdir -p /etc/apt/keyrings
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;curl -fsSL https://rickysarraf.github.io/debian-cosmic/debian-cosmic.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/debian-cosmic.gpg
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #75715e;&quot;&gt;# 2. Add the repository&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;echo &lt;span style=&quot;color: #e6db74;&quot;&gt;&quot;deb [signed-by=/etc/apt/keyrings/debian-cosmic.gpg] https://rickysarraf.github.io/debian-cosmic/ unstable main&quot;&lt;/span&gt; | sudo tee /etc/apt/sources.list.d/debian-cosmic.list
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #75715e;&quot;&gt;# 3. Install COSMIC Monorepo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;sudo apt install cosmic-epoch-monorepo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&quot;method-b-system-extension-sysext&quot;&gt;Method B: System Extension (&lt;code&gt;sysext&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;If you have &lt;code&gt;systemd&lt;/code&gt; &amp;gt;= 248 and Docker installed:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Clone the &lt;code&gt;debian-cosmic&lt;/code&gt; repository:
&lt;div class=&quot;highlight&quot;&gt;&lt;pre tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;git clone https://github.com/rickysarraf/debian-cosmic.git
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;cd debian-cosmic
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Pull and stage the latest sysext overlay:
&lt;div class=&quot;highlight&quot;&gt;&lt;pre tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;./bin/cosmic-update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Toggle the COSMIC environment on/off whenever you want:
&lt;div class=&quot;highlight&quot;&gt;&lt;pre tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span style=&quot;display: flex;&quot;&gt;&lt;span&gt;./bin/cosmic-toggle
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;debian-cosmic&lt;/code&gt; is not intended to replace official, long-term Debian packaging efforts. Instead, it is a &lt;strong&gt;fast-track, hacker-friendly playground&lt;/strong&gt; for early adopters, developers, and testers who want to experience System76â€™s COSMIC Epoch on Debian Testing and Sid right now.&lt;/p&gt;
&lt;p&gt;By combining monorepo container builds, &lt;code&gt;systemd-sysext&lt;/code&gt; overlays, and &lt;code&gt;cosmic-canary&lt;/code&gt; ABI safety checks, we have achieved a fast, clean, and reliable way to run cutting-edge desktop software on Debian without sacrificing system stability.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Check out the &lt;a href=&quot;https://github.com/rickysarraf/debian-cosmic&quot;&gt;debian-cosmic repository on GitHub&lt;/a&gt; to contribute, report issues, or try out the latest build!&lt;/em&gt;&lt;/p&gt;</content>
	<author>
	  <name>Ritesh Raj Sarraf</name>
	   <uri>https://researchut.com/categories/debian-blog/</uri> 
	</author>
	<source>
	  <title type="html">Debian-Blog on RESEARCHUT</title>
	  <subtitle type="html">Recent content in Debian-Blog on RESEARCHUT</subtitle>
	  <link rel="self" href="https://researchut.com/categories/debian-blog/index.xml"/>
	  <id>https://researchut.com/categories/debian-blog/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">RcppDate 0.0.7: New Upstream</title>
	<link href="http://dirk.eddelbuettel.com/blog/2026/07/28#rcppdate_0.0.7"/>
	<id>http://dirk.eddelbuettel.com/blog/2026/07/28#rcppdate_0.0.7</id>
	<updated>2026-07-28T13:32:00+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;&lt;a href=&quot;https://github.com/eddelbuettel/rcppdate&quot;&gt;RcppDate&lt;/a&gt; ships
the featureful &lt;a href=&quot;https://github.com/HowardHinnant/date&quot;&gt;date&lt;/a&gt;
library written by &lt;a href=&quot;https://github.com/HowardHinnant&quot;&gt;Howard
Hinnant&lt;/a&gt; to enable use from R packages. This header-only modern C++
library has been in pretty wide-spread use for a while now, and adds to
C++11, C++14 and C++17 what is (with minor modifications) the ‘date’
library in C++20. The &lt;a href=&quot;https://github.com/eddelbuettel/rcppdate&quot;&gt;RcppDate&lt;/a&gt; package
adds no extra R or C++ code and can therefore be a zero-cost dependency
for any other project; yet a number of other projects decided to
re-vendor it resulting in less-efficient duplication. Oh well. &lt;em&gt;C’est
la vie.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This release syncs with upstream release 3.0.5 made yesterday. We
also made two routine updates to the continuous integration since the
last release a good year ago. The &lt;a href=&quot;https://www.debian.org&quot;&gt;Debian&lt;/a&gt; and &lt;a href=&quot;https://eddelbuettel.github.io/r2u/&quot;&gt;r2u&lt;/a&gt; packages for this new
release have already been uploaded too.&lt;/p&gt;
&lt;blockquote&gt;
&lt;h4 id=&quot;changes-in-version-0.0.7-2026-07-27&quot;&gt;Changes in version 0.0.7
(2026-07-27)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Updated to upstream version 3.0.5&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Regular updates to continuous integration setup&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Courtesy of my &lt;a href=&quot;https://dirk.eddelbuettel.com/cranberries/&quot;&gt;CRANberries&lt;/a&gt;, there
is also a diffstat report for the &lt;a href=&quot;https://dirk.eddelbuettel.com/cranberries/2026/07/28#RcppDate_0.0.7&quot;&gt;most
recent release&lt;/a&gt;. More information is available at the &lt;a href=&quot;https://github.com/eddelbuettel/rcppdate&quot;&gt;repository&lt;/a&gt; or the &lt;a href=&quot;https://dirk.eddelbuettel.com/code/rcpp.date.html&quot;&gt;package
page&lt;/a&gt;.&lt;/p&gt;
&lt;p style=&quot;font-size: 80%; font-style: italic;&quot;&gt;
This post by &lt;a href=&quot;https://dirk.eddelbuettel.com&quot;&gt;Dirk
Eddelbuettel&lt;/a&gt; originated on his &lt;a href=&quot;https://dirk.eddelbuettel.com/blog/&quot;&gt;Thinking inside the box&lt;/a&gt;
blog. If you like this or other open-source work I do, you can &lt;a href=&quot;https://github.com/sponsors/eddelbuettel&quot;&gt;sponsor me at
GitHub&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content>
	<author>
	  <name>Dirk Eddelbuettel</name>
	   <uri>http://dirk.eddelbuettel.com/blog</uri> 
	</author>
	<source>
	  <title type="html">Thinking inside the box</title>
	  <subtitle type="html">Thinking inside the box</subtitle>
	  <link rel="self" href="http://dirk.eddelbuettel.com/blog/index.rss"/>
	  <id>http://dirk.eddelbuettel.com/blog</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">#057: Conditionally Quieten Compilers</title>
	<link href="http://dirk.eddelbuettel.com/blog/2026/07/27#057_conditionally_quieten_compilers"/>
	<id>http://dirk.eddelbuettel.com/blog/2026/07/27#057_conditionally_quieten_compilers</id>
	<updated>2026-07-27T22:40:00+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;Welcome to post 57 in the &lt;a href=&quot;https://dirk.eddelbuettel.com/blog/code/r4&quot;&gt;&lt;span class=&quot;math inline&quot;&gt;&lt;em&gt;R&lt;/em&gt;&lt;sup&gt;4&lt;/sup&gt;&lt;/span&gt;&lt;/a&gt; series.&lt;/p&gt;
&lt;p&gt;R packages with compiled codes can use the file
&lt;code&gt;src/Makevars&lt;/code&gt; to set compilation flags. We often rely on
this to set libraries, include directories or compilation options. When
using external libraries, be it header-only or via headers and linking,
we are often experiencing ‘compilation noise’ when these libraries
tickle warnings under generally-recommended flags such as
&lt;code&gt;-Wall -pedantic&lt;/code&gt;. Two packages I maintain are clearly repeat
offenders here: Eigen, and BH. Both cam generate pages and pages of
compiler output. This is generally not great as it may hide genuine
warnings from our own code.&lt;/p&gt;
&lt;p&gt;What makes matters worse is that some of the available and specific
options for the compilers are treated by &lt;code&gt;R CMD check&lt;/code&gt; as
‘non-portable’ leading to a nag on package checking. Examples are
&lt;code&gt;-Wno-parentheses&lt;/code&gt;, &lt;code&gt;-Wno-maybe-uninitialize&lt;/code&gt; or
&lt;code&gt;-Wno-nunnull&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I have long resorted to adding these to my per-user
&lt;code&gt;~/.R/Makevars&lt;/code&gt;. When added there, compilation is quieter,
but &lt;code&gt;R CMD check&lt;/code&gt; still nags &lt;em&gt;here&lt;/em&gt; where the option
is set but not at &lt;a href=&quot;https://cran.r-project.org&quot;&gt;CRAN&lt;/a&gt; or
r-universe. A situation that is not ideal but what somewhat
‘stable’.&lt;/p&gt;
&lt;p&gt;More recently, I realized there was an available check we can use to
&lt;em&gt;conditionally&lt;/em&gt; add extra compilation flags but leave them off by
default. That makes local development quiet allowing us to focus on the
quality of our additions here without noise from third-party libraries
we may use. At the same time we do not need to do anything else to let
&lt;a href=&quot;https://cran.r-project.org&quot;&gt;CRAN&lt;/a&gt; do its work.&lt;/p&gt;
&lt;p&gt;The check we now use is whether there is a &lt;code&gt;.git/&lt;/code&gt;
directory present. If so, we are indeed building from local sources and
can add extra flags. If not, we are likely building from a tar.gz source
archive—which is the case for CRAN—and hence do not set these.&lt;/p&gt;
&lt;p&gt;An example use is this recent additional to package &lt;a href=&quot;https://github.com/qlcal/qlcal-r&quot;&gt;qlcal&lt;/a&gt; where this bit of R
code is invoked from a minimal shell script &lt;code&gt;configure&lt;/code&gt; and
replaces the stub &lt;code&gt;@XTRAFLAGS@&lt;/code&gt; in
&lt;code&gt;src/Makevars.in&lt;/code&gt; (or &lt;code&gt;src/Makevars.win.in&lt;/code&gt;)&lt;/p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb1&quot;&gt;&lt;pre class=&quot;sourceCode r&quot;&gt;&lt;code class=&quot;sourceCode r&quot;&gt;&lt;span id=&quot;cb1-1&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb1-1&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;cf&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;fu&quot;&gt;dir.exists&lt;/span&gt;(&lt;span class=&quot;st&quot;&gt;&quot;.git&quot;&lt;/span&gt;)) {&lt;/span&gt;
&lt;span id=&quot;cb1-2&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb1-2&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;    &lt;span class=&quot;do&quot;&gt;## development from a .git directory can use these flags&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb1-3&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb1-3&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;    xtraflags &lt;span class=&quot;ot&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;st&quot;&gt;&quot;-Wno-nonnull -Wno-deprecated-declarations&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb1-4&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb1-4&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;} &lt;span class=&quot;cf&quot;&gt;else&lt;/span&gt; {&lt;/span&gt;
&lt;span id=&quot;cb1-5&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb1-5&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;    &lt;span class=&quot;do&quot;&gt;## else build from tarball so stick with existing flags&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb1-6&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb1-6&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;    xtraflags &lt;span class=&quot;ot&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;st&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb1-7&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb1-7&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;}&lt;/span&gt;
&lt;span id=&quot;cb1-8&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb1-8&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;win &lt;span class=&quot;ot&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;cf&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;fu&quot;&gt;Sys.info&lt;/span&gt;()[[&lt;span class=&quot;st&quot;&gt;&quot;sysname&quot;&lt;/span&gt;]] &lt;span class=&quot;sc&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;st&quot;&gt;&quot;Windows&quot;&lt;/span&gt;) &lt;span class=&quot;st&quot;&gt;&quot;.win&quot;&lt;/span&gt; &lt;span class=&quot;cf&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;st&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb1-9&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb1-9&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;infile &lt;span class=&quot;ot&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;file.path&lt;/span&gt;(&lt;span class=&quot;st&quot;&gt;&quot;src&quot;&lt;/span&gt;, &lt;span class=&quot;fu&quot;&gt;paste0&lt;/span&gt;(&lt;span class=&quot;st&quot;&gt;&quot;Makevars&quot;&lt;/span&gt;, win, &lt;span class=&quot;st&quot;&gt;&quot;.in&quot;&lt;/span&gt;))&lt;/span&gt;
&lt;span id=&quot;cb1-10&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb1-10&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;outfile &lt;span class=&quot;ot&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;file.path&lt;/span&gt;(&lt;span class=&quot;st&quot;&gt;&quot;src&quot;&lt;/span&gt;, &lt;span class=&quot;fu&quot;&gt;paste0&lt;/span&gt;(&lt;span class=&quot;st&quot;&gt;&quot;Makevars&quot;&lt;/span&gt;, win))&lt;/span&gt;
&lt;span id=&quot;cb1-11&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb1-11&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;lines &lt;span class=&quot;ot&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;readLines&lt;/span&gt;(infile)&lt;/span&gt;
&lt;span id=&quot;cb1-12&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb1-12&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;lines &lt;span class=&quot;ot&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;gsub&lt;/span&gt;(&lt;span class=&quot;st&quot;&gt;&quot;@XTRAFLAGS@&quot;&lt;/span&gt;, xtraflags, lines)&lt;/span&gt;
&lt;span id=&quot;cb1-13&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb1-13&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;fu&quot;&gt;writeLines&lt;/span&gt;(lines, outfile)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;With this change, local compilation is quiet, yet &lt;a href=&quot;https://cran.r-project.org&quot;&gt;CRAN&lt;/a&gt; has nothing to nag about (as
seen at the &lt;a href=&quot;https://cran.r-project.org/web/checks/check_results_qlcal.html&quot;&gt;qlcal
results page&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Similarly, one can also check from an actual &lt;code&gt;configure&lt;/code&gt;
file written in autoconf. Here is a similar example from RcppEigen
(showing some relevants parts of the whole file)&lt;/p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb2&quot;&gt;&lt;pre class=&quot;sourceCode sh&quot;&gt;&lt;code class=&quot;sourceCode bash&quot;&gt;&lt;span id=&quot;cb2-1&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb2-1&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;co&quot;&gt;# PKG_CXXFLAGS initialized earlier ...&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb2-2&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb2-2&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;/span&gt;
&lt;span id=&quot;cb2-3&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb2-3&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;co&quot;&gt;## Check if building locally&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb2-4&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb2-4&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;ex&quot;&gt;AC_MSG_CHECKING&lt;/span&gt;&lt;span class=&quot;er&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ex&quot;&gt;[whether&lt;/span&gt; .git/ exists]&lt;span class=&quot;kw&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb2-5&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb2-5&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;cf&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;bu&quot;&gt;test&lt;/span&gt; &lt;span class=&quot;at&quot;&gt;-d&lt;/span&gt; &lt;span class=&quot;st&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;va&quot;&gt;$srcdir&lt;/span&gt;&lt;span class=&quot;st&quot;&gt;/.git&quot;&lt;/span&gt;&lt;span class=&quot;kw&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;cf&quot;&gt;then&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb2-6&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb2-6&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;    &lt;span class=&quot;ex&quot;&gt;AC_MSG_RESULT&lt;/span&gt;&lt;span class=&quot;er&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ex&quot;&gt;[yes,&lt;/span&gt; adding extra flags]&lt;span class=&quot;kw&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb2-7&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb2-7&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;    &lt;span class=&quot;ex&quot;&gt;AC_SUBST&lt;/span&gt;&lt;span class=&quot;er&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ex&quot;&gt;[PKG_CXXFLAGS],[&lt;/span&gt;&lt;span class=&quot;st&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;va&quot;&gt;${PKG_CXXFLAGS}&lt;/span&gt;&lt;span class=&quot;st&quot;&gt; -Wno-ignored-attributes -Wno-maybe-uninitialized&quot;&lt;/span&gt;&lt;span class=&quot;ex&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;kw&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb2-8&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb2-8&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;cf&quot;&gt;else&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb2-9&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb2-9&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;    &lt;span class=&quot;ex&quot;&gt;AC_MSG_RESULT&lt;/span&gt;&lt;span class=&quot;er&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ex&quot;&gt;[no,&lt;/span&gt; consider adding &lt;span class=&quot;st&quot;&gt;&#39;-Wno-ignored-attributes -Wno-maybe-uninitialized&#39;&lt;/span&gt; to ~/.R/Makevars]&lt;span class=&quot;kw&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb2-10&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb2-10&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;cf&quot;&gt;fi&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb2-11&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb2-11&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;/span&gt;
&lt;span id=&quot;cb2-12&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb2-12&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;ex&quot;&gt;AC_SUBST&lt;/span&gt;&lt;span class=&quot;er&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ex&quot;&gt;[PKG_CXXFLAGS],&lt;/span&gt; &lt;span class=&quot;pp&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;st&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;va&quot;&gt;${PKG_CXXFLAGS}&lt;/span&gt;&lt;span class=&quot;st&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;pp&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;kw&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb2-13&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb2-13&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;ex&quot;&gt;AC_CONFIG_FILES&lt;/span&gt;&lt;span class=&quot;er&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ex&quot;&gt;[src/Makevars]&lt;/span&gt;&lt;span class=&quot;kw&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb2-14&quot;&gt;&lt;a href=&quot;http://dirk.eddelbuettel.com/blog/index.rss#cb2-14&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;ex&quot;&gt;AC_OUTPUT&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Once again, with this change compilation is quiet locally, yet
unaffected at &lt;a href=&quot;https://cran.r-project.org&quot;&gt;CRAN&lt;/a&gt;. Just what
we want. Give it a try in your packages.&lt;/p&gt;
&lt;p style=&quot;font-size: 80%; font-style: italic;&quot;&gt;
This post by &lt;a href=&quot;https://dirk.eddelbuettel.com&quot;&gt;Dirk
Eddelbuettel&lt;/a&gt; originated on his &lt;a href=&quot;https://dirk.eddelbuettel.com/blog/&quot;&gt;Thinking inside the box&lt;/a&gt;
blog. If you like this or other open-source work I do, you can now &lt;a href=&quot;https://github.com/sponsors/eddelbuettel&quot;&gt;sponsor me at
GitHub&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content>
	<author>
	  <name>Dirk Eddelbuettel</name>
	   <uri>http://dirk.eddelbuettel.com/blog</uri> 
	</author>
	<source>
	  <title type="html">Thinking inside the box</title>
	  <subtitle type="html">Thinking inside the box</subtitle>
	  <link rel="self" href="http://dirk.eddelbuettel.com/blog/index.rss"/>
	  <id>http://dirk.eddelbuettel.com/blog</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en-US">DebConf26 – Santa Fe, Argentina</title>
	<link href="https://jonathancarter.org/2026/07/27/debconf26-santa-fe-argentina/"/>
	<id>https://jonathancarter.org/?p=12034</id>
	<updated>2026-07-27T20:12:18+00:00</updated>
	<summary type="html" xml:lang="en-US"></summary>
	<content type="html" xml:lang="en-US">&lt;p class=&quot;wp-block-paragraph&quot;&gt;TL;DR: What a great DebConf! I managed to recharge my Debian batteries, and my talks / BoF sessions all went fine. Already looking forward to DebConf in Japan next year!&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot;&gt;DebCamp&lt;/h2&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;The evening before DebCamp started, we had a nice bbq (we taught some locals to call it a “braai” at an organiser’s house and went for a walk around the river as the sun set. It was a very peaceful lead-in to DebCamp.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-12057&quot; height=&quot;450&quot; src=&quot;https://jonathancarter.org/files/images/bbq.jpg&quot; width=&quot;800&quot; /&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-12042&quot; height=&quot;452&quot; src=&quot;https://jonathancarter.org/files/images/dc26_blog_river.jpg&quot; width=&quot;800&quot; /&gt;&lt;/figure&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;I set up and sent out the call for Forky desktop artwork:
&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://lists.debian.org/msgid-search/910906f3-7ce4-4884-a49f-4b4a5975471b@debian.org&quot;&gt;https://lists.debian.org/msgid-search/910906f3-7ce4-4884-a49f-4b4a5975471b@debian.org&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;Had many nice discussions about various Debian topics with all the Debian people around. It’s really fun being around people who are natural problem solvers who care deeply about both technical and social issues. At one point Jonas told me “Holy shit, these people are motivated!” and I appreciate that so much too!&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-12064&quot; height=&quot;576&quot; src=&quot;https://jonathancarter.org/files/images/ltswine-1024x576.jpg&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;



&lt;p class=&quot;has-text-align-center wp-block-paragraph&quot;&gt;&lt;em&gt;Debian LTS wine&lt;/em&gt;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Most of my DebCamp was dedicated to preparing for my demo and main talk that followed at DebConf.&lt;/li&gt;



&lt;li&gt;Sadly, we had no loopy this year, I just didn’t have the time, and the people who stepped up to help last year were either overwhelmed with other issues or couldn’t make it. I’ll try to make it happen again for next year by kicking it off long before DC27.&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-12059&quot; height=&quot;640&quot; src=&quot;https://jonathancarter.org/files/images/santafe-1024x640.jpg&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;



&lt;p class=&quot;has-text-align-center wp-block-paragraph&quot;&gt;&lt;em&gt;View of Santa Fe city from hotel&lt;/em&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot;&gt;DebConf&lt;/h2&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Talk – Is it even possible to build a truly universal system installer?&lt;/h3&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;In &lt;a href=&quot;https://debconf26.debconf.org/talks/6-is-it-even-possible-to-build-a-truly-universal-system-installer/&quot;&gt;this talk&lt;/a&gt; I do a very quick comparison of system installers based on my experience with them. It’s hard to directly compare all of them, since there are so many, and each have their own niche that they attempt to satisfy.&lt;/p&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;I also introduce &lt;a href=&quot;https://salsa.debian.org/yasi-team/yasi-daemon&quot;&gt;Yasi&lt;/a&gt; – my attempt to answer the question of whether we could build a universal installer, which can also better cover advanced installations, automated installations and niche setups.&lt;/p&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;It’s very early days for the project, and I didn’t quite feel ready to share the code with the world, but it was nice that I did a quick demo where I could install a Debian system… and the resulting system actually booted up. *phew*.&lt;/p&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;This is also going to be my main focus for the mid-term future. I aim to have all the basic partitioning options working by the time Debian 14 (Forky) is released, and by the time Debian 15 is released, I have a long list of features that I aim to have working. So, my timeline for having something that’s generally useful is around a year from now, and in around 3 years it should be a fully fledged installer that should cover a very large amount of Debian use cases and architectures. &lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-12048&quot; height=&quot;646&quot; src=&quot;https://jonathancarter.org/files/images/image-30-1024x646.png&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Day Trip&lt;/h3&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;For the day trip, we did a tour across Santa Fe, visited &lt;a href=&quot;https://www.museodelaconstitucion.org/&quot;&gt;Constitución de la Nación Argentina&lt;/a&gt;, had lunch where we tried various dishes based on local fish from the river, and then went on a boat ride on the river.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-12078&quot; height=&quot;576&quot; src=&quot;https://jonathancarter.org/files/images/churchbells.jpg&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-12090&quot; height=&quot;574&quot; src=&quot;https://jonathancarter.org/files/images/image-32-1024x574.png&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-12092&quot; height=&quot;574&quot; src=&quot;https://jonathancarter.org/files/images/image-33-1024x574.png&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;BoF Sessions:&lt;/h3&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;&lt;strong&gt;Funding in Free Software Projects:&lt;/strong&gt; I initially registered this BoF because I’m increasingly concerned about how upstreams are asking for donations in their software. I increased the scope to talk about funding in free software in general. It followed Marga’s talk about funding, which focussed more about how developers are funded in general. We didn’t dive very deep into this, but we certainly need some further discussion (and action) on this within Debian.&lt;/p&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;&lt;strong&gt;Debian Social Team:&lt;/strong&gt; My most important issue for this team is a carry-over from last year, I want to set up &lt;a href=&quot;https://pgbarman.org/&quot;&gt;barman&lt;/a&gt; (packaged in Debian) for live postgres syncing for our larger databases. For the smaller DBs, doing a daily dump is quite cheap. But for Matrix, it’s very expensive in terms if i/o and CPU, so it would be ideal to do less regular complete dumps and use live replication for the first line of redundancy instead.&lt;/p&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;&lt;strong&gt;Images Team: &lt;/strong&gt;I wasn’t initially planning to say much during this session, I have some ideas to reduce both size and count of images, without losing any benefits, but I don’t have any work to show for that yet. I ended up talking a lot more than I anticipated, the topics covered were quite good and representative of the current state of Debian images built. I don’t have time to create a full summary, so I suggest checking the etherpad / video recording if you’re interested.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-12079&quot; height=&quot;576&quot; src=&quot;https://jonathancarter.org/files/images/cwstablewine.jpg&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;



&lt;p class=&quot;has-text-align-center wp-block-paragraph&quot;&gt;&lt;em&gt;Some more wine variety during the conference dinner&lt;/em&gt;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-12066&quot; height=&quot;574&quot; src=&quot;https://jonathancarter.org/files/images/busyhacklap-1024x574.jpg&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;



&lt;p class=&quot;has-text-align-center wp-block-paragraph&quot;&gt;&lt;em&gt;Debianites in the main hacklab&lt;/em&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Rosario&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-12076&quot; height=&quot;574&quot; src=&quot;https://jonathancarter.org/files/images/rosario-1-1024x574.jpg&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;I’m spending two days in Rosario before I head home. Exploring a bit, catching up with sleep, finishing this blog post, signing keys and exploring some ideas I made note of during DebConf.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Thank you to the DebConf26 Team!&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-12073&quot; height=&quot;574&quot; src=&quot;https://jonathancarter.org/files/images/dc-team-1024x574.jpg&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;It was a little surreal not being part of any DebConf team for the first time ever, I’ve just been too focussed on getting Yasi ready for my talk (no regrets!). I hope to be more involved again next year, in the meantime, I’m very grateful to everyone who has made this happen, you did a stellar job! I hope to see many of you again next year in Japan!&lt;/p&gt;
&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%2F2026%2F07%2F27%2Fdebconf26-santa-fe-argentina%2F&amp;amp;action_name=DebConf26%20%26%238211%3B%20Santa%20Fe%2C%20Argentina&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;</content>
	<author>
	  <name>jonathan</name>
	   <uri>https://jonathancarter.org</uri> 
	</author>
	<source>
	  <title type="html">Jonathan Carter</title>
	  
	  <link rel="self" href="https://jonathancarter.org/feed/"/>
	  <id>https://jonathancarter.org</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">RcppArmadillo 15.4.2-1 on CRAN: Small Upstream Fixes</title>
	<link href="http://dirk.eddelbuettel.com/blog/2026/07/25#rcpparmadillo_15.4.2-1"/>
	<id>http://dirk.eddelbuettel.com/blog/2026/07/25#rcpparmadillo_15.4.2-1</id>
	<updated>2026-07-25T20:56:00+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;&lt;img alt=&quot;armadillo image&quot; src=&quot;https://dirk.eddelbuettel.com/images/armadillo_logo_two.png&quot; style=&quot;float: left; margin: 10px 10px 10px 0;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://arma.sourceforge.net/&quot;&gt;Armadillo&lt;/a&gt; is a powerful
and expressive C++ template library for linear algebra and scientific
computing. It aims towards a good balance between speed and ease of use,
has a syntax deliberately close to Matlab, and is useful for algorithm
development directly in C++, or quick conversion of research code into
production environments. &lt;a href=&quot;https://dirk.eddelbuettel.com/code/rcpp.armadillo.html&quot;&gt;RcppArmadillo&lt;/a&gt;
integrates this library with the &lt;a href=&quot;https://www.r-project.org&quot;&gt;R&lt;/a&gt; environment and languageâ€“and is
widely used by (currently) 1293 other packages on &lt;a href=&quot;https://cran.r-project.org&quot;&gt;CRAN&lt;/a&gt;, downloaded 47.8 million
times (per the partial logs from the cloud mirrors of CRAN), and the &lt;a href=&quot;https://doi.org/10.1016/j.csda.2013.02.005&quot;&gt;CSDA paper&lt;/a&gt; (&lt;a href=&quot;https://cran.r-project.org/package=RcppArmadillo/vignettes/RcppArmadillo-intro.pdf&quot;&gt;preprint
/ vignette&lt;/a&gt;) by Conrad and myself has been cited 710 times according
to Google Scholar.&lt;/p&gt;
&lt;p&gt;This versions updates to the 15.4.2 upstream &lt;a href=&quot;https://arma.sourceforge.net/&quot;&gt;Armadillo&lt;/a&gt; release made this
week, as well as to included 15.4.1 version we released only to GitHub
and r-universe so do not exceed the (roughly) monthly cadence. For this
release, we had run the usual complete reverse-dependency check which
came back spotless, and did CRAN so no email exchange needed despite
nearly 1300 reverse dependencies. Automation can be helpful when used
with a well-maintained software stack. The package has also already been
updated for &lt;a href=&quot;https://www.debian.org&quot;&gt;Debian&lt;/a&gt;, built for &lt;a href=&quot;https://eddelbuettel.github.io/r2u/&quot;&gt;r2u&lt;/a&gt;, and will build
shortly at &lt;a href=&quot;https://cran.r-project.org&quot;&gt;CRAN&lt;/a&gt; for the
different binary releases.&lt;/p&gt;
&lt;p&gt;All changes since the last CRAN release follow.&lt;/p&gt;
&lt;blockquote&gt;
&lt;h4 id=&quot;changes-in-rcpparmadillo-version-15.4.2-1-2026-07-25&quot;&gt;Changes in
RcppArmadillo version 15.4.2-1 (2026-07-25)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Upgraded to Armadillo release 15.4.2 (Medium Roast Agave)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fix speed regressions in &lt;code&gt;diagvec()&lt;/code&gt; and
&lt;code&gt;diagmat()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;changes-in-rcpparmadillo-version-15.4.1-1-github-only-2026-07-09&quot;&gt;Changes
in RcppArmadillo version 15.4.1-1 [github-only] (2026-07-09)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Upgraded to Armadillo release 15.4.1 (Medium Roast Agave)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Fix for rare infinite recursion bug in sparse version of
&lt;code&gt;diagmat()&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More efficient checks for aliasing&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Courtesy of my &lt;a href=&quot;https://dirk.eddelbuettel.com/cranberries/&quot;&gt;CRANberries&lt;/a&gt;, there
is a &lt;a href=&quot;https://dirk.eddelbuettel.com/cranberries/2026/07/25#RcppArmadillo_15.4.2-1&quot;&gt;diffstat
report&lt;/a&gt; relative to previous release. More detailed information is on
the &lt;a href=&quot;https://dirk.eddelbuettel.com/code/rcpp.armadillo.html&quot;&gt;RcppArmadillo
page&lt;/a&gt;. Questions, comments etc should go to the &lt;a href=&quot;https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel&quot;&gt;rcpp-devel
mailing list&lt;/a&gt; off the &lt;a href=&quot;https://r-forge.r-project.org/projects/rcpp/&quot;&gt;Rcpp R-Forge&lt;/a&gt;
page.&lt;/p&gt;
&lt;p style=&quot;font-size: 80%; font-style: italic;&quot;&gt;
This post by &lt;a href=&quot;https://dirk.eddelbuettel.com&quot;&gt;Dirk
Eddelbuettel&lt;/a&gt; originated on his &lt;a href=&quot;https://dirk.eddelbuettel.com/blog/&quot;&gt;Thinking inside the box&lt;/a&gt;
blog. If you like this or other open-source work I do, you can &lt;a href=&quot;https://github.com/sponsors/eddelbuettel&quot;&gt;sponsor me at
GitHub&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content>
	<author>
	  <name>Dirk Eddelbuettel</name>
	   <uri>http://dirk.eddelbuettel.com/blog</uri> 
	</author>
	<source>
	  <title type="html">Thinking inside the box</title>
	  <subtitle type="html">Thinking inside the box</subtitle>
	  <link rel="self" href="http://dirk.eddelbuettel.com/blog/index.rss"/>
	  <id>http://dirk.eddelbuettel.com/blog</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en-US">WordPress 7.0.2 for Debian</title>
	<link href="https://dropbear.xyz/2026/07/21/wordpress-7-0-2-for-debian/"/>
	<id>https://dropbear.xyz/?p=99430</id>
	<updated>2026-07-21T07:22:36+00:00</updated>
	<summary type="html" xml:lang="en-US"></summary>
	<content type="html" xml:lang="en-US">&lt;p class=&quot;wp-block-paragraph&quot;&gt;I have just uploaded WordPress version 7.0.2 for Debian. This fixes two serious security bugs CVE-2026-60137 and CVE-2026-63030. Chained together, this gives a RCE and is in active exploitation, so update as soon as its available.&lt;/p&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;These two bugs are also in WordPress 6.9.x below 6.9.5 and the SQLi one (CVE-2026-60137) only is in 6.8.x below 6.8.6. Debian Sid and Forky have 7.0 which is vulnerable to the RCE while Debian Trixie has 6.8.x so only the SQLi.&lt;/p&gt;



&lt;p class=&quot;wp-block-paragraph&quot;&gt;Updates for Trixie have been sent to the security team for review and once they’re happy I’ll upload for Trixie as well.&lt;/p&gt;</content>
	<author>
	  <name>dropbear</name>
	   <uri>https://dropbear.xyz</uri> 
	</author>
	<source>
	  <title type="html">Dropbear</title>
	  <subtitle type="html">Site about Dropbears, maybe</subtitle>
	  <link rel="self" href="https://dropbear.xyz/feed/"/>
	  <id>https://dropbear.xyz</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">Interzone digital</title>
	<link href="https://jmtd.net/log/interzone/digital/"/>
	<id>https://jmtd.net/log/interzone/digital/</id>
	<updated>2026-07-20T21:26:22+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;&lt;em&gt;(no, this isn&#39;t a blog post about Joy Division songs)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://jmtd.net/log/interzone/294/&quot;&gt;Last time I wrote about Interzone&lt;/a&gt;, I was discussing issue #294, the
first published under new management in a paperback-sized format
(&quot;JB6&quot;). The format and presentation of the magazine was fantastic: it fit in a
lot of my pockets, and was packed with 15 stories as well as the regular
columns, in full colour with fantastic layouts and illustrations. Sadly there
was only one more physical issue before Interzone was forced to become a
digital-only publication.&lt;/p&gt;

&lt;div class=&quot;centre&quot;&gt;
&lt;div class=&quot;image+centre&quot;&gt;
&lt;a href=&quot;https://jmtd.net/log/interzone/physical_iz.jpg&quot;&gt;&lt;img alt=&quot;IZ issues 294 and 295&quot; class=&quot;img&quot; height=&quot;333&quot; src=&quot;https://jmtd.net/log/interzone/digital/250x-physical_iz.jpg&quot; width=&quot;250&quot; /&gt;&lt;/a&gt;

&lt;p&gt;IZ issues 294 and 295&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;I don&#39;t want to dwell on the sad necessity to move to digital. Interzone
continues on, celebrating the milestone issue #300 in 2024. Subscriptions
are managed via &lt;a href=&quot;https://www.patreon.com/c/interzonemag/membership&quot;&gt;Patreon&lt;/a&gt;.
Issue #305 just came out.&lt;/p&gt;

&lt;p&gt;Instead I wanted to write a small bit about how &lt;em&gt;I&lt;/em&gt; engaged with the paper
magazine, and the difficulties I&#39;ve had trying to engage with not just
Interzone but &lt;em&gt;any&lt;/em&gt; magazine-style publication in a digital context.&lt;/p&gt;

&lt;p&gt;With most fiction, I read linearly: start the beginning and read to the end, in
order. That works well for me with &lt;a href=&quot;https://jmtd.net/log/ereader/&quot;&gt;e-readers&lt;/a&gt;. But for magazines (and
most non-fiction) I don&#39;t, I jump around: usually starting with the
table of contents, I might pick a short column to start, or jump into the
middle of the &quot;book reviews&quot; section to read about a specific book. I might
skip sections entirely. I find it very difficult to read like this with an
e-reader. I think this is partly because I reference the &lt;em&gt;depth&lt;/em&gt; of the
paper book or magazine, its thickness, to orient myself. But it&#39;s also partly
the limitations of e-ink.&lt;/p&gt;

&lt;div class=&quot;centre&quot;&gt;
&lt;div class=&quot;image+centre&quot;&gt;
&lt;a href=&quot;https://jmtd.net/log/interzone/iz_ticklist.jpg&quot;&gt;&lt;img alt=&quot;My tick-list for an issue of IZ&quot; class=&quot;img&quot; height=&quot;444&quot; src=&quot;https://jmtd.net/log/interzone/digital/400x-iz_ticklist.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;

&lt;p&gt;My tick-list for an issue of IZ&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;For print-Interzone, I used to start by inserting a small piece of paper
inside the cover (the delivery slip was ideal). On this I listed the stories
within and ticked them off when I read them (sometimes I double-ticked if I
really liked a story). That helped me to remember, perhaps months or years
later, whether I&#39;d read all the stories or not, and which I liked.
I &lt;em&gt;could&lt;/em&gt; do something similar on some e-readers: the &lt;a href=&quot;https://jmtd.net/log/remarkable/&quot;&gt;Remarkable&lt;/a&gt; for
instance. But it&#39;s far from convenient to do on most e-ink devices.&lt;/p&gt;

&lt;p&gt;Interzone digital is available as both &lt;a href=&quot;https://en.wikipedia.org/wiki/EPUB&quot;&gt;ePUB&lt;/a&gt;, the most common format for e-books, and PDF. For reading on my
regular Kobo e-reader, PDFs don&#39;t work very well at all. I think this is
generally true of most e-readers.&lt;/p&gt;

&lt;p&gt;Interzone was (and is) a well-designed magazine. The value of it was not
just the &lt;em&gt;content&lt;/em&gt; of the text, but the &lt;em&gt;context&lt;/em&gt;: how the stories were
presented; the accompanying art (most often colour in recent decades),
but also the typesetting. ePUB
doesn&#39;t specify much of that stuff
exactly: it leaves that up to the client and the client&#39;s preferences.
And there&#39;s a lot of advantages to that:
Prefer a different font face or size? No problem. And
most importantly for accessibility:
If reading in ePUB makes Interzone available to more readers then that&#39;s
a great thing. But sadly a lot is lost, IMHO.&lt;/p&gt;

&lt;div class=&quot;centre&quot;&gt;
&lt;div class=&quot;image+centre&quot;&gt;
&lt;a href=&quot;https://jmtd.net/log/interzone/iz_ipad.jpg&quot;&gt;&lt;img alt=&quot;IZ #305 on iPad Mini&quot; class=&quot;img&quot; height=&quot;533&quot; src=&quot;https://jmtd.net/log/interzone/digital/400x-iz_ipad.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;

&lt;p&gt;IZ #305 on iPad Mini&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The solution I&#39;m trying is to read the PDF version on the &lt;a href=&quot;https://jmtd.net/log/ipad_mini/&quot;&gt;iPad Mini&lt;/a&gt; I
resurrected earlier in the year.
Despite being an Internet tablet, since it&#39;s not really usable for browsing the
web anymore it&#39;s strangely still a distraction-free device. In fact it&#39;s pretty
much single-purpose for reading Interzone and the odd other book which benefits
from being read as PDF. I can appreciate the stylistic choices made in the
page-setting as they were intended; I can quickly jump around the issue without
waiting for an e-ink refresh; I get full colour; and whilst it would be tiring
to read for a long time on the iPad screen, for the length of articles or
stories in a magazine, this isn&#39;t a problem.&lt;/p&gt;

&lt;p&gt;It&#39;s not a solution for tracking what I&#39;ve read (that version of ipadOS is too
old to support clumsily scrawling on PDF pages with your fingers, at least in
the Books app) but it otherwise seems to work well, so I&#39;ll see how it goes.&lt;/p&gt;</content>
	<author>
	  <name>jmtd</name>
	   <uri>https://jmtd.net/log/</uri> 
	</author>
	<source>
	  <title type="html">Jonathan Dowland&#39;s Weblog</title>
	  <subtitle type="html">jmtd</subtitle>
	  <link rel="self" href="https://jmtd.net/log/index.atom"/>
	  <id>https://jmtd.net/log/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en-gb">Renewal relationships between AWS certifications</title>
	<link href="https://retout.co.uk/2026/07/20/renewal-relationships-between-aws-certifications/"/>
	<id>https://retout.co.uk/2026/07/20/renewal-relationships-between-aws-certifications/</id>
	<updated>2026-07-20T20:52:17+00:00</updated>
	<summary type="html" xml:lang="en-gb"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;When you pass an AWS certification exam, sometimes it can extend the
life of related lesser AWS certifications.  But I could not find an
illustration of exactly which ones, so here’s an up-to-date diagram:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;AWS Certification renewal dependencies&quot; src=&quot;https://retout.co.uk/2026/aws-certs.svg&quot; /&gt;
&lt;em&gt;Figure: Renewal relationships between AWS certifications.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Each arrow is a ‘renews’ relation – there’s no obligation to pass
lesser exams before the harder ones, but you could also follow the
arrows backwards if you want to learn easier material before sitting
the more difficult exams.&lt;/p&gt;
&lt;p&gt;I have made two important simplifications to the graph:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;The ‘Advanced Networking – Specialty’ certification is being
retired soon, so I’ve omitted it entirely.  The last date to take that
exam is 25th August 2026.  But Specialty certs don’t renew anything
else anyway.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I have left out transitive relationships in order to simplify the
graph – so e.g. if you pass a ‘Solutions Architect – Professional’
exam, it also renews any Cloud Practitioner certificate you might
hold, even if you do not currently hold the relevant Associate
certificate.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You also have the option of sitting each exam again to renew of
course, and there’s a new scheme to ‘maintain’ various certs via AWS
Skill Builder which can extend them by one year rather than three.&lt;/p&gt;</content>
	<author>
	  <name>Tim Retout</name>
	   <uri>https://retout.co.uk/</uri> 
	</author>
	<source>
	  <title type="html">Tim Retout</title>
	  <subtitle type="html">Recent content on Tim Retout</subtitle>
	  <link rel="self" href="https://retout.co.uk/index.xml"/>
	  <id>https://retout.co.uk/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">DebConf26 starts today in Santa Fe on Monday, July 20, 2026</title>
	<link href="https://bits.debian.org/2026/07/debconf26-starts-today.html"/>
	<id>tag:bits.debian.org,2026-07-20:/2026/07/debconf26-starts-today.html</id>
	<updated>2026-07-20T09:50:00+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;&lt;a href=&quot;https://debconf26.debconf.org/&quot;&gt;DebConf26&lt;/a&gt;, the 27th annual
&lt;a href=&quot;https://www.debconf.org/&quot;&gt;Debian Developer Conference&lt;/a&gt;, is taking place at
Santa Fe, Argentina from 20 to 25 July 2026.
Debian contributors from all over the world have come together at the Facultad
de Ingeniería en Ciencias Hídricas (Faculty of Engineering in Water Sciences),
one of the faculties that belong to the Universidad Nacional del Litoral
(National University of the Littoral), to participate and work in a
conference exclusively ran by volunteers.&lt;/p&gt;
&lt;p&gt;Today the main conference starts with around 300 expected attendants and over
80 scheduled activities, including 45-minute and 20-minute talks, Bird of a
Feather (&quot;&lt;abbr&gt;BoF&lt;/abbr&gt;&quot;) team meetings, workshops, a job fair, as well as
a variety of other events.
The full &lt;a href=&quot;https://debconf26.debconf.org/schedule/&quot;&gt;schedule&lt;/a&gt; is updated each
day, including activities planned ad-hoc by attendees over the course of the
conference.&lt;/p&gt;
&lt;p&gt;If you would like to engage remotely, you can follow the &lt;strong&gt;video streams&lt;/strong&gt;
available from the &lt;a href=&quot;https://debconf26.debconf.org/&quot;&gt;DebConf26 website&lt;/a&gt; for the
events happening in the three main talk rooms: Aula Magna - FADU,
Aula Magna - FBCB and Aula 0.3 - FICH accessible from the DebConf26 homepage.
You can also join the conversations happening inside the talk rooms via the
&lt;a href=&quot;https://www.oftc.net/&quot;&gt;OFTC IRC network&lt;/a&gt; in the
&lt;a href=&quot;irc://irc.oftc.net/debconf-fadu&quot;&gt;#debconf-fadu&lt;/a&gt;,
&lt;a href=&quot;irc://irc.oftc.net/debconf-fbcb&quot;&gt;#debconf-fbcb&lt;/a&gt;,
and &lt;a href=&quot;irc://irc.oftc.net/debconf-fich3&quot;&gt;#debconf-fich3&lt;/a&gt; channels.
Please also join us in the &lt;a href=&quot;irc://irc.oftc.net/debconf&quot;&gt;#debconf&lt;/a&gt; channel for
common discussions related to DebConf.&lt;/p&gt;
&lt;p&gt;You can also follow the live coverage of news about DebConf26 provided by our
&lt;a href=&quot;https://micronews.debian.org/&quot;&gt;micronews service&lt;/a&gt; or the @debian profile on
your favorite social network.&lt;/p&gt;
&lt;p&gt;DebConf is committed to a safe and welcoming environment for all participants.
Please see our &lt;a href=&quot;https://debconf26.debconf.org/about/coc/&quot;&gt;Code of Conduct page&lt;/a&gt;
for more information on this.&lt;/p&gt;
&lt;p&gt;Debian thanks the commitment of numerous sponsors to support DebConf26,
particularly our Platinum Sponsors:
&lt;a href=&quot;https://www.infomaniak.com/&quot;&gt;&lt;strong&gt;Infomaniak&lt;/strong&gt;&lt;/a&gt; and
&lt;a href=&quot;https://www.proxmox.com/&quot;&gt;&lt;strong&gt;Proxmox&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;DebConf26 sponsors logo&quot; src=&quot;https://bits.debian.org/images/debconf26-sponsors-banner.svg&quot; /&gt;&lt;/p&gt;</content>
	<author>
	  <name>The Debian Publicity Team</name>
	   <uri>https://bits.debian.org/</uri> 
	</author>
	<source>
	  <title type="html">Bits from Debian</title>
	  <subtitle type="html">Blog from the Debian Project</subtitle>
	  <link rel="self" href="https://bits.debian.org/feeds/feed.rss"/>
	  <id>https://bits.debian.org/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">DebConf26 welcomes its sponsors</title>
	<link href="https://bits.debian.org/2026/07/debconf26-welcomes-sponsors.html"/>
	<id>tag:bits.debian.org,2026-07-18:/2026/07/debconf26-welcomes-sponsors.html</id>
	<updated>2026-07-18T12:00:00+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;&lt;a href=&quot;https://bits.debian.org/images/Romina_Molina_dc26_2.svg&quot;&gt;&lt;img alt=&quot;Alt DebConf26 by Romina Molina&quot; src=&quot;https://bits.debian.org/images/Romina_Molina_dc26_2.svg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://debconf26.debconf.org/&quot;&gt;DebConf26&lt;/a&gt;, the 27th edition of the Debian
conference is taking place at the
&lt;a href=&quot;https://www.fich.unl.edu.ar/&quot;&gt;Facultad de Ingeniería en Ciencias Hídricas&lt;/a&gt; of
the Universidad Nacional del Litoral, in Santa Fe, Argentina. We appreciate
the organizers for their hard work, and hope this event will be highly
beneficial for those who attend in person as well as online.&lt;/p&gt;
&lt;p&gt;This event would not be possible without the help from our generous sponsors.
We would like to warmly welcome the sponsors of DebConf26, and introduce them
to you.&lt;/p&gt;
&lt;p&gt;We have two Platinum sponsors.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Our first Platinum sponsor is &lt;a href=&quot;https://www.proxmox.com/&quot;&gt;&lt;strong&gt;Proxmox&lt;/strong&gt;&lt;/a&gt;.
  Proxmox develops powerful, yet easy-to-use open-source server solutions.
  The comprehensive open-source ecosystem is designed to manage divers IT
  landscapes, from single servers to large-scale distributed data centers.
  Our unified platform integrates server virtualization, easy backup, and
  rock-solid email security ensuring seamless interoperability across the
  entire portfolio. With the Proxmox Datacenter Manager, the ecosystem also
  offers a &quot;single pane of glass&quot; for centralized management across different
  locations.
  Since 2005, all Proxmox solutions have been built on the rock-solid Debian
  platform. We are proud to return to DebConf26 as a sponsor because the
  Debian community provides the foundation that makes our work possible. We
  believe in keeping IT simple, open, and under your control.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.infomaniak.com/&quot;&gt;&lt;strong&gt;Infomaniak&lt;/strong&gt;&lt;/a&gt; is the second Platinum sponsor.
  Infomaniak is an independent, employee-owned Swiss technology company that
  designs, develops, and operates its own cloud infrastructure and digital
  services entirely in Switzerland. With over 300 employees — more than 70%
  engineers and developers — the company reinvests all profits into R&amp;amp;D. Its
  public cloud is built on OpenStack, with managed Kubernetes, Database as a
  Service, object storage, and sovereign AI services accessible via OpenAI-
  compatible APIs, all running on its own Swiss infrastructure. Infomaniak also
  develops a sovereign collaborative suite — messaging, email, storage, online
  office tools, videoconferencing, and a built-in AI assistant — developed in-
  house and as a privacy-respecting solution to proprietary platforms. Open
  source is central to how Infomaniak operates. Its latest data center (D4)
  runs on 100% renewable energy and uses no traditional cooling: all the heat
  generated by its servers is captured and fed into Geneva&#39;s district heating
  network, supplying up to 6,000 homes in winter and hot water year-round. The
  entire project has been documented and open-sourced at
  &lt;a href=&quot;https://d4project.org/&quot;&gt;d4project.org&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Our Gold sponsors are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.freexian.com/&quot;&gt;&lt;strong&gt;Freexian&lt;/strong&gt;&lt;/a&gt;, Freexian specializes in Free
  Software with a particular focus on Debian GNU/Linux. Freexian can assist
  with consulting, training, technical support, packaging, or software
  development on projects involving use or development of Free software.
  All of Freexian&#39;s employees and partners are well-known contributors in the
  Free Software community, a choice that is integral to Freexian&#39;s business
  model.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.viridiengroup.com&quot;&gt;&lt;strong&gt;Viridien&lt;/strong&gt;&lt;/a&gt; an advanced technology,
  digital and Earth data company that pushes the boundaries of science for
  a more prosperous and sustainable future. Viridien has been using
  Debian-based systems to power most of its HPC infrastructure and its
  cloud platform since 2009 and currently employs two active Debian
  Project Members.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Our Silver sponsors are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.arm.com/&quot;&gt;&lt;strong&gt;Arm&lt;/strong&gt;&lt;/a&gt;: leading technology provider of processor
  IP, Arm powered solutions have been supporting innovation for
  more than 30 years and are deployed in over 280 billion chips to date.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pexip.com/&quot;&gt;&lt;strong&gt;Pexip&lt;/strong&gt;&lt;/a&gt; brings the ease of commercial video
  platforms to secure and sovereign environments without compromising control
  or performance.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://www.bfh.ch/&quot;&gt;&lt;strong&gt;Bern University of Applied Sciences&lt;/strong&gt;&lt;/a&gt; with around
  7,959 students enrolled, located in the Swiss capital.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.canonical.com/&quot;&gt;&lt;strong&gt;Ubuntu&lt;/strong&gt;&lt;/a&gt;,
  the Operating System delivered by Canonical.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://os-sci.com/&quot;&gt;&lt;strong&gt;OS-Sci&lt;/strong&gt;&lt;/a&gt;, Open Source Science is a world-leading
  institution dedicated to teaching computer science through Free and Open
  Source Software (FOSS).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.gcoop.coop/&quot;&gt;&lt;strong&gt;gcoop&lt;/strong&gt;&lt;/a&gt;, a free software development company
  with over 19 years of market experience, organized as a worker cooperative,
  promoting best practices in software development.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.qualcomm.com/developer/opensource&quot;&gt;&lt;strong&gt;Qualcomm&lt;/strong&gt;&lt;/a&gt; Technologies,
  one of the world&#39;s leading companies in field of mobile technology, sponsors
  and contributes to Open Source developer communities that drive collaboration.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cip-project.org/&quot;&gt;&lt;strong&gt;Civil Infrastructure Platform&lt;/strong&gt;&lt;/a&gt;,
  a collaborative project hosted by the Linux Foundation, establishing an open
  source “base layer” of industrial grade software.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opensource.siemens.com/&quot;&gt;&lt;strong&gt;Siemens&lt;/strong&gt;&lt;/a&gt; is a technology company
  focused on industry, infrastructure and transport.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.collabora.com/&quot;&gt;&lt;strong&gt;Collabora&lt;/strong&gt;&lt;/a&gt;, a global consultancy delivering
  Open Source software solutions to the commercial world.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nerdearla.com/en/&quot;&gt;&lt;strong&gt;NERDEARLA&lt;/strong&gt;&lt;/a&gt;, the largest free tech event in
  the Spanish-speaking world.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bronze sponsors:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.loongson.cn/&quot;&gt;&lt;strong&gt;Loongson&lt;/strong&gt;&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.credativ.de/&quot;&gt;&lt;strong&gt;credativ&lt;/strong&gt;&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://google.com/&quot;&gt;&lt;strong&gt;Google&lt;/strong&gt;&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.spacemit.com/&quot;&gt;&lt;strong&gt;SpacemiT&lt;/strong&gt;&lt;/a&gt;,&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And finally, our Supporter level sponsors:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://altusmetrum.org/&quot;&gt;&lt;strong&gt;Altus Metrum&lt;/strong&gt;&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://loongfans.cn/en/&quot;&gt;&lt;strong&gt;Loongson Hobbyists Community&lt;/strong&gt;&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.santafe.gob.ar/&quot;&gt;&lt;strong&gt;Secretaría de Tecnologías para la Gestión de la Provincia de Santa Fe&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A special thanks to the
&lt;a href=&quot;https://www.fich.unl.edu.ar/&quot;&gt;&lt;strong&gt;Facultad de Ingeniería y Ciencias Hídricas - FICH UNL&lt;/strong&gt;&lt;/a&gt;,
our Venue Partner!&lt;/p&gt;
&lt;p&gt;Thanks to all our sponsors for their support!
Their contributions enable a diverse global community of Debian developers and
maintainers to collaborate, support one another, and share knowledge at
DebConf26.&lt;/p&gt;</content>
	<author>
	  <name>The Debian Publicity Team</name>
	   <uri>https://bits.debian.org/</uri> 
	</author>
	<source>
	  <title type="html">Bits from Debian</title>
	  <subtitle type="html">Blog from the Debian Project</subtitle>
	  <link rel="self" href="https://bits.debian.org/feeds/feed.rss"/>
	  <id>https://bits.debian.org/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">Looking at dpkg startup time</title>
	<link href="http://blog.sesse.net/blog/tech/2026-07-15-08-45_looking_at_dpkg_startup_time.html"/>
	<id>http://blog.sesse.net/blog/tech/2026-07-15-08-45_looking_at_dpkg_startup_time.html</id>
	<updated>2026-07-15T07:45:00+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;Five years or so ago, I had a look at trying to speed up dpkg&#39;s package
installation; I concluded that it was probably possible to speed up,
but that there was no appetite for this kind of large-scale changes.
(You&#39;d probably need to rewrite the transaction system to get rid of
a lot of fsyncs, you&#39;d ideally want to reduce the number of syscalls
for unpack by io_uring and so on.)&lt;/p&gt;

&lt;p&gt;This summer, I&#39;ve been looking at something related on and off; it is
possible to speed up the startup time? That&#39;s in a sense the opposite
scenario; instead of installing lots of packages in a newly debootstrapped
chroot (with very few packages), see how fast you can install one
in a much more busy chroot (I just copied my laptop&#39;s dpkg dir, with ~6600 packages
installed).&lt;/p&gt;

&lt;p&gt;Before I show the numbers, I must stress that this is an &lt;em&gt;investigation&lt;/em&gt;,
not a fair benchmark, and you should not go shout at the dpkg maintainers
that they need to get to “catch up”. That said:&lt;/p&gt;

&lt;pre&gt;&amp;gt; sudo time dpkg --root=root -i hello_2.12.3-1_amd64.deb &amp;gt;/dev/null
Not building database; man-db/auto-update is not &#39;true&#39;.
1.12user 0.49system 0:01.85elapsed 87%CPU (0avgtext+0avgdata 171880maxresident)k
0inputs+14648outputs (0major+72963minor)pagefaults 0swaps

&amp;gt; sudo time ./src/dpkg --root=root -i hello_2.12.3-1_amd64.deb &amp;gt; /dev/null
0.04user 0.01system 0:00.15elapsed 38%CPU (0avgtext+0avgdata 6520maxresident)k
0inputs+1080outputs (0major+2705minor)pagefaults 0swaps
&lt;/pre&gt;

&lt;p&gt;How is it unfair? Well, for one, the code to run triggers is messed up
so they&#39;re not run (but the trigger in question should be very fast).
And there&#39;s one step at the end with detecting “disappearing packages” that doesn&#39;t run properly
because it&#39;s a bit tricky in my model and I didn&#39;t want to deal
with, well, difficult problems. But I think both are perfectly doable without
really affecting the end time, it just requires engineering. There&#39;s a &lt;em&gt;lot&lt;/em&gt; of work to be done, though;
diving into the code makes me shudder at all the complexities that need to be
in place to support all the corner cases of multiarch, for instance.&lt;/p&gt;

&lt;p&gt;The code is extremely proof-of-concept, but it runs and can read (and write)
metadata from SQLite instead of flat text files, it can resolve dependencies
in the most basic fashion, it can keep track of installed files, it should be
crash- and powerloss-proof. You know, the very very basic stuff, and without changing the
model fundamentally (like e.g. Michael Stapelberg did with
&lt;a href=&quot;https://distr1.org/&quot;&gt;distri&lt;/a&gt;, fundamentally replacing packages with disk
images and ending up in a very fast but rather different-looking system). So it was satisfying to see
that it ends up around 10x even on my not-very-new laptop (plus a significant
RAM reduction); I believe it should be possible to squeeze under 100 ms,
but that would probably require also optimizing the unpacking itself, which I didn&#39;t look at this time.&lt;/p&gt;

&lt;p&gt;Having a bunch of files being read into RAM and then processed freely was a design that made
a lot of sense when dpkg was written (in 1995!) and Debian had ~250 binary
packages &lt;em&gt;in total&lt;/em&gt; (and you probably wouldn&#39;t install all of them).
There was no reasonable database available for desktop systems; the closest
thing you&#39;d have was probably BerkeleyDB and that wasn&#39;t really it,
so flat files and fsync made a lot of sense, and was easy to manipulate
and persist.
But now, SQLite is widely available and probably the most battle-tested
code in history, a typical system has thousands of packages (you could
easily install tens of thousands if you&#39;re doing heavy development),
SSDs have replaced HDDs almost everywhere for system disks, and the
environment has just changed a lot in general. So I hope that someone at some
point will be crazy enough to pick this up and run with it, because it&#39;s a
lot of work and I don&#39;t intend to. :-)&lt;/p&gt;

&lt;p&gt;PS: I didn&#39;t look at apt; I think what I&#39;d really love to see first and
foremost is a package format change so that apt-listchanges can look at
(or look for) NEWS.gz without having to unpack the entire package.
Perhaps a control field saying “nothing new here”?&lt;/p&gt;</content>
	<author>
	  <name>Steinar H. Gunderson</name>
	   <uri>http://blog.sesse.net/</uri> 
	</author>
	<source>
	  <title type="html">Steinar H. Gunderson</title>
	  <subtitle type="html">sesse&#39;s blog</subtitle>
	  <link rel="self" href="http://blog.sesse.net/blog/tech/?flav=rss"/>
	  <id>http://blog.sesse.net/</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en-US">Got your keys ready for DebConf26?</title>
	<link href="https://gwolf.org/2026/07/got-your-keys-ready-for-debconf26.html"/>
	<id>https://gwolf.org/2026/07/got-your-keys-ready-for-debconf26.html</id>
	<updated>2026-07-14T21:23:21+00:00</updated>
	<summary type="html" xml:lang="en-US"></summary>
	<content type="html" xml:lang="en">&lt;p&gt;Yay! Finally itâ€™s that time of year â€” DebCamp is underway, and soon it will
be time for DebConf! î�½ðŸŽ‰ðŸ¥³&lt;/p&gt;

&lt;p&gt;As it is by now tradition, itâ€™s my task to coordinate the DebConf26
keysigning party. And, as usual, I have set up the list of &lt;a href=&quot;https://people.debian.org/~gwolf/dc26_ksp/&quot;&gt;DebConf26
keysigning maps&lt;/a&gt; for everybody
involved.&lt;/p&gt;

&lt;p&gt;So, if you are taking part of DebConf, make sure to:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Find yourself in the &lt;a href=&quot;https://people.debian.org/~gwolf/dc26_ksp/&quot;&gt;keysigning
map&lt;/a&gt;. Are you a part of the
listing?&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;If you are not there, log in to the DebConf26 management system and
edit the &lt;a href=&quot;https://debconf26.debconf.org/register/step-3&quot;&gt;Personal
Information&lt;/a&gt; section of
your profile. Make sure you submit your OpenPGP key fingerprint.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Make sure your key is available in the keyserver network. They should
basically be equivalent and interoperate, but in any case â€” my scripts
will try to find your key at &lt;a href=&quot;http://gwolf.org/rss.xml&quot;&gt;pgpkeys.eu&lt;/a&gt;,
&lt;a href=&quot;http://gwolf.org/rss.xml&quot;&gt;keys.openpgp.org&lt;/a&gt;,
&lt;a href=&quot;http://gwolf.org/rss.xml&quot;&gt;keyserver.computer42.org&lt;/a&gt;,
&lt;a href=&quot;http://gwolf.org/rss.xml&quot;&gt;keyserver.ubuntu.com&lt;/a&gt;,
&lt;a href=&quot;http://gwolf.org/rss.xml&quot;&gt;keyring.debian.org&lt;/a&gt;,
&lt;a href=&quot;http://gwolf.org/rss.xml&quot;&gt;pgp.surf.nl&lt;/a&gt;, &lt;a href=&quot;http://gwolf.org/rss.xml&quot;&gt;pgp.pm&lt;/a&gt;,
&lt;a href=&quot;http://gwolf.org/rss.xml&quot;&gt;pgp.mit.edu&lt;/a&gt;, &lt;a href=&quot;http://gwolf.org/rss.xml&quot;&gt;the.earth.li&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Make sure your name is readable and matches what you want others to
sign. If it does not, edit your key and upload it &lt;em&gt;now&lt;/em&gt;!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Remember that, &lt;a href=&quot;https://debconf26.debconf.org/about/ksp/&quot;&gt;as announced&lt;/a&gt;,
the deadline for the final list is on &lt;strong&gt;Thursday, 2026.07.16, 09:00 GMT-3
(Argentinian time).&lt;/strong&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;</content>
	<author>
	  <name>Gunnar Wolf</name>
	   <uri>https://gwolf.org</uri> 
	</author>
	<source>
	  <title type="html">Gunnar Wolf - Nice grey life</title>
	  <subtitle type="html">Gunnar Wolf - Nice grey life</subtitle>
	  <link rel="self" href="https://gwolf.org/rss.xml"/>
	  <id>https://gwolf.org</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">zed-xdebug</title>
	<link href="https://blog.freesources.org//posts/2026/07/zed-xdebug/"/>
	<id>https://blog.freesources.org//posts/2026/07/zed-xdebug/</id>
	<updated>2026-07-14T10:46:20+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;h1 id=&quot;Nextcloud_PHP_debugging_with_Xdebug_in_Zed_editor&quot;&gt;Nextcloud PHP debugging with Xdebug in Zed editor&lt;/h1&gt;

&lt;p&gt;I started to switch from PhpStorm to Zed as IDE recently as Zed is open source
and has a much smaller footprint and is more slick than PhpStorm.&lt;/p&gt;

&lt;p&gt;One thing that I didn&#39;t get running immediately was Xdebug integration, so I did
a bit of research and asked Claude for help. Here&#39;s a quick writeup of how to
get it running.&lt;/p&gt;

&lt;p&gt;I have Zed installed as Flatpak on a Debian Trixie host system.&lt;/p&gt;

&lt;p&gt;The PHP process runs in a &lt;a href=&quot;https://github.com/juliusknorr/nextcloud-docker-dev/&quot;&gt;nextcloud-docker-dev&lt;/a&gt;
Docker container.&lt;/p&gt;

&lt;h2 id=&quot;Install_Zed_and_configure_debugging_there&quot;&gt;Install Zed and configure debugging there&lt;/h2&gt;

&lt;p&gt;Install Zed: &lt;code&gt;flatpak install flathub dev.zed.Zed&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In Zed: open the Extensions view and install PHP.&lt;/p&gt;

&lt;p&gt;Configure the debugger:&lt;/p&gt;

&lt;p&gt;Create &lt;code&gt;~/.var/app/dev.zed.Zed/config/zed/debug.json&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;json&quot;&gt;[
  {
    &quot;label&quot;: &quot;PHP: Listen to Xdebug&quot;,
    &quot;adapter&quot;: &quot;Xdebug&quot;,
    &quot;request&quot;: &quot;launch&quot;,
    &quot;port&quot;: 9003,
    &quot;pathMappings&quot;: {
      &quot;/var/www/html&quot;:             &quot;/home/&amp;lt;user&amp;gt;/devel/nextcloud/server&quot;,
      &quot;/var/www/html/apps-extra&quot;:  &quot;/home/&amp;lt;user&amp;gt;/devel/nextcloud/server/apps-extra&quot;,
      &quot;/var/www/html/apps-shared&quot;: &quot;/home/&amp;lt;user&amp;gt;/devel/nextcloud/apps-shared&quot;
    }
  }
]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Add one entry per bind-mounted app directory.&lt;/p&gt;

&lt;p&gt;After creating the file, restart Zed.&lt;/p&gt;

&lt;p&gt;Inside Zed, select &quot;debugger: start&quot; from command palette and then &quot;PHP: Listen to Xdebug&quot;.&lt;/p&gt;

&lt;p&gt;Verify Zed is listening. Running &lt;code&gt;ss -tlnp | grep 9003&lt;/code&gt; on the host should show &lt;code&gt;*:9003&lt;/code&gt; with Zed as the process.&lt;/p&gt;

&lt;h2 id=&quot;Configure_Xdebug_inside_the_container&quot;&gt;Configure Xdebug inside the container&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;/usr/local/etc/php/conf.d/xdebug.ini&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;ini&quot;&gt;xdebug.mode = debug
xdebug.idekey = PHPSTORM
xdebug.trace_output_name=trace.%R.%u
xdebug.profiler_output_name=profile.%R.%u
xdebug.output_dir=/shared/xdebug

xdebug.log = /var/log/xdebug.log
xdebug.log_level = 3

; Try to discover the client host, otherwise fall back to the docker host
xdebug.discover_client_host=true
xdebug.client_host=host.docker.internal

; When you cannot specify a trigger, use &quot;xdebug.start_with_request = yes&quot; to autostart debugging for all requests
; https://xdebug.org/docs/all_settings#start_with_request
xdebug.start_with_request = trigger

; Set xdebug.mode trace to use this
; More details at https://derickrethans.nl/flamboyant-flamegraphs.html
xdebug.trace_format=3
xdebug.trace_output_name=xdebug.%R.%u
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Apply changes by restarting apache in the container: &lt;code&gt;apache2ctl -k graceful&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Notes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;host.docker.internal&lt;/code&gt; resolves on Linux Docker only if the container was started with &lt;code&gt;--add-host=host.docker.internal:host-gateway&lt;/code&gt; (nextcloud-docker-dev already does this).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;discover_client_host = true&lt;/code&gt; makes xdebug follow &lt;code&gt;X-Forwarded-For&lt;/code&gt; - useful behind Nextcloud&#39;s dev reverse proxy.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2 id=&quot;Test_xdebug_with_a_PHP_command_inside_the_container&quot;&gt;Test xdebug with a PHP command inside the container&lt;/h2&gt;

&lt;p&gt;Run &lt;code&gt;XDEBUG_SESSION=PHPSTORM php occ status&lt;/code&gt; inside the container and check &lt;code&gt;/var/log/xdebug.log&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;Install_the_browser_extension&quot;&gt;Install the browser extension&lt;/h2&gt;

&lt;p&gt;Install Xdebug Helper (Firefox/Chrome). In its preferences, set the IDE Key to PhpStorm. It will set the &lt;code&gt;XDEBUG_SESSION&lt;/code&gt; cookie when toggled to Debug.&lt;/p&gt;

&lt;p&gt;Click the Xdebug Helper icon in the browser and set it to Debug.&lt;/p&gt;

&lt;h2 id=&quot;Test_Xdebug_with_browser_extension&quot;&gt;Test Xdebug with browser extension&lt;/h2&gt;

&lt;p&gt;Load the URL that exercises the code path with the breakpoint. Zed should stop the code exection at the breakpoint.&lt;/p&gt;</content>
	<author>
	  <name>mejo roaming</name>
	   <uri>https://blog.freesources.org//</uri> 
	</author>
	<source>
	  <title type="html">mejo roaming</title>
	  <subtitle type="html">mejo roaming</subtitle>
	  <link rel="self" href="https://blog.freesources.org//index.atom"/>
	  <id>https://blog.freesources.org//</id>  
	</source>
  </entry>
  
  <entry xml:lang="en">
	<title type="html" xml:lang="en">Reproducible Builds in June 2026</title>
	<link href="https://reproducible-builds.org/reports/2026-06/"/>
	<id>https://reproducible-builds.org/reports/2026-06/</id>
	<updated>2026-07-11T19:27:22+00:00</updated>
	<summary type="html" xml:lang="en"></summary>
	<content type="html" xml:lang="en">&lt;p class=&quot;lead&quot;&gt;&lt;strong&gt;Welcome to the June 2026 report from the &lt;a href=&quot;https://reproducible-builds.org&quot;&gt;Reproducible Builds&lt;/a&gt; project!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://reproducible-builds.org/&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-06/reproducible-builds.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In these reports, we outline the most important things that we have been up to over the past month. As a quick recap about what problem our project intends to solve, whilst anyone may inspect the source code of free software for malicious flaws, almost all software is distributed to end users as pre-compiled binaries. The motivation behind the reproducible builds effort is to ensure no flaws have been introduced during this compilation process by promising identical results are always generated from a given source, thus allowing multiple third-parties to come to a consensus on whether a build was compromised or not.&lt;/p&gt;

&lt;p&gt;If you are interested in contributing to the project, please visit our &lt;a href=&quot;https://reproducible-builds.org/contribute/&quot;&gt;&lt;em&gt;Contribute&lt;/em&gt;&lt;/a&gt; page on our website.&lt;/p&gt;

&lt;p&gt;In this monthâ€™s report, we cover:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#only-installing-reproducible-packages-with-repro-threshold&quot;&gt;Only installing reproducible packages with &lt;em&gt;repro-threshold&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#distribution-work&quot;&gt;Distribution work&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#diffoscope-development&quot;&gt;diffoscope development&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#from-our-mailing-list&quot;&gt;From our mailing listâ€¦&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#documentation-updates&quot;&gt;Documentation updates&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#patches&quot;&gt;Patches&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#four-new-scholarly-papers&quot;&gt;Four new scholarly papers&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;only-installing-reproducible-packages-with-repro-threshold&quot;&gt;Only installing reproducible packages with &lt;em&gt;repro-threshold&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://rebuilderd.xpam.pl:2096/demo.html&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-06/repro-threshold.png#center&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A &lt;a href=&quot;https://rebuilderd.xpam.pl:2096/demo.html&quot;&gt;very interesting demonstration&lt;/a&gt; is now available showing how you might configure your Debian system to only install packages that have been reproduced by &lt;em&gt;m/n&lt;/em&gt; rebuilders.&lt;/p&gt;

&lt;p&gt;This is implemented via a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reproduced+https://&lt;/code&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/APT_(software)&quot;&gt;APT&lt;/a&gt; transport ( a mechanism for communicating between the APT client and its repository source â€” commonly HTTP):&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Every package download is intercepted by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;repro-threshold&lt;/code&gt;, which queries two independent rebuilders for a signed attestation before allowing installation to proceed. [It] is important to note that [an] install will only succeed if all package dependencies are also reproducible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The &lt;a href=&quot;https://rebuilderd.xpam.pl:2096/demo.html&quot;&gt;demo&lt;/a&gt; gives examples of how to quickly experiment with this using a &lt;a href=&quot;https://www.docker.com/&quot;&gt;Docker&lt;/a&gt; container.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;distribution-work&quot;&gt;Distribution work&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://debian.org/&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-06/debian.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Debian&lt;/strong&gt; this month:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;The &lt;a href=&quot;https://tracker.debian.org/pkg/debian-installer&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;debian-installer&lt;/code&gt;&lt;/a&gt; package in Debian was uploaded with a &lt;a href=&quot;https://tracker.debian.org/news/1768824/accepted-debian-installer-20260628-source-into-unstable/&quot;&gt;substantial reproducibility-related changelog&lt;/a&gt;. This means, for the first time, the &lt;a href=&quot;https://reproduce.debian.net/excuses.html?source_name=debian-installer&quot;&gt;uploaded version could finally be reproduced&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Various &lt;a href=&quot;https://openjdk.org/&quot;&gt;OpenJDK&lt;/a&gt; packages were also uploaded to Debian, including the fix for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;JDK-8385738&lt;/code&gt; (â€œJavadoc does not produce reproducible outputâ€¦â€�) (&lt;a href=&quot;https://reproduce.debian.net/all/api/v1/builds/206100/artifacts/426780/diffoscope&quot;&gt;for example&lt;/a&gt;).Â [&lt;a href=&quot;https://tracker.debian.org/news/1760093/accepted-openjdk-27-2724ea-2-source-into-unstable/&quot;&gt;â€¦&lt;/a&gt;][&lt;a href=&quot;https://tracker.debian.org/news/1760960/accepted-openjdk-26-26018-3-source-into-unstable/&quot;&gt;â€¦&lt;/a&gt;][&lt;a href=&quot;https://tracker.debian.org/news/1760962/accepted-openjdk-25-25044ea-1-source-into-unstable/&quot;&gt;â€¦&lt;/a&gt;]&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The â€œreasonâ€� pages on &lt;a href=&quot;https://reproduce.debian.net&quot;&gt;&lt;em&gt;reproduce.debian.net&lt;/em&gt;&lt;/a&gt;, &lt;a href=&quot;https://reproduce.debian.net/ppc64el/stats/unstable/&quot;&gt;such as the one for &lt;em&gt;ppc64el&lt;/em&gt;&lt;/a&gt;, now feature links labeled with the &lt;a href=&quot;https://www.compart.com/en/unicode/U+1F41B&quot;&gt;bug emoji&lt;/a&gt; (i.e. ğŸ�›) which links to the categorized issues packages have been tagged with in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reproducible-notes.git&lt;/code&gt; repo.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Indeed, 25 reviews of Debian packages were added, 31 were updated and 33 were removed this month adding to &lt;a href=&quot;https://tests.reproducible-builds.org/debian/index_issues.html&quot;&gt;our extensive knowledge about identified issues&lt;/a&gt;. Two issue types were updated as well.Â [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-notes/commit/a2302451&quot;&gt;â€¦&lt;/a&gt;][&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-notes/commit/9e09f1ee&quot;&gt;â€¦&lt;/a&gt;]&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://apt.izzysoft.de/fdroid/&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-06/izzyondroid.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://apt.izzysoft.de/fdroid/&quot;&gt;&lt;strong&gt;IzzyOnDroid&lt;/strong&gt;&lt;/a&gt; Android APK repository reached its next milestone this month, now covering 2 out of every 3 apps (66.7%) with reproducible builds. Their &lt;a href=&quot;https://izzyondroid.org/docs/reproducibleBuilds/DebugFailedRBs/&quot;&gt;documentation for debugging and fixing failed builds&lt;/a&gt; has steadily grown as well. More clients have picked up showing reproducibility results (e.g. Droid-ify), and &lt;a href=&quot;https://apt.izzysoft.de/packages/com.machiav3lli.fdroid&quot;&gt;Neo Store&lt;/a&gt; now can be configured to stick to only reproducible applications. Further, an &lt;a href=&quot;https://shields.rbtlog.dev/&quot;&gt;independent builder&lt;/a&gt; has been added to the build farm, increasing the trust level even more as APK builds can have multiple confirmations now.&lt;/p&gt;

&lt;p&gt;At the same time, IzzyOnDroidâ€™s &lt;a href=&quot;https://codeberg.org/IzzyOnDroid/rbtlog&quot;&gt;&lt;em&gt;rbtlog&lt;/em&gt;&lt;/a&gt; got several new features. The most outstanding is caching for frequently used resources such as &lt;a href=&quot;https://github.com/obfusk/reproducible-apk-tools&quot;&gt;&lt;em&gt;reproducible-apk-tools&lt;/em&gt;&lt;/a&gt;, command-line tools and NodeJS in order to counter ongoing issues with GitHub availability, while at the same time saving bandwidth and build time. This change also enables some other some smaller enhancements such as being able to configure build timeouts per recipe for those builds running longer than the average, release pattern filtering for update checks or having a field for maintainer notes to shortly summing up e.g. why a reproducible build failed.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.opensuse.org/&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-06/opensuse.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lastly, Bernhard M. Wiedemann posted another &lt;a href=&quot;https://www.opensuse.org/&quot;&gt;&lt;strong&gt;openSUSE&lt;/strong&gt;&lt;/a&gt; &lt;a href=&quot;https://lists.opensuse.org/archives/list/factory@lists.opensuse.org/thread/LQPMRQ5W3XJ7RWAQ6ITI4EY2EDVTVHKA/&quot;&gt;monthly update&lt;/a&gt; for their reproducibility work there.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;diffoscope-development&quot;&gt;&lt;em&gt;diffoscope&lt;/em&gt; development&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://diffoscope.org/&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-06/diffoscope.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://diffoscope.org&quot;&gt;&lt;strong&gt;diffoscope&lt;/strong&gt;&lt;/a&gt; is our in-depth and content-aware diff utility that can locate and diagnose reproducibility issues. This month, Chris Lamb made the following changes, including preparing and uploading versions &lt;a href=&quot;https://tracker.debian.org/news/1762589/accepted-diffoscope-319-source-into-unstable/&quot;&gt;319&lt;/a&gt;, &lt;a href=&quot;https://tracker.debian.org/news/1764827/accepted-diffoscope-320-source-into-unstable/&quot;&gt;320&lt;/a&gt;, &lt;a href=&quot;https://tracker.debian.org/news/1764860/accepted-diffoscope-321-source-into-unstable/&quot;&gt;321&lt;/a&gt;, &lt;a href=&quot;https://tracker.debian.org/news/1767978/accepted-diffoscope-322-source-into-unstable/&quot;&gt;322&lt;/a&gt; and &lt;a href=&quot;https://tracker.debian.org/news/1769647/accepted-diffoscope-323-source-into-unstable/&quot;&gt;323&lt;/a&gt; to Debian:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Debian adds an extra &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Flags:&lt;/code&gt; line in the output of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ocamlobjinfo&lt;/code&gt;, so adjust the test for cross-distribution compatibility.Â [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/diffoscope/commit/3a2303e5&quot;&gt;â€¦&lt;/a&gt;]&lt;/li&gt;
  &lt;li&gt;Bump debhelper compatibility level to 14.Â [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/diffoscope/commit/ae1d587a&quot;&gt;â€¦&lt;/a&gt;]&lt;/li&gt;
  &lt;li&gt;Fix compatibility with Ocaml 5.4.1.Â [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/diffoscope/commit/50476c66&quot;&gt;â€¦&lt;/a&gt;]&lt;/li&gt;
  &lt;li&gt;Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--long-form&lt;/code&gt;-style arguments when calling &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apktool&lt;/code&gt; in order to support &lt;em&gt;apktool&lt;/em&gt; version 3.Â [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/diffoscope/commit/02c65572&quot;&gt;â€¦&lt;/a&gt;]&lt;/li&gt;
  &lt;li&gt;Support Androguard version 4 and previous versions at the same time.Â [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/diffoscope/commit/2b17885b&quot;&gt;â€¦&lt;/a&gt;]&lt;/li&gt;
  &lt;li&gt;Update copyright years.Â [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/diffoscope/commit/bf7aa877&quot;&gt;â€¦&lt;/a&gt;]&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In addition, Jochen Sprickerhof added better header detection for the &lt;a href=&quot;https://www.sphinx-doc.org/en/master/&quot;&gt;Sphinx documentation system&lt;/a&gt;Â [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/diffoscope/commit/b800d697&quot;&gt;â€¦&lt;/a&gt;], Michael Daniels fixed the tests when run with &lt;em&gt;zipdetails&lt;/em&gt; version 4.006Â [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/diffoscope/commit/fade8d04&quot;&gt;â€¦&lt;/a&gt;] and Zbigniew JÄ™drzejewski-Szmek added a version of the deprecated &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;os.path.commonprefix&lt;/code&gt; methodÂ [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/diffoscope/commit/2af9e134&quot;&gt;â€¦&lt;/a&gt;].&lt;/p&gt;

&lt;p&gt;In addition, Vagrant Cascadian &lt;a href=&quot;https://codeberg.org/guix/guix/commit/43f80a83c99f7e3bf82cc27c5a95b9aead659ee6&quot;&gt;updated &lt;em&gt;diffoscope&lt;/em&gt; in GNU Guix to version &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;321&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/guix/guix/commit/636a104836fe00fca5844e15e3c40c9cf5cd1427&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;323&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Chris Lamb also made the following changes to &lt;em&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/strip-nondeterminism&quot;&gt;strip-nondeterminism&lt;/a&gt;&lt;/em&gt;, our tool to remove specific non-deterministic results from a completed build:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Skip symlinks when manually called via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/usr/bin/strip-nondeterminism&lt;/code&gt;.Â (&lt;a href=&quot;https://bugs.debian.org/1139000&quot;&gt;#1139000&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Update &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;debian/watch&lt;/code&gt; format.Â [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/strip-nondeterminism/commit/9042813&quot;&gt;â€¦&lt;/a&gt;]&lt;/li&gt;
  &lt;li&gt;Drop &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Rules-Requires-Root: no&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Priority: optional&lt;/code&gt; fields.Â [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/strip-nondeterminism/commit/7399bc4&quot;&gt;â€¦&lt;/a&gt;]&lt;/li&gt;
  &lt;li&gt;Bump &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Standards-Version&lt;/code&gt; to version 4.7.4.Â [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/strip-nondeterminism/commit/aa3e692&quot;&gt;â€¦&lt;/a&gt;]&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;from-our-mailing-list&quot;&gt;From our mailing listâ€¦&lt;/h3&gt;

&lt;p&gt;On &lt;a href=&quot;https://lists.reproducible-builds.org/listinfo/rb-general/&quot;&gt;our mailing list&lt;/a&gt; this month:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;kpcyrd&lt;/em&gt; posted to our mailing list regarding the â€œwaves of malware uploads to &lt;a href=&quot;https://aur.archlinux.org/&quot;&gt;aur.archlinux.org&lt;/a&gt;â€�. Curiously, â€œevery incident I looked at used npmjs.com for malware deliveryâ€�, specifically where the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;npm&lt;/code&gt; package includes an (automatically executed) &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;preinstall&lt;/code&gt; script that is an ELF binary.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;kpcyrd&lt;/em&gt; also announced the release of &lt;a href=&quot;https://github.com/kpcyrd/debian-repro-status&quot;&gt;&lt;em&gt;debian-repro-status&lt;/em&gt;&lt;/a&gt; version &lt;a href=&quot;https://github.com/kpcyrd/debian-repro-status/releases/tag/v0.4.0&quot;&gt;0.4.0&lt;/a&gt;, a tool written â€œto give you an approximate idea of how viable it would be to enforce a â€˜reproducible packages onlyâ€™ update policy for the computer system youâ€™ve builtâ€�:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;The change updates dependencies to the latest versions, and adds support for multiple &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-H&lt;/code&gt; options, to query results from multiple rebuilderd instances. The results are also now fetched concurrently.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;kpcyrd&lt;/em&gt; also reported that, whilst taking a screenshot for the above release, they noticed that the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;debian:sid&lt;/code&gt; &lt;a href=&quot;https://lists.reproducible-builds.org/pipermail/rb-general/2026-June/004121.html&quot;&gt;container now is 100% reproducible&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Finally, &lt;em&gt;kpcyrd&lt;/em&gt; &lt;strong&gt;also&lt;/strong&gt; &lt;a href=&quot;https://github.com/keszybz/add-determinism/pull/78&quot;&gt;created a pull request&lt;/a&gt; against the &lt;a href=&quot;https://github.com/keszybz/add-determinism&quot;&gt;&lt;em&gt;add-determinism&lt;/em&gt;&lt;/a&gt; package to update the &lt;a href=&quot;https://docs.python.org/3/library/itertools.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;itertools&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://docs.python.org/3/library/zipfile.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zip&lt;/code&gt;&lt;/a&gt; Python dependencies.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;documentation-updates&quot;&gt;Documentation updates&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://reproducible-builds.org/&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-06/website.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yet again, there were a number of improvements made to our website this month including:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Chris Lamb added a reminder re. using the UTC variants of the Javascript &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Date&lt;/code&gt; methods.Â [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-website/commit/27245b53&quot;&gt;â€¦&lt;/a&gt;]&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Mattia Rizzolo moved &lt;a href=&quot;https://www.opentech.fund/&quot;&gt;OTF&lt;/a&gt; to the â€˜oldâ€™ sponsors list. Thank you for your support!.Â [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-website/commit/d029630d&quot;&gt;â€¦&lt;/a&gt;]&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;kpcyrd&lt;/em&gt; updated the &lt;a href=&quot;https://rust-lang.org/&quot;&gt;Rust&lt;/a&gt; documentation to recommend using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--release&lt;/code&gt; argument for consistency.Â [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-website/commit/f5d645e5&quot;&gt;â€¦&lt;/a&gt;]&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;patches&quot;&gt;Patches&lt;/h3&gt;

&lt;p&gt;The Reproducible Builds project detects, dissects and attempts to fix as many currently-unreproducible packages as possible. We endeavour to send all of our patches upstream where applicable or possible. This month, we wrote a large number of such patches, including:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Bernhard M. Wiedemann:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugzilla.opensuse.org/show_bug.cgi?id=1268265&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvise&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://build.opensuse.org/request/show/1362390&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;efl&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugzilla.opensuse.org/show_bug.cgi?id=1268542&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gettext-runtime/bash&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugzilla.opensuse.org/show_bug.cgi?id=1268340&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hadrian&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://build.opensuse.org/request/show/1362888&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;plasma6-keyboard&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://invent.kde.org/frameworks/syntax-highlighting/-/merge_requests/806&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;syntax-highlighting&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Chris Lamb:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1139654&quot;&gt;#1139654&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/node-fuse.js&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node-fuse.js&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1139655&quot;&gt;#1139655&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/node-egjs-hammerjs&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node-egjs-hammerjs&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1139656&quot;&gt;#1139656&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/node-chartjs-adapter-date-fns&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node-chartjs-adapter-date-fns&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1139662&quot;&gt;#1139662&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/mkdocs-include-markdown-plugin&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mkdocs-include-markdown-plugin&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1139704&quot;&gt;#1139704&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/lmarbles&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lmarbles&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1140240&quot;&gt;#1140240&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/rocm-docs-core&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rocm-docs-core&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1140567&quot;&gt;#1140567&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/libecoli&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libecoli&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1140688&quot;&gt;#1140688&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/golang-github-tobischo-gokeepasslib&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;golang-github-tobischo-gokeepasslib&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Jochen Sprickerhof:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1139457&quot;&gt;#1139457&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/c-munipack&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;c-munipack&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1140365&quot;&gt;#1140365&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/latex-coffee-stains&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;latex-coffee-stains&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1140366&quot;&gt;#1140366&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/cxxtest&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cxxtest&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1140367&quot;&gt;#1140367&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/slime&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;slime&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1140368&quot;&gt;#1140368&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/spooles&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;spooles&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1140369&quot;&gt;#1140369&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/sdpb&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sdpb&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1140645&quot;&gt;#1140645&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/procmail&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;procmail&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1140676&quot;&gt;#1140676&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/proftpd-dfsg&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;proftpd-dfsg&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1141059&quot;&gt;#1141059&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/mah-jong&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mah-jong&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1141133&quot;&gt;#1141133&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/dxf2gcode&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dxf2gcode&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1141194&quot;&gt;#1141194&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/afterstep&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;afterstep&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1141195&quot;&gt;#1141195&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/ledger2beancount&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ledger2beancount&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1141196&quot;&gt;#1141196&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/ocamlviz&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ocamlviz&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Kris Van Hee and Vagrant Cascadian:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1140167&quot;&gt;#1140167&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/dtrace&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dtrace&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;four-new-scholarly-papers&quot;&gt;Four new scholarly papers&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://lab.iisec.ac.jp/~suzaki_lab/PDF/DSN-HAP26_muto.pdf&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-06/DSN-HAP26_muto.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Kenichiro Muto and Kuniyasu Suzaki of the &lt;a href=&quot;https://www.iisec.ac.jp/english/&quot;&gt;Institute of Information Security&lt;/a&gt; in Yokohama, Japan published an interesting paper this month titled &lt;a href=&quot;https://lab.iisec.ac.jp/~suzaki_lab/PDF/DSN-HAP26_muto.pdf&quot;&gt;&lt;em&gt;Attestable Build Chain: Enabling Trust in Reproducible Builds&lt;/em&gt;&lt;/a&gt; (PDF). Their abstract is as follows:&lt;/p&gt;

&lt;p&gt;Ensuring trust in software supply chains requires verifying not only artifacts but also the processes that produce them. Although Reproducible Builds (R-B) require rebuilding to validate artifacts, they cannot verify whether the build was executed with the intended toolchain and inputs and may reproduce unintended or compromised builds without detection. We present Attestable Build Chain, a framework for externally verifying build-time execution without rebuilding. Rather than preventing compromise, it provides verifiable, tamper-evident evidence of actual build-time execution, enabling verification of build process integrity from observed file accesses during the build. [&lt;a href=&quot;https://lab.iisec.ac.jp/~suzaki_lab/PDF/DSN-HAP26_muto.pdf&quot;&gt;â€¦&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://hal.science/hal-05630285v1&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-06/2025-nixpkgs-reproducibility-extended.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Julien Malka, Stefano Zacchiroli and ThÃ©o Zimmermann published a 50-page report detailing &lt;a href=&quot;https://hal.science/hal-05630285v1&quot;&gt;&lt;em&gt;A Decade of Software Reproducibility in the Nix Package Ecosystem&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;We find that functional package management enables extremely high rebuildability over time (&lt;strong&gt;near-universal ability to reconstitute historical build environments and rebuild software packages&lt;/strong&gt;), while bitwise reproducibility has steadily improved and reaches a high point in recent years (up to 93% in 2024). Early years show substantially lower bitwise reproducibility, indicating that functional package management alone does not guarantee bitwise-identical outputs, and that the observed high level of bitwise reproducibility is not solely due to the package management approach. Common causes of unreproducibility, both in the rebuildability and bitwise reproducibility dimensions, include management of dates in build and test processes; we quantify their prevalence and other common causes using manual analysis of logs of rebuild failures and automated analysis of &lt;a href=&quot;https://diffoscope.org/&quot;&gt;&lt;em&gt;diffoscope&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A &lt;a href=&quot;https://hal.science/hal-05630285v1/file/2025-nixpkgs-reproducibility-extended.pdf&quot;&gt;PDF of their report&lt;/a&gt; is available online&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://devguard.org/research-development/bit-for-bit-building-sovereign-reproducible-container-supply-chain-devguard.pdf&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-06/bit-for-bit-building-sovereign-reproducible-container-supply-chain-devguard.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tim Bastin of &lt;a href=&quot;https://l3montree.com/&quot;&gt;L3montree GmbH&lt;/a&gt; and Jacek Galowicz of &lt;a href=&quot;https://applicative.systems/&quot;&gt;Applicative Systems GmbH&lt;/a&gt; from &lt;a href=&quot;https://devguard.org/&quot;&gt;DevGuard&lt;/a&gt; published a paper detailing &lt;a href=&quot;https://devguard.org/research-development/bit-for-bit-building-sovereign-reproducible-container-supply-chain-devguard.pdf&quot;&gt;&lt;em&gt;How We Built a Sovereign, Reproducible Container Supply Chain for DevGuard&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;This paper presents how the &lt;a href=&quot;https://devguard.org/&quot;&gt;DevGuard&lt;/a&gt; project rebuilt its &lt;a href=&quot;https://opencontainers.org/&quot;&gt;OCI container&lt;/a&gt; pipeline around reproducible &lt;a href=&quot;https://nixos.org/&quot;&gt;Nix&lt;/a&gt; builds and independent dual-platform digest verification. DevGuard images are built hermetically from pinned source revisions, signed with &lt;a href=&quot;https://github.com/sigstore/cosign&quot;&gt;Sigstore/Cosign&lt;/a&gt;, and verified through digest comparison across GitHub Actions and sovereign GitLab infrastructure hosted on container.gov.de. We describe the practical integration of reproducible OCI image builds into existing CI/CD workflows and argue that independently reproducible container digests provide a stronger integrity guarantee against build tampering than provenance alone. The paper further discusses remaining trust assumptions and the relevance of sovereign build infrastructure for government and regulated environments.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/S2405959526001086&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-06/1-s2.0-S2405959526001086-main.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, Yiseul Choi, Junga Kim, Jun-Ho Hong and Seongmin Kim of the &lt;a href=&quot;https://www.sungshin.ac.kr/main_eng/15348/subview.do&quot;&gt;Department of Convergence Security Engineering&lt;/a&gt; at the &lt;a href=&quot;https://www.sungshin.ac.kr/&quot;&gt;Sungshin Womenâ€™s University&lt;/a&gt; in Seoul, Korea titled &lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/S2405959526001086&quot;&gt;&lt;em&gt;Attestation-based verification of SBOM integrity via consumer-side reproducibility&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Software bills of materials (SBOMs) support supply chain transparency, but they do not prove that a delivered SBOM reproducibly corresponds to its software artifact. Existing signing and provenance mechanisms protect integrity and traceability, yet lack consumer-side reproducible verification. We propose an SBOM integrity verification framework combining procedure disclosure, consumer-side reproduction, authority-generated reference evidence, and digest comparison. A trusted authority records a reference digest, and consumers compare it with locally reproduced and delivered SBOM digests. Experiments on 100 real-world container images show detection of artifact tampering, SBOM substitution, distribution modification, and adaptive tampering beyond signature-based approaches&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Finally, if you are interested in contributing to the Reproducible Builds project, please visit our &lt;a href=&quot;https://reproducible-builds.org/contribute/&quot;&gt;&lt;em&gt;Contribute&lt;/em&gt;&lt;/a&gt; page on our website. However, you can get in touch with us via:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;IRC: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#reproducible-builds&lt;/code&gt; on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;irc.oftc.net&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Mastodon: &lt;a href=&quot;https://fosstodon.org/@reproducible_builds&quot;&gt;@reproducible_builds@fosstodon.org&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Mailing list: &lt;a href=&quot;https://lists.reproducible-builds.org/listinfo/rb-general&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rb-general@lists.reproducible-builds.org&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;</content>
	<author>
	  <name>Reproducible Builds</name>
	   <uri>https://reproducible-builds.org/blog/</uri> 
	</author>
	<source>
	  <title type="html">reproducible-builds.org</title>
	  <subtitle type="html">Reproducible builds blog</subtitle>
	  <link rel="self" href="https://reproducible-builds.org/blog/index.rss"/>
	  <id>https://reproducible-builds.org/blog/</id>  
	</source>
  </entry>
  
</feed>
