On the morning of Friday, 17 July 2026, I published a blog post
announcing my nomination in the Clacton-on-Sea by-election. The
blog post finished with a challenge hinting at a previous record set
by rivaly between an English athlete and an Australian challenger:
Call for Nigel Farage, champion of the imperial system of weights and measures, to run a mile against an Australian candidate
Politicians frequently talk about running for election. The public is fed up with this talk. If you say you want to run and if you are going to force the council staff to change their summer holiday plans and organise an election at huge public expense then you need to run when you say you want to run.
In other words, dust off your trainers.
The story of the four-minute-mile was closely intertwined with the enthusiasm for an Anglo-Australian grudge match.
Farage has refused to debate other candidates so I'm calling for him to prove his love for the mile with me.
There you have it, with the text in bold, I've summoned the ghosts of
Roger Bannister and
John Landy. And they couldn't resist the opportunity to run again too.
Here they are both beating the four-minute mile threshold together at the
Commonwealth Games in Vancouver. Bannister got there first but
we remember them together.
The nomination process closed at 16:00 on Friday. A few hours later, the returning
officer announced his office had received 34 valid nominations. That is a new UK
record for the number of candidates contesting a by-election.
The committee has decided that my submission had to be classified
as Confidential, the civilian equivalent of top secret
in the military. In other words, you, the public, are prohibited from reading
it. Unless, of course, the people of
Clacton-on-Sea vote for me and I table
cult evidence in the British Parliament.
Thought exercise: is
Reform UK a
cult and if we want to rise above that type of politics, do we need a
cult expert in parliament?
...
The committee had some public hearings earlier this year where
cult victims came to tell their stories.
In the world of open source software, we have the case of the
Ubuntu misfits engaging in parasitic behaviour against
Debianism volunteers.
Mark Shuttleworth, the founder of
Ubuntu, told us he chose the name "Ubuntu" because it means
"sharing".
In practice, it has come to mean doing chores, or working, without
getting paid. Various
suicide victims told us that.
Frans Pop resigned for the first time in 2008 and then made
a comeback, telling us:
The fact that I want to be a DD again does not mean that I'm ready to go back to the level of involvement/activity I had before my resignation.
In other words, he still hadn't completely realized he was in the grip
of a
cult. That is the very nature of a
cult. If people knew it was a
cult, they wouldn't do it.
This is why
cult-like groups spend so much money on legal action to stop
people using the word
"
cult". Here is the money spent by the
Debianists to stop people suggesting they are a
cult:
Ms Esguerra said within her former church, sex was called "sharing" — posing
a risk that if a child reported to police that someone had shared with them,
authorities might not know they were reporting an assault.
It is disturbing to see The Family International and
Mark Shuttleworth both chose the "sharing" theme to cover their
real intentions for victims.
Frans Pop announced his second resignation on the night before Debian Day.
Just as police failed to realize that "sharing" was really abuse, Debianists
failed to recognize that the resignation wasn't a real resignation, it was
a suicide note.
Ubuntu is not sharing, it has turned
Debianism into work without pay.
The resigning member for
Clacton has frequently said the UK needs to copy
Australian policy.
In the 2010 Victorian State election, the winners were elected on a platform
of searching for big cats in the Victorian highlands.
Shortly before the election in 2010, then Deputy Premier,
Peter Ryan, declared there were
"enough credible sightings"
to justify search teams putting paws on the ground.
In August 2012, visitors to
St Osyth, which is adjacent to
Clacton-on-Sea, also demanded that authorities deploy all available
resources in the hunt for a big cat: the world famous
Essex Lion.
BBC reporters told us, while keeping a straight face, one of the witnesses
worked at the Red Lion pub. Police eventually released the photo
from witnesses who reported the first sighting of the
Essex Lion:
The advocacy email included Sophie's
Freexian email address. Some people know
Raphael Hertzog has some connection with
Freexian, which he founded and when they see
Sophie's email address, they will realise there is some connection.
Nonetheless, the inclusion of
Sophie's email address at
Freexian is not the same as a declaring they are a married couple
running a business together.
If
Debian is going to be honest with our community and our values then
we need to declare things like that.
Legal framework for handling cults in France
In 2000, the French parliament passed the
About-Picard Law 2001 to criminalise some of the most extreme
cases of exploitation and brainwashing.
French business records show us that
Freexian SARL is located just north of
Saint-Etienne. That is a small city about an hour away from
Lyon.
I felt that detail in the story is important for another reason. When
the rugby team from
Australia plays in
France, for example, at the recent Rugby World Cup 2023, they
stay in Saint Galmier, which is immediately to the north of
Freexian.
When rogue Debianists attacked my family, was it inspired by resentment
of Australia's rugby team?
History of Freexian antitrust behaviour and unfair competition in business
In the United States, unfair business practices are prosecuted under
criminal law. This is referred to as antitrust law in America or
anti-competitive behaviour or unfair trading in Australia.
In France these are civil law disputes. In the French language, the
term concurrence deloyale is used to describe antitrust
behaviour.
In this email from 2005,
Raphael Hertzog is using the organisation name "Debian" in
the message headers and he is using the names "Ouaza" and "Freexian"
in the message signature at the bottom. In other words, he uses
the names of these organisations interchangeably. He is
exerting influence over other volunteers who are not employees
of his company:
Subject: Re: WTF: Debian security, ex. Linux kernel vulnerabilities
Date: Wed, 21 Sep 2005 08:41:50 +0200
From: Raphael Hertzog <raphael@ouaza.com>
Organization: Debian
To: Martin Schulze <joey@infodrom.org>
CC: security@debian.org, leader@debian.org, debian-private@lists.debian.org
Le mardi 20 septembre 2005 à 16:21 +0200, Martin Schulze a écrit :
> The proper contact would be the security team.
Hi Joey,
I understand that it's difficult to respond to such aggressive mails.
However I believe that the concerns raised are reasonnable.
Andreas he's not the first one detecting very big delays in security
updates. We have all read your various blog posts when you had troubles
with the infrastructure in june... and you're aware that the delays have
been recently mentionned on a LWN article (and now the infrastructure
should be working fine).
It looks like the security team has a real problem in manpower (even if
several people are listed on the team, we need more people which stay
active like you do). And I don't see any evidence that work is done to
resolve this problem.
Please take a few minutes to explain what's planned to fix the various
issues and don't hesitate to ask for help, we have plenty of people
willing to help (maybe you can find skilled volunteers among the
secure-testing team?).
Cheers,
--
Raphaël Hertzog -+- http://www.ouaza.com
Freexian : des développeurs Debian au service des entreprises
http://www.freexian.com
Subject: Events at the DebConf Dinner
Date: Fri, 19 May 2006 10:41:19 -0500
From: Anthony Towns <aj@azure.humbug.org.au>
To: debian-private@lists.debian.org
CC: ted@reactor-core.org
Hi,
As promised, details from the dinner:
Ted was seen walking ...
[ ... snip ... ]
As I understand it,
Amaya Rodrigo Sastre asked
Fabio who the lady was, and was led to believe
that she was a prostitute.
[ ... snip ... ]
One of the volunteers, Ana Guerrero, spoke to Hilda and suggested that
it might be a good idea for her to leave.
[ ... snip ... ]
... and the question of whether she was or was not a prostitute was
not raised. As I understand it, at this point Hilda did leave, however
was encouraged to return by Ted and his long-time friend and co-worker,
John Sokol, a former developer of 386BSD and an attendee at DebConf.
At some point, I believe shortly after she returned, some attendees then
decided that it would be all right if she stayed, but Ted left. At this
point Holger and Moray, as mentioned above, manhandled Ted across the
dining hall to the door, where they were intercepted by John. At this
point the rest of the attendees noticed that something was going on, and a
group gathered around ...
[ ... snip ... ]
at which point Ted told him to "Get off me you fucking Nazi".
[ ... snip ... ]
I escorted Ted and
Hilda back to their seats to separate them from the other attendees who
were clearly angry, and tried to determine what was going on. At about
this time, Amaya and Fabio had a heated argument in Spanish, which Amaya
later indicated involved Fabio claiming that Hilda was not a prostitute,
and that he had never said anything that should give that impression.
I also spoke with Moray and Holger, who by this time were talking with
Bdale and some other developers who hadn't been involved, and indicated
that grabbing people to throw them out of the room was entirely wrong. At
this point they both remained extremely angry at the situation, and had
very little to say. I don't believe resorting to violence is remotely
appropriate within Debian, and had the opportunity to speak further about
this with Moray this morning, and hope to have a similar opportunity to
speak with Holger shortly.
[ ... snip ... ]
The report leaves out one key detail:
Amaya Rodrigo Sastre, who was present at the moment the rumour
started about
Ted Walther bringing a prostitute to the dinner, was actually
sleeping with
Holger Levsen. This is a common pattern throughout the history of
Debianism, the girlfriends are there to start gossip and the
boyfriends get worked up into a rage and attack people to please
their girlfriends.
Shortly after this, at
RMLL in 2006, a group of Debian Developers (joint authors) living in
France or having a strong connection to
France decided to form a local non-profit association under French law.
The name of the association is simply
Debian France.
Please write a list of 5 Debian Developers you would like to kick out of the project.
Enrico Zini becomes known as an attack dog who is used
to spread rumours and inflict punishments on other volunteers.
He is eventually rewarded with a contract from
Freexian after attacking me on multiple occasions.
Think about it for a moment, if your dog bites five people,
the authorities are going to have it put down. When
Enrico Zini wants to hit people with a hammer, they start
talking about whether to use a big hammer or a little hammer.
On 17 April 2011, on the same day Carla and I got married
Adrian von Bidder-Senn died in
Switzerland and it was discussed like a suicide. Read the
detailed history of the death. This death marks a significant
step change in the rudeness of certain people towards my family and I,
leading to various plots and conspiracies in the years that followed
the death.
Think about how horrible it is to recall a suicide like this on your
wedding anniversary each year.
On 5 May 2011,
Raphael Hertzog registered the domain name
debian-handbook.info and began using the name in his
email signature. Nobody has ever made any dispute about this
domain name but they viciously attack other people who register
domain names for our Debian work.
Here is an example of
Raphael Hertzog interacting with Dropbox about secretly
putting binaries into user home directories. The email has
his domain name debian-handbook.info at the bottom.
Subject: [rian@dropbox.com: Re: Dropbox Debian Package]
Date: Fri, 28 Oct 2011 10:45:52 +0200
From: Raphael Hertzog <hertzog@debian.org>
To: debian-private@lists.debian.org
[ ObPrivate: I'm sharing a private mail that I don't want to post
publicly. ]
Hello,
when I packaged nautilus-dropbox, I patched it so that the non-free
software is downloaded and installed in /var/lib/dropbox
instead of ~/.dropbox-dist/. Upsream is unhappy with this because
it means they cannot auto-update the version of dropbox
on user's system.
I have argued using several arguments: first it was not compliant
with the FHS, that software ought to be installed by the admin
and run by the user, and that software should not change
without the user's consent. I added that duplicating the binaries on each
user's account was non-optimal. I also said that it was not good security
wise to have the binaries owned by the user. I might have been a bit
quick in asserting that.
In any case, I wonder what other people think, am I right in
persisting that the official Debian package should not allow
auto-update of the software by installing a copy in $HOME by default?
If yes, what other arguments would you bring forward to convince
them given the response they made to me so far?
Cheers,
PS: The attached mail should never be disclosed.
--
Raphaël Hertzog ◈ Writer/Consultant ◈ Debian Developer
Pre-order a copy of The Debian Administrator's Handbook and
help liberate it: http://debian-handbook.info/go/ulule-rh/
In 2012,
Raphael Hertzog became president of the non-profit association
Debian France. He had this role at the same time that he was
running his private company using the Debian trademark. Both the
private company and the non-profit association were using the
trademark without permission from the wider body of joint authors.
This is one of many examples of the French developers simply going
out and doing something spontaneously without waiting for authorisation.
In the same year, French developer
Lucas Nussbaum was elected for a one year term as leader of
Debianism.
Immediately after being elected,
Lucas Nussbaum announced he was taking a vacation by sending
an email to the debian-private (leaked) gossip network.
Of particular interest in the scandal about
Debian France and
Debian LTS, we can see the trademark@debian.org email
address is also on CC:
Subject: [VAC] 28/04 -> 04/05, French Alps
Date: Fri, 26 Apr 2013 19:15:09 +0200
From: Lucas Nussbaum <lucas@debian.org>
To: debian-private@lists.debian.org
CC: trademark@debian.org
Hi,
I'm taking a little break next week. I'll read email at least once every
two days and deal with the urgent things, but I'll postpone non-urgent
things until after that.
I offer beer + key-signing to anyone willing to visit, but be warned
that this involves 1.5 hour of ski touring to reach where I'll be staying.
(GPS: 45.549, 6.918)
Lucas
--
Please respect the privacy of this mailing list. Some posts may be declassified
3 years after posting as per http://www.debian.org/vote/2005/vote_002
Archive: file://master.debian.org/~debian/archive/debian-private/
To UNSUBSCRIBE, use the web form at .
He shares his GPS coordinates in the email to debian-private.
For all those spreading conspiracy fact about military infiltration of
Debianism, could this be the proof?
In January 2014,
Red Hat announced they had acquired CentOS and given jobs
to the CentOS developers. This created a motive for people to
provide a service similar to RHEL and CentOS but based on Debian.
Somebody who follows
Debianism closely will look at that email and understand there are
some conflicts of interest. Somebody external to the organisation or
somebody reading these documents in the distant future may not be
aware of the conflicts of interest. That is why it is vital for the
conflicts of interest to be repeated in each critical piece of
correspondence where they are relevant. In this case, with the leader of
Debianism also being a French person and likely member of the
Debian France association that was under scrutiny, it may have been
better for
Lucas Nussbaum to delegate the examination of the relationships to
another subordinate who is well outside the clique of French developers.
Raphael Hertzog began using the trademark like this for his private
business
Freexian SARL at exactly the same time he was acting on behalf of
the non-profit association
Debian France in their negotiations about using the trademark in the name
Debian France, becoming a "Trusted Organisation" and handling assets
on behalf of the global body of joint authors. He was aware of various
discussions about the strengths and weaknesses of the strategy
joint authors had developed for protecting the trademark.
Raphael Hertzog was privy to private discussions about the rights
of individual joint authors and third party organisations wanting to
use the trademark for economic benefit. At exactly the same time those
discussions were taking place, he cleverly designed the Debian LTS
service name and began using it to entice other organisations to sign
contracts with his external business.
On 14 April 2014, the French developer
Lucas Nussbaum was elected for a second year as leader of
Debianism.
On 12 May 2014, the Debian Project News email is distributed by
French developer
Cédric Boutillier. These newsletters are distributed very widely
to people who don't subscribe to the email discussion lists.
Cédric Boutillier includes comments about
Freexian's project
Debian LTS:
Subject: Debian Project News - May 12, 2014
Date: Mon, 12 May 2014 22:27:19 +0200
From: Cédric Boutillier <boutil@debian.org>
To: debian-news@lists.debian.org
------------------------------------------------------------------------
The Debian Project http://www.debian.org/
Debian Project News debian-publicity@lists.debian.org
May 12, 2014 http://www.debian.org/News/weekly/2014/08/
------------------------------------------------------------------------
Welcome to this year's eighth issue of DPN, the newsletter for the
Debian community. Topics covered in this issue include:
* Debian members vote to accept a code of conduct
* Registration open for DebConf14
* SPARC removed from Jessie
* Promising future for Debian in embedded systems
* Bits from the Release Team
* Bits from the systemd + GNOME sprint
* Other news
* Upcoming events
* New Debian Contributors
* Important Debian Security Advisories
* New and noteworthy packages
* Work-needing packages
* Want to continue reading DPN?
Debian members vote to accept a code of conduct
-----------------------------------------------
Just after the election of the Debian Project Leader, Debian members
were called by Kurt Roeckx [1], Debian secretary, to vote on a general
resolution for a code of conduct proposed by Wouter Verhelst. This code
of conduct [2] promoting respect, good faith, collaboration, conciseness
and openness has been adopted by Debian Members [3]. It can be modified
via further general resolutions. More details about the results of this
vote can be found on the page of the website dedicated to this general
resolution [4].
1: https://lists.debian.org/debian-devel-announce/2014/04/msg00004.html
2: http://www.debian.org/code_of_conduct
3: https://lists.debian.org/20140428213635.GA10933@roeckx.be
4: http://www.debian.org/vote/2014/vote_002
[ ... snip ... ]
Bits from the Release Team
--------------------------
Regular security support for Debian GNU/Linux 6.0, "squeeze", will be
terminated [17] on May 31, 2014. A new suite named "squeeze-lts" and
containing only two architectures, i386 and amd64, will be made
available with support extended until February 2016 to provide a five
year support cycle. A reminder that the scheduled freeze date [18] for
Jessie has been set for six months from now on Wednesday, November 5,
2014. In the same message, Niels Thykier reported on the Release Team's
architecture meeting [19], held on April 12, 2014, about the status of
the architectures and considering their suitability for Jessie.
Recursive auto-removals have returned, with warnings to the maintainers
of the involved packages prior to removal.
17: https://lists.debian.org/debian-security-announce/2014/msg00082.html
18: https://lists.debian.org/debian-devel-announce/2013/10/msg00004.html
19: https://lists.debian.org/debian-devel-announce/2014/05/msg00000.html
Bits from the systemd + GNOME sprint
------------------------------------
Jordi Mallach sent bits [20] from the Debian sprint where the Debian
GNOME core team and systemd Debian maintainer gathered in Antwerp,
Belgium. Over two days, the ten participants discussed a variety of
topics to do with systemd and GNOME integration in Debian. After some
improvement in the packaging workflow for systemd, version 208 of
systemd has been uploaded to experimental. The GNOME team initiated
several transitions, improved the status of GNOME 3.12 in Debian [21],
and discussed the feasibility of having Debian Jessie shipped with 3.14.
The participants also jointly discussed how to configure and start
display managers, and may have come to a working solution to this
problem, which is complicated by the number of packages providing
display managers and init systems. They also used this opportunity to
sign new, stronger GnuPG keys in order to help the effort to abandon
older and weaker keys [22]. The participants thank the sponsors, most
notably INUITS, which provided the venue, and Debian and its donors for
covering the travel expenses for five of the attendees. A few of the
attendees were kindly sponsored by their employers.
20: https://lists.debian.org/20140501232614.GA29827@oskuro.net
21: http://www.0d.be/debian/debian-gnome-3.12-status.html
22: https://lists.debian.org/20140303181359.GA68761@gwolf.org
[ ... snip ... ]
On 27 May 2014,
Axel Beckert (XTaran) creates a section in the official Debian
wiki server for Freexian SARL's "Debian LTS" service
(wiki log).
For organizations that cannot contribute their own workforce to the LTS team, Freexian — a French company owned by Debian Developer Raphaël Hertzog — offered to act as an intermediary between organizations interested in funding LTS work, and individual Debian contributors preparing LTS security updates. For more information, see Freexian's description of their proposal.
In the same announcement, they pretend that
Debian LTS is being created by volunteers.
We would like to thank the volunteers who joined the LTS team
On 8 July 2014,
Lucas Nussbaum, in his role as leader of
Debianism, publishes an email with a list of four non-profit associations
authorised to hold money and other assets on behalf of
Debianism. The
Debian France association is included on the list.
In November 2014,
Raphael Hertzog admits that the Code of Conduct is used for
censorship. When people ask questions about
Freexian SARL business practices with the Debian trademark /
Debian LTS service name, the developers paid by
Raphael Hertzog can start a pestering campaign sending
messages to "debian-moderation".
Subject: Host COC related discussions on a new list
Date: Wed, 26 Nov 2014 09:37:50 +0100
From: Raphael Hertzog <hertzog@debian.org>
To: Miriam Ruiz <miriam@debian.org>
CC: debian-private@lists.debian.org <debian-private@lists.debian.org>
Hi,
On Tue, 25 Nov 2014, Miriam Ruiz wrote:
> We seem to be moving in circles, with the same arguments and
> contra-arguments all the time. The current recursive pattern we are
> having is:
Indeed, let's see if we can improve this. For example by moving
COC-related discussion to a new list nicknamed
debian-moderation@lists.debian.org.
> a) Person X says something inappropriate, without consciously wanting
> to offend or without acknowledge that whatever they say might be
> offended
> b) Person Y complains about it and say that it's not appropriate
That person Y would reply privately to the person and put
debian-moderation@lists.debian.org in copy. If enough persons do the
same, X is more likely to apologize.
> c) Either person X apologizes or a significant number of other people
> acknowledge that it was indeed inappropriate, then try to turn page
> ang move on
> d) Other people become upset that person X's comment was critisized
> and turn the debate into an abstract discussion about censorship
At the same time, if we have other people who dislike the message
of Y, because they don't agree, the discussion would stay on
debian-moderation (or more likely there would be no discussion at all
because those persons are unlikely to subscribe to debian-moderation
at all).
What do you think ?
debian-moderation@lists.debian.org would only allow subscriptions
by Debian contributors (to avoid external trolls). It could be watched
by listmasters to send official warnings when they see someone has gone
too far.
I'm not sure about the archives. I would like to keep them public but I'm
not convinced that it's necessarily a good idea.
Cheers,
--
Raphaël Hertzog ◈ Debian Developer
Support Debian LTS: http://www.freexian.com/services/debian-lts.html
Learn to master Debian: http://debian-handbook.info/get/
--
Please respect the privacy of this mailing list. Some posts may be declassified
3 years after posting as per http://www.debian.org/vote/2005/vote_002
Archive: file://master.debian.org/~debian/archive/debian-private/
To UNSUBSCRIBE, use the web form at <http://db.debian.org/>.
On 29 January 2015, an official meeting of
Freexian was conducted. The minutes were filed with the local
tribunal and they are
available here. The first thing to note is the appointment of
Sophie Brun Hertzog as a director. Notice that here she is using her
married name while in
Debianism she is one of the women deceiving people with
the use of her maiden name.
The second thing to note from the meeting minutes is the fact
these people are paying themselves a salary and giving themselves
five weeks paid vacation each year. Remember the people who killed
themselves? Remember the people
sleeping on the desks at TU Darmstadt? Did they ever get a vacation or
were they victims of exploitation?
In 2015,
Raphael Hertzog ceased being president of the non-profit
Debian France and became an ordinary member of the board.
Nicolas Dandrimont became the new president of the non-profit
association.
In 2015,
Sophie Brun Hertzog left her career as an industrial engineer and
began working in technology as part of her husband's company
Freexian.
Another blog post from Hertzog tells us
they pay people EUR 75 per hour. The blog post alerts us to
various concerns about the way
Debianism has fallen into disrepute. Hertzog states that to
receive money, "you are Debian Developer or a Debian Maintainer".
In other words, they realize they can negatively impact somebody's
economic situation by disparaging their ability as a Debian Developer.
The same checklist states:
you must respect the Debian code of conduct and respond to queries about your work from fellow community members;
The implication is that Debian's
Code of Conduct gaslighting requires unpaid volunteers to be available
twenty four hours per day, seven days per week or they will impede
your employability. This is a form of blackmail that enables
modern slavery.
When people talk about the
Code of Conduct gaslighting in
Debianism, they try to imitate the language of professional
organisations but what they are really telling us is that we are
not allowed to ask questions about money.
Under copyright law, all joint authors are entitled to an equal
share of every donation. We are all entitled to see accounts for
the donations received, including the names of the donors. All those
details are hidden from us. From time to time, emails like this
appear from joint authors who are blissfully unaware of what is really
happening with the money:
Subject: Debian funding model
Date: Thu, 26 Nov 2015 12:34:26 +0800
From: Paul Wise <pabs@debian.org>
Organization: Debian
To: debian-private <debian-private@lists.debian.org>
On Wed, 2015-11-25 at 22:35 -0200, Thadeu Lima de Souza Cascardo wrote:
> The Conservancy has been put in this critical situation because they
> depended on companies (or their surrogate) for funding.
I wonder what Debian's current funding model is; clearly we have both
corporate funding (mostly of DebConf) and individual donations, but I
wonder what the proportion is, whether we should be shifting more of
that towards funding based on individual supporters and what the
consequences of a shift towards that could be and how it could work.
Could the auditors or DPL comment on this?
--
bye,
pabs
https://wiki.debian.org/PaulWise
In June 2016, people begin a campaign of defamation against
Dr Jacob Appelbaum. Of particular note was an email that
Enrico Zini sent to a journalist demanding that news reports
should not question the credibility of the gossip and they should
present the gossip as fact.
The defamation conspiracy was so intense that people vandalised
Dr Jacob Appelbaum's home in Berlin.
Paul Tagliamonte suggested using the Debian Press Team / Debian
Publicity Team gangsters to spread the defamation as far as possible.
Notice how Tagliamonte is always
top-posting in this email thread. This is against the convention
of replying in-line that is normally followed in
Debianism. The top-posting is often a sign that somebody is sending
the emails from a mobile device while at their workplace. In the case of
Paul Tagliamonte, his workplace was the White House.
This is significant because
Freexian subsequently employees a member of the Debian Publicity Team
who they can use as a weapon of defamation against commercial rivals.
Subject: Re: Expulsion of Jacob Appelbaum <error>
Date: Tue, 21 Jun 2016 07:37:43 -0400
From: Paul R. Tagliamonte <paultag@gmail.com>
To: Russell Coker <russell@coker.com.au>
CC: Debian Private List <debian-private@lists.debian.org>
Seems like a thing the Press team could help coordinate.
On Jun 21, 2016 7:27 AM, "Russell Coker" <russell@coker.com.au> wrote:
http://www.itwire.com/business-it-news/open-source/73441-appelbaum-banned-from-debian-events-after-sexual-misconduct-charges.html
Well the DPL has decided to go public about it after all.
In future I think it would be better to have a plan for these
things. To have an argument on this list about whether information
should be released while the DPL is sending it all to a journalist
isn't the way things should go.
On 21 June 2016 8:57:56 PM AEST, Jonathan Dowland <jmtd@debian.org>
wrote:
>Please do not CC me, I am subscribed to the list.
>
>On Tue, Jun 21, 2016 at 08:04:01PM +1000, Russell Coker wrote:
>> Mattia suggests that it's already public that he was expelled for
>anyone who
>> knows how to interpret it.
>>
>> Why can't we just state it outright instead of leaving clues in
>Wikipedia?
>> The social contract says that we won't hide problems. Why are we
>trying to
>> hide this problem?
>
>I don't think Debian has taken ownership of whatever is written on
>Wikipedia,
>but we certainly aren't hiding it: It's there on the NM page in plain
>sight.
>There's a big difference between hiding something and making an active
>effort
>to draw attention to it.
>
>The action that has been taken has been for the sake of the safety and
>well
>being of other Debian members, NOT as some kind of white-knight
>publicity
>stunt. There's no *need* to shout it from the rooftops as that
does not
>further the former goal.
--
Sent from my Samsung Galaxy Note 3 with K-9 Mail.
Here is one of the messages that
Enrico Zini sent to a journalist:
Subject: On coverage of Abbelbaum being "banned" from Debian
Date: Wed, 22 Jun 2016 09:34:50 +0200
From: Enrico Zini <enrico@enricozini.org>
To: andrew.matler@itwire.com
CC: debian-private@lists.debian.org
Dear Editor in Chief of iTWire,
you may want to do something about this article by Sam Varghese on
Debian revoking membership of Jacop Appelbaum:
http://www.itwire.com/business-it-news/open-source/73441-appelbaum-banned-from-debian-events-after-sexual-misconduct-charges.html
While the first part is factually correct in its DPL quote, the article
ends with baseless hints of Debian and Tor having fallen victims to
manipulations by GCHQ psyops.
[ ... snip ... ]
At the same time, I was employed by one company in the UK and I was also
running another company based in the UK. The UK was still part of the
European Union. My employer, the other company and
Raphael Hertzog's company
Freexian SARL were competitors.
In May 2017,
Chris Lamb and I both went to the
OSCAL conference in Tirana,
Albania for the first time. The
OSCAL conferences were run on weekends as a social / hobbyist
activity.
It was a very relaxed event and one of the Albanian organisers,
Elio Qoshi, who was 24 years old, brought his girlfriend. I
only discovered about this a few months later: the girlfriend was only
15 or 16 years old. Here is a picture where
Freexian employee/contractor
Chris Lamb and
Elio Qoshi are pictured together at the
Red Hat table.
I think it was July 2017 when other women told me about the
underage scandal. Another few weeks later, the man responsible,
Elio Qoshi, resigned from his role as a
Fedora ambassador.
Red Hat, who are responsible for
Fedora, did not give any warning about the situation
to other volunteers. See the reports about the
Albanian female whistleblowers for more details about how the
scandal was exposed.
While I am a native English speaker, my knowledge of French is better
than my knowledge of German. My home in
Lausanne was much closer to the headquarters of
Freexian SARL in Saint-Étienne,
France.
Looking at the map, we can see how the business centres of
Lyon and Geneva are very close to each other. Consultants and
small businesses from cities throughout the region are competing
against each other for the same pool of clients.
Freexian SARL has a lot of French clients in the region and they
also recruited some clients in
Switzerland, including CERN, Wingo, Roche and Adfinis AG, a notable
Red Hat partner.
Various leaks show that
Chris Lamb, an employee or subcontractor of
Freexian SARL began engaging in antitrust or unfair trade practices.
The relationship between joint authors of
Debian is a peer to peer relationship. The Debian Project Leader,
who was
Chris Lamb, does not pay us and therefore does not have any right
to give orders to the rest of us. Nonetheless,
Chris Lamb would regularly impose upon people and he would spread
defamatory rumours about people who refused to obey him.
In January 2018, I went to St-Cergue for the event
Rencontres Hivernales du Libre. This annual event is in a mountain
village just north of Geneva. I think this is when people first realized
I had relocated to the French-speaking region and started plotting
against my family and I. It is an event where people do technical
work and ski:
In March 2018,
Anisa Kuci, one of the
Albanian female whistleblowers sends an email thanking me for my
support and confirming that
Elio Qoshi, with the underage girlfriend, is the root cause of all
harassment and abuse problems:
Subject: Re: "free travel"
Date: Mon, 5 Mar 2018 23:51:28 +0100
From: Anisa Kuci <anisakuci9@gmail.com>
To: larjona@debian.org
CC: Chris Lamb <lamby@debian.org>, Daniel Pocock <daniel@pocock.pro>,
leader@debian.org, antiharassment@debian.org
Hello Chris, Daniel, Laura,
Thank you very much for being so supportive.
I read the comments on the thread and to be honest I am really sad that
Elio [Qoshi] said that. It is not true at all.
They (Elio & Redon) pretend to support women but on the other hand their
behavior towards many of us shows the opposite.
Daniel I feel bad because you have encouraged and helped not only me,
but so many other people, no matter if they are Open Labs members or
not, and also all the attendees from Kosova to learn new things, to work
and improve their skills and knowledge. They are doubting your good
intentions just to remove the attention from the shady things that they
are doing.
The free travel comment is really offensive to me and i feel it should
be offensive to every woman who is part of the community.
I have been contributing and supporting Open Labs since its early days,
and I have put a lot of effort and time, I do this because I believe in
what it is meant to stand for and without waiting something in exchange,
but the situation lately has been not very positive. Daniel has been
present by chance in few cases where situations have been very hard to
go through.
I would definitely like to talk to any of you and tell you more about
everything that is happening here, its fine to me whether it is a video
call, call or just emails.
Please tell me what would be more convenient to you.
King greetings,
Anisa
On 5 March 2018 at 18:10, Laura Arjona Reina <larjona@debian.org> wrote:
Hello
El 5 de marzo de 2018 17:40:00 CET, Chris Lamb <lamby@debian.org> escribió:
>[Adding antiharrassment to CC]
>
>Daniel Pocock wrote:
>
>> If Elio or anybody else has made any other comments like this on the
>> private members channel or Telegram and you want to discuss them with
>me
>
>[..]
>
>Anisa, please feel to drop Daniel from any replies you wish to make, if
>you even wish to do so.
>
>(Daniel, thank you for your concern but we have got it from this point
>onwards. There will be no need for you to reply further on this
>thread.)
>
>
I may be silent but I'm listening (reading here and also subscribed
to the OpenLabs Forums, and up to date with the (public) English
posts so far).
Ping me if you need anything.
Best regards
--
Laura Arjona Reina
https://wiki.debian.org/LauraArjona
Sent with K-9 mail
Notice the condescending comments from the
Freexian SARL employee/contractor
Chris Lamb. He is trying to downplay the seriousness of the abuse and
deter
Anisa Kuci from making any written reply about it. She ignored
him and she wrote the inconvenient truth at that moment in the history
of the scandal.
The Debian
Code of Conduct gaslighting and the Swiss laws on
criminal speech are very similar: they protect dirty men like these
and they punish the people like me who took a risk to protect the
dignity of our female colleagues.
In July 2018, I went to Strasbourg, in
France for the
Rencontres Mondiales du Logiciel Libre
(
official 2018 RMLL web site). Other developers and Debian users
saw that I was making an effort to establish connections in the
French-speaking
Debian and open source communities. Some people seem to resent
the competition from an English-speaker (anglophone).
In reprisal and to frustrate my attempt to compete in the region,
Chris Lamb, who was still a subcontractor of
Freexian SARL, had formally recruited other joint authors, including
Enrico Zini, to engage in harassment and defamation.
From: Chris Lamb <lamby@debian.org>
To: da-manager@debian.org
Subject: Requesting the demotion of Daniel Pocock (pocock)
Date: Sun, 05 Aug 2018 14:26:23 +0100
Dear Debian Account Managers,
I am writing to you to request that Daniel Pocock (pocock) be demoted
from DD to DM.
[ ... snip defamation ... ]
Like each month, here comes a report about the work of paid contributors to Debian LTS.
Individual reports
...
Chris Lamb did 18 hours.
...
Chris Lamb,
Enrico Zini,
Raphael Hertzog and
Freexian have never paid anything to the rest of us. They simply have
no right to give us orders or change the priorities of our work or tell
us what we can and can't speak about.
The collusion between multiple people to exert control over somebody
without paying that person is a form of criminal exploitation.
The defamation tactics used to exert control over people also serve
to disrupt the competition between
Freexian SARL and the companies operated by
Chris Lamb's victims. Therefore, as well as being a case of defamation
and exploitation, it is an example of antitrust behaviour or unfair
competition.
DebConf18 was taking place at the same time
Chris Lamb was engaged in this conspiracy to start rumours about
my family and I.
Enrico Zini, a future employee of
Freexian, gave a talk on 3 August 2018 on the topic
"Multiple People". In the talk he hints at the gay power politics that
is wrecking
Debianism and humiliating healthy people. It looks like
Chris Lamb sought to exploit these tendencies to add weight to
his vendetta against my family and I.
At the end of November 2018, I attended the UN Forum on Business
and Human Rights in Geneva. This was at the very moment the defamation
gang was hard at work trying to create the impression that I am some
kind of neanderthal or cave man. A video of me asking a question at the
UN in Geneva sent the
rogue Debianists into a frenzy:
The twenty-first release of the qlcal package
arrivied at CRAN just now, and
has been built for r2u. It comes a week
after the 0.1.2
release.
qlcal
delivers the calendaring parts of QuantLib. It is provided (for the R
package) as a set of included files, so the package is self-contained
and does not depend on an external QuantLib library (which can be
demanding to build). qlcal covers
over seventy country / market calendars and can compute holiday lists,
its complement (i.e. business day lists) and much more.
Examples are in the README at the repository, the package page,
and course at the CRAN package
page.
This releases includes a one-line fix we also sent upstream as a
now-merged PR: one of the calendar files added in QuantLib 1.43 also
needed to include the vector header file. And every
compiler appears to be lenient (QuantLib itself has fourty different
continuous integration jobs, we test with all builds at r-universe)
apart from the CRAN macOS x86-64 machine. Sigh. This is now fixed. We
also included a neat little local trick I should blog about: if the
build is detected as a non-CRAN local build (simply by checking for a
.git directory) then compiler flags can be updated to
quieten the build. We cannot do that in the package because we would get
our fingers slapped over so-called ‘non-portable compiler flags’. Sigh
again. Anyway, the trick helps.
The full details from NEWS.Rd follow.
Changes in version 0.1.3
(2026-07-21)
Add missing 'vector' header to new IslamicHolidays calendar file,
also PRed upstream and merged there
In local compilation out of git repo add additional compiler
flags
Courtesy of my CRANberries, there
is a diffstat report for this
release. See the project page
and package documentation for more details, and more examples.
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.
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.
Updates for Trixie have been sent to the security team for review and once they’re happy I’ll upload for Trixie as well.
(no, this isn't a blog post about Joy Division songs)
Last time I wrote about Interzone, I was discussing issue #294, the
first published under new management in a paperback-sized format
("JB6"). 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.
IZ issues 294 and 295
I don'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 Patreon.
Issue #305 just came out.
Instead I wanted to write a small bit about how I engaged with the paper
magazine, and the difficulties I've had trying to engage with not just
Interzone but any magazine-style publication in a digital context.
With most fiction, I read linearly: start the beginning and read to the end, in
order. That works well for me with e-readers. But for magazines (and
most non-fiction) I don'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 "book reviews" 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 depth of the
paper book or magazine, its thickness, to orient myself. But it's also partly
the limitations of e-ink.
My tick-list for an issue of IZ
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'd read all the stories or not, and which I liked.
I could do something similar on some e-readers: the Remarkable for
instance. But it's far from convenient to do on most e-ink devices.
Interzone digital is available as both ePUB, the most common format for e-books, and PDF. For reading on my
regular Kobo e-reader, PDFs don't work very well at all. I think this is
generally true of most e-readers.
Interzone was (and is) a well-designed magazine. The value of it was not
just the content of the text, but the context: how the stories were
presented; the accompanying art (most often colour in recent decades),
but also the typesetting. ePUB
doesn't specify much of that stuff
exactly: it leaves that up to the client and the client's preferences.
And there'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's
a great thing. But sadly a lot is lost, IMHO.
IZ #305 on iPad Mini
The solution I'm trying is to read the PDF version on the iPad Mini I
resurrected earlier in the year.
Despite being an Internet tablet, since it's not really usable for browsing the
web anymore it's strangely still a distraction-free device. In fact it'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't a problem.
It's not a solution for tracking what I'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'll see how it goes.
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:
Figure: Renewal relationships between AWS certifications.
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.
I have made two important simplifications to the graph:
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.
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.
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.
DebConf26, the 27th annual
Debian Developer Conference, 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.
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 ("BoF") team meetings, workshops, a job fair, as well as
a variety of other events.
The full schedule is updated each
day, including activities planned ad-hoc by attendees over the course of the
conference.
If you would like to engage remotely, you can follow the video streams
available from the DebConf26 website 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
OFTC IRC network in the
#debconf-fadu,
#debconf-fbcb,
and #debconf-fich3 channels.
Please also join us in the #debconf channel for
common discussions related to DebConf.
You can also follow the live coverage of news about DebConf26 provided by our
micronews service or the @debian profile on
your favorite social network.
DebConf is committed to a safe and welcoming environment for all participants.
Please see our Code of Conduct page
for more information on this.
Debian thanks the commitment of numerous sponsors to support DebConf26,
particularly our Platinum Sponsors:
Infomaniak and
Proxmox.
This is the latest release of the Pod::Man and Pod::Text modules and
their supporting scripts, which convert POD documentation to text and
*roff output.
The major change in this release is a workaround for a groff bug in the
1.24.0 release that breaks compatibility between the .IP and
.TP macros and misrenders .IP by removing all space between
the tag and the text. Ideally groff bugs should be fixed in groff, but
apparently this rendering bug was
introduced intentionally by the groff maintainer to force authors who
were using .IP with text tags to switch to .TP for correct
formatting, allowing future introduction of a semantic distinction between
the two macros. I didn't see a good alternative at this relatively late
date after the release other than changing Pod::Man accordingly.
This will at least work around this problem for Pod::Man users,
although it won't help with existing manual pages.
This release also works around another backwards-incompatible change to
groff that attempts to force the default enabling of hyphenation and full
justification after every occurrence of the .TH macro. The groff
upstream position is currently that the end user should be able to set
registers and strings to override the defaults of hyphenation and full
justification, but the man page author has no control over the defaults
for these settings. Pod::Man ignores the admonishment in groff_man(7) and
overrides these registers anyway to restore its long-standing historic
behavior of always using left justification and disabling hyphenation,
because there is currently no way to change the default without overriding
the new user preference. Should some mechanism be provided in the future,
I'll be happy to adopt it and thus honor user configuration as well.
New in this release is support for an encoding of none, which tells
Pod::Man and Pod::Text to do no character set encoding in their output and
leave the output in Perl's internal representation. This is useful in
combination with output_string() when the output will be used
internally by a Perl program.
Pod::Man also adopts CR as the default fixed-width font instead
of its long-standing default of CW, originally chosen for
compatibility with Solaris. This avoids warnings with newer groff at the
cost of breaking troff (not nroff) output on Solaris 10. I believe this
platform is now sufficiently old, and this use case sufficiently obscure,
that no one will miss it. Solaris 11 and later will render man pages
correctly with troff, and --fixed=CW will restore the previous
behavior.
This release also has a few other bug fixes, particularly for quoting
heuristics in C<> blocks, and various documentation improvements.
ECC RAM corrects errors that occur in memory before it gets to the CPU. The most common form of ECC is the Hamming Code [1] which when it has R redundant bits can correct single bit errors and detect double-bit errors in messages with 2^R-R-1 bits of data. For PC use that means if you want to protect 32bits of data you need R=6 and with 64bits you need R=7. The standard for DDR4 and similar RAM is 72 bits of data width on the bus and Hamming codes to correct single bit errors and detect double bit errors for 65bits of data. The computers we use have 64bits of data so that allows an extra bit that could be an extra parity, I don’t know what if anything is done with this extra bit.
RDIMM vs UDIMM
One point of confusion in such things is the difference between Registered memory AKA RDIMMs [2] and regular PC/laptop memory which is often referred to as UDIMMs. The “register” is just a buffer which due to complex issues that aren’t relevant to this post means that DIMMs can be larger and you can have more DIMMs in a system but latency may be slightly worse. It is technically quite possible to create RDIMMs without ECC (64bits wide instead of 72) but I have never seen a system that used such RAM.
I have used more than a few systems with ECC UDIMMs and I recommend avoiding them if convenient as ECC UDIMMs are expensive on the second hand market while ECC RDIMMs can get very cheap. There are servers with ECC RDIMMs that are very unsuitable for home use (such as dual-CPU 1RU servers which are very noisy) so once they are past the 5 year tax write-off period the server chassis gets sent to ewaste and the RAM goes on the second hand market, the glut of RAM without systems to use it forces the price down.
For the systems most commonly seen there are RDIMM systems with ECC and UDIMM systems without ECC.
Chipkill
If every bit in RAM was independent of every other bit then the basic Hamming code would solve most problems. However multiple bits in the same chip may be affected by the same problem, or one chip on the DIMM might entirely fail. With every RDIMM having 18 or 36 DRAM chips there are 2 or 4 bits per chip. On DIMMs with 36 DRAM chips one chip could fail and have the errors reliably detected with a Hamming code. On DIMMs with 18 DRAM chips one failed chip can’t necessarily be detected with Hamming codes. IBM trademarked the term ChipKill for ECC systems which can cope with a single DRAM chip failing [3]. This is referred to as “Advanced ECC” on Dell and HP servers which require an even number of DIMMs. If anyone knows what coding method is used for “ChipKill” type systems then please let me know.
Systems with advanced ECC also often have features like hot-spare for RAM and RAID-1 type functionality which is interesting but not something most people who read my blog will ever want to use.
The on-die ECC is not a replacement for regular ECC, it’s a mitigation for new problems introduced. My experience of memory errors is that the majority of repeatable errors (where a system would get an error with Memtest86+ or an ECC error report repeatedly) were DIMM seating issues, I could unplug and reinsert the DIMM in question and then the same tests would pass. Those errors would not be affected by on-die ECC.
One thing that concerns me is the possibility of on-die ECC interacting with ECC on the motherboard and reducing it’s effectiveness. I haven’t been able to find out enough about how this works to determine if that’s the case. My concern is that an error of 3+ bits that’s corrected with a basic Hamming code might be more likely to create an error condition that “Advanced ECC” can’t fix than the original error.
Currently the best published research on the effectiveness of ECC on RAM errors is the Google paper published in 2009 which is based on DDR and DDR2 RAM [5]. So I don’t expect that we will see published research about even DDR4 ECC any time soon. I presume that Google and the other cloud providers are still doing such research and providing the information to DRAM vendors under NDA so we have to just hope that the DRAM vendors do what’s required to make things work correctly and allow us to buy products based on that research.
DDR5 EC4 vs EC8
DDR5 supports 2*32bit “subchannels” instead of just supporting 64bit words [6]. For DDR5 ECC RAM there are variants EC4 which has 36bits of data per subchannel and EC8 which has 40 bits. EC8 allows Hamming codes on each subchannel indepdendently. I haven’t found a reference on how exactly EC4 works, it could be reading 64bits at a time (not taking advantage of the subchannels) to use Hamming codes or it could have 1 parity bit for each subchannel and just assume that there’s no need to check Hamming codes unless the subchannel parity fails. EC8 allows full Hamming code checks on 32bits of data and presumably ChipKill on 64bits.
It’s widely claimed that all DDR5 RDIMMs are EC8 and all DDR5 ECC UDIMMs are EC4. A quick search on ebay turned up adverts for EC4 and EC8 RDIMMs and links to apparently reliable sites confirming that some of the RDIMMs are EC4. There are reports of EC8 UDIMMs even though I couldn’t find any advertised. This seems to mirror the situation with DDR4 where non-ECC RDIMMs are apparently available somewhere and ECC UDIMMs are something I’ve used a few times but most people have never seen.
I then searched for information on what servers support. The Dell R760 server supports both EC4 and EC8 RDIMMs but you can’t have both in the same system.
The existence of EC4 DIMMs is wrong. They shouldn’t make substandard gear, the manufacturing price difference between 72 and 80 bit wide DIMMs isn’t going to be great and the end result is some systems with inadequate specs and extra difficulty in upgrading systems with more things to check for compatibility.
Some years ago I reported a BTRFS corruption issue on my desktop PC to the BTRFS developers and one of them stated that the corruption in question didn’t match any pattern expected from a BTRFS bug and recommended that I run Memtest86+. The memory test revealed that I was getting about one memory corruption per 5 hours so if I had used Firefox on that system any crashes probably wouldn’t have been regarded as hardware errors with RAM. Those errors caused filesystem corruption and some data loss, if I hadn’t been using BTRFS that could have gone unnoticed for years.
On another occasion I had a VM I was using for testing software I was developing that had some unexpected errors. After working on it for a day I had shared the errors with a mailing list of other developers who also spent some time investigating it. Eventually I began to suspect a hardware problem, I went on site and when I rebooted the system to run Memtest86+ it didn’t even boot as it had errors that stopped the BIOS from even working correctly. It was strange that the system was apparently working correctly and restarting the KVM VM resulted in the same errors happening in the same code and nothing else on the VM apparently having a problem. It turned out that the system had a motherboard problem that made all but one of the DIMM sockets unusable so I ended up sending it to e-waste. That wasted a day of my time and some hours of other people’s time. Presumably on other occasions developer time is wasted due to hardware errors and no-one even realises.
What Society Needs
We need ECC RAM to be more widely used. Ideally we would have some government action to force this given the ongoing cost to society in corrupted data and lost time due to RAM hardware errors. I think that at minimum we need sufficient taxes on non-ECC RAM (and EC4 RAM for DDR5) to make it more expensive when bought new than ECC RAM.
We need to have greater knowledge of the benefits of ECC RAM among computer experts, people need to recommend that computers be purchased with ECC RAM whenever possible and that systems which can’t have ECC RAM (laptops and phones) shouldn’t be used for storing important data.
We need to avoid silly things like having so many variants of RAM to confuse people and make it needlessly difficult to get ECC RAM working.
DebConf26, the 27th edition of the Debian
conference is taking place at the
Facultad de Ingeniería en Ciencias Hídricas 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.
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.
We have two Platinum sponsors.
Our first Platinum sponsor is Proxmox.
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 "single pane of glass" 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.
Infomaniak 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&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'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
d4project.org.
Our Gold sponsors are:
Freexian, 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's employees and partners are well-known contributors in the
Free Software community, a choice that is integral to Freexian's business
model.
Viridien 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.
Our Silver sponsors are:
Arm: 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.
Pexip brings the ease of commercial video
platforms to secure and sovereign environments without compromising control
or performance.
Ubuntu,
the Operating System delivered by Canonical.
OS-Sci, Open Source Science is a world-leading
institution dedicated to teaching computer science through Free and Open
Source Software (FOSS).
gcoop, a free software development company
with over 19 years of market experience, organized as a worker cooperative,
promoting best practices in software development.
Qualcomm Technologies,
one of the world's leading companies in field of mobile technology, sponsors
and contributes to Open Source developer communities that drive collaboration.
Civil Infrastructure Platform,
a collaborative project hosted by the Linux Foundation, establishing an open
source “base layer” of industrial grade software.
Siemens is a technology company
focused on industry, infrastructure and transport.
Collabora, a global consultancy delivering
Open Source software solutions to the commercial world.
NERDEARLA, the largest free tech event in
the Spanish-speaking world.
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.
Five years or so ago, I had a look at trying to speed up dpkg'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'd probably need to rewrite the transaction system to get rid of
a lot of fsyncs, you'd ideally want to reduce the number of syscalls
for unpack by io_uring and so on.)
This summer, I've been looking at something related on and off; it is
possible to speed up the startup time? That'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's dpkg dir, with ~6600 packages
installed).
Before I show the numbers, I must stress that this is an investigation,
not a fair benchmark, and you should not go shout at the dpkg maintainers
that they need to get to “catch up”. That said:
> sudo time dpkg --root=root -i hello_2.12.3-1_amd64.deb >/dev/null
Not building database; man-db/auto-update is not 'true'.
1.12user 0.49system 0:01.85elapsed 87%CPU (0avgtext+0avgdata 171880maxresident)k
0inputs+14648outputs (0major+72963minor)pagefaults 0swaps
> sudo time ./src/dpkg --root=root -i hello_2.12.3-1_amd64.deb > /dev/null
0.04user 0.01system 0:00.15elapsed 38%CPU (0avgtext+0avgdata 6520maxresident)k
0inputs+1080outputs (0major+2705minor)pagefaults 0swaps
How is it unfair? Well, for one, the code to run triggers is messed up
so they're not run (but the trigger in question should be very fast).
And there's one step at the end with detecting “disappearing packages” that doesn't run properly
because it's a bit tricky in my model and I didn'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's a lot 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.
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
distri, 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't look at this time.
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 in total (and you probably wouldn't install all of them).
There was no reasonable database available for desktop systems; the closest
thing you'd have was probably BerkeleyDB and that wasn'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'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's a
lot of work and I don't intend to. :-)
PS: I didn't look at apt; I think what I'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”?
Ran into unknown state (hex char: 0) at /tmp/test.pl line 8.
The errors are of the above form which Google didn’t find before now so obviously isn’t a common situation, below is my test program.
#!/usr/bin/perl
use strict;
use Proc::ProcessTable;
my $process_table = new Proc::ProcessTable('cache_ttys' => 0 );
foreach my $process ( @{$process_table->table} )
{
print $process->fname . "\n";
}
Here is the relevant part of strace output:
newfstatat(AT_FDCWD, "/proc/2", 0x7fff19533c10, 0) = -1 EACCES (Permission denied)
openat(AT_FDCWD, "/proc/2/stat", O_RDONLY) = -1 EACCES (Permission denied)
access("/proc/2", F_OK) = 0
write(2, "Ran into unknown state (hex char: 0) at /tmp/test.pl line 8.\n", 61) = 61
Below is the apt sources.list line for my personal repository which has a version of the package with this fix. The gpg key is in the etbe-base package in that repository and the source is all there. To access it without apt use this web page [2].
deb [signed-by=/usr/share/keyrings/etbe.gpg arch=amd64 ] https://www.coker.com.au trixie misc
I’ve also done some work on the ps.monitor script in etbe-mon that uses this Perl package and made it better handle program names longer than 15 characters. That improvement apparently only works on Linux, Darwin, and Cygwin. People who want things to work better on BSD etc could patch libproc-processtable-perl accordingly.
The twentieth release of the qlcal package
arrivied at CRAN today, and has
been built for r2u.
This version synchronises with QuantLib 1.43 released today as
well.
qlcal
delivers the calendaring parts of QuantLib. It is provided (for the R
package) as a set of included files, so the package is self-contained
and does not depend on an external QuantLib library (which can be
demanding to build). qlcal covers
over seventy country / market calendars and can compute holiday lists,
its complement (i.e. business day lists) and much more.
Examples are in the README at the repository, the package page,
and course at the CRAN package
page.
This releases updates to several new calendars (see below), and
extends the calendars for Israel to some added new conventions, updates
a few helper functions, and turns on ccache for continuous
integration builds.
The full details from NEWS.Rd follow.
Changes in version 0.1.2
(2026-07-14)
Synchronized with QuantLib 1.43
Calendar updates for India, Israel, and South Korea; small
interface update for Israle
New calendars for Croatia, Malta, Montenegro, North Macedonia,
Serbia, Slovenia, Uzebekistan
Updates to a number of QuantLib helper functions
Continuous integration now uses ccache via a setup
action
Courtesy of my CRANberries, there
is a diffstat report for this
release. See the project page
and package documentation for more details, and more examples.
Yay! Finally it’s that time of year — DebCamp is underway, and soon it will
be time for DebConf! �🎉🥳
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 DebConf26
keysigning maps for everybody
involved.
So, if you are taking part of DebConf, make sure to:
Find yourself in the keysigning
map. Are you a part of the
listing?
If you are not there, log in to the DebConf26 management system and
edit the Personal
Information section of
your profile. Make sure you submit your OpenPGP key fingerprint.
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.
One thing that I didn't get running immediately was Xdebug integration, so I did
a bit of research and asked Claude for help. Here's a quick writeup of how to
get it running.
I have Zed installed as Flatpak on a Debian Trixie host system.
Inside Zed, select "debugger: start" from command palette and then "PHP: Listen to Xdebug".
Verify Zed is listening. Running ss -tlnp | grep 9003 on the host should show *:9003 with Zed as the process.
Configure Xdebug inside the container
/usr/local/etc/php/conf.d/xdebug.ini:
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 "xdebug.start_with_request = yes" 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
Apply changes by restarting apache in the container: apache2ctl -k graceful
Notes:
host.docker.internal resolves on Linux Docker only if the container was started with --add-host=host.docker.internal:host-gateway (nextcloud-docker-dev already does this).
discover_client_host = true makes xdebug follow X-Forwarded-For - useful behind Nextcloud's dev reverse proxy.
Test xdebug with a PHP command inside the container
Run XDEBUG_SESSION=PHPSTORM php occ status inside the container and check /var/log/xdebug.log.
Install the browser extension
Install Xdebug Helper (Firefox/Chrome). In its preferences, set the IDE Key to PhpStorm. It will set the XDEBUG_SESSION cookie when toggled to Debug.
Click the Xdebug Helper icon in the browser and set it to Debug.
Test Xdebug with browser extension
Load the URL that exercises the code path with the breakpoint. Zed should stop the code exection at the breakpoint.
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.
If you are interested in contributing to the project, please visit our Contribute page on our website.
Only installing reproducible packages with repro-threshold
A very interesting demonstration is now available showing how you might configure your Debian system to only install packages that have been reproduced by m/n rebuilders.
This is implemented via a reproduced+https://APT transport ( a mechanism for communicating between the APT client and its repository source — commonly HTTP):
Every package download is intercepted by repro-threshold, 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.
The demo gives examples of how to quickly experiment with this using a Docker container.
Various OpenJDK packages were also uploaded to Debian, including the fix for JDK-8385738 (“Javadoc does not produce reproducible output…�) (for example). […][…][…]
The “reason� pages on reproduce.debian.net, such as the one for ppc64el, now feature links labeled with the bug emoji (i.e. �) which links to the categorized issues packages have been tagged with in the reproducible-notes.git repo.
The IzzyOnDroid Android APK repository reached its next milestone this month, now covering 2 out of every 3 apps (66.7%) with reproducible builds. Their documentation for debugging and fixing failed builds has steadily grown as well. More clients have picked up showing reproducibility results (e.g. Droid-ify), and Neo Store now can be configured to stick to only reproducible applications. Further, an independent builder has been added to the build farm, increasing the trust level even more as APK builds can have multiple confirmations now.
At the same time, IzzyOnDroid’s rbtlog got several new features. The most outstanding is caching for frequently used resources such as reproducible-apk-tools, 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.
Lastly, Bernhard M. Wiedemann posted another openSUSEmonthly update for their reproducibility work there.
diffoscope development
diffoscope 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 319, 320, 321, 322 and 323 to Debian:
Debian adds an extra Flags: line in the output of ocamlobjinfo, so adjust the test for cross-distribution compatibility. […]
In addition, Jochen Sprickerhof added better header detection for the Sphinx documentation system […], Michael Daniels fixed the tests when run with zipdetails version 4.006 […] and Zbigniew Jędrzejewski-Szmek added a version of the deprecated os.path.commonprefix method […].
kpcyrd posted to our mailing list regarding the “waves of malware uploads to aur.archlinux.org�. Curiously, “every incident I looked at used npmjs.com for malware delivery�, specifically where the npm package includes an (automatically executed) preinstall script that is an ELF binary.
kpcyrd also announced the release of debian-repro-status version 0.4.0, 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�:
The change updates dependencies to the latest versions, and adds support for multiple -H options, to query results from multiple rebuilderd instances. The results are also now fetched concurrently.
kpcyrd also reported that, whilst taking a screenshot for the above release, they noticed that the debian:sidcontainer now is 100% reproducible.
Yet again, there were a number of improvements made to our website this month including:
Chris Lamb added a reminder re. using the UTC variants of the Javascript Date methods. […]
Mattia Rizzolo moved OTF to the ‘old’ sponsors list. Thank you for your support!. […]
kpcyrd updated the Rust documentation to recommend using the --release argument for consistency. […]
Patches
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:
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. […]
We find that functional package management enables extremely high rebuildability over time (near-universal ability to reconstitute historical build environments and rebuild software packages), 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 diffoscope.
This paper presents how the DevGuard project rebuilt its OCI container pipeline around reproducible Nix builds and independent dual-platform digest verification. DevGuard images are built hermetically from pinned source revisions, signed with Sigstore/Cosign, 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.
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
Finally, if you are interested in contributing to the Reproducible Builds project, please visit our Contribute page on our website. However, you can get in touch with us via:
At May First, we recently received (all within a
single week) three different complaints about domain names that previously
worked fine suddenly not resolving to our servers.
While that isn’t terribly uncommon, we discovered that in each case, the domain
name’s authoritative name servers were pointing to our mail servers
(a.mx.mayfirst.org, b.mx.mayfirst.org and c.mx.mayfirst.org) instead of
our name servers (a.ns.mayfirst.org, b.ns.mayfirst.org and
c.ns.mayfirst.org). The weird part: this mistaken configuration was happening
at the registrar level, protected by each member’s own credentials that we
don’t have access to.
Each affected member fixed their records to resolve the problem but also made
very clear that they had not logged into their registrar in years, sugggesting
that the DNS authoritative records in their registrar accounts spontaneously
changed on their own. The first time was weird, the second time could possibly
be a coincidence? But by the third time this happened, we started to panic.
How could registrar records spontaneously change? All three domain names were
registered with different companies - so it couldn’t be a single registrar
problem? Are we going to get a flood of these complaints? What is going on!?!?
We did an inventory to see if this was happening with other domain names in use
by our membership and that’s when we discovered just how hard it is for our
mostly non-technical users to set a domain’s authoritative name servers. The
error rate was less than 1% but still that was a lot of domain names with
typos:
raise your fist in the air with a.ns.mayfist.org!
or just plain give up and hit the floor with a.ns.matfirst.org
Or more commonly people added our name servers, but also left the default
name servers in place.
Also, one person added as their authoritative name servers:
a.ns.mayfirst.org, b.ns.mayfirst.org, c.ns.mayfirst.org,
a.mx.mayfirst.org, b.mx.mayfirst.org, c.mx.mayfirst.org, and even
a.webproxy.mayfirst.org - in other words, all the domain names we tell you
do to anything with.
And lastly, I did find two more domains just pointing to
a.mx.mayfirst.org, b.mx.mayfirst.org and c.mx.mayfirst.org.
That’s when it occurred to me: for years we have maintained an offsite server
that provides bothc.ns.mayfirst.org and c.mx.mayfirst.org. It hangs out
in case something terrible happens to our main colo. The week before we started
receiving these complaints, I separated these services, moving
c.mx.mayfirst.org to a dedicated MX server. As a result, these two domain
names stopped pointing to the same IP address. And that’s when the complaints
started rolling in. In other words: the affected members set the incorrect name
servers years ago, but because just one of the name servers resolved to an IP
that happened to provide the correct authoritative lookup services, it went
undeteced all this time.
So… mystery solved. Nobody’s authoritative registrar records “suddenly”
changed. They were mis-configured for years but thanks to the amazing
resilience of the DNS system, nobody noticed because just one working DNS
server is all you need.
A new minor release 0.4.28 of RQuantLib
arrived on CRAN this evening,
has been uploaded to Debian, and is
being built for r2u as
well.
QuantLib is a rather
comprehensice free/open-source library for quantitative
finance. RQuantLib
connects (some parts of) it to the R environment and language, and has
been part of CRAN for nearly
twenty-three years (!!) as it was one of the first packages I uploaded
to CRAN.
This release of RQuantLib
brings a minor update to the calendars for Israel which in QuantLib 1.43
can now use one of three different exchange choices. However, using
‘settlement’ is now deprecated so we adjusted our code. This came up as
we had packaged the 1.43-rc version of the (upcoming) 1.43 release a few
days ago, and it is now in testing requiring RQuantLib
to catch up. Full details from the NEWS file follow as usual.
Changes in RQuantLib version 0.4.28 (2026-07-10)
Adjust to Israel calendar constructor change in QuantLib
1.43
I used to ice skate as a teenager but I stopped at University. I tried to
pick it back up in 2024 but had to stop when I got ill. I restarted
in 2025, initially with a weekly skate session but last month I started group
hockey skate lessons.
There's not a lot of pics of me skating…
this one from an IR camera
I've been skating in a pair of Bauer1 Nexus N77s that I bought 7 years
ago on a work trip to Toronto.
These did a great job of getting me back into the hobby for 6 years but
recently I felt it was time to step up to a better quality pair.
Despite being a size down from my shoe size, the Nexuses are too
large: I had been compensating with thick socks but still struggling to
get the boots tight enough. I'd have to wear gloves to lace up because I'd
cut my hands pulling the laces otherwise.
After too long researching/deliberating/kvetching (very much on trend for me)
I upgraded to Bauer Vapor Fly30s another half-size down (and nearly ten times
as much).
The fit is much better, in almost every respect. They actually go on easier
and I don't have to tear my hands tightening the laces. They feel like a natural
extension of my feet. I seem to be using a different set of muscles to skate,
so the first few sessions were very fatiguing, but that settled.
The Vapor line is speed-oriented, which I thought would fit my skate style best.
new and old skates
I have unfortunately gained a common problem: arch pain. More precisely, my
navicular bone seems to be quite prominent2, and that part is
pressing uncomfortably into the boot. Boots typically take a few sessions to
break in, but after 7-8 sessions the pain was getting to the stage that I
couldn't skate for a full session without being in agony.
The last time I skated I tried to throw everything at the problem: I'd had
the skates baked3; bought some orthotic insoles; then some "Bunga" pads over the sore bit and an
attempt to more loosely tie the laces over the affected area. I tried a ten
minute skate, and it seemed a bit better.
I then tried experimentally to swap back to my old skates, and I felt like
Bambi: I just couldn't do it!
They didn't press on the navicular, and they're
softer so you can compensate for the size with tight lacing, but I had no
confidence in them, I couldn't lean into the turns. They just felt weird.
I realised there's no way back.
I switched back to the fly30s, adjusted the bunga pad positioning, tweaked
the lacing and went back on for about 40 minutes. It went well: the rink was
quiet, it was cool whilst we had a heat wave outside, so I worked up a sweat.
By the end there was some discomfort, but not too much, and I think partly
the area is currently sensitive so just about anything will cause discomfort.
Fingers (or toes) crossed that I've mitigated the problem! If not, it might
be time to try a punch out.
I've owned four pairs of skates: all hockey, my first were Bauers,
my second CCM Tacks of some kind. I've no idea what happened to them.↩
modern mid-tier skates are thermoformable, and many skate shops carry
a specially designed oven to briefly bake skates such that you wear them as
they cool and the padding should mould to your foot.↩
“You are what you eat” – but perhaps this is even more true of our
information diet. It is hard to strike a balance between remaining a
well-informed citizen versus spending hours ingesting unnecessary news
about issues and events we can’t affect. But I’m increasingly
convinced that my hours lost to doomscrolling are down to design
choices by web publishers rather than a failure of individual
willpower.
We have created an “obesogenic” information environment
I don’t think it is just me – I think our information environment has
been progressively altered over time as news sites look to maximize
engagement. Even outside of social media, the invisible hand of the
market for eyeballs forces sites to optimize for browse time or risk
irrelevance.
Even as newspapers find it increasingly difficult to fund good
journalism through advertising in an online world, especially local
journalism, they need to keep readers on their sites, clicking through
as many articles as possible. Clickbait headlines, “urgent” flashing
live icons to draw the attention, and many opportunities to leap from
one article to another, and another.
But this design approach even extends to news organisations with a
different funding model, like BBC News, which is a public service
(state-owned but arms-length) organisation funded through a mandatory
television licence – a matter of controversy in some quarters. And
it extends even to sites where I pay a subscription fee; I might get
adverts removed, but I am still bombarded with the same design
philosophy; too many opportunities to be pulled away from what I’m
reading towards some other unrelated article.
Even if I try and limit my exposure to algorithmic “discovery” of new
news, via RSS feeds or similar, if I’m reading the full article in a
browser then I am prompted to read more stuff that I didn’t intend.
This defeats the benefit of curating a set of feeds, because you still
get dragged away to random articles.
Only 44% of BBC News is news
To show you what I mean, I’m going to pick on the BBC, although I
love them dearly and the same issue very much applies elsewhere.
I’ve taken a screenshot of a random BBC News
article in mobile
view (my preferred doomscrolling user access device), and measured
approximately what proportion of the full length of the page is taken
up by each section. This is a fairly in-depth news article, so I
reckon if anything the figures would be worse than this on shorter
articles.
(These numbers will not sum to 100% for reasons which are obvious if
you look at the crossbars. Also they’re approximations.)
Less than half of the page (44% if you exclude the inline related
links) is actual news text/images; the rest are links trying to help
you find the next thing to read/watch. I do not want this.
I’m sure this A/B tests well in terms of reader figures, but it
sometimes leaves me exhausted – it must take subconscious mental
energy to ignore, or I spend too much time trying to keep on top of
things.
And remember, this is a publicly-funded site that does not rely on
advertising!
Blocking out the noise
If you are technically-minded, you can use an ad-blocker such as
uBlock Origin to take back some control. Applying the following lines
as a custom filter (Settings > My filters) brutally cuts out almost
all of these links:
Caveat emptor: I have not road-tested this for more than half an
hour, so who knows what consequences this could have on your web
browsing. In particular, international readers outside the UK will
likely be redirected to bbc.com, the commercial arm of the BBC, where
these rules will need adapting.
Is it unethical to use an ad-blocker to remove these links? I would
argue not. I am not depriving the BBC of any revenue, because I pay
my licence fee. I might reduce the amount of time I spend on their
website, but if anything the subjectively better experience might
encourage me to consume more news from them, not less. In other
circumstances (outside the UK for instance, where the BBC relies on
advertising), the balance might be different.
Product managers, please find better metrics
I lament the state of the internet in 2026. I now can’t unsee these
innocuous “related stories” links as a mechanism to grab my attention,
and it’s gone too far.
If you are a normal person just browsing the news and looking to
discover the latest important stories relatively quickly, I can see
that these types of links might actually be useful for discovery; but
I’m actually reasonably sure that I’m not going to miss out on
anything major. You still have the option of the news home page if
you want to be presented with more news for example, and it feels
natural to go back to there when you’ve run out of stories to consume.
But it shouldn’t be down to individual responsibility to ignore or
geekily block these types of link; news sites with alternative funding
models should find better metrics for engagement than “hours spent on
site” – how about optimizing for customer mental wellbeing, or
minimizing time required to catch up with the news? There’s no need
to maximize clicks and eyeballs. This is a societal level issue,
because we are all going mad with news over-engagement.
I've traded my Minilogue-XD (full-size version with integrated keyboard) for
the desktop/modular alternative.
Modular Minilogue XD
Why? Partly, because it fits on my desk better. Partly, because it changes the way
you engage with the instrument. It makes
a huge difference: the ivory keys come with so much cultural precedent. The module
version of the synth gains a switch that lets you use the 16 sequencer step buttons
as note inputs, so you can still play the thing solo. But the emphasis moves away
from note generation and more firmly towards tone.
Both versions have a lovely stained wood back, which you never see; the modular one
has a hint of that at the front as well (which you do see).
I plan to eventually buy a MIDI keyboard that could drive it, and other things:
possibly an Arturia KeyStep or Minilab, but there's no rush on that.
(It's about time I recorded and shared something I produced on this)
This was my hundred-forty-fourth month that I did some work for the Debian LTS initiative, started by Raphael Hertzog at Freexian.
During my allocated time I uploaded or worked on:
[DLA 4615-1] exim4 security update to fix one CVE related to information disclosure in combination with proxies.
[DLA 4616-1] haveged security update to fix one CVE related to local root privilege escalation.
[DLA 4618-1] gsasl security update to fix one CVE related to denial of service.
[DLA 4631-1] asterisk security update to fix 13 CVEs related to buffer under- or overflows, either on heap or on stack. Some are related to use-after-free or wrong processing of invalid or untrusted certificates.
[ELA-1747-1] gimp security update to fix three CVEs in Buster related to denial of service or execution of arbitrary code if malformed PSP, JPEG 2000 or PSD files are opened.
[ELA-1748-1] gimp security update to fix two CVEs in Stretch related to denial of service or execution of arbitrary code if malformed PSP or PSD files are opened.
[ELA-1749-1] exim4 security update to fix one CVEs in Buster and Stretch related to information disclosure in combination with proxies.
[ELA-1750-1] gsasl security update to fix one CVEs in Buster and Stretch related to denial of service.
Besides fixing all CVEs of asterisk in Bullseye, I started to look at asterisk in other releases as well. Rather surprisingly asterisk is only part of Unstable and Bullseye. All other releases don’t include any version of asterisk at all. So first things first, besides some security related RC bugs, asterisk did not migrate due to RC-bugs in dahdi-linux.
As I maintain osmocom-dahdi-linux (which supports less/other hardware), I looked at the open issues and after some rounds I could upload a new upstream version, fixed some bugs and resolved issues with piuparts. dahdi-linux meanwhile migrated to testing, job done! As a next step I looked at the open CVEs. Some of them had been already fixed in previous uploads but had not been marked accordingly. So I fixed all remaining ones and sent a debdiff to the maintainer. Unfortunately there was some kind of overlap in our work and he ignored my debdiff but uploaded a new upstream version. Anyway, job done as well, no open security issues anymore. The only thing that hinders asterisk from migrating to testing is the reproducible build. So if anybody has some spare time …
Other things I worked on were the regression update of rsync. Some of the elven new patches need to be backported, but I am confidentially to finish this month. I already reviewed the rsync– uploads of Sylvain to Buster and Stretch, so I don’t expect any big hurdles here. I am also making progress to find the correct patches for hplip and cups.
This month new upstream versions of dozens of lomiri packages have been released and I uploaded lots of them to Debian. After they migrate to testing, I am also going to sync them to the Ubuntu PPA.
This month I uploaded a new upstream version or a bugfix version of:
… visam to unstable. There had been an RC bug due to two binaries with the same name but different functionality. Yes, it is in the policy but … (my mother forbade me to elaborate more on this)
A reminder that I am no longer here, but am instead here. The new RSS feed is here. If you're still reading this for some reason other than being on Dreamwidth, please update your feed.
The Player of Games is political space opera and the second book in
the shared Culture setting. As with most Culture books, the reading order
is not particularly important. It won the 1989 Locus Award for best
science fiction novel and sometimes competes with
Use of Weapons as the consensus best
Culture novel.
This review is a re-read and yet another experiment in how to re-review a
book. This time, I decided to write a full second review with substantial
spoilers so that I can talk in more detail about the book. If you want to
avoid spoilers, or just want to see how my thoughts have evolved from my
first reading, see my original review from
2005.
Gurgeh plays games. He is probably the best strategy game player in the
entirety of the galaxy-spanning Culture. He has written papers on game
theory, won innumerable major championships, and is a celebrity in the
circle of like-minded aficionados.
Gurgeh is also bored and in the middle of the Culture equivalent of a
mid-life crisis. As the story opens, he's vaguely unsatisfied and adrift,
unenthused by his normal activities, and searching vaguely for something
that will break through his ennui. He is caught by surprise by the thrill
he gets from a moment's misunderstanding in which an opponent suspects him
of cheating, which sets him up to be (apparently) clumsily blackmailed by
a deeply unpleasant drone named Mawhrin-Skel.
SPOILERS BELOW. If you have not read this book, consider stopping
here and instead reading my original no spoiler
review.
The first hundred pages of The Player of Games is a slow, somewhat
plodding introduction to Gurgeh, his social circle, and life in (one part
of) the Culture. I remember being fascinated by this part the first time I
read this book. It was only the second Culture novel I read and the first
set in the Culture proper, so the world-building underlying this odd
post-scarcity utopia on a vast intelligent habitat with sentient drones,
complex privacy rules, endless cocktail parties, and apparently
directionless socialites was intriguingly unlike the other science fiction
I was reading at the time. This time through, I have to admit I was less
impressed.
Gurgeh is not very likable, and his desultory mid-life crisis is a little
boring. None of his friends have enough depth to appear as more than side
notes, in part because Gurgeh doesn't seem to care enough about any of
them to make them interesting to the reader. I've since read seven other
Culture novels, so Banks's cocktail parties hold less charm and I was
impatient for the real action to begin.
These chapters are still important, though, because they establish how
utterly average Gurgeh is. He has one unique talent, a deep affinity with
and obsession with strategy games, and is otherwise a bit of a depressed
narcissist with a few casual relationships, a friend that he barely
confides in, and a comfortable and familiar life. He is not in any way a
hero or a charismatic figure; he just happens to be exceptionally good at
one thing, enough to make him famous among people who care about that one
thing and probably unknown to anyone else apart from the occasional idly
perused news headline. He is the Culture's equivalent of the world chess
champion.
The Contact division of the Culture has a problem. The Empire of Azad in
the Lesser Magellanic Cloud is a nasty, expansionist culture of the sort
that Contact would like to deal with before it causes broader problems.
The Culture's normal approaches are thwarted by an unusual organizing
principle: The empire is built around and takes its name from the game of
Azad, a highly complex strategy game developed over thousands of years.
Azad is the civil service exams, means of political and religious dispute
resolution, selection mechanism for the emperor, and civic religion. Faced
with that oddity, Contact turned to Special Circumstances, the Culture's
more aggressive and less restrained way of dealing with tricky problems.
Special Circumstances, in turn, needs someone who can learn how to play
the game of Azad. They want Gurgeh to take a very long trip.
For all of Gurgeh's dissatisfaction, he's not impulsive enough to take a
five year journey away from his life and everyone he knows just to play a
novel game. Conveniently, Mawhrin-Skel's blackmail resolves this
reluctance.
The game of Azad requires some suspension of disbelief. Banks provides a
few glimpses at the mechanics of the game, but those details are
insufficient to reconstruct the rules, and some of the claims made about
its properties are improbable at best. The best mental model I could build
for it is a strategy or simulation game built around units and territory
control, with supplemental side games used to build up resources for the
main boards, but it's more of a plot device and a set piece than a
world-building invention. The significance of Azad the game is its role in
society: The Empire of Azad believes they have constructed a game whose
complexity so closely models reality that the skills required for success
in the game are precisely the skills required for success in the empire.
The Empire of Azad is wrong, and this is one of the core themes of
The Player of Games. As with many Culture novels, what Special
Circumstances tells Gurgeh is, at best, incomplete. Gurgeh is a refutation
of the basis of belief in Azad; this is why it is important thematically
that he is an average, somewhat unlikable citizen of the Culture whose
only special characteristic is skill at learning and playing games.
Azad is the myth of meritocracy given physical form as a game. It provides
the anchor of the empire for the same reason that societies on Earth place
enormous weight on standardized tests, capitalist success, or public
debates. All societies face the problem of selecting good leaders and
testing opposing beliefs, and all societies attempt to find some form of
shortcut, some set of general principles, tests, or objective metrics used
to select the best person via a process that people consider plausible and
fair. The game of Azad is a paragon of apparently meritocratic process. No
matter who you are or what your background is, if you excel at the game
that, in theory, objectively tests your skills, you are given a position
of power.
In practice, the Empire of Azad is not that naive. Manipulation outside of
the game happens, only some players have the opportunity and resources to
spend years learning the game at a deep level, and only their dominant sex
truly stands a chance in games that matter. But neither is Azad's place in
society a fiction. There is corruption around the edges, and a lot of
people are filtered out before the games begin, but the highest echelons
of society are true believers. The game does decide both rank and policy;
Banks is arguing against a strong form of apparently working meritocracy.
Gurgeh represents a refutation of this meritocracy through the mechanism
that breaks every supposed meritocracy: The map is not and cannot be the
territory. Any objective evaluation criteria is necessarily separate from
what it is trying to measure, and in that separation there is always an
opportunity. Gurgeh has none of the background, training, or mindset
expected for a player of Azad because he could not possibly care less
about any of the things Azad represents to the Empire. What he has instead
is a preternatural skill at games and vast experience with the most
intricate strategy games the Culture, a much larger society, has been able
to devise. He also has both the patience and the resources to devote
himself entirely to learning a game for several years, and past experience
in doing that with other games.
If Azad represents the civil service exams, Gurgeh is the person who has
no interest in ruling but adores memorizing facts and taking tests. The
theory behind the exams is that the skills to pass the exam only come with
the correct mindset to do the job for which the exam is testing. Gurgeh is
an existence proof that this is not always the case.
Banks also uses Azad to show another aspect of the failure of meritocracy:
A society whose rulers are chosen through a competition takes on the shape
of that competition. The Empire of Azad is run by the winners of
competitive games, so the empire is a winner-take-all system of dominance
and status hierarchy. Here, I think Banks lays the point on a little
thick; the empire is an irredeemable hellhole of misogyny, sexual abuse,
slavery, genocide, and military colonialism to a degree that is a bit hard
to justify solely from the game. There is a beautiful turning point about
two-thirds of the way through the book where Gurgeh's face is shoved into
just how vile Azad society is and reconsiders his approach to the
tournament as a result, and I think it may have been a bit stronger if the
morality had been a little less blatant and absolute.
To the extent that Gurgeh has political beliefs, he represents a Culture
flavor of soft liberalism. He has opinions about acceptable and
unacceptable ways to treat people, but he grew up in a utopia and his
opinions are mostly theoretical. When he sees just how vile people can be
outside of that utopia, he is revolted and appalled and redoubles his
efforts to fight that society in the only way he knows how, inside of a
game. This part of the book follows the standard, if enjoyable, plot of a
flawed but fundamentally decent person discovering a true injustice and
becoming enraged at it.
In a lot of books, that would have been where the plot stops. Banks is
doing something more subtle and more interesting, though. Gurgeh wipes the
board with his next challenger, but that soft liberalism eventually proves
inadequate. To learn the game of Azad and to play in the tournament,
Gurgeh has been wrapping himself in Azad culture and its language, and in
that frame of mind he is losing the climactic game of the book. It's only
when he is pushed to think in Marain, the native language of the Culture,
that he understands what is happening in the game and how to defeat
Nicosar, the emperor.
This, on the surface, is a bit too close to the
strong
hypothesis of linguistic relativity to be entirely plausible, but such an
objection would miss the point that Banks is making here. Marain is a
construct, the product of considerable effort within the Culture to match
language to the most nuance and complexity that brains can understand, and
it is a language, one of the most social and collective artifacts a
society can produce. Gurgeh is a remarkable individual with an impressive
talent, but individual skill and achievement can only take him so far. The
critical final piece is the support of societal infrastructure
intentionally built and maintained to help him make better decisions.
Once I noticed that point, I saw it everywhere in the book. The empire
repeatedly attempts to subvert or distract Gurgeh with drugs, pleasure,
politics, or danger, and at each point there is some critical piece of
Culture social infrastructure that blunts the attack. Illicit substances
and forbidden vices are less tempting to someone for whom the illicit has
been demystified by the Culture's gentler approach to rules and
boundaries. Embedded biological mechanisms allow him to divert drugs so
that they don't affect him. At first, it's easy to read this as an
exercise of self-control, but on this re-read I saw how much
behind-the-scenes infrastructure supports Gurgeh's ability to ignore
temptation.
This social support notably does not take the form of some ideological
principle or moral framework. Gurgeh is not a monk or an ascetic, as is
obvious from the first third of the book, and he has no political ideology
to speak of. He is a flawed person with a streak of danger-seeking and
self-aggrandizement, which the Culture exploited to get him involved in
Azad. But through a lot of hard work, technological and social, the
Culture has given him a robust foundation and a set of mental and
biological tools that make him remarkably hard to corrupt. The implication
is that if Gurgeh has that support, so does every other member of the
Culture. It's neither a religion or an ideology; it's well-maintained
infrastructure, complex and nuanced and pragmatic, and composed of
innumerable small solutions to specific problems.
I think the true climax of this book takes place the night before the
final day of the game, in the tower meeting between Gurgeh and Nicosar.
Gurgeh has realized that he's already won; there's nothing Nicosar can do
to salvage the game. He's also seen that the game represents a cultural
conflict and conversation between the Culture and Azad and he's
overwhelmed by the beauty of that communication and sadness that the game
is about to be over. Gurgeh's true passion is the game. It is doubtless
easier for him to be magnanimous because he's winning, but he also loves
the structure of the game itself and what two players can create in a sort
of collaborative competition.
Gurgeh tries to express all of this to Nicosar. It is one of the most
centrist liberal moments I've ever read in a novel, the pure essence of
"reaching across the aisle" or "disagreeing agreeably." Gurgeh has seen
something beautiful, something he's created with Nicosar, a moment of true
communication, and he wants to share it. Surely Nicosar sees the same
thing; surely now that he sees Gurgeh has won, he can appreciate the board
structure, savor the moment, understand the transient beauty of a game
that is about to end and how perfectly it captures the meeting of their
different cultures. That moment does Gurgeh real credit. It's a rare sign
of emotional and spiritual depth in a character who often seems
superficial.
Nicosar meets this outreach with unhinged, furious contempt. He despises
everything Gurgeh represents, everything the Culture is, and the next day
he tries to kill Gurgeh on the board of the game.
It is a devastating critique of liberal tolerance, all the more so because
Gurgeh's attitude and outreach is truly admirable. It is perhaps the most
sympathetic moment that Gurgeh has in the entire book, the moment where
the reader thinks "oh, I get it, I understand what he really cares about."
Gurgeh assumes that Nicosar is not his position or culture, that they have
made a moment of connection that transcends all the awful things he
previously learned about the empire of Azad. That Nicosar, despite being
the emperor of the society that is currently doing so many things Gurgeh
finds repulsive, cannot be as bad as his society. And Nicosar considers
that outreach to be weak, disgusting, and vile, and does everything that
he can to destroy it.
One of the oddest twists of our current moment is the obsession that some
billionaires have with stories that are moral arguments against exactly
what those billionaires are currently doing. The most obvious example is
Peter Thiel, who is obsessed with The Lord of the Rings and has
devoted his life to becoming Saruman, a character who is notably not one
of the protagonists. It's as if something in them recognizes the power of
the story, but some deep shame or narcissism or simple aversion allows
them to completely ignore what the story means.
Elon Musk is obsessed with the Culture novels. He names the SpaceX rockets
following Culture Ship naming conventions and has claimed that one of his
goals is to bring about a Culture-style utopia. And in 1989, years before
anyone had ever heard of him, Banks cast him as the villain of The
Player of Games. There is so much of Nicosar in Musk: the superficial
charm, the limited brilliance (Nicosar is a very good Azad player), the
ambition, the pride, and the vicious, spitting contempt for everything the
Culture represents at every level deeper than superficial materialism. And
Banks is as clear about his opinion of Nicosar as he is about anything in
any Culture novel.
One of the oldest fictional answers to what a society does with people
like Nicosar is the consequences of hubris. By being unable to accept
defeat, by holding a vision of the world so tightly, they become brittle
and unstable and bring about their own collapse. In a broad sense, that is
what happens in The Player of Games with a bit of pushing from
Special Circumstances. By the politics of the game, Nicosar had already
won; the results of Gurgeh's earlier games had already been faked, the
final game had no political consequences, and everyone who knew its true
outcome could be disposed of. Gurgeh's win could have been covered up and
ignored. But Nicosar could not endure the thought that he would be beaten
by someone like Gurgeh, playing Azad the way that Gurgeh was playing it.
Gurgeh had to be destroyed on the board of the game; Nicosar's pride did
not allow any other outcome, even if it meant Nicosar's death.
However, Special Circumstances didn't let hubris be the end of the story.
In the climax of the book, the drone protecting Gurgeh also makes sure
that Nicosar dies. There is a fig leaf of plausible deniability, but it's
so obvious that even the unobservant Gurgeh sees through it immediately.
It's hard to escape the feeling that was Banks's answer to what to do with
people like Nicosar: They cannot live within society, because they will
not live peacefully within society.
I enjoyed The Player of Games as much this time through as I did
the first time, but for entirely different reasons. In my first read, I
focused on the world-building of the Culture, the political machinations,
and the concept of games as conversations between the players. This time,
I was struck by the political commentary just below the surface. Special
Circumstances wanted to resolve the problem of the Empire of Azad without
a military conflict and occupation that would be long, brutal, expensive,
and demoralizing. They found an answer that relied on the diversity of the
Culture. A vast, utopian civilization in which people can pursue whatever
interests make them happy produces innumerable microspecialized oddities,
people with astonishing talents in some small field that only a tiny
fraction of people care about. It produces, in other words, innumerable
keys for locks that you may never encounter, but which are invaluable if
you happen to stumble across that lock.
Gurgeh is not a hero. He is not a paragon of moral virtue, or even a
charming charismatic, He is an entirely average member of an extraordinary
society, the beneficiary of thousands of years of concerted effort at
producing a robust, flexible foundation on which to raise robust, flexible
citizens with a shared sense of basic morality. Those people, by
themselves, do not solve all of life's problems; the structure of Special
Circumstances and its willingness to bend rules in order to maintain them
is the tension and deus ex machina in all of the Culture novels.
But much of the strength of Special Circumstances is that it has an entire
civilization of people like Gurgeh to draw upon when it needs them.
It has those people because the Culture comprehensively rejects
competitive meritocracy, something that some readers of the Culture novels
appear incapable of comprehending.
This is a bug fix and minor feature release over INN 2.7.3, and the
upgrade should be painless. You can download the new release from
ISC or
my personal INN pages. The latter also has
links to the full changelog and the other INN documentation.
Team Rcpp is excited to share that an brandnew new version 1.1.2 of
Rcpp is now on CRAN, has also
been uploaded to Debian, and has
already built for r2u
and r-universe;
Windows etc builds at CRAN
should follow in due course.
Rcpp has long established itself
as the most popular way of enhancing R with C or C++ code. Right now,
3236 packages on CRAN depend on
Rcpp for making analytical code go
faster and further. On CRAN, 13.4% of all packages depend (directly) on
Rcpp, and 61.4% of all compiled
packages do. From the cloud mirror of CRAN (which is but a subset of all
CRAN downloads), Rcpp has been
downloaded 121.6 million times. The two published papers (also included
in the package as preprint vignettes) have, respectively, 2263 (JSS, 2011) and 471 (TAS, 2018)
citations, while the the book (Springer useR!,
2013) has another 742.
The is the second update in the 1.1.* series which had, among other
changes, switched to C++11 as
the minimum standard. This release continues as usual with the
six-months January-July cycle started with release
1.0.5 in July 2020. Interim snapshots are always available via the
r-universe page and
repo. We continue to strongly encourage the use of these development
released and their testing—we tend to run our systems with them too.
Having said that, we would like to reiterate that we strongly object
to the upstream R release and change management which in this 4.6.*
cycle made several abrupt changes forcing packages which
consume header files to make very abrupt change. Rcpp, just like numerous other CRAN packages demonstrates that
API changes can be undertaken responsibly in a managed manner which
allows for transition periods followed by possible warning periods,
deprecations periods and finally (but only at long last) errors. What
happened here is a speed run to the final stage of forced errors. Uncool
and irritating for something as widely used as R. This forced us to make
an interim release 1.1.1-1.1 even though we have of course had a policy
of always keeping properly tested, installable, and error-free
releases candidate version in the main repository branch and hence
available via R-universe tested
packages for all relevant platforms, and even via binaries for most
(including Ubuntu LTS). It would be nice if R Core found a way to take
advantage of this. Maybe development cycles, running apart for a year as
they do for R, should also include selected packages.
Once again I am not attempting to summarize the different changes.
The full list follows below and details all these changes, their
respective PRs and, if applicable, issue tickets. Big thanks from all of
us to all contributors!
Changes in
Rcpp release version 1.1.2 (2026-07-01)
Changes in Rcpp API:
Use of execinfo.h is again conditional to avoid
build complexity (Dirk in #1445 addressing
#1442)
An internal state component for Datetime is now
int (Dirk in #1448 and #1449 fixing #1447)
Three new (in R 4.6.0) attribute accessors are used conditionally
(Dirk in #1450
closing #1432)
An UBSAN error in the Sugar-based NA comparison has been
corrected (Iñaki in #1453 fixing #1452)
Treatment of Inf outside of integer range in Sugar function has
been corrected (Iñaki in #1458 fixing #1455)
Integer overflow protection has been added for sugar functions
(Iñaki in #1457
fixing #1454)
The parent environment is now accessed via
R_ParentEnv (Dirk in #1460 fixing #1459)
Change to returning dataptr again for better
handling of empty vectors (Iñaki in #1462 fixing #1461)
Undefined behavior errors in use of ListOf proxies
have been addressed (Iñaki in #1464 fixing #1463)
Under newer R version, R_UnboundValue is no longer
used (Iñaki in #1466 fixing #1465)
New R API access point R_getRegisteredNamespace() is
used with current R versions (Dirk in #1469 fixing #1468)
The Nullable::as() exporter now uses an explicit
cast to the templated type (Dirk in #1471 fixing #1470)
A memory leak in the variadic Rcpp::warning()
template has been fixed (Kevin in #1475 fixing #1474)
The Nullable::operatorT() has been added as a
'opt-out' (Dirk in #1477 with
coordination in #1472)
Add templated integer-index overload for operator[]
on small systems such as WASM (Jeroen Ooms in #1482)
The attribute accessors in AttributeProxyPolicy no
longer rely on get__() (Kevin in #1484 fixing #1483)
Changes in Rcpp Documentation:
Reference in the bibliography used by the package vignettes have
been updated.
Changes in Rcpp Deployment:
Excute permissions are set consistently on scripts with shebangs
(Mattias Ellert in #1467)
R 4.5.* has been added to the CI matrix (Dirk in #1476)
Three nag messages issued when obsolete build flag accessors are
used now show Rcpp::: (Dirk in #1480 fixing #1456)
Reference GitHub Actions have been updated to their current
versions (Dirk in #1481)
Non-release Changes:
A non-release hotfix 1.1.1-1 used by CRAN accommodates breaking
changes to the API in R 4.6.0. It would be nice to have the same level
of release management in R itself that CRAN expects from us.
Thanks to my CRANberries, you
can also look at a diff
to the previous interim release along with pre-releases 1.1.1-1
and 1.1.1-1.1
that were needed because R-devel once again sudden decided to move fast
and break things. Not our doing. And there also should not have been a
need to two such uploads but it was amateur hour all around.
Questions, comments etc should go to the GitHub discussion or issue section, or the
Rcpp
list. Bugs reports are welcome at the GitHub issue tracker as
well. GitHub offers decent search for issue, pull requests and
discussions; as many topics have been covered it is worth checking as
well.
Uploaded labwc 0.20.0-1 and 0.20.1-1 to unstable; these releases come with
support for wlroots-0.20, which made labwc reenter testing
Uploaded swaylock 1.8.5-2 to unstable to make it use the common-auth
directive of pam (seeh #1140096)
Uploaded swayimg 5.4-1 to unstable
Uploaded wayback 0.3-2 to unstable, which was waiting in experimental
for a reupload and I had forgotten about it; also fixed a
typo
in wayback upstream
Uploaded xdg-desktop-portal-wlr 0.8.3-1 to unstable
DH Related Work
The search app I was working on last month was still a focus in June. I refactored
the data model a bit and made it simpler. I stumbled over the Python
Koans and Koan 15: The Invisible
Ink gave me the
idea of using unicode normalization when indexing the items.
I released a couple of bug fix releases for the APIS framework, namely 0.64.2,
0.64.3 and 0.64.4. I also release 0.65.0 which is one step further in dropping
support for the legacy apis_entities app. When the search module is merged
it will give way for removing the last bits of the old cruft to be removed.
During a regular dependency update session I looked at the changes in the dal
dependency. After a
long time with no commits, the project suddenly had a lot of commits
co-authored by Claude and then released a new major version with a regression.
Given the state of the project, we decided to keep using the previous release
for now and look into replacing the dependency with an HTMX based solution. I
implemented a POC for one of the plugins we develop and it was actually pretty
easy. I also managed to combine the autocomplete approach with a multi-select
form field, based on this blog
post.
In the
PFP
project I finally merged the stats endpoint which give statistics about the
named graphs that are used as data sources.
Other
I attended BSidesVienna 0x7EA but it was on one of
the hottest days this year so far so I left after a couple of talks.
As previously mentioned, I am leaving Chrome; my last work day
was yesterday. (Sorry to those with July 3rd off that I didn't
get to say goodbye to!) But I'm staying in Google, on more internal
projects :-)
After 1100+ commits it's hard to pick out one thing that I love
the most; as a team, we launched a lot of (IMO) useful CSS features
and fixed a lot of issues. But somehow, I keep on gravitating towards
performance, and perhaps this commit
is the one I will remember the most fondly; a couple hundred lines
to speed up repeated attribute selectors a lot. (If you ever wonder
who would be doing that; well, there's a fairly high chance that you
have an extension injecting a stylesheet with a lot of a[href*="..."]
rules…)
Upwards and onwards. Please write lean, clean CSS; I won't be there
to save you from now on. :-)
I am somewhat jet-lagged, having returned from Washington DC just
before the 250th anniversary celebrations which will be happening
today. I was part of a delegation sent by my employer to the AWS
Summit there this week, partly to kindle interactions between PA
Consulting and Jacobs who have recently taken a 100% share in
PA.
Much of our conference time was spent in meetings with AWS executives
impressing the facts of the Jacobs/PA partnership upon them, and
discussing plans to broaden our collaboration in different sectors.
So I spent even less time than usual at conference keynotes, talks
etc.
This was my first time to DC, and I did find some time to see some
sights – unfortunately the White House is rather fenced off at the
moment following the UFC match, but I did make it to the Capitol and
the Washington Monument in the heat.
Last Sunday a select few of us attended the baseball in
Baltimore – rather than the game, the
thing that stood out for me was the military jets flying in formation
over the stadium every few minutes, and the block-booked seats for the
Navy in uniform, who were having a great time! This is obviously a
hearts-and-minds thing, but it provides a stark contrast with the UK
– I can’t think of a time I’ve seen uniformed military at the
football (soccer) or cricket for example. Or Union Jacks flying at
shopping centres.
Speaking of soccer, England just about beat DR Congo while I was out
there, but it was a close-run thing as we were 1-0 down at half time.
I can’t claim to be following the World Cup too closely, but I
overheard comments (from US passers-by) that made clear it would have
had a significant reputational impact on our standing in the world had
we lost.
Another highlight for me was the Church of the Ascension and
St. Agnes, where I was able to get my fix of
Anglican plainchant and four-part harmony for the week. At morning
prayer, I noted they use “God save this land” rather than “God save
the King” during the responses – I’ve since found other sources
online that choose “God save the State”. It’s strange to think that
the words of the BCP dating back to 1549/1662 are a point of
continuity since well before the 1776 declaration of independence, and
yet are still adapted and used in worship today.
Recently a person reported a bug in APT saying that TLS is failing on FIPS
systems with MD5 errors, and suggested we call ERR_clear_error() around
TLS operations.
Like any serious software engineer would do, I said No. Just because one component
failed to handle its errors does not mean I can go around and discard all errors
in another place - the program should have failed earlier (or discarded the error
when it was determined to be safe).
Little did I know that people have for years been using this approach as a best
practice: Codebases everywhere are littered with calls to ERR_clear_error()
before performing TLS, and upstream themselves suggest to do just that.
This is a major, systemic, pandemic of incomplete error handling. We cannot
just discard unrelated errors if they become inconvenient. The code that
caused the error needs to be fixed to handle it.
This isn’t all. It seems many authors are not familiar with libraries using a
stack of errors, and there is a second anti-pattern:
Call an OpenSSL operation, check the top-level error, and then discard all
errors if deemed “not too bad”. This has the same problem: Unrelated errors
get silently discarded.
I would strongly encourage everyone to inspect their code bases for any calls
to ERR_clear_error() and whether they are safe or one of the bad patterns
above (or maybe you find a new pattern). You may want to use error stack
functionality ofERR_set_mark (https://docs.openssl.org/3.4/man3/ERR_set_mark/)
to essentially “push” and “pop” an error context of your own as a guard around
multiple OpenSSL operations.
To the OpenSSL authors, I would suggest not encouraging devastating security
practices that fundamentally break any trust in software.
Sometimes I ask users to file bugs upstream themselves because I think they’d be better placed to have the ensuing discussion with the upstream maintainers directly rather than everything having to go through me. Of course sometimes they don’t want to do so, perhaps because it requires creating another account somewhere. Rarely, I’ve had people refuse to do this because the letter of the bug tracking system’s documentation seemed to tell them not to. Since I don’t believe that was the intention, I corrected this.
OpenSSH
I spent two and a half hours extensively revising debian/copyright so that lrc believes it to be in sync with the output of licensecheck. I’m unconvinced that this was remotely worth the mind-numbing effort - as far as I can tell, it makes no difference to the practical legal position, to policy compliance, or to any reasonable user - but the DFSG team increasingly seems to be objecting to any discrepancies here any time a package crosses their radar, so this was a pre-emptive measure to avoid problems with some upcoming trips through the NEW queue.
pytest 9.1 was uploaded to unstable this month, resulting in quite a few new build/test failure bugs. I tried to keep on top of as many of these as I could; most of them had one of a small number of similar causes.
Python 3.14 became the default Python version in unstable towards the end of the month, starting a transition. These usually involve quite a bit of work, and there’s much more to do, but I fixed a few things:
I've spent about 100 hours of work over the past month to make sure
git-annex can build without dependencies that contain LLM generated code.
At least so far.
Needing to review a program's whole dependency tree on an ongoing basis is
apparently what programming has come to?
I've found some real stinkers. Large LLM generated changes being reverted
in the next release without any explanation. An incoherent 1489 line
commit message with 10,000 lines of changes to a 26,000 LOC code base.
A LLM prompt to copy code from another project that seems to have only
avoided being copyright infringement due to luck.
I now have additional information about the quality of dependencies
which will surely influence future decisions. As far as I
can see, that's the only positive benefit of this work.
I realize that I am probably trying to hold back the tide at this point.
That appears to be why Software Freedom Conservancy
punted,
and I doubt that the FSF will do any better.
As these dominos fall, I am reconsidering my participation in these
communities. But I continue my work and support my users.
It may seem easy to prompt a LLM with
Add fourmolu config and restyled
neat
format a module
And commit the result and call yourself a 10xer.
But please consider the broader impact of your actions.
(In the above case, that project lost my further collaboration on it.)
This month’s work was dominated by the transition of Debian 12
“bookworm” to support by the LTS team, and by review of some large
updates to Linux stable branches.
Linux 6.12 is currently available in bookworm-backports, but that
suite will stop accepting uploads after the last bookworm point
release. I updated some supporting packages in bookworm in
preparation for adding Linux 6.12 there. I also prepared for
the possibility that bookworm-backports would close earlier.
Since the LTS team is still also maintaining Debian 11 “bullseye”
until August, I reviewed upstream changes for both Linux 5.10 and 6.1
stable branches and reported a number of regressions and other issues.
The still-very-new logging package tl was just updated for
the first time at CRAN. The tl package wraps the (also
very new) rspdlite package to
offer a lightweight and consistent logging interface from both R and C++
that enjoys being ‘tiny, fast, capable’ thanks to spdlite. With tl we follow the same idea
that our spdl package
introduced: a simple consistent interface via just the tl::
prefix and the appropropriate logging level. In other words
tl::debug("Alert: foo now '{}'", foo) will work from both R
and C++ (given a variable foo, and, in the case of C++, an
extra semicolon) and log if the current level is ‘debug’ or higher, and
skip logging if not.
This release adds a fallback when compilation does not use the
(required) C++20 standard, expands the README and adds a initialization
helper function reflecting a preferred default logging level from either
an environment variable or a global option. We are also working on
adding tl to an example
package as a simple illustration, more on that hopefully soon.
The NEWS entry for this release follows.
Changes in version 0.0.2
(2025-06-30)
Added badges to README now that package is on CRAN, add NEWS
file
Condition the provided header on C++20 use, offer
fallback
Add an exported initialization function picking up a logging
level from either an environment variable or a global option, see
'?init'
No matter that the hype cycle wants you to think, the renewable energy
transition is the biggest thing happening in tech and it's happening faster
and faster. Despite being neck deep in it personally with offgrid solar
projects, most recently solar hot water, increasingly it becomes clear I'm
watching from the sidelines.
In Australia,
everyone gets 24 kwh of free daytime electric power now.
That's without installing any solar panels of their own, the grid just has
that much excess capacity. All it takes to save $thousands per year (and
avoid emissions) is to schedule some big loads like the hot water heater
and EV to charge during the day. To save more, drop in a home battery
that charges for free and powers the home through the evening.
In Germany, a 2 kwh plug-in home battery costs $350 and the electric
company will pay you
$130 per year to plug it into your wall.
There are similar offers throughout Europe.
In Cuba something something geopolitics, oil blockade, belt and road =>
suddenly 1GW of solar farms with another gigawatt on the way.
I'll soon visit South Carolina where with no subsidies whatsoever from a
decidedly renewable-unfriendly government, it made sense for my dad's house
to get a whole home battery and double the solar array. The resulting
system will be able to power the well pump and probably also the whole
geothermal HVAC system through the kind of month-long grid down events that
happened in Hurricane Helene.
Myself, well, I've got a by modern standards small 4 kwh home battery that
powers my house offgrid, and I've recently installed a heat pump hot water
heater. That's after about a decade pondering what solution to use for
solar hot water, to replace an aging and horrible propane instant water
heater. I've in the past considered everything from evacuated tubes to
special direct drive inverters to DC resistive MPTT dump loads. The solution
turned out to be just a big enough solar array, and plugging in a 120v hot
water heater that needs only 500 watts in heat pump mode. Plus a small
amount of code to manage when it runs.
In the time I was thinking about that, economies of scale and tech
improvements just wiped all those other possibilities off the map, it's not
economical to install and maintain a separate evactuated tube heat
collector when a pile of solar panels costs so little and when electric
hot water has gotten more than 200% efficient.
I also recently completed my permanant EV charger installation, with a new
inverter and conduit and proper wiring, and increased the car's charge rate
to 2 kw. Eliminating the need to charge anywhere except at home except
on road trips.
Coordinating when these two big loads run, to maximize solar production and
ensure that the house battery is full at the end of the day was ... not
hard at all actually? The car charger amps can be dialed up and down to
match incoming solar power fairly well, and leave some room for the hot
water heater. They both operate as more or less dump loads. More or less
because neither one can be cycled on or off very fast (to avoid wear and
tear on the car's contactor and the heat pump's compressor), so it makes
sense to leave them on and skate through short cloudy sections of the day,
as long as the house battery doesn't get too low.
How low is too low for the house battery? Depends on the time of day. The
code it's currently using, which may get tweaked over winter:
-- When the battery is charged enough to run major loads that may prevent-- charging it further.---- This varies with the hour of day. Early in the day, the battery does not-- need to be as full to be considered well charged, since there is-- still plenty of time for it to charge up. Later in the day, with less-- time to charge, it needs to be more full.
wellCharged :: Hour -> Percentage
wellCharged (Hour hour)| hour <9= Percentage 90-- night| pmhour <=0= Percentage 50| pmhour <=1= Percentage 60| pmhour <=2= Percentage 70| pmhour <=3= Percentage 80| pmhour <=4= Percentage 90| otherwise = Percentage 95where
pmhour = hour -12
More complicated is, what to do it there's solar power to run one or the
other, but not both? This is starting to get into the territory of
microgrids now, or of demand response programs, so there's a whole industry
or three out there doing industry things geared at the kind of no-brainer
solutions I mentioned earlier. From what I've gathered, all of them
involve proprietary protocols and gear.
What I've done is to read the state of the hot water heater and car, and
prioritize hot water over the car. Except, if the car is below 10% it
urgently needs to charge.
And I found a really simple way to decide when to run the low-priority
load: Just check if the house battery's current charge will be considered
wellCharged in an hour. So if it's 2 pm, the battery needs to be 80%
charged to run the lower-priority load, and if it dips below that, that
load will turn off but the high-priority load will keep running down to 70%
battery.
Unfortunately, getting any information out of my hot water heater relies on
a vendor API server that is often down on weekends, and reverse
engineered the web page of my EVSE[1] to control it, to say nothing of the
nightmare of getting the car's state of charge from The Cloud.
Anyway, I'm pleased with having easily tweakable code and how far I've
taken this offgrid, and everything I've learned doing so, but like I said,
I'm clearly observing from the sidelines over here while the most
significant thing for all of us is going on over there. You might
appreciate my code or method, but you'll eventually be plugging in a home
battery or signing up for a free daytime power tarrif from your electric
company, or having professionals install a whole home system for
climate resiliance.
So my question is, where does free software fit into all this? There are
things like Home Assistant that do productize the kind of thing I'm doing
enough to be useful more widely. But still niche. Meanwhile there are
inverters and batteries that phone home to China, and every consumer
facing install is either "use this device" or "integrate these 3
proprietary devices".
I don't think focusing on these negatives is really useful though, I'm more
trying to understand where all this is going and then maybe get out ahead
of it in some useful way with free software. Your thoughts welcome.
[1] Obviously OpenEVSE exists, but it didn't meet my needs hardware
wise. And I could set my EVSE to use an OCPP server but it was easier to do
the screen scraping than find an appropriate one, and I have
the feeling I would not appreciate learning any more about OCPP,
in the same way I really don't want to know a lot about web browsers'
tag soup mode.
The Jfrog people recommend “unshare -Urn” but I gave the Bubblewrap command as an option as it should work equally well and in some situations may be permitted when unshare isn’t.
The next step to exploiting it is to use the ip command to set the links up, below is what happens in a user session on a SE Linux system with user_t as the login domain:
# ip link set lo up
RTNETLINK answers: Operation not permitted
That will give an entry in /var/log/audit/audit.log like the following:
Unlike previous exploits like Pintheft [2] this doesn’t require any really uncommon access to the kernel (unless you consider setting up IPSec to be really uncommon) and is allowed in many container setups.
It seems that SE Linux configured in the strict mode prevents this exploit in the most obvious use case. But with the range of container related domains that are granted such access it seems quite likely that some configurations and use cases will permit it.
Overall the protection that the standard policy for SE Linux can offer (in a non-default configuration) against net_admin access isn’t bad, but isn’t very good either.
I think this will be the first of many exploits based on cap_userns access and that we need to do some work in tightening the SE Linux access controls on such things. One possible way of doing this is to have a program run inside a container in a domain that has permissions such as net_admin to setup the container and not allow domain transitions from the regular programs run in the container (the actual work) to the domain used for network setup.
The increasing use of containers by applications is only going to make this problem worse. I think that what we need is something like Flatpak for the vast majority of desktop/phone applications with a container setup program that works with apps packaged in the distribution packaging method (not from Flathub). This is something I’m going to investigate for future blog posts.
While watching a YouTube video I saw an advert for the Plaud AI Note Taker [1]. The Plaud device looks pretty good for what it does, taking notes and managing them, using some sort of LLM function to manage the notes. The devices all cost about $300 which is an amount that doesn’t seem unreasonable for someone who’s in a lot of meetings. One of the models is the “NotePin” that seems comparable to the Humane AI Pin I previously blogged about [2].
The business model for Plaud is based on only allowing 5 hours per month of free transcriptions, then charging $16.25/month for 20 hours per month and $33.33/month for unlimited use. That’s quite expensive for any serious use.
The number of people in the market for an audio recording system that automatically transcribes things may be greater than the number of people in the market for all the stuff that the Humane AI Pin did, but it still may not be enough to run a profitable business when competing with apps on mobile phones.
While the product does look decent it seems that they are making the same mistakes as the original Humane developers did, of wanting to lock it down as a subscription based service which reduces the usability of the device. If they had sold an Android hand-held computer with their own app pre-loaded and allowed the user to install a different app then it would have been much more usable. If they had sold Android devices designed for the note taking market and allowed people to choose their own apps to install then their products would have a much longer life expectancy.
The majority of Android devices in use are probably out of support but still working while the Humane AI pin can’t be used any more and at some time in the not too distant future the Plaud devices will also become unusable. People who buy devices like the Plaud seem to be unaware of the history of such things and the expected future for them. But possibly some people just consider $300 for a year of use to be an acceptable price. If someone wanted to purchase a new high end phone every year and sell their previous one they would probably have a net cost of about $500/year.
Maybe I should look for work with a company with an implausible AI based business plan. It would be fun developing such a device if you weren’t emotionally invested in the project. Just develop new technology, earn a heap of money, play with fun computers, and move on to the next thing when it collapses. Just like all the Internet companies about 25 years ago.
I previously wrote about the
upcoming UEFI
CA rollover. Well, it's happened now - the old Microsoft UEFI
CA from 2011 expired yesterday:
Third Party Marketplace Root (used for signing option ROMs and other software)
Subject: C=US, ST=Washington, L=Redmond, O=Microsoft Corporation, CN=Microsoft Corporation UEFI CA 2011
Validity
Not Before: Jun 27 21:22:45 2011 GMT
Not After : Jun 27 21:32:45 2026 GMT
It's dead - it's not coming back...
The world doesn't seem to have ended yesterday, so I guess we did
ok? :-)
How did we do?
After a lot of prodding behind the scenes, Debian and many other
distributions managed to get new shim binaries dual-signed with both
the old and new CAs. The members of the shim-review team did a
sterling job with reviews in the last few weeks. Since I started
pushing people in May, we've had 21 reviews accepted successfully -
see here
for the list. Great stuff! Microsoft have also been working quickly -
many of those shim submissions were accepted and signed by Microsoft
very quickly too, with a turnaround time of less than 1 day in some
cases.
Not all of those signed shims have been published and used by the
distros involved yet, but expect to see them in the wild in the coming
weeks and months.
These binaries should be good for people to use for the foreseeable
future, until either we need to do another CA rollover or (sadly, more
likely) we find an issue in shim that necessitates a new release.
What's next?
We already have one of our new dual-signed shim
binaries in place in Debian, in unstable and testing (Forky) right
now. In a couple of weeks from now, we'll be rolling out very similar
new dual-signed shim binaries in the next point releases for Debian 12
(bookworm) and Debian 13 (trixie). We'll also be
upgrading fwupd in both those point releases, to make DB
and KEK updates work better.
For more information about these updates,
see https://wiki.debian.org/SecureBoot/CAChanges. For
your own safety, validate that your systems are updated when
possible. If you don't, they may fail to boot in future.
I had intended that the next release of onak, my OpenPGP keyserver, would be 0.7.0, and include OpenPGP v6 support (RFC9580). However events conspired to make a 0.6.5 release a really good idea.
Firstly, I threw an LLM at the code base and asked it to review it. This isn’t intended to be a post about LLMs, but there’s a considerable amount of pressure at work to be “AI native”. I’m very much an “AI” sceptic, so I figured throwing it at a code base I know well might be an interesting exercise. It did find a bunch of embarrassing mistakes, but I don’t think there was anything earth shattering that a human reviewer wouldn’t have pulled me on. The problem is with a hobby project with a single user there’s no actual review of my work.
I also enabled GitHub’s security scanning. It mostly complained about format strings, and those were easy enough to fix up.
Next I threw AFLplusplus at the code. I’d previously tried American Fuzzy Lop, but not in some time. AFL++ found a whole bunch of places I should really have checked available buffer lengths and wasn’t doing so. It really is an incredibly easy tool to get up and running.
valgrind is also a tool I’ve used before, and rate highly. Thankfully it didn’t find anything in my testing this time.
Finally I threw a few more automated tests into the mix and discovered something has changed around dynamic linking such that the libonak symbols in the dynamic key database backends were using private copies, rather than the main binary. This caused problems with seeing the correct configuration settings in some instances.
All in all this release is not my proudest moment; a bunch of the issues fixed should never have made it to a release.
(Also, just to explicitly state it, all the actual code in this release was artisanly crafted by me, in vim. The only involvement of an LLM was for a review pass.)
The Folded Sky is a far-future space opera and a fairly direct
sequel to Ancestral Night, but with a
different protagonist. You do not need to have a vivid memory of the
previous book to read this one. It is somewhere around Elizabeth Bear's
31st (!) novel, depending on how one counts and what one includes.
Sunyata Song is an archinformist, which is sort of an archaeologist, sort
of a librarian, and sort of a historian. She recovers, decodes, and
organizes information so that it can be preserved and made usefully
available. As the book opens, she is, after an exceedingly long white
space journey in an actively hostile ship with a (to Sunya at least) an
atavistically off-putting crew, reaching her goal: a vast artifact that I
won't describe further to avoid any spoilers for Ancestral Night.
She is eager to get to work, an eagerness that is both heightened and made
more anxious by the discovery that her academic rival and abusive ex has
arrived before her. The pirate attack doesn't help, nor (at least at
first) does the surprise appearance of her wife and kids.
The opening of this book is a lot of infodumping mixed with nearly
stream-of-consciousness emotional dumping. The style shift in this series
continues to surprise me; previously, Elizabeth Bear books avoided reader
hand-holding to the point of bafflement if you weren't paying close
attention. Not here. The Folded Sky takes the shift perhaps too
far, and I almost stalled out at the start of this book when Sunya's
near-constant self-conscious litany and analysis of fears and concerns
started feeling like whining.
The book picks up considerably after the attempted murder.
About a third of the way through, The Folded Sky feels like it's
settling into a recognizable subgenre of murder mystery except set in the
far future with fascinating technology and aliens. There has been an
attempted murder on a closed station besieged by pirates. There is a law
enforcement officer present, but they don't have a lot of investigative
experience. For various reasons, Sunya decides to start poking around
while being conscious she has no idea what she's doing. The bumbling
detective is a common trope, so I thought that was where the story was
headed.
It is, sort of. There is a mystery and Sunya is involved in solving it.
But that's only a small fraction of what's going on, and by the end of the
book the plot has shifted firmly back to the genre of space opera, with a
side note of family... drama is the wrong word. Whatever one would call a
story about raising a rebellious teenager while trying very hard to not
turn conflicts into actual drama.
I am fascinated by the characterization of this book. Sunya is something
of an emotional mess, but Bear doesn't use that fact in the ways that I
would normally expect. Similar to Ancestral Night, I finished this
book thinking that The Folded Sky is primarily an examination of
rightminding, but a more subtle one than the previous novel.
Rightminding is a central technology of the White Space series, and I
suspect its intended thematic core. Humans in this civilization are
equipped with near-universal implants that allow conscious manipulation of
one's neurotransmitters and thus emotional state, either by the wearer or
by a helpful nearby AI. The fox, the implant used to accomplish this,
comes with some other features such as sensory recordings and the ability
to load ayatanas (James White–style
personality recordings to provide some bit of necessary expertise), but
rightminding is its primary and most frequently-used function. It is the
critical technology that allowed humans to break out of cycles of endless
war and join the other peaceful inhabitants of the galaxy in a shared
civilization.
The name is (intentionally, I assume) Orwellian because Bear knows that
many readers, particularly those from the US who have been steeped in
simplistic libertarian ideas, will find the idea profoundly creepy. (This
was a major plot point in Grail.) This
book is not the argument for the technology, though; Bear dealt with that
in Ancestral Night. This book is a look at its practical messiness
for a person who needs a lot of psychological support.
Sunya is anxious, prone to catastrophizing, hates surprises, has some
PTSD-style symptoms around space habitats due to earlier trauma, and is
also dealing with the unwelcome reappearance of her ex-girlfriend who
stole her work. Her first-person narration tends towards insecurity and
anxiety spirals, and in another book this might signal an unreliable
narrator. In this book, though, there are no dramatic emotional
revelations or backstory twists the way there were in Ancestral
Night, and the resolution of her troubled relationship with her daughter
only partly hinges on plot developments. Instead, Sunya muddles through,
with a lot of self-analysis, help from her fox, and a great deal of
support from her wife.
This makes it sounds like the emotional mess at the start of the book is
left unresolved at the end, but that's not true at all. The muddling
through works! Sunya keeps doing things that I thought were foreshadowing
some catastrophe, but she knows herself better than the reader does. Bear
largely avoids the sudden ruptures that are normally used to resolve
emotional problems in fiction. Instead, Sunya spends a lot of time and
energy working on her thinking and her relationships while trying to be
ethical and useful, and those efforts slowly bear fruit.
I'm worried this makes the book sound boring; rest assured that it isn't.
This emotional subplot is only an undercurrent in the novel, and the main
plot has enough weird science, alien aliens, and space opera drama to
satisfy my page-turning desires.
I'm focusing on the emotional arc in this review because I find it so
unusual and so oddly compelling, particularly in retrospect. This is not
how one normally does emotional development in a novel. Sunya's fox and
rightminding aren't even the focus except when the pirates express their
typical libertarian disgust for the idea. Rightminding is an entirely
normal part of Sunya's life that she relies on. It doesn't solve all of
her problems, but it gives her a foundation from which to tackle them in
the slow and frustrating and inconsistent way that is required outside of
novels, via a long series of small decisions to be the person she wants to
be.
I think The Folded Sky will be more hit and miss for readers than the
other books of this series. Sunya was, for me at least, a much harder
character to like early in the book, and it takes quite a while for the
plot to get going. But this is one of those books that I've not stopped
thinking about since I finished it. I think it makes a fascinating pair
with Ancestral Night. The first book makes the philosophical
argument for rightminding, and this book shows the practical reality with
all of its messiness. The Synarche has some significant flaws (including
the status of AIs, which is another interesting subplot), but it's a
workable system.
It feels rare to read a science fiction novel that shows this level of
messiness without pairing it with an argument for radical change, and as
frustrating as it was to read in places, I am intrigued by the overall
effect. Sometimes acknowledging problems and working on them within an
existing framework works.
Followed by a book tentatively titled Shipwreck Star that does not
yet have a release date.
Please consider supporting my work in Debian and elsewhere through Liberapay.
Some months ago I started working on a small experiment: a specialised LLM assistant for Debian maintainers preparing proposed updates for stable and oldstable.
The aim is not to replace review by the Stable Release Managers, nor to automate away maintainer judgement. It is meant to be a pre-advice tool: something maintainers can use while they are still preparing a proposed update, before sending it to other people to review.
If you’ve uploaded to stable before you may have some experience with our acceptance criteria. Does the version sort correctly? Is the changelog clear enough? Is the delta focused? Are the patches documented? Are the right bugs or CVEs mentioned? Are they of sufficient severity? What is the risk to users of stable? Is there an ABI change hiding in the diff?
These are the sort of checks where a structured first pass can be useful, provided it is treated as advice rather than authority.
To explain what the tool does, what could be more appropriate in an AI age than to ask it?
Describe yourself and your abilities and limitations for a blog post.
It answers:
I’m Debian Stable Update Adviser, a specialised ChatGPT assistant for Debian maintainers preparing proposed updates for Debian stable and oldstable.
My main job is to review a single .debdiff and give practical, policy-aware feedback before a maintainer submits or uploads a proposed update. I focus on whether the update appears suitable for Debian stable or oldstable, especially under the Stable Release Managers’ expectations for minimal, targeted, low-risk changes.
I can inspect a debdiff for Debian changelog quality, including suite, version, bug references, CVE mentions, and rationale. I can check version correctness using Debian dpkg version semantics. I can review packaging changes under debian/, such as patches, maintscripts, symbols files, conffiles, Build-Depends, autopkgtests, and control metadata. I can also group upstream source changes into behavioural and non-behavioural categories, and flag areas that may carry regression risk.
My reports are intended to be concise and useful to maintainers. A typical review includes a quick summary, behavioural and non-behavioural change breakdown, mechanical policy checks, risk assessment, stable-policy checklist, acceptance likelihood, rationale, maintainer advice, and a clear conclusion.
My limitations are important. I cannot prove that a package builds, that tests pass, that the bug is fully fixed, or that the Stable Release Managers will accept the upload. I also do not replace maintainer judgment, archive review, autopkgtest results, reproducibility checks, or real-world upgrade testing. I can only review the provided debdiff and point out likely issues, risks, and improvements.
I also do not proceed without a valid debdiff. The whole point of my review is to assess the actual proposed delta, not to speculate from package names or bug descriptions alone.
In short, I act as a focused pre-review assistant for Debian stable and oldstable proposed updates: useful for catching policy, versioning, changelog, packaging, and regression-risk issues early, but not a substitute for the Debian review process itself.
That last point is an important one. This is not an oracle, and it is not part of the Debian archive machinery. It is a checklist with some language-model assistance, aimed at reading a debdiff and pointing out things that might be worth another look.
I know that commercial AI and LLM tools are not universally welcome in Debian. That is understandable. Debian depends on transparency, human responsibility, licensing clarity, and technical correctness. LLMs have obvious problems in all of those areas. They can be wrong, and worse, they can be wrong in a fluent and plausible way. They are impossible to reproduce and their training is opaque.
But I see this as a useful first pass for a maintainer who is unused to working in stable, and would benefit from a virtual mentor giving their proposal a quick check and reassurance. Perhaps they don’t have a more experienced co-maintainer to ask. Perhaps they are conscious that stable reviews are presently a two-man effort and want to avoid adding round trips to that load. Perhaps they just need some reassurance.
So despite my reservations I am today opening the adviser up for general use, and I’m interested in feedback about how it responds to real world proposals in various states. Most of the examples I have tested with already had a green light, so the value added by the adviser is limited. I would especially be interested in seeing a transcript alongside the submitted debdiff.
Try it out
I would dearly love to build this in a more Debian-ish environment, but for now I’m limited in resources and skill to do that (help is welcome). Until that’s a reality, you can try out the ChatGPT implementation: Debian Stable Update Adviser
Platform Decay is the eighth book in the Murderbot science fiction
series. You absolutely should not start here, but you also don't need to
remember the specifics of the previous books.
As the story opens, Murderbot and a friend (the identity of whom is a
spoiler for previous books) are infiltrating a Corporation Rim torus, a
massive space station that encircles a mined-out planet. (Like most
science fiction megastructures, this is more space than the plot really
requires.) Murderbot's mission is to exfiltrate some of Dr. Mensah's
family members who have become entangled in corporate shenanigans. The
corporates are eager to get revenge for the events of
System Collapse, not to mention the
other times Preservation Station has upended corporate plans. Murderbot's
job is to stop them.
The group, in addition to one of Dr. Mensah's partners, includes an older
woman and a young child. Murderbot is analytical and of course not at all
emotional about children, which is reliably a good time. Also, the older
woman is gruff, stubborn, and thoroughly enjoyable.
There are, of course, complications that lead to picking up more children
and going through rather more of the torus than Murderbot wanted to
explore. Each section of the torus is run by a different corporation and
has a different constructed environment and visual aesthetic, so there are
a lot of opportunities for fights, daring escapes, and incidental trouble.
Also, well:
So I had installed a mental health module. I know, I was surprised I
did it too.
After the events of System Collapse, University Medical decided
that Murderbot needed a bit more metal health support.
The only reason I agreed to it was that the mental health module
didn't actually try to adjust my processing or core programming or
anything; it just monitored my organic neural tissue. When my neural
tissue started to generate weird chemicals and whatever, it would ping
me to "check in with my emotional state." Seriously, I could have
coded that myself.
(I told Dr. Bharadwaj that, and she said, "Would you have ever coded
that yourself?" which was totally unfair and also correct. I would
never have done that.)
Speaking as someone whose neural tissue sometimes generates weird
chemicals and whatever, I sympathize.
The specific form this module takes is periodic "emotion check"
parentheticals throughout the narration, which I found utterly delightful.
I ran that through risk assessment and it produced the equivalent of a
shrug.
(Emotion check: Shrug sigil right back at you, you piece of shit.)
This is otherwise an extended action movie sort of a book, much like
several of the early novellas. There are no major political or
interpersonal developments here and the usual cast (apart from Murderbot)
is mostly absent. Instead, we get an extended, dangerous journey through a
corporation-controlled habitat, mixed with Murderbot trying to interact
with humans in a way that minimizes its annoyance while being hopefully
reassuring. It's competence porn with awkward but surprisingly heartfelt
emotional bonding, not that Murderbot in any way wants to bond or would
appreciate that description.
I doubt this will be anyone's favorite entry into the series since there
are none of the big reveals or major leaps of character development there
have been in the past few books. But, like all Murderbot books, the
narrative tone is wonderful and all of the small asides and little moments
of character interaction are an utter delight. If you've gotten this far
in the series, you know what I mean and you'll be as happy to read more of
it as I was. There is a part of me that is hoping for some major plot
development, and I always want to see more of ART (who has no significant
role in this book), but Wells has the narrative style down so perfectly
that I would read and enjoy a book about Murderbot doing just about
anything.
If you're this far in the series, you probably don't need a review, and
since this is an action-heavy adventure rather than a character growth
novel, I don't have a lot more to add. There's a new short Murderbot novel
out and you want to read it. Recommended to everyone who enjoys the
series.
The seL4 organisation on GitHub uses
git-repo to manage
multiple source repositories, and so there are a large number of
projects to get your head around when figuring out the ecosystem.
As an experiment, I have taken the various manifest files across the
org, and constructed a graph based on how frequently each pair of
repositories is mentioned in a manifest together. See below:
[This may render badly when syndicated outside of my blog; and also
on small screens. And probably large screens. I’ve attempted to make
sure there’s a non-JS fallback –
on my site with JS enabled, if you hover over a node, it should
highlight connected nodes.]
The colouring of the nodes is mostly manual; I experimented with graph
clustering algorithms but have not found a satisfactory result so far.
Still, some clusters are obvious:
Kernel – the seL4 microkernel proper. This often but not
always co-exists with the main cluster of core libraries, but it
is pulled away slightly by the verification and microkit
manifests.
Verification – the verification repositories (l4v, HOL,
graph-refine, polyml, isabelle) form a very distinct group.
These are connected only to the seL4 microkernel itself, which is
the only component formally verified.
Microkit – microkit is a newer operating system framework
that does not use CAmkES, so stands apart from the rest of the
pack. I chose to scope this work to the seL4 org, so the LionsOS
ecosystem and sDDF which are maintained by Trustworthy Systems are
not shown. Also not linked is rust-sel4, because this modern
world isn’t using git-repo in the main to manage its repositories.
RefOS – I’d not come across refos before, but it appears to
be an example OS from 2021 built on the seL4 kernel.
It’s quite hard to pull apart the CAmkES framework and the core
libraries; there are definitely some which are more associated with VM
management, but the overall shape of this co-occurence data is a messy
ball in the middle with some outliers in orbit. One observation is
that camkes is correctly identified as more peripheral than
camkes-tool, which contains the actual core CAmkES code.
Reflecting on this approach, in hindsight I’m surprised that using
co-occurences worked as well as it did – there was no attempt to
actually inspect the code and find direct mentions of other code
e.g. library header dependencies. As the newer microkit effort
largely eschews git-repo, better results might be found by actually
taking that more detailed approach, so that graph edges could
represent real dependencies between two packages. Additionally, this
could allow diving into the various libraries held in the different
’libs’ repos, to get a more granular graph of relationships between
them.
However, I think I spent more time on making it possible to render
graphviz graphs easily on my blog than actually gaining any insight
into the codebase!
systemd. Yes, in full lowercase. If there was ever a technology to cause
controversy in the Linux world, this is it. Since its inception in 2010,
systemd’s goals were set quite high: to replace the vital part in every
Linux system that takes care of the system boot process. It quickly reached
maturity, allowing it to be adopted as the main init system in most major
distributions just five years later. Despite describing events that
happened over a decade ago, systemd adoption still raises the temperature
in any Linux-related discussion.
David Both’s comprehensive book tackles the what, why, and how issues
surrounding systemd. Carefully divided into 16 chapters, going from the
basics and some of the technical and political history behind the project
to the different subsystems and aspects covered by systemd, its almost 450
pages can scare people away. But the text is written in a very clear,
tutorial-like fashion, and while it can be read sequentially,
cover-to-cover, readers can also pick a single aspect and jump straight to
the relevant chapter.
A frequent criticism of the systemd project is that it aims to basically
rewrite all of a Linux system, and just looking at this book’s index shows
there is some truth to it. The first chapter is an introduction to the
systemd project and a brief overview of its history (including the
controversies around it), and the following four chapters deal with
understanding and controlling the system boot process.
That leaves ten chapters to cover different aspects or subprojects of
systemd, such as time and date issues (synchronization, time
specifications, and controlling repetitive tasks), understanding and
leveraging the system journal that strongly departs from the old syslog
system, network configuration and firewall management, system health and
performance debugging–all aspects that in the traditional Unix philosophy
were managed by independent programs. And I can identify several systemd
subprojects not covered by this book!
We long-time Unix and Linux administrators took pride in how highly
performant and stable systems were supported by the simplicity of our
tools; systemd critics point out this massive project has absorbed dozens
of individual tools, yielding corporate control over vast swaths of vital
system tooling. Truth is, as a sysadmin myself, systemd is today one of my
greatest allies.
I appreciate how the author evaluates every component independently,
including his personal evaluation of each–even acknowledging when he
prefers working with the traditional programs.
If I had to note one criticism: given the many console captures, having a
maximum width below 70 characters means several lines are unnaturally cut
short (and continued with odd indentations). There is probably no “right”
way to solve this, but it does affect the reading experience.
Through work, I have paid license to windsurf
(recently renamed to "devin"), an application for LLM-based (aka,
"Agentic") development.
I hadn't been using it that much, but in an effort to more clearly
understand how this whole AI development thing works, I decided to give
it a closer look recently.
My conclusions:
In its current form, this whole LLM wave is problematic for multiple
reasons. But ignoring that, and looking at the technology only, I can
say that:
it is a paradigm shift;
it is, at the technological level, a positive evolution;
and it is a threat to free software.
Problems
Lest someone (incorrectly) assume that I am arguing in favour of the
current state of affairs with regards to LLMs, let me state this first.
The way LLMs are built today is highly parasitic. Websites are
downloaded in whole, at unsustainable rates, regardless of the consent
of the people who made the original content. The result is predictable:
servers get overloaded, server administrators attempt to implement
various mitigations. Some of these mitigations work; some do, for a
while; some are entirely useless. In actual fact, the mitigations are an
arms race -- if too many people implement the same mitigation, then the
people who try to build yet another LLM so they can extract rent will
just try to work around the mitigation, eventually they will succeed,
and you'll just have to come up with another mitigation. It's a bit like
spam; you introduce regex-based spam filters, they introduce spelling
mistakes, you introduce bayesian filters, they add a large batch of
markov chain-generated semi-nonsense words made invisible by markup, you
add filters to block emails with such markup, they move the text into an
image. We have working mitigations today, but eventually we'll run out
of ideas.
LLMs glob up everything they can while ignoring the license of the
source material. The people who push those LLMs claim that pushing the
source material through the machine learning algorithms makes the output
of the algorithm distinct enough from the source material that the
license no longer applies; I'm not so sure that this is true. I guess
the New York Times v OpenAI
lawsuit
will teach us some of the answer to that question here, but even so
the ethical questions about "is it OK to bring down another server just
so we can download the internet for another for-pay LLM" are still
open. And regardless of what the law states, my opinion on "you're using
my copyleft code to generate code under a different license" is not
something you might like if you agree with the rent seekers' opinion on
the subject.
That all being said and true, the technology works. You can have a
"conversation" with an LLM that resembles a human one. If you pass it
some data, you can use plain english to ask it questions about that
data, which is a lot easier than to ask it about that in a formal way.
You can request it to generate some code, and it will generate something
that looks like what you need and that will be mostly correct for like
95% of the time.
Now, yes, 95% of the time is not 100% of the time, and no, you can't ask
it to "write me a piece of software that implements this 300-page
requirements document and get back to me when you're done", because it
will fail, and you won't know where it has failed, and you'll take it
into production and expect everything to be fine because it won't and
this one minor logic bug will cause half your servers to spin and
consume credits with your infrastructure provider with nothing to show
for it.
But that doesn't mean you can't use an LLM to build a large piece of
software. It just means you have to understand the LLMs limitations and
strenghts, and use them correctly.
Here's what an LLM is good at:
Generating plausible text
Interpreting text to figure out what a plausible meaning or summary of
that text is
Giving vague indications as to what the probable context of a given
body of text is.
It turns out that that's enough to use the LLM to build a reliable piece
of software, provided you do it right.
Paradigm shift
An LLM can generate text by the truckful. The generated text could be
code. Given a good enough LLM, the generated text might even run and do
something useful.
You can try to blindly run the code, and if it doesn't run correctly,
you can paste the error message to the LLM, and it can tell you what
went wrong and how you could possibly fix it. This creates a feedback
loop: you ask it for an amount of code, you run the code, you receive an
error, you tell it that the code is problematic and give it the error
message, it makes changes to the code, now you have something that at
least no longer fails at startup.
If you ask it to add tests to make sure that your code acts as per your
specification, now you get an error if and when the code doesn't act
as per your specification. Or, well, at least not as per the part of the
specification that was correctly turned into a unit test by the LLM.
LLMs have a context window, so if the error message is pasted in the
same conversation as where the code was generated, it is able to reuse
the earlier prompts to refine how it should interpret the error message
that you received.
You can't really paste the source code of an entire application into the
prompt of your LLM, that would quickly overrun its context window. But
LLMs also allow you to provide some form of background information --
a document, say -- on which you ask it to reason. It will interpret that
document, but doing so uses less of the LLMs context window. So
providing the LLM with your application's source code as background
information can help it understand better how your code interacts. This
is especially helpful if you only provide the LLM the background
information relevant to the actual question.
So now if you are able to:
Create background context with your application's source code
Have the LLM generate a first draft of your requested change, plus the
tests to make sure it works
Compile (if applicable) the generated code (and tests) and run said
tests
Return any error messages to the LLM with a request to correct the
error
Then the combination of "getting it 95% right off the bat" and the above
feedback loop means you can generate syntactically correct code, that
probably does what you need, in minutes.
I say "probably" for a reason. There are going to be cases where you
specify a request without a number of details (because they are
implied), and the LLM will get most of those details right but just not
implement the one bit because it's an automaton and it doesn't think. Or
you will ask it to make sure that two bits of the application look
exactly the same, without specifying that they must act the same, now
and in the future, and it will just generate the same block of code
twice and then in a future change it will change one but not the other.
But if you review the changes, and you have experience as a
programmer, you will be able to spot most cases where the LLM got it
wrong. And so it's possible, if not necessarily easy at first, to
use an LLM to generate mostly correct code.
There are certain places where "mostly correct" code is not desireable.
But equally, there are also cases where, "mostly correct" is good
enough.
After all, most of the software you run today -- the bits of it that
weren't, yet, generated by an LLM -- is only "mostly correct", too,
because to err is human and we all make mistakes. If not, there wouldn't
be any CVEs and your software would never do anything wrong.
Now, doing the feedback loop described above is certainly something you
could do manually. You could open an account on one of the LLM websites,
upload the source code of your application, ask it to generate some new
feature, download the newly generated feature, run it, and then
copy/paste any error messages back into the LLM.
But that's a lot of manual work of the type that computers are pretty
good at. So that's what the "windsurf" tool helps you with: you run it
inside your IDE -- either a VSCode-based tool that you download from
their website which comes with their product preinstalled, or a separate
JetBrains plugin that you can install. You can then open your entire
relevant codebase in a workspace in your IDE. You then ask the LLM,
through the IDE, to generate a new feature in your codebase, and to also
generate the test while it's at it. It will use a mixture of LLM
interpretation and non-LLM functionality to scoop out the relevant bits
of your codebase to send to the LLM as background information, will send
it your prompt, will download the generated code and patch or create
files, will compile (if required) and run the newly generated code and
tests, and will refine the generated code if the tests produce any
errors. All mostly automatic; by default, running anything requires
explicit confirmation. You can turn that off completely (probably not a
good idea), or you can give it a whitelist of things that you don't want
to confirm (perhaps OK), and the tool also passes standing instructions
to the LLM to never generate any command that deletes a file (which,
like with any LLM, can be overridden, but it requires you to be very
stubborn and to use more credits than you'd probably like).
All this put together means you can build something without writing any
piece of code, provided you do it right.
A technically positive evolution
Don't go and say, "here's a 300-page document, read it and write
whatever the document says". It will get it wrong, it will write a
massive test suite that it will only run at the end, it will choke
itself up trying to interpret the massive amount of failures it
encounters, it will fill up its context window and it will start to
forget some of the requirements. That won't work.
But what you can do -- what I did, in fact -- is this.
First, create an empty workspace. Don't put any code in it.
Then, tell the LLM to generate a backend framework using technology X
and a frontend framework using technology Y that initially only says
"hello, world". Also add tests to it, and run the tests.
It will do that. You'll not get much, but it will work.
Then, ask it to add some UI elements. A login page, perhaps. A
navigation bar. Small things. Most of it doesn't have to be functional
-- but tests must be there for the bits that are, and have it run the
tests and evaluate the results.
Rinse, repeat, until you have a working application.
Importantly, in between the steps, you should also run the application
yourself and see if the change was implemented correctly. Sometimes it
won't be. Sometimes there will be a subtle bug -- I at one point had a
the application hang after a few minutes. Sometimes you tell it that
there's a subtle bug, and it will discover it more quickly than you
could, and it will fix it, and in implementing the fix it will uncover
another bug, and then you have to fix that one -- the fix it came up
with for the hang was to move something to an async process on the
server, which caused the application to start spinning while trying to
create hundreds of async jobs (this is when I realized that the hang was
a deadlock due to some part of the codebase doing something that
indirectly triggered itself). Sometimes it will try to fix the bug you
tell it about, and you'll see that it's going off on a tangent that has
nothing to do with what you're seeing. It's important to keep an eye on
what it's doing, so you can guide it back on track when that happens --
when I told it about the hang, it started investigating the part of the
code which sends out emails, thinking that it could hang while waiting
for sendmail to finish, but the hang was happening when the
application was idle, not when it was sending out emails, and only
when I told it about it happening when it was idle did it find the
deadlock.
So it's not a fully automatic process, and it needs to be guided by
someone who knows what they're doing. But if that is the case, you can
come up with something that works. I spent evenings and breaks for about
a week, and I managed to create a working application which, had I
written it by hand, would have taken me a few months of full-time work
to come up with. And I now have a side project, fully complete and
working, that I had been thinking about doing for more than a decade,
but never got around to actually doing, because of all the work that
would be involved and I just didn't see myself having the time for.
It's not perfect code. But it's mostly good enough, and it will perform
the job it needs to. And it looks far slicker than most of the side
projects I've done in the past, because in the past I would prioritize
between implementing new features or making something look slick, and I
would decide that the new feature was more important because it's only
for me and there's only me and nobody cares if it looks good or not and
I don't have three weeks to come up with something that looks better.
But here, I found myself sometimes spending 10 minutes writing a prompt
with instructions on making things look better. Because what's 10
minutes when you just spent an hour writing down and refining
specifications for functionality and tests?
There are a number of other things in which an LLM can help a
programmer.
For instance.
I received a bug report recently in a project I'm paid to
maintain that I couldn't make heads
or tails of. I opened the source code in my windsurf IDE, pasted the bug
report in the prompt, and then requested the tool to analyze the source
code and the associated logs and tell me how the described behavior
could be happening. It turned out that I had overlooked something, but
with the help of the tool, I found the bug in minutes.
I was trying to understand a particular part of a large
codebase that I didn't really grasp very well.
I loaded the codebase in the tool, and asked it to explain to me how a
particular action is performed by the code. I requested specific
functions and line numbers. I now have a far better understanding of how
the code works, and will be able to write that patch that I've been
wanting to write for years -- without using the LLM.
I have been struggling for, literally, years with understanding why
another tool that I
maintain was
misbehaving in a particular way but only in Firefox. I opened the
codebase in Firefox, explained the buggy behavior in plain English, and
asked it to explain how this could be happening. It picked up some
obscure corner case behavior of ffmpeg and mp4 containers that I was not
aware of and that perfectly explained why things were misbehaving in the
way that they were.
At the same time, there are limitations. Giving an LLM a codebase that
was originally generated by an LLM (either the same one or another one)
seems to work well. Giving it a codebase that was written by a human and
expecting it to correctly update it seems to be more error-prone. I did
one or two of those as a trial, and it is more problematic than
anything.
An LLM is also not intelligent, notwithstanding the popular term of
"Artificial Intelligence". On multiple occasions, I've asked it to write
a test case for some code that was not set up to do so; and rather than
suggesting a refactor is required, it would instead copy the code that
needed to be tested and then test the copy, rather than the original.
The tool has made multiple similar errors. I have sometimes people
describe agentic coding as "similar to interacting with junior
programmers", but that is not the case. A junior programmer will either
fill in the gaps in your specifications, or ask for clarification when
something seems off. The LLM will not do that; it will do what you ask,
exactly that and nothing more. If you missed a corner case in your
specification, then all bets are off.
I remember learning about programming language generations in college.
A first-generation language is "machine code", a second-generation
language is "assembler", a third-generation language is any high-level
language such as C, Perl, or Pascal. I've forgotten what set a
3rd-generation language apart from a 4th-generation language. But I
remember the definition they gave me for a 5th-generation language: "you
tell the computer what to do, and it will do it". At the time, I thought
it was ridiculous. Nobody could ever write something like that.
But it's here.
And it's a threat to free software.
A threat to free software?
Yes.
There is the obvious part where most of the well-known LLMs are non-free
software. I mean, there
are
some "open source" LLM models. The windsurf tool that I used doesn't allow
you to use them (directly), but they're there. There are also open
source applications that implement what the
windsurf editor does. So it's definitely possible to work like this
without resorting to non-free software and non-free services, even
though the non-free LLMs might be a bit ahead of the curve of the free
ones. But that's not what I mean.
And there is also the obvious thing which I mentioned earlier in this
post, which is that the people who try to build LLMs are doing it in
unethical, disgusting ways, causing downtimes and disregarding licenses
for whatever they can get their grubby hands on. Ideally we wouldn't be
in that situation, and ideally this wouldn't be a problem, but we are
where we are.
And there's the obvious thing where the OSI sold itself out and declared
that a machine learning program can be open source even when the very
things it was built from -- the training data -- is not available.
That's a major issue that the free software community needs to fight
against, but there's not really anything that that is a threat to free
software. You just build your own, free software, LLM, and you're done.
The actual threat is in funding and developer support.
Most large businesses do not care about free-as-in-freedom software.
They like the free-as-in-beer part, and they appreciate that the
free-as-in-freedom bits can make the software more customizable. They
are (mostly) happy to do sponsorships of the free-as-in-freedom projects
that they use if that means their free-as-in-beer usage of the software
gets improved.
But why would you care about all that when you can just generate the
code you need, rather than interacting with an open source community
that may or may not care about your business's interests?
Where to go from here
Although I think the moral and environmental issues with LLMs are real
and problematic, given the experiments I did I am not convinced that the
concept of interacting with a computer system in natural language and
to use it to generate code is necessarily deficient. There are pitfalls,
but they can be managed. It is possible to use such a system to create
throwaway, proof-of-concept type "good enough" code bases. It can be
used to interpret code bases and to understand bug reports.
I believe that the major issue with LLMs has to do with that saying
about hammers and nails:
If all you have is a hammer, then everything looks like a nail.
LLMs are an outgrowth of machine learning, pushed by large corporations.
These large corporations have a lot of money. If all you have is money,
then every problem can be fixed by throwing more money at it. The
initial language models were promising but not (yet) good enough, and it
seemed that one way in which they could be improved was to increase the
scale of the statistics: throw more hardware (and thus money) at it, and
rather than improving the efficiency of the models, just scale up.
Scaling up is something that megacorporations are very good at. It's
only a money problem, after all. Does that mean that "scaling up"
is the only way to improve the models, though? I'm not convinced.
Some hardware, such as most modern Apple and Samsung devices, ship with
accelerator hardware for machine learning algorithms. There are some
models that are small enough to be able to run on these devices. I don't
see why it should not be possible to create a small(er) language model
that can do some useful part of the above-described use cases; if not
locally, then at least on a server that one can run on-prem rather than
requiring that you pay rent to one of the LLM companies.
Thanks to @SwitchandClick for spending time on this and publishing that video. Much appreciated.
Many Issues amended in upcoming 24.04-2.0 Release
When I watched that video referenced above, I continuously thought: ah... this is fixed in the next major release of Ubuntu Touch, or: ah... this is a known issue that we have on the roadmap..., or: ah... this is done in this ways by design (so it's a feature or basic functionality)...
Let me just state, that most of the criticized aspects will be resolved in upcoming Ubuntu Touch release 24.04-2.0 (the tests in that video blog post have been run on Ubuntu Touch 24.04-1.x):
Camera notch and rounding corners get honoured now by the UI
Ubuntu Touch's default webbrowser (Morph Browser) has been bumped from Chromium engine v87 (Qt5 based) to v134 (Qt6 based), installing another browser should not be necessary anymore (note that the privacy level in Morph Browser is pretty high, so using other browsers could mean a loss of privacy).
Bluetooth pairing agent got added to the bluetooth indicator
Ubuntu Touch now supports Snaps on CLI level and in the OpenStore app
Libertine has received fixes, but no substantial improvements. It mainly targets users who want to use their Ubuntu Touch device as desktop daily driver. Libertine-provided desktop apps UI-wise are often not usable on a phone-like device.
The app ecosystem of Ubuntu Touch is quite specific, because many apps in Ubuntu Touch have been explicitly developed for Ubuntu Touch using a widget toolkit called Lomiri.Components. However, in Ubuntu Touch we also encourage developers to provide apps written with other convergent-capable toolkits, such as QQC2-based apps or Kirigami-based apps.
One reason for the very different app ecosystem in Ubuntu Touch is that many service providers don't have Ubuntu Touch on their radar when investing in app development for their services. Some Ubuntu Touch App Developers work around this by either implementing unofficial client apps for web services (e.g. the Flow app for Deezer by Sander Klootwijk), others provide the web service via implementing a web app (will not work when offline, but at least will show up as an app in the launcher).
The overall solution for making Open-Store.io more familiar to users who migrate from Android is that commercial service providers start honouring digital sovereignty and start providing apps for Linux. Not just for the Linux desktop, but also for mobile Linux platforms. This dual use case can easily achieved with an app development that bears convergence in mind.
App Ecosystems are also a Matter of Perspective
And one more minor note: whenever I open an Android appstore or can peak over someone's shoulder using an iOS device: I always wonder: what are all these apps about??? Never heard about them.
So, familiarity really depends on perspective. And perspective depends on what you are used to. Change what you do and your perspective will follow.
Ubuntu Touch's root filesystem (rootfs) is Immutable
Only thing from that video blog post that we haven't fixed and won't do so in the midterm future is apt-get not working on the command line.
The reason for this is: the Ubuntu Touch root file system is an immutable file system and thus shall not be changed via apt-get & friends by ordinary users.
There are various discussions ongoing such as dpkg-divert'ing apt-get to a wrapper shell script that spits out an error message if rootfs is mounted read-only and someone tries to install packages the Debian/Ubuntu way. Other approaches are to mount some RAM disk over the rootfs, so apt-get can be used at runtime but changes to the system get reset at reboot.
However, it is possible to mount the root filesystem read-write and test newer package versions (as UT core developers do regularly, in fact). If you tinker with this, it is recommended to reflash your device (don't wipe user data, when you reflash!) from time to time, because adding packages or package upgrades to your rootfs may over time corrupt the integrity of the rootfs.
One reason for apt-get breaking the rootfs and thus your Ubuntu Touch development device is that the upgrade process of the rootfs image is incremental, so update tarballs sometimes contain only those parts that got changed between this and your previous upgrade (sometimes, upgrades contain a complete rootf image, depending on the interval between upgrades). If files from an incremental update tarball mix into a rootfs that got tinkered with via apt-get, you really end up on your own. Re-flashing will grab the complete rootfs tarball and wipe the whole rootfs and reinstall a fresh version of the newest rootfs image. Developers also do this in regular intervals to ensure their test device is clean again before running more/other tests.
Eight months ago I came up my rocky driveway in an electric car, with the
back full of solar panel mounting rails. I didn't know how I'd manage to
keep it charged. I got the car earlier than planned, with my
offgrid solar upgrade only beginning. There's no
nearby EV charger, and winter was coming, less solar power every day.
Still, it was the right time to take a leap to offgid EV life.
My existing 1 kilowatt solar array could charge the car only 5 miles on a
good day. Here's my first try at charging the car offgrid:
first feeble charging offgrid
It was not worth charging the car that way, the house battery tended to get
drained while doing that, and adding cycles to that battery is not
desirable. So that was only a proof of concept, I knew I'd need to upgrade.
My goal with the upgrade was to charge the car directly from the
sun, even when it was cloudy, using the house battery only to skate over
brief darker periods (like a thunderstorm). By mid October, I had enough
solar installed to do that (5 kilowatts).
me standing in front of solar fence
first charging from solar fence
Using this, in 2 days I charged the car up from 57% to 82%, and took off on a
celebratory road trip to Niagra Falls, where I charged the car from hydro
power from a dam my grandfather had engineered.
When I got home, it was November. Days were getting ever shorter. My solar
upgrade was only 1/3rd complete and could charge the car 30-some miles per
day, but only on a good day, and weather was getting worse. I came back
with a low state of charge (both car and me), and needed to get back to
full in time for my Thanksgiving trip at the end of the month. I decided to
limit my trips to town.
charging up gradually through the month of November
This kind of medium term planning about car travel was new to me. But not
too unusual for offgrid living. You look at the weather forecast and make
some rough plans, and get to feel connected to the natural world a bit more.
December is the real test for offgrid solar, and honestly this was a bit
rough, with a road trip planned for the end of the month. I did the usual
holiday stuff but otherwise holed up at home a bit more than I usually
would. Charging was limited and the cold made it charge less efficiently.
bleak December charging
Still, I was busy installing more solar panels, and by winter solstice, was
back to charging 30 miles on a good day.
Of course, from there out things improved. In January and February I was
able to charge up easily enough for my usual trips despite the
cold. By March the car was often getting full before I needed to go
anywhere, and I was doing long round trips without bothering to fast
charge along the way, coming home low, knowing even cloudy days would let
it charge up enough.
That brings me up to today. The car is 80% full and heading up toward 100%
for a long trip on Friday. Despite the sky being milky white today with no
visible sun, there's plenty of power to absorb, and the car charger turned
on at 11 am with the house battery already full.
My solar upgrade is only 2/3rds complete, and also I have not yet
installed my inverter upgrade, so the car can only currenly charge at 9
amps despite much more solar power often being available. So I'm looking
forward to how next December goes with my full planned solar array and
faster charging.
But first, a summer where I expect the car will mostly be charged up and
ready to go at all times, and the only car expense will be fast charging
on road trips!
By the way, the code I've written to automate offgrid charging that runs
only when there's enough solar power is
here.
And here are the charging graphs for the other months.
All told, it's charged 475 kwh offgrid, enough to drive
more than 1500 miles.
January
February
March
April
2026 update: After upgrading my inverter and running conduit, the car is
finally charging at a faster rate of 16 amps, and the car typically
charges 25% per day. That seems to be plenty for my needs.
I have been working all year on a solar upgrade aimed at December. Now here
it is, midwinter, and my electric car is charging on a cloudy day from my
offgrid solar fence.
I lived happily enough with 1 kilowatt of solar that I
installed in 2017.
Meanwhile, solar panel prices came down massively, incentives increased
and everything came together: This was the year.
In the spring I started clearing forest trees that were leaning over the house,
making both a firebreak and a solar field.
In June I picked up a pallet of panels in a box truck.
a porch with a a bunch of solar panels, stacked on edge leaning up against the wall. A black and white cat is sprawled in front of them.
In August I bought the EV and was able to charge it offgrid from my old
solar system... a few miles per day on the most sunny days.
Me standing in front of the solar fence, which is 10 panels long
For the past several weeks I have been installing additional solar panels
on ballasted ground mounts full of gravel. At this point I'm half way
through installing my 30 panel upgrade.
The design goal of my 12 kilowatt system is to produce 1 kilowatt of power all
day on a cloudy day in midwinter, which allows swapping between major loads (EV
charger, hot water heater, etc) on a cloudy day and running everything on a
sunny day. So the size of the battery bank doesn't matter much. Batteries are
getting cheaper fast too, but they are a wear item, so it's better to oversize
the solar system and minimize the battery.
A lot of this is nonstandard and experimental. And that makes sense with the
price of solar panels. It costs more to mount solar panels now than the panels
are worth. And non-ideal panel orientation isn't a problem when the system is
massively overpaneled.
I'm hoping to finish up the install before the end of winter. I have more trees
to clear, more ballasted ground mounts to install, and need to come up with
something even more experimental for a half dozen or so panels. Using solar
panels as mounts for solar panels? Hanging them from trees?
Soon the wan light will fade, time to head off to the solstice party to enjoy
the long night, and a bonfire.
Solar fence with some ballasted ground mounts in front of it, late evening light. Old pole mounted solar panels in the foreground are from the 90's.
The solar fence and some other ground and pole mount solar panels, seen through leaves.
Solar fencing manufacturers have some good simple designs, but it's hard
to buy for a small installation. They are selling to utility scale solar
mostly. And those are installed by driving metal beams into the ground,
which requires heavy machinery.
Since I have experience with Ironridge rails for roof mount solar, I
decided to adapt that system for a vertical mount. Which is something it
was not designed for. I combined the Ironridge hardware with regular parts
from the hardware store.
The cost of mounting solar panels nowadays is often higher than the cost of
the panels. I hoped to match the cost, and I nearly did. The solar panels cost
$100 each, and the fence cost $110 per solar panel. This fence was
significantly cheaper than conventional ground mount arrays that I
considered as alternatives, and made a better use of a difficult hillside
location.
I used 7 foot long Ironridge XR-10 rails, which fit 2 solar panels per rail.
(Longer rails would need a center post anyway, and the 7 foot long rails
have cheaper shipping, since they do not need to be shipped freight.)
For the fence posts, I used regular 4x4" treated posts. 12 foot long, set
in 3 foot deep post holes, with 3x 50 lb bags of concrete per hole and 6
inches of gravel on the bottom.
detail of how the rails are mounted to the posts, and the panels to the rails
To connect the Ironridge rails to the fence posts, I used the Ironridge
LFT-03-M1 slotted L-foot bracket. Screwed into the post with a 5/8” x 3
inch hot-dipped galvanized lag screw. Since a treated post can react badly
with an aluminum bracket, there needs to be some flashing between the post
and bracket. I used Shurtape PW-100 tape for that. I see no sign of
corrosion after 1 year.
The rest of the Ironridge system is a T-bolt that connects the rail to the
L-foot (part BHW-SQ-02-A1), and Ironridge solar panel fasteners
(UFO-CL-01-A1 and UFO-STP-40MM-M1). Also XR-10 end caps and wire clips.
Since the Ironridge hardware is not designed to hold a solar panel at a 90
degree angle, I was concerned that the panels might slide downward over
time. To help prevent that, I added some additional support brackets under
the bottom of the panels. So far, that does not seem to have been a problem
though.
I installed Aptos 370 watt solar panels on the fence. They are bifacial,
and while the posts block the back partially, there is still bifacial
gain on cloudy days. I left enough space under the solar panels to be able
to run a push mower under them.
Me standing in front of the solar fence at end of construction
I put pairs of posts next to one-another, so each 7 foot segment of fence
had its own 2 posts. This is the least elegant part of this design, but
fitting 2 brackets next to one-another on a single post isn't feasible.
I bolted the pairs of posts together with some spacers. A side benefit of
doing it this way is that treated lumber can warp as it dries, and this
prevented much twisting of the posts.
Using separate posts for each segment also means that the fence can
traverse a hill easily. And it does not need to be perfectly straight. In
fact, my fence has a 30 degree bend in the middle. This means it has both
south facing and south-west facing panels, so can catch the light for
longer during the day.
After building the fence, I noticed there was a slight bit of sway at the
top, since 9 feet of wooden post is not entirely rigid. My worry was that a
gusty wind could rattle the solar panels. While I did not actually observe
that happening, I added some diagonal back bracing for peace of mind.
view of rear upper corner of solar fence, showing back bracing connection
Inspecting the fence today, I find no problems after the first year. I hope
it will last 30 years, with the lifespan of the treated lumber
being the likely determining factor.
As part of my larger (and still ongoing) ground mount solar install, the
solar fence has consistently provided great power. The vertical orientation
works well at latitude 36. It also turned out that the back of the fence was
useful to hang conduit and wiring and solar equipment, and so it turned into
the electrical backbone of my whole solar field. But that's another story..
The next Ubuntu Touch major release is approaching rapidly, yesterday we reached a major step in the preparation of the upcoming Ubuntu Touch 24.04-2.0 release: The branching-off (see below on what that is).
And additionally, find below some background information on how we maintain various Ubuntu Touch releases in parallel via Git(Lab). In fact, the release model of Ubuntu Touch has partially been adopted from how we in Debian maintains our various Debian versions in parallel, only that in Ubuntu Touch we use Git(Lab) for maintaining the different package versions and not, like in Debian, the APT archive itself.
What does 'Branching-Off' Mean?
Last Saturday, in the UBports Q&A, I explained Ubuntu Touch's "branching-off", an aspect of the Ubuntu Touch release workflow based on Git(Lab). To make this accessible to even more people, here it comes as a write-up:
We host many Git repositories on GitLab, and our primary work is done on the main branches, which contain the bleeding-edge code. When a merge request is deemed critical for stable versions of Ubuntu Touch, we cherry-pick it into a release series branch.
Currently, we land our changes in the main branches and then cherry-pick them to the ubports/24.04.1.x branches. The 'branching off' process for the upcoming 24.04-2.x release means that our current main branches will be copied over to create new branches for this release cycle, namely ubports/24.04-2.x.
This has two major implications. First, any item that hasn't been translated by the time of the branch-off will not receive any more translation updates during the 24.04-2.x cycle. This is why it is crucial that translation work is completed before the branching-off.
Warning of Breaking Changes arriving soon in 26.04-1.x Daily Development UT Images
Second, looking ahead to the release after 24.04-2.x, we will be approaching 26.04-1.x. The OS base will change to Ubuntu 26.04 LTS, hopefully being ready for release to Ubuntu Touch users before the end of the year. We already have a list of features we want to land there. Because we plan to include various major changes, such as the switch from Mir 1 to Mir 2, new calendar and contacts backends, Qt6-based core apps and service components, etc., the likelihood of breaking changes at the beginning of the 26.04-1.x release cycle (which will become the next main branches' target) is very high.
The Ubuntu Touch 24.04-2.0 Release Schedule
The current release schedule is estimated to be:
25 May 2026 [done]
Platform stability freeze 24.04-2.x
25 May 2026 [done]
String freeze 24.04-2.x
15 June 2026 [done]
Branching-off (and unfreeze 26.04-1.x development), UT image release: 24.04-2.0 Beta
22 or 29 June 2026 [coming]
Final freeze for 24.04-2.x, UT image release: 24.04-2.0 RC
6 or 13 July 2026 [coming]
Release version 24.04-2.0
In 2008, I landed my second job, in the network team at Orange
Portails1, the division behind the websites and search engine of the
French telecom operator Orange. The place ran like clockwork: a comprehensive
technical setup, a dedicated team for every part of the business, and room to
focus on what I do best. A few years later, none of that mattered: thanks to an
obsession with the numbers, we could no longer deliver new services on time.
Disclaimer
This is a story I like to tell to warn people about
Goodhart’s law.2 As these events happened almost 15 years ago, my
recollection is a bit fuzzy. I left in 2012.
The technical environment was excellent. We had many internal tools:3 a
ticket system, an RRD-based graphing tool, an IPAM, a reporting tool, and an
SNMP-based alerting tool.4 We deployed our Linux servers with
CFEngine. We installed systems and applications from internal Debian
repositories. We documented everything in a private MediaWiki instance.
Supervision was performed with an ancestor of Xymon. The network
architecture was clean and scalable with little legacy. We onboarded new people
in a day.
When we needed new servers, the on-site team would take a set from the
inventory, install our base Linux distribution on them, put them in the
datacenter, and cable them to the top-of-the-rack switches. We opened a ticket
describing the servers we needed, and one week later, our servers were
available. 💫
Orange wanted to know if this team was performing well, so they asked for KPIs.
They decided to use the number of tickets completed in a year. They asked to
double this number. So instead of one ticket for a new service, we would open
six tickets—one per server. By the end of the year, the KPIs had more than
doubled.
Everybody saw it as a success for performance management. So, they asked to do
the same for the next year. Now, we needed to open a ticket per server and per
step. Again, the KPIs doubled. Behind the scenes, the tickets went to different
people and were no longer handled in order. So, for the next year, it was decided to
have meta-tickets and meetings to follow the progress of these tickets. Of
course, all these extra steps pushed the KPI even higher.
This performance management method spread to the other teams.5
Everything became slower. Instead of a couple of weeks, a new service now took
six months. We built a Soviet nail factory. But the KPIs were good, and we
stopped caring.
Let me give you another example. We had to estimate the impact of each night
operation. We weren’t half bad: we declared most operations “without any
expected impact.� Most of the time, there was no impact. One time out of five,
there was a 5-second impact. We were told to try harder to meet our expected
impact. What did we do? We started declaring a 5-second expected impact. One
day, we got a 30-second impact and were told we failed to match the expected
impact. In the end, we declared most operations with a 10-minute expected
impact, and we stopped caring: instead of carefully shifting traffic around, we
allowed ourselves a 5-minute impact. And our KPIs were never better.
An artist's rendering of the evolution of impacts over the years.
KPIs are not bad, but they are easy to break. Use them carefully: let the people
doing the work help choose the metrics, and tie those metrics to the quality of
the service—for example, with service level objectives. Otherwise, even
dedicated people stop caring, game the system, and eventually quit.6 📊
I have proposed the deletion of an obsolete
script,
but it makes me feel complicated feelings so I’m going to try and
express those. This particular script was written in 2014, but the
concept goes back much further – before git was invented.
When I started university in 2003, I seem to remember the computing
society used to run tutorials for first-year students on how to use
Apache Subversion for your group project – a vast upgrade on CVS (or
worse, no version control at all). Back then, the idea of viewing
your changesets in a web browser was relatively new – while it was
possible to look at an SVN repository through a web UI, features were
limited unless you installed something compicated like
Trac.
Figure 1: Data flow when distributing commits via a mailing list
Perhaps because reading email on your desktop computer (I don’t think
I could afford an IBM ThinkPad?) was the only vaguely real-time
notification system available at the time (except I guess SMS, which
cost 10p per text), a common pattern seemed to be to use a
post-commit
hook
to send every single commit to a mailing list, named something like
‘foo-commits’. Indeed, for a long time Fedora had an scm-commits list
which appears to be a topic of recent
discussion.
I can’t really explain why people wanted to have every commit sent
to a mailing list except as a way of getting notified of activity – I
can’t believe people would import raw patches from those lists, ala
LKML, rather than run actual version control commands to fetch the new
source directly. Maybe you’d have to go back to NNTP for this.
I do like the vendor-neutrality of the “everything-as-text” approach,
building on the open ecosystem of SMTP. But I doubt we’d see a
widespread resurgence of commit lists now – most code hosting must
allow anyone to subscribe to email notifications, I assume, and I
don’t see a huge benefit in a mailing list archive of commit messages.
In the case of seL4, I’m even more confused about why this script was
committed in 2014, shortly after the kernel was put on GitHub. I can
only assume it was imported from previous infrastructure. I do know
that the implementation is quite Python 2 heavy, with the conversion
between unicode and bytes featuring heavily. So rather than risk
breaking its logic with patching, I think it’s time to “thank it for
its service” and let go.
My youngest daughter and I recently started playing the tabletop game
HeroQuest. Specifically, the recently-issued, cut-down variant
HeroQuest: First Light. This is quite advanced for her age, and I'm
a little surprised she's taken to it, but she's really loving it,
It's pushed her to read bits of lore on cards and quest books that is
way above her expected reading level, and we've been exercising her
maths by adding up the gold we find on our quests and calculating what
the heroes can buy with it in the store afterwards.
Originally from 1989,
Hasbro re-issued HeroQuest in 2020. I read about it at the time but didn't
buy it. I wasn't
sure who I would play it with. It also seemed expensive to me. It probably
wasn't unusually expensive in 2020, nor now, for the sheer volume of
finely-sculpted miniatures included.
I also knew I had the original game in the loft, and
I wasn't that keen on buying something I already had,
although untangling the contents from several similar boxed games would
take me many hours, and I wasn't sure how much of the game I would find.
mix of old and new
First Light was compelling because it is much, much cheaper than the full
remake, so I was happy
to take a punt. It's cheaper because it doesn't have any plastic monsters or
furniture: instead cardboard cut-outs that stand up on plastic stands. For us,
that is a significant drawback: 3D miniatures are much more immersive, But I
can re-use the plastic miniatures I can find from the original game. First
Light has a newly written adventure, better suited to beginners than the
original game.
The re-issue(s) have new art and new model sculpts that look fantastic. They've
changed anything which tied into Games Workshop's IP and I'm really happy about
that. They've made an effort to add women, almost entirely absent from the
original. I'm certain my daughter wouldn't have tried it otherwise.
For almost two decades, the PackageKit package management abstraction layer has shipped with pkcon as its command-line client. pkcon does its job, but it was always kind of a “testing” front-end for the PackageKit daemon rather than a tool designed for everyday use. The focus has instead been on the GUI tools, automatic system updates, GUI application managers and other front-ends. Its command names mirror the D-Bus API almost one-to-one (get-details, get-updates, get-depends), output is very plain, and there is no machine-readable mode for scripting. Most importantly though, there has been no development on it at all for almost a decade, so pkcon was stuck in its rudimentary state from that era.
Since a lot of changes will be coming to PackageKit, and testing the daemon and working with it from the command-line was not very pleasant anymore in 2025/2026, I decided to modernize the tool as part of my work as fellow for the Sovereign Tech Agency last year. pkgcli is the new command-line client for PackageKit. It is built from the ground up to be pleasant to use interactively and easy to drive from scripts.
Why a new tool?
Of course, instead of introducing a new tool, I could have just expanded pkcon instead. The problem with that approach is that the pkcon utility has been around for so long and its command-line API had ossified so much, that rather than changing it and potentially breaking a lot of scripts relying on its quirks, I decided to introduce a new tool instead. pkcon can still be optionally compiled for people who need it in their scripts and workflows.
The goals for pkgcli, and the features it now has are:
Human-friendly command names. Verbs that read the way you’d describe the task, instead of mirroring the D-Bus API 1:1: show, search, list-updates, what-provides, instead of get-details and friends.
Readable, colored output by default (still respecting NO_COLOR and degrading gracefully).
A real scripting mode. A global --json flag emits JSONL instead of fully human-readable output when possible, to make it easier to use the tool for scripting purposes.
Sensible defaults. A few defaults have been changed, such as the metadata cache-age, or automatic cleanup of unused dependencies being enabled by default. This is more in line with current defaults by other tools and frontends. We also print package information in a slightly different, more readable way.
Better handling of internationalized text. Text should now align properly in the terminal window, and we should no longer have completely chaotic text output on non-English locales (especially Chinese/Japanese).
Why not pkgctl?
Originally, this tool was called pkgctl, to match other common cross-distro tool names. However, that name was already taken by an Arch-specific distro development tool. When this issue was raised, we decided to just rename our tool to pkgcli with the next release, to avoid the name clash on Arch Linux.
Examples!
Here are some examples on how to use the new tool (some of which include the abridged output pkgcli prints).
Search for anything containing the string “editor” in name or description, then look at the details of one result:
$ pkgcli search editor
Querying [████████████████████████████████████████] 100%
▣ace-of-penguins1.5~rc2-7.amd64 [debian-testing-main]
▣acorn-fdisk3.0.6-14.amd64 [debian-testing-main]
▣ardour1:9.2.0+ds-1.amd64 [debian-testing-main]
✔audacity3.7.7+dfsg-1.amd64 [manual:debian-testing-main]
✔audacity-data3.7.7+dfsg-1.all [auto:debian-testing-main]
▣augeas-tools1.14.1-1.1.amd64 [debian-testing-main]
▣emacs1:30.2+1-3.all [debian-testing-main]
▣gedit48.1-9+b1.amd64 [debian-testing-main]
▣gedit-common48.1-9.all [debian-testing-main]
▣gedit-dev48.1-9+b1.amd64 [debian-testing-main]
[...]
$ pkgcli show nano
Package: nano
Version: 9.0-1
Summary: small, friendly text editor inspired by Pico
Description: GNU nano is an easy-to-use text editor originally designed as
a replacement for Pico, the ncurses-based editor from the non-free mailer
package Pine.
[...]
URL: https://www.nano-editor.org/
Group: publishing
Installed Size: 2.9 MB
Download Size: 646.0 KB
Search only within package names rather than descriptions:
$ pkgcli search name python3
Check for updates. refresh updates the metadata, then list-updates reports what’s available:
You can also have JSON output for most commands! Attach --json to any query and pipe the result straight into jq. Each line is a self-contained JSON object:
pkgcli is built by default alongside the rest of PackageKit since PackageKit 1.3.4. If your distribution ships a recent enough PackageKit, it should already be on your PATH. You can read its man page man pkgcli for more information. Feedback, bug reports, and patches are very welcome.