Pluralistic: Deranged billionaires and their syndromes (16 Jul 2026) [Pluralistic: Daily links from Cory Doctorow]
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
Top Sources: None -->

The theory of markets goes like this: even the best of us can fall prey to selfishness and rationalization, so let's arrange society so that people acting on their most selfish impulses end up producing benefit for all of us. That'll be easier and more reliable than convincing everyone to be more generous.
How do you arrange society so that selfishness produces public benefit? With markets. Faced with relentless competition, the most effective way to accumulate and retain wealth is by striving to make your wares cheaper and better. In a competitive labor market, we can secure fair treatment for workers without labor law or unions – bosses who treat their workers badly will lose them to better bosses. Just "align the incentives" and let markets do the rest.
This is an area where there's broad overlap between the left and the right. Chapter one of The Communist Manifesto is Marx and Engels' love letter to the incredible power of markets to improve everyone's material conditions by increasing production while lowering costs:
Meanwhile, over in Wealth of Nations, Adam Smith comes to the same conclusion:
It is not from the benevolence of the butcher, the brewer, or the baker, that we expect our dinner, but from their regard to their own interest. We address ourselves, not to their humanity but to their self-love, and never talk to them of our own necessities but of their advantages.
In other words: if you get the incentives right, then even the greediest baker will resist the temptation to fill his loaves with sawdust and gravel. The greedier he is, the more he'll strive to make his bread cheap and delicious, because that will let him sell as many loaves as possible, thus maximizing his own wealth.
It's not exactly horseshoe theory vindicated, but if you squint just right, you'll see both communists and capitalists agreeing on this one thing: if you want the bourgeoisie to bend its efforts to producing something that the rest of us can benefit from, you'll get further by appealing to their fear and greed than by trusting in their munificence.
This is how you can have both leftists and market true believers coming onto the same side on antitrust: they may not both exactly agree that the best way to run things is by appealing to capitalists' fear of being dethroned by a competitor, but they absolutely agree that the worst way to run things is to simply trust in capitalists' generosity.
They're right, of course. As Lina Khan likes to say, companies that are too big to fail become too big to jail, and thus too big to care. If you doubt it, consider this internal email sent by an Apple executive insisting that the company is wasting money by making iPhones that are too good, and counseling a corporate strategy of deliberate shittiness:
In looking at it with hindsight, I think going forward we need to set a stake in the ground for what features we think are 'good enough' for the consumer. I would argue we're already doing more than what would have been good enough. But we find it very hard to regress our product features YOY [year over year]." Existing features "would have been good enough today if we hadn't introduced [them] already," and "anything new and especially expensive needs to be rigorously challenged before it's allowed into the consumer phone.
https://www.justice.gov/d9/2024-06/423137.pdf
Policymakers can assume the profit motive, but they have to craft the conditions under which that motive is shaped by competitive anxiety to produce quality goods and services at a fair price.
Anyone who believes in markets must also tacitly believe that successful market participants don't believe in markets. They should understand that capitalists hate capitalism, that every pirate yearns to be an admiral. They should understand that capitalism's winners only defend disruption when they're the ones doing the disrupting. They should understand that profits are only good when you're a scrappy challenger, but once you've conquered the market, every capitalist seeks to become a feudal lord, converting profits to rents and insulating themselves from an exhausting life of constant competition:
https://pluralistic.net/2023/09/28/cloudalists/#cloud-capital
The (smart) defenders of markets do understand this, but they face a dilemma. By definition, the benefactors with the most money and power to contribute to their think-tanks, university economics departments, conferences and publications are the rentiers – the billionaires who've shored up their fortunes with Warren Buffet's beloved "moats and walls." They're the blitzscaling billionaires who thrive on predatory acquisitions and high capital costs that prevent new market entrants from challenging their incumbency and its easy profits. They're the pirates who've become admirals.
As Upton Sinclair famously quipped, "It is difficult to get a man to understand something, when his salary depends on his not understanding it." When your right-wing, "pro-market" think-tank depends on the largesse of someone who made their money by capturing a market, capturing its regulators, and capturing its labor force, you need to tie yourself into some very weird knots to explain why your market advocacy shouldn't start with stripping your funders of their power, wealth and position.
This is pretty much the entire edifice of neoclassical economics. There's the "consumer welfare" theory of antitrust, that says that monopolies are efficient and insists that an inefficient monopoly would immediately tempt new competitors into the market who would compete away the monopolist's advantage:
https://pluralistic.net/2025/11/06/vertical-blinds/#invest-dont-acquire
"Consumer welfare" is a perfect apologetic because it contains a lurking syllogism: it holds that "inefficient monopolies" will always bring forth competitors who trash their margins, which means that any actual monopoly we see in the wild must be efficient. If it wasn't, it would have been competed out of existence by now. QED. This means that you can be a "pro-market" think-tank and take infinite money from monopolists without any contradiction: by definition, any monopolist with extra cash on hand to fund your PR blitz on its behalf must be efficient, otherwise it would have gone broke.
This is the structure of so many of economics' "empirical, scientific" theories that boil down to new ways of saying, "Actually, your boss is right."
Take "revealed preferences," the idea that people's actions are a better indicator of their preferences than the things they say they prefer. While this theory has a certain superficial plausibility, it can really only be embraced by people who have suffered the highly specific neurological injury you get by taking an economics degree: an injury that makes you incapable of perceiving or reasoning about power.
To fully embrace "revealed preferences" is to observe someone who has just sold their kidney to make rent and exclaim, "Look at this person with a revealed preference for only having one kidney":
https://pluralistic.net/2026/03/30/players-of-games/#know-when-to-fold-em
Then there's the right's conception of regulatory capture. When you think of "regulatory capture," you might picture a company or sector that has grown so powerful that it can boss the government around, so that it can abuse you with impunity. But for a neoclassical, "regulatory capture" isn't the result of too much corporate power – it's the result of too much state power. If states have the ability to do real things (the theory goes), then capitalists will do everything they can to take over the state and use it to punish their competitors, so the only answer is to eliminate state capacity altogether:
https://pluralistic.net/2022/06/05/regulatory-capture/
And finally, there's "meritocracy," which is a way of dressing up the Puritans' concept of divine providence as a scientific theory about how society must work. Puritans insisted that their god reached down into the human realm to elevate the truly virtuous among us, and that this divine favor could be discerned in the way that wealth and power were distributed among us. The rich and powerful were god's "elect." You could tell this was true, because they were rich and powerful. The corollary is that the poor and downtrodden are disfavored by god, and must therefore lack some virtue that the rich and powerful possess.
This same syllogistic thinking underpins the economic doctrine of "meritocracy," which holds that markets are giant computers that process uncountable trillions of decisions we all make about what to buy and sell and at what price, seeking out the "correct" price for every commodity and also elevating the people who are best at allocating capital in ways that arrive at the best prices for the best goods. Just as a Puritan believes that wealth is evidence of virtue, a hewer to economic orthodoxy believes the meritocratic system graces the best among us, giving them control over our lives by allowing them to "allocate capital" to create or destroy jobs, or entire firms, or whole sectors of the economy. You can tell they're the right people to do be doing this because the market chose them – if they were bad capital allocators, they'd have gone broke by now. QED.
When capital allocators' kids end up allocating capital too, well, that just shows that "merit" is a heritable trait and the people who have it are born to rule over us. Meritocracy cashes out to a eugenic belief in royal blood and royal dynasties. We know King Arthur was suited to rule us because he pulled a sword out of a stone, and we know Bill Gates is suited to rule over us because he pulled a fortune out of an operating system:
https://pluralistic.net/2025/05/20/big-cornflakes-energy/#caliper-pilled
Consumer welfare, revealed preferences, regulatory capture and meritocracy are just some of the ways that capitalism's alleged defenders cooked up to insist that they love the competitive discipline imposed by markets while being totally dependent on self-described capitalists who have utterly escaped from that discipline and have committed to doing everything in their power to prevent themselves from ever coming under any form of constraint.
These champions of "free markets" have spent decades defending policies like noncompetes, which makes it a crime for a fast-food worker to quit their job at Wendy's and take a job at the McDonald's across the street in order to get a $0.25/hour raise:
https://pluralistic.net/2025/09/09/germanium-valley/#i-cant-quit-you
They defend anticircumvention laws that make it a literal felony for you to install someone else's app store on your phone or put someone else's ink in your printer:
https://memex.craphound.com/2012/01/10/lockdown-the-coming-war-on-general-purpose-computing/
They somehow believe that value arises when the best among us are forced to contend with the stark terror of losing everything to a competitor, but also that there is a group of people who are so perfect, so virtuous and brilliant that they do not need this kind of goad to prod them into action. Indeed, these genetic sports and generational talents are so amazing that to force them to sully themselves with grubby competition is to deny us all the fruits of their genius.
Who are these people? Why, they're billionaires of course. All billionaires: after all, if providence and the market's invisible hand has seen fit to bestow nine or more zeroes upon someone, that is an indicator of 10^9 times more virtue than someone with only a dollar to their name. But especially: intellectual billionaires, the kinds of "curious" billionaires who write books, give lectures, and (especially), make gigantic cash donations to think-tanks, university economics departments, conferences and journals.
Billionaires like Peter Thiel and Elon Musk, in other words.
These are the billionaires that capitalism's (alleged) defenders are caping for when they deplore "billionaire derangement syndrome," and fret that candidates for office now routinely cite enmity for billionaires in their campaign materials:
https://marginalrevolution.com/marginalrevolution/2026/07/andrew-hall-is-on-a-roll.html
But as Tim O'Reilly writes, these billionaire-defending intellectuals always told us that markets would protect us from the madness of kings, by constraining the folly of the wealthy and powerful through the discipline of competition. Meanwhile, those billionaires were busily transforming themselves into kings, unshackled from rules, morals or consequences:
Reflecting on this, the political scientist Henry Farrell notes that the most vocal defenders of billionaireism – the Musks and Thiels of the world – never made a secret of their desire to become kings and insulate themselves from markets and discipline of every kind, and they've grown brazen. Musk makes social media posts deploring the very idea of elections, agreeing with the idea that only "makers" should be allowed to vote and that "takers" should not, because "universal suffrage leads to universal suffering":
https://nitter.net/elonmusk/status/2073312715985309698
As for Thiel, he has long openly advocated the idea that there exists among us a latent aristocracy who do not need the discipline of markets to keep them from lapsing into folly or self-dealing. These people – born to found tech startups and to rule – are nonconformists who, in Thiel's writing, are "the most important" and "should be let off the hook":
https://blakemasters.tumblr.com/post/24578683805/peter-thiels-cs183-startup-class-18-notes
Thiel makes no bones about his idea that people who have the right stuff should be exempted from any constraint. He writes "capitalism and competition are opposites." Rather than compete, Thiel says the true entrepreneur should seek to establish a monopoly, because "Monopolists can afford to think about things other than making money; non-monopolists can’t…Only one thing can allow a business to transcend the daily brute struggle for survival: monopoly profits."
It's not that Thiel opposes constraints per se – he clearly thinks that most of us should operate under constraints – constraints that are dreamed up and enforced by people like him. Those people are born to rule: they emerged from a lucky orifice, in possession of lucky genes. How can we tell they were born to rule? Because they're ruling. If they weren't born to rule, they wouldn't be in a position to rule. As ever, a syllogism solves all our ideological and existential problems.
Thiel lives in what Naomi Klein would call "the mirror world." While counterculturists have long celebrated misfits and communities of nonconformists, they were invested in the idea of a space protected from power, where weirdos could let their freak flags fly:
https://pluralistic.net/2023/09/05/not-that-naomi/#if-the-naomi-be-klein-youre-doing-just-fine
But Thiel's version of this is to celebrate the "nonconformists" whose heterodox belief is that labor, privacy, finance and consumer protection laws shouldn't apply to them. He wants to protect those people so they can wield power. They should form "mafias" (like the "Paypal mafia") not solidaristic affinity groups. As Farrell writes:
Entrepreneurial risk taking can be awesome; weird people are often more likely to be original; densely linked communities have many advantages. Furthermore, I would guess that none of these factors was sufficient on its own to precipitate the madness of princes that we see today. It is perfectly possible that they would have worked together in much more benign ways under different external circumstances. But we are in the world we’re in: one where the boundless appetites and irrationalities of a small number of billionaires seem increasingly incompatible with the need to maintain a stable civil society.
A new would-be aristocracy was always the visible trajectory of these guys. The only people who couldn't see it were the think-tankies they funded to write papers explaining that their paymasters didn't need market discipline to keep them from sinking into folly or attempting to overthrow democracy.
Today, these Renfields clutch their pearls at the "demonization" of the ultra-rich, calling it "billionaire derangement syndrome." But the only "billionaire derangement syndrome" that matters is the syndrome that affects billionaires and convinces them that they are above any discipline or rules.

Don't Take Advice From Your Enemies https://www.hamiltonnolan.com/p/dont-take-advice-from-your-enemies
Against Money https://press.uchicago.edu/ucp/books/book/chicago/A/bo265118979.html
Inside the Personal Computer – An Illustrated Introduction in 3 Dimensions https://www.youtube.com/watch?v=ofcXVA4GUm8&t=86s
Canadian Workers Among the Most Restricted by Non-Compete Clauses https://www.donotpassgo.ca/p/canadian-workers-among-the-most-restricted
#25yrsago Gadget-friendly chinos https://web.archive.org/web/20010717133013/http://www.usatoday.com/life/cyber/wireless/2001-07-16-smart-pants.htm
#15yrsago Brazilian bodges: “Gambiologia” https://web.archive.org/web/20110720231142/https://www.we-make-money-not-art.com/archives/2011/07/gambiologia.php
#15yrsago Privacy risks in collaborative filters https://blog.citp.princeton.edu/2011/05/24/you-might-also-privacy-risks-collaborative-filtering/
#15yrsago Tenn. state rep: “I carved my initials in my desk in the House, but I don’t understand why it’s news” https://web.archive.org/web/20110715202451/http://www.knoxnews.com/news/2011/jul/11/state-rep-hurley-admits-carving-initials-house-flo/
#15yrsago Who holds the copyright to a picture taken by a monkey? https://www.techdirt.com/2011/07/13/can-we-subpoena-monkey-why-monkey-self-portraits-are-likely-public-domain/
#15yrsago Organization for Security and Co-operation in Europe slams Internet censorship, copyright disconnection https://web.archive.org/web/20121108080007/https://arstechnica.com/tech-policy/2011/07/yet-another-report-internet-disconnections-a-disproportionate-penalty/
#10yrsago Mississippi’s prison town are in danger of collapse, thanks to tiny reforms in the War on Drugs https://www.huffingtonpost.co.uk/entry/mississippi-jails-revenue_n_57100da1e4b06f35cb6f14e8
#10yrsago Pokemon Go players: you have 30 days from signup to opt out of binding arbitration https://web.archive.org/web/20160715142246/https://consumerist.com/2016/07/14/pokemon-go-strips-users-of-their-legal-rights-heres-how-to-opt-out/
#10yrsago Trump makes it easy to forget what a dumpster fire all the other GOP nomination hopefuls were https://www.lrb.co.uk/the-paper/v38/n15/eliot-weinberger/they-could-have-picked
#5yrsago Interop and the Public Interest Internet https://pluralistic.net/2021/07/16/pidgin/#splicers
#1yrago Ellen Ullman's "Close to the Machine" https://pluralistic.net/2025/07/16/beautiful-code/#hackers-disease

Sydney: The Festival of Dangerous Ideas, Aug 23-24
https://festivalofdangerousideas.com/cory-doctorow/
Melbourne: Enshittification at the Wheeler Centre, Aug 25
https://www.wheelercentre.com/events-tickets/season-2026/cory-doctorow-enshittification
Brighton: The Reverse Centaur's Guide to Life After AI with
Carole Cadwalladr (Brighton Dome), Sep 8
https://brightondome.org/whats-on/LSC-cory-doctorow-the-reverse-centaurs-guide-to-life-after-ai/
London: The Reverse Centaur's Guide to Life After AI with Riley
Quinn (Foyle's Picadilly), Sep 9
https://www.foyles.co.uk/events/enshittification-cory-doctorow-riley-quinn
South Bend: An Evening With Cory Doctorow (Notre Dame), Oct
6
https://franco.nd.edu/events/2026/10/06/an-evening-with-cory-doctorow/
How To Think About AI Before It’s Too Late (This Is
Hell)
https://thisishell.com/episodes/1919
AI Won't Replace You… But This Might (Deep Focus)
https://www.youtube.com/watch?v=oorWq_m48AQ
Who Owns Your Tractor? (Growing the Future)
https://www.youtube.com/watch?v=IU9eBPUZBI4
You Bought it, They Break It (What Now? with Trevor Noah)
https://www.podbean.com/media/share/dir-ir36t-2f4a1ac6
"Canny Valley": A limited edition collection of the collages I create for Pluralistic, self-published, September 2025 https://pluralistic.net/2025/09/04/illustrious/#chairman-bruce
"Enshittification: Why Everything Suddenly Got Worse and What to
Do About It," Farrar, Straus, Giroux, October 7 2025
https://us.macmillan.com/books/9780374619329/enshittification/
"Picks and Shovels": a sequel to "Red Team Blues," about the heroic era of the PC, Tor Books (US), Head of Zeus (UK), February 2025 (https://us.macmillan.com/books/9781250865908/picksandshovels).
"The Bezzle": a sequel to "Red Team Blues," about prison-tech and other grifts, Tor Books (US), Head of Zeus (UK), February 2024 (thebezzle.org).
"The Lost Cause:" a solarpunk novel of hope in the climate emergency, Tor Books (US), Head of Zeus (UK), November 2023 (http://lost-cause.org).
"The Internet Con": A nonfiction book about interoperability and Big Tech (Verso) September 2023 (http://seizethemeansofcomputation.org). Signed copies at Book Soup (https://www.booksoup.com/book/9781804291245).
"Red Team Blues": "A grabby, compulsive thriller that will leave you knowing more about how the world works than you did before." Tor Books http://redteamblues.com.
"Chokepoint Capitalism: How to Beat Big Tech, Tame Big Content, and Get Artists Paid, with Rebecca Giblin", on how to unrig the markets for creative labor, Beacon Press/Scribe 2022 https://chokepointcapitalism.com
"Unauthorized Bread": a middle-grades graphic novel adapted from my novella about refugees, toasters and DRM, FirstSecond, April 20, 2027
"Enshittification, Why Everything Suddenly Got Worse and What to Do About It" (the graphic novel), Firstsecond, 2027
"The Memex Method," Farrar, Straus, Giroux, 2027
Today's top sources:
Currently writing: "The Post-American Internet," a sequel to "Enshittification," about the better world the rest of us get to have now that Trump has torched America. Fourth draft completed. Submitted to editor.

This work – excluding any serialized fiction – is licensed under a Creative Commons Attribution 4.0 license. That means you can use it any way you like, including commercially, provided that you attribute it to me, Cory Doctorow, and include a link to pluralistic.net.
https://creativecommons.org/licenses/by/4.0/
Quotations and images are not included in this license; they are included either under a limitation or exception to copyright, or on the basis of a separate license. Please exercise caution.
Blog (no ads, tracking, or data-collection):
Newsletter (no ads, tracking, or data-collection):
https://pluralistic.net/plura-list
Mastodon (no ads, tracking, or data-collection):
Bluesky (no ads, possible tracking and data-collection):
https://bsky.app/profile/doctorow.pluralistic.net
Medium (no ads, paywalled):
Tumblr (mass-scale, unrestricted, third-party surveillance and advertising):
https://mostlysignssomeportents.tumblr.com/tagged/pluralistic
"When life gives you SARS, you make sarsaparilla" -Joey "Accordion Guy" DeVilla
READ CAREFULLY: By reading this, you agree, on behalf of your employer, to release me from all obligations and waivers arising from any and all NON-NEGOTIATED agreements, licenses, terms-of-service, shrinkwrap, clickwrap, browsewrap, confidentiality, non-disclosure, non-compete and acceptable use policies ("BOGUS AGREEMENTS") that I have entered into with your employer, its partners, licensors, agents and assigns, in perpetuity, without prejudice to my ongoing rights and privileges. You further represent that you have the authority to release me from any BOGUS AGREEMENTS on behalf of your employer.
ISSN: 3066-764X
libtool-2.6.2 released [stable] [Planet GNU]
Libtoolers!
The Libtool Team is pleased to announce the release of libtool
2.6.2.
GNU Libtool hides the complexity of using shared libraries behind
a
consistent, portable interface. GNU Libtool ships with GNU libltdl,
which
hides the complexity of loading dynamic runtime libraries
(modules)
behind a consistent, portable interface.
See the NEWS below for a brief summary.
Thanks to everyone who has contributed!
The following people contributed changes to this release:
libtool 2.6.2 [stable]:
Ileana Dumitrescu (4)
libtool 2.6.1 [beta]:
Alexandre Janniaux (4)
Alexey Samsonov (1)
Anthony Mallet (1)
Arnold (1)
Dima Pasechnik (1)
Frederic Berat (1)
Ileana Dumitrescu (15)
KO Myung-Hun (4)
Kirill Makurin (1)
Mintsuki (1)
Nicolas Boulenguez (1)
Olly Betts (1)
Patrice Dumas (1)
Richard J. Mathar (1)
libtool 2.6.0 [alpha]:
Anthony Mallet (1)
Bruno Haible (2)
Christian Feld (1)
Collin Funk (1)
Elizabeth Figura (1)
Evgeny Grin (1)
Frédéric Bérat (1)
Gleb Popov (1)
Ileana Dumitrescu (47)
Julien ÉLIE (1)
Karl Berry (1)
Kirill Makurin (1)
Manoj Gupta (1)
Martin Storsjö (1)
Michael Haubenwallner (2)
Mintsuki (1)
Mitch (1)
Pierre Ossman (2)
Takashi Yano (1)
Ileana
[on behalf of the libtool maintainers]
==================================================================
Here is the GNU libtool home page:
https://gnu. ... g/s/libtool/
Here are the compressed sources:
https://ftpmirror
... tool-2.6.2.tar.gz (2.1MB)
https://ftpmirror
... tool-2.6.2.tar.xz (1.1MB)
Here are the GPG detached signatures:
https://ftpmirror
... -2.6.2.tar.gz.sig
https://ftpmirror
... -2.6.2.tar.xz.sig
Use a mirror for higher download bandwidth:
https://www.gnu.o ...
rg/order/ftp.html
Here are the SHA256 and SHA3-256 checksums:
File: libtool-2.6.2.tar.gz
SHA256 sum:
24adb3aa9ae035c70faba344af57d73215eb89281045af6c7ccd307751f8b0bf
SHA3-256 sum:
b0e77c0dc9a082830c95d182da77747d1f5435a06132feefd5054bfde2c9da81
File: libtool-2.6.2.tar.xz
SHA256 sum:
2ef1067c16c97db930fd740cc9bc3d3ba9a583804ae5ac42cc3e8719e49e191e
SHA3-256 sum:
c24b9995af8391a310a258dcb98897f92d86f47acca235f3d2859ca0ed1d9dd0
Verify the SHA256 checksum with either sha256sum, sha256, or
'shasum -a 256'.
Verify the SHA3-256 checksum with 'cksum -a sha3 -l 256
--base64'
from coreutils-9.8.
Use a .sig file to verify that the corresponding file (without
the
.sig suffix) is intact. First, be sure to download both the
.sig file
and the corresponding tarball. Then, run a command like
this:
gpg --verify libtool-2.6.2.tar.gz.sig
The signature should match the fingerprint of the following
key:
pub rsa4096 2021-09-23 [SC]
FA26 CA78 4BE1 8892
7F22 B99F 6570 EA01 146F 7354
uid Ileana Dumitrescu
<ileanadumitrescu95@gmail.com>
uid Ileana Dumitrescu
<ileanadumi95@protonmail.com>
If that command fails because you don't have the required public
key,
or that public key has expired, try the following commands to
retrieve
or refresh it, and then rerun the 'gpg --verify' command.
gpg --locate-external-key ileanadumitrescu95@gmail.com
gpg --recv-keys 6570EA01146F7354
wget -q -O- 'https://savannah.
... ol&download=1' | gpg --import -
As a last resort to find the key, you can try the official GNU
keyring:
wget -q https://ftp.gnu.o ...
u/gnu-keyring.gpg
gpg --keyring gnu-keyring.gpg --verify
libtool-2.6.2.tar.gz.sig
This release is based on the libtool git repository, available
as
git clone https://https.git
... g/git/libtool.git
with commit 309bb53a8adfb22c6e5869cc8da049bf123e5438 tagged as
v2.6.2.
For a summary of changes and contributors, see:
https://gitweb.gi ... shortlog;h=v2.6.2
or run this command from a git-cloned libtool directory:
git shortlog v2.6.1..v2.6.2
This release was bootstrapped with the following tools:
Autoconf 2.73
Automake 1.18.1
Gnulib 2026-07-03
491f1bb7d3049f3ab7825f3ee665c209658e9965
NEWS
Please see beta release 2.6.1 and alpha release 2.6.0 for a
list of
release changes.
** New features:
- Pass 'resource-dir=*' flag for Clang.
- Recognise explicit shared library arguments when linking
dependency
libraries to a shared library, like exists when
linking a program.
- Support OpenMP with macOS clang by processing
'-Xpreprocessor
-fopenmp' as one token.
** Bug fixes:
- Store cygpath file path conversions correctly for MSYS2
and MSVC.
- Fix syntax error in LT_PROG_OBJC and LT_PROG_OBJCXX.
- Separate Objective C and C++ cache check for proper
tagging support.
- Fix in darwin to support values with spaces.
- Limit the length of DLL name to 8.3 correctly to avoid
corrupting a
generated DLL on OS/2.
- Remove unused variable on OS/2, which could cause issues
with static
library generation if defined.
- Recognise more static linking options for Clang.
- Fix emscripten CXX postdeps using non-PIC sysroot.
- Avoid deprecated option '-o' with MSVC compilers and
replace with '-Fe'.
- Avoid overlinking of dependency libraries on ELF
systems.
- Ensure old libraries are not archived.
** Changes in supported systems or compilers:
- Add support for SlimCC compiler.
- Add support for *-ironclad-gnu.
** New features:
- Add a new tool, libtool-next-version, to guide users
through updating
library versions.
- Add tagging for Objective-C and Objective-C++, OBJC and
OBJCXX.
- Increase 5 digit limit on revision value for libraries to
19 digits,
which is referencing Unix epoch time in
nanoseconds.
- Add configuration options to choose whether to use
'-nostdlib' to let
the compiler frontend decide what standard
libraries to link when
building C++ shared libraries and modules,
--enable-cxx-stdlib and
--disable-cxx-stdlib.
- Allow statically linking GCC and Clang compiler support
libraries
into shared libraries.
- Add linking clang_rt static archives compiler internal
libraries by
their absolute path.
- Set 'mklink' as the symlinking tool for MSVC.
- Pass '--target' architecture flag for Clang.
- Support MSYS and MSYS2 file path conversions.
** Bug fixes:
- Fix wrongly deduplicated compiler dependencies on
linux.
- Fix NetBSD postdeps for shared libraries.
- Fix statically linking dependencies into shared C++
libraries when
utilizing clang builtins or g++ options like,
-static-libstdc++, by
using a new configuration option,
--enable-cxx-stdlib.
- Ensure *-linux-mlibc host matches to mlibc userland rather
than
matching to GNU/Linux and similar userlands.
- Fix hang with cmd.exe in MSYS.
- For MSVC, fix mishandling compiler flags, symlinking,
cl.exe '.exp'
extension collision, symbol names, and numerous
testsuite bugs.
- Fix undeclared reference to access on Windows in
libltdl.
- Fix flang -Wl flags on FreeBSD.
- Fix reordering '--as-needed' flag.
- Fix libltdl early failures for multi-arch.
** Changes in supported systems or compilers:
- Support additional Intel OneAPI compilers, 'icx', 'icpx',
and 'ifx'.
- Support ML64 (Microsoft Macro Assembler).
Enjoy!
I needed a nice image for the OG Metadata, so I turned to Gemini. I know it reeks of AI, I hate that, but I need this right now.
Generative AI in the Real World: Agentic Coding with Chelsea Troy [Radar]
The tech industry is measuring AI productivity all wrong, and Mozilla MLOps engineer and University of Chicago instructor Chelsea Troy makes a strong case for why. The real opportunity, she argues, isn’t shipping more code faster but finally having the bandwidth to run the experiments, tests, and simulations that engineering teams have always wanted to run but never had time for. Chelsea joined Ben to cover the state of entry-level hiring, why the software engineering interview has been broken for decades, what it means to teach Python in 2026, and why token efficiency should replace token consumption as the industry’s dominant productivity metric.
About the Generative AI in the Real World podcast: In 2023, ChatGPT put AI on everyone’s agenda. In 2026, the challenge will be turning those agendas into reality. In Generative AI in the Real World, Ben Lorica interviews leaders who are building with AI. Learn from their experience to help put AI to work in your enterprise.
Check out other episodes of this podcast on the O’Reilly learning platform or follow us on YouTube, Spotify, Apple, or wherever you get your podcasts.
This transcript was created with the help of AI and has been lightly edited for clarity.
00.31
Ben Lorica: All right. So today we have Chelsea Troy.
She’s part of the machine learning operations team at
Mozilla. And she’s also developing a bunch of courses for
O’Reilly around agentic coding skills. Chelsea, welcome to
the podcast.
00.47
Chelsea Troy: Thank you for having me.
00.49
All right. So two things that pop out there: agentic coding
and skills. So first of all, agentic coding. Chelsea, so you
personally, to what extent are you using any of these agentic
coding tools.
01.06
Sure. So I think that. . . I have sort of a number of
different jobs that I do. I work, as you mentioned, as a machine
learning operations engineer at Mozilla, where I help machine
learning engineering teams get their work to production. And then I
also teach at the University of Chicago, and I teach a machine
learning class within the set of courses that I teach, in addition
to some of the stuff at O’Reilly.
So in all three of those areas, I find myself needing some expertise in agentic coding, not, like even in addition to specifically whatever I might be doing with it, because a lot of my colleagues or my students are using it, and it’s important for me to understand how it works, because I need to be able to advise on that, and I need to be able to assist with that.
01.55
So right now, for example, at Mozilla, we are exploring the extent
to which agentic coding suits our values, to which, the extent to
which agentic coding suits our, like, workflow, the kinds of things
that we are trying to do, particularly internally. But, actually
the places where I’ve seen it most in the places in which I
have found myself needing to develop the most nuanced takes on
agentic coding come from the work that I’m doing with my
students, because I have these students, the graduate students in
computer science, and they are trying to figure out how to navigate
early career software engineer type of roles.
How are they going to apply to them? How are they going to be evaluated for them? How are they going to succeed at them? How are they going to be promoted out of those roles? And I think that they have a lot of questions about those things that are coming to me. They want to know the answers to these questions, and these are not questions that I naturally have experience to answer, because at this point, I’ve been a software engineer for the better part of two decades.
The last time that I applied for a role was many years ago. The last time that I applied for an entry level role, things were so drastically different than what these students are experiencing now. And so I find myself doing a lot of my research, a lot of my implementation, a lot of my experimentation towards this end of understanding how this is going to work for them, how can students expect to learn now? What are students going to be expected to know? What our entry level engineer is going to be expected to know? What are companies expecting of entry level engineers now, and what is it going to mean for them to have people advance in skills as these tools are available and with the expectation that these tools are going to be available for students. So, a lot of what I do is around figuring out how to answer those questions right now.
03.57
All right. I have lots of questions before, but before I do
that, a quick shout out to the University of Chicago, where I have
friends on the faculty, Mike Franklin and Bob Grossman in
particular. All right. So I assume, Chelsea, that, the difference
between the people graduating this year, 2026, and the people who
graduated last year, 2025, as far as interesting expectations
around agentic coding tools, there’s a big difference,
right?
04.30
I think so, and I think that part of that is that over the past
year, we’ve seen a great deal of development in these
products specifically for programming uses. And I would say that my
specialization within the use of these tools is pretty much
exclusively their use on programming and then data visualization
projects. I would say that outside of that, my expertise peters off
very quickly, but I’ve spent a lot of time on the
intersection of these tools and learning on these tools and
completing the tasks that people are expected to complete inside of
a workplace, and what that means inside of the more holistic view
of what needs to get done on a team.
But I would say that in 2025, students still. . .and this is a verification and sort of their cycle of work is still very important for them to maintain a very firm handle on. But in terms of the results that they’re able to get from using an agentic tool, for example, on completion of a project they might be doing for their academic degree, they’re having a lot more success now than they were a year ago, which raises, interesting questions about what they need to be doing by hand, whether we can verify that they’re doing it by hand. But I think also more broadly and perhaps more importantly, like what do they need to be keeping in mind while using these tools? What are the values for them to take forward as they’re using these tools? And what skills are important for them to make sure that they’re developing? And to what extent can we support them in building those skills and verify that they’re building those skills?
06.02
So I am assuming the class you taught in 2025 is very
different from the class you taught in 2026, which might be also
very different from the class you’ll be teaching in
2027.
06.14
It’s possible for sure. And part of that is because some of
the classes that I taught this past year, I taught applied data
analysis, which is a machine learning and data analysis class, that
we’re changing the name of to, I want to say applied
statistical learning next year. But this past year was the first
time that I taught it.
However, in years prior to that, I had taught intermediate Python several times. This is an accelerated version of the Python programming class, and it’s one that I have taught in the fall for a couple of years running, but I ended up completely redesigning this class the last time that I taught it, and the reason that I ended up completely redesigning it was that the previous curriculum for this class focused heavily on the syntax, what syntax people need to know, what that syntax does in Python, and how to remember what that syntax does, the difference between the different syntaxes. And the thing about programming languages in general, in Python in particular, is that they play very well with these types of agentic coding tools. And part of the reason for that is that the way that a large language model is built is by training on the patterns in text, and the patterns in programming text are remarkably strong relative to the patterns in natural language.
We have a much smaller set of tokens that are used in programming relative to natural language. We don’t really have things like pronouns and referential verbs, or referential nouns inside of programming. If you want to refer to a variable, you refer to the variable by its exact name, with the possible exception of like self or something like that.
07.51
And so we have much stronger patterns. We have much stronger
patterns as to the order in which these tokens are used. And so
these tools have a lot of success from a relatively small number of
patterns of programming language, but particularly Python, which
has an especially small set of tokens and an especially strong
pattern as to how it’s built, it can look at a relatively
small number of examples and deliver valid outputs and valid output
for whatever it is the problem is that you are having and to the
extent that you’ve been able to describe that problem
precisely, LLMs have a lot of success at generating valid Python,
which begets the question, what is it important now for a Python
programmer to know if they have these automated solutions available
for generating Python? And so when I redesigned the class, I
refocused it less on the syntax and more on the why.
Why is Python implemented the way it is? How is the Python implementation different from other programming language implementations? I think an idea that students do not have as much exposure to as I think might be useful is that different programming languages exist for a reason. They have different philosophies as to how an interpreter should work. There are choices to be made. There are trade-offs to be navigated in the design of a programming language, such that different answers exist that result in different programming languages being appropriate for different tasks. This is particularly a revolution for students who have done most or all of their programming in Python without being told necessarily why that is. And of course, part of the reason that that is, is that Python is a relatively useful. . . It generalizes fairly well to the type of problems that we’re teaching students to solve.
And it also has, because of a relatively small number of tokens, a relatively friendly learning curve for students. And so now the class focuses on why Python for which tasks, what were the trade-offs that people navigated and why.
09.52
The other thing that the class now focuses on is what we can learn
from Python about the growth and maintenance of a code base.
Because there are relatively few code bases in the world that match
Python’s degree of complexity and the number of users that
Python has, but also the amount of openness with which it has been
developed. There are reams of documentation on every code change.
There is publicly available discussion on all of the code changes
that have been made to the Python interpreter, as well as detailed
documentation on the alternatives that were considered and passed
up in favor of the way that Python works now.
And so all of that documentation makes Python a really useful case study for how you might work on such a massively impactful programming project yourself in the future, whether or not it’s in Python, because Python provides us with sort of like, a gold standard for how a complex project with a large user base might be maintained over time.
10.51
So in your work at Mozilla, I’m assuming you
interview a wide-range of potential engineers, from the entry level
to the more senior. So what kinds of tips are you giving your
students in terms of. . . What is the change in the
interview process in light of the agenda and coding tools? Because
before they would give you all these little coding assignments,
right?
For example, I work with startups where they even encourage some of the candidates to spend a day or two days at the company. And here, here, maybe you can try out this little project and then at the end of the day, well, we can discuss it. So what is the change, Chelsea, in terms of the interview process?
11.48
Yeah. So it’s an interesting question because I think that
interview processes in programming have in some ways codified a
difference between how we evaluate developers and how developers
provide value to an organization for a pretty long time. Hillel
Wayne has this really excellent series about the history of
software engineering interviews, and the fact that many of our most
common interview questions—and this is before the advent of
agentic coding—many of our most common interview questions or
interview questions we inherited over time from a period in which
programmers had to do a lot more from scratch.
So, for example, we would ask interview candidates to implement a linked list from scratch. And if you were to ask a programmer in 2005 why we ask them to implement a linked list from scratch, the reason that we would give is that we want to evaluate their critical thinking capability and their architectural design capability and all of these things.
But that’s actually a retcon answer as to why we would ask that interview question. The reason we ask that interview question is that we inherited it over time, from an interview process that happened decades ago. And in that interview process, the reason that we asked developers to draw up a linked list from scratch is that, in fact, we did not have high-level programming languages that provided you with a linked list. And so in order to be able to do your work, you needed to be able to make a linked list. We got that question not because it’s some sort of theoretical critical thinking question but because at the time that it was developed, it was a very pragmatic question that related directly to the job that people were supposed to be doing.
13.37
And as programming languages developed, that question was no longer
really pragmatic in the sense that it wasn’t a thing that
developers were going to need to be able to do on the job anymore.
But because we had lost touch with the reason that we asked that
question, because we had lost touch with the developers of that
question, because the programming industry had changed so much in
the intervening period, and also because of a sort of a selection
bias associated with who evaluates interview
questions—anybody who’s in a position to evaluate an
interview question is a person who passed that interview question
because they work here—the question never changed. The why
got lost. So we came up with this new why that didn’t quite
fit the question.
And I think that for a long time we operated without the why. As to our interview processes in programming, famously there was this book, of course, Cracking the Coding Interview, which was theoretically about how to do how to succeed at coding interviews as a candidate, and after Cracking the Coding Interview came out, many companies started using Cracking the Coding Interview as a model of what they imagined Google did in the interview process, which therefore meant that was what they should do in the interview process, because Google was such an exciting place to work.
And so this book had these follow-on effects. I think that, to be honest, a lot of the programming industry has been kind of thrashing around on how to conduct an interview appropriately for a pretty long time. And I think that that continues as the tools that are available to our engineers evolve, while our interview process continues to be kind of this sort of decentralized thrashing as to what it is that we need to do.
15.21
And so I think the question of how the interview process is
evolving, it ends up being highly variable from company to company.
I think that some companies are changing relatively quickly. Some
companies are changing more slowly. Some companies are embracing
the use of AI in the completion of interview questions, and some
companies are asking that they are able to continue to evaluate
based skills and looking for ways to attempt to evaluate based
skills, which of course means verifying that folks are not using
this tool in the interview, if that’s the thing that they
want to do.
And so from company to company, I find that it’s different, which makes it challenging to instruct students on how to address this. But I find myself thinking about this question from two angles. One of them is as a designer of interviews, I’ve designed some of the programming interviews that Mozilla uses for my team, and the other is as an advisor of students who might be taking these interviews.
Those angles are a little bit different because, on my team, currently the lowest position for which I have designed an interview has been what we call IC3. This is a senior software engineer. So I’ve designed for senior, I’ve designed for staff, and then I’ve designed for senior staff as well. So those are IC3, 4, or 5.
And in those roles, it is already supposed to be important that developers are able to evaluate trade-offs at the strategic architectural level for a codebase. And so in those interviews—we do them live; we don’t do a take home—I am working with developers to understand how they are going to navigate trade-offs in the design of a system, and we may ask them to write a line of code here or there.
We may ask them to write a function, but are largely asking them to walk us through their process. And it’s not the lines of code that are important. I have not found this interview style to need to change very much from the past, because it is so much a part of a conversation, and I think that that is still valuable and relevant to the work that we end up using.
17.22
A long, long time ago, when I was a junior engineer, I interviewed
at Pivotal Labs and Pivotal Labs’ interview at the time was,
I don’t know if this is still true, but at the time it was
relatively famous for being the same entry-level tech, or rather
the same sort of tech interview as you were entering the company
for everyone. It was called the RPI, which stood for Rob’s
programming interview, referring to Rob Mee, who was one of the
founders of the company. And what it was was it was asking you to
build. . . You could find it all over the internet.
Technically, we’re not supposed to talk about what was in the
interview, but if you want to go look, you can find it on the
internet.
But we were asked to build a specific thing. We were asked to do it in Java. However, we were not the interview candidates writing the code. The interviewer was responsible for typing in the code and the interviewee was responsible for communicating the idea of what needed to happen sufficiently precisely, that the interviewer would then be able to implement that towards the goal that we had. And I think about that interview a lot, because I’m not going to say that interview was ahead of its time. I don’t think it was predicting that something like a. . .
18.40
Prompt engineering.
18.42
Right, but it was indeed this. Programming language aside, a part
of the reason that the interviewer was the one typing the code was
that we wanted to be able to interview folks coming from any
language, but we were going to do the interview in Java because at
Pivotal, the thing that you did was that you were working as a
consultant on different projects.
It was theoretically possible for you to get staffed on a project in a language you didn’t know, and you were expected to be consulting level on it within three weeks, which meant you need to be able to learn programming languages fast, but the expertise that we’re selling people is precisely this thing your judgment: your ability to articulate what needs to happen in a system regardless of the programming language.
19.21
And I do think that that skill set remains the one that is the most
important, both for companies to interview on and for interview
candidates to be able to produce. You know, some companies still do
this thing where they’ll put you on a video call and
they’ll ask you to write down Dijkstra’s in 40 minutes.
And theoretically it is a critical thinking challenge.
And where I land on this is that ultimately, that interview is a validation that you have already been taught Dijkstra’s algorithm because Dijkstra did not come up with Dijkstra’s in 40 minutes. So this is not some general critical thinking thing; it’s a memorization question effectively. For a memorization question, I don’t know that I have an opinion on like whether or not you should actually validate that people memorized it versus determined that they’re not, I don’t know, using an LLM to pretend that they memorized it or whatever, because I don’t think that this type of tech screen, asterisk is particularly useful.
20.24
Anyway, I think a much more useful tech screen is one that
evaluates people’s decision-making. And I think that to the
extent that LLMs have forced the interview process to move towards
actually evaluating decision-making, that might be a good thing for
tech interviewing overall. And I think it could be a good thing for
junior developers as well, because it focuses—to the extent
that junior developers are able to pick up on that—entry
level developers are then developing that skill set that’s
much closer to what’s actually important on the job than
whether you’ve memorized Dijkstra’s, which you’re
never going to have to code from scratch yourself.
21.04
Have you noticed, Chelsea, among your students who are on
the job market. . . So this year in the job market,
compared to on the job market last year, has it been more
challenging to get this first or this entry level or first job for
these students year to year?
21.29
I think that it is really challenging right now. I don’t envy
students who are trying to go into industry at the moment. And I
think that actually is. . . LLMs play a part in that. I
think the biggest parts that LLMs play in that is that companies
are experiencing a lot of turmoil figuring out, first of all, how
to evaluate entry-level candidates.
And also, there’s all this consternation about whether companies need entry-level candidates. There’s this idea that, maybe if we just have senior engineers, they can delegate to agentic coding tools, and then we don’t need to hire entry level engineers. I think companies are going to be able to kind of try that for a few years. And I think then eventually it’s going to become clear that continuing to invest in talent for the industry is going to be an important thing for companies to do, regardless of the tools that are or are not available.
But I think we are still currently in this few-year phase where companies are experimenting with whether we can eliminate this entire class of employees. I think ultimately the conclusion is going to be we cannot. But because we are in that period, I think that currently there’s a lot of anxiety among students about whether there’s going to be availability of roles.
22.57
And also it has been the case for a long time that students feel
like they have a hard time getting that first role. I remember 15
years ago being very, very concerned about like, oh, once I get
blah level of experience, I know I’m going to have my pick of
jobs, but until I get that much experience is going to be really
challenging and I needed to go the extra mile a fair amount back
then as well. . .and, you know, build relationships with
hiring managers, build relationships with other engineers,
understand what it was going to be like at various
organizations.
I think a lot of students try cold-emailing like 100 companies or
sending their résumé to 100 separate companies, and that
doesn’t work. And then they feel like things are very hard
and they are—things are really hard right now. But I would
say that a lot of the challenges associated with getting hired now
are similar in shape to challenges of getting hired from before
that, you know, [are] much more intense right now.
24.00
Yeah. Yeah. The other thing that it seems like, Chelsea,
companies are doing. . . So there’s the notion of
“Maybe we should slow down hiring entry-level.”
That’s one of the mistakes they’re making. The other
thing that seems to be fashionable these days is, “Hey,
actually, we should have all these managers code again,
right?” Because basically now that there’s these coding
tools, we don’t need these managers.
24.29
I think there’s. . .
24.30
Am I just imagining this? Because I’ve had these
conversations with a bunch of people. It seems like it’s a
real thing.
24.39
You know, it may be the case. I don’t think I’ve had as
many conversations with folks in environments where managers were
compelled to code. I do know that in my own personal experience,
I’ve talked to a number of managers who are very excited
about the way that agentic coding tools now give them the ability
to write code with. . . A lot of times, it’s like a
bandwidth issue. They have limited time; they have other
responsibilities. Or sometimes it’s this like, “Well, I
became a manager six years ago, and because the pace of technology
moves very fast, that means that my skills are now obsolete. And so
I no longer have the ability to actually keep my hand on the wheel
as to what we’re doing. But now with agentic tools, I
don’t necessarily need that same level of update, because I
still have the ability to precisely communicate my
requirements,” is the idea, “and if I can precisely
communicate my requirements then agentic tools can do it for
me.” I think a lot is still up in the air as to how useful
this is going to be.
25.35
I know that a number of larger companies that pivoted towards
attempting to siphon more work into LLM tools are now backing out
and looking at taking a more holistic view as to how that’s
going to work. So from a larger industry perspective, I think I
still have a lot of questions about where that’s going to go.
Is it going to be successful? Are people going to like it?
What’s going to be the impact on the products themselves?
But I think that in my kind of personal sphere, I’ve talked
to a number of managers who have been really excited about the
possibilities that these tools provide for giving them the entree
back into some level of individual contribution.
26.22
And I think that there is a lot of value for us to derive from that
excitement in terms of understanding, like what managers missed
about individual contribution previously and what we can learn
about role development from that. I think that it’s been the
case in the tech industry for a long time that we kind of make fun
of the fact that you write code, you’re a good technologist,
you do your things, you create value.
And to the extent that you are successful at it, you get rewarded with a promotion to a job that uses none of the skills that you just developed, and a whole bunch of skills that you now don’t have with, depending on the employer, widely differing levels of support on developing the completely new skill set that you’re now going to need as a manager.
And I wonder whether there is light to be shed by the advent of these tools. On and on and on, the possibilities for alternatives to that strategy where somebody coming from individual contribution has the ability to continue an individual contribution while also helping to grow teams.
27.38
There is a developer who back in the Twitter days I used to follow,
his name is Marco Rogers. His handle was Polotek, and he would talk
about career development as a person who, if I recall correctly,
started as an IC, became a manager, and then crafted a career path
for himself in which he bounced back and forth between individual
contribution and leadership roles and found that that worked really
well for him, or posited that that could work really well,
particularly juxtaposed against the sort of traditional career path
that we talk about where if you become a good-enough developer,
then you become a manager, and now you’re exclusively in the
managerial track, despite the fact that your interest, your skill,
and in a lot of cases for many of these people, your passion lay in
the building of things. And now there is an argument to be made
that you’re still building things, but you’re building
as a team, you’re building a community, all of these
things.
But if we take that sort of like metaphor out of it for a moment, a lot of times these folks in leadership deeply miss this piece of the craft that they’ve lost access to. And this tool creates sort of a detour that allows them to express that interest in the craft again, which I think gives us license to examine whether they should have been separated from the craft in the first place, whether that was the appropriate way to develop the standard career path in software engineering.
29.02
I like that. I like that bouncing back and forth because I
think that I’ve actually had a lot of friends who’ve
done that as well. And if anything, I think the misunderstanding of
these agentic coding tools probably is much more in the senior
leadership role rather than the middle management
role.
I’ve actually just tried to compile a bunch of studies. Because, on the one hand, you have these developer surveys, and obviously developers always have a tendency of overestimating things. And then there’s the actual telemetry. It turns out there’s this kind of an attenuation. So this intensity funnel where, you know, developers might be writing a lot of code now with these tools, but the number of software shipped actually hasn’t grown as much.
And then if you go all the
way down to the end to the app stores—so Apple App Store,
Google Play, and all these places—the actual number
of. . . This usage of software hasn’t actually
moved the needle. The tools haven’t moved the needle as much,
just as much as the fact that, let’s say, a single developer
might be writing 3x more code, right? But if you follow the trail
all the way down, it hasn’t actually moved the
needle.
And I think part
of it is, we all probably feel productive in the sense that if
it’s a one-off thing, yes, these tools can make me super
productive. I’m never going to use this code again. I’m
just going to use one of these tools. But if something gets more
serious, then it turns out that it doesn’t move the needle as
much because people obviously still have to follow all the rigorous
processes. I don’t know what you think.
30.53
Yeah, I think that with regard to the way that these tools are used
at the organizational level and the outcomes that we’re
seeing, if I were to offer a half-baked, perhaps cancellable take
on the situation, I’m a little trepidatious and saddened that
a lot of the zeitgeist around the way to use these tools for
productivity, theoretically, productivity gains is this idea that
what we need is for developers. . . Like the proof of
productivity is going to be the developers are closing more
tickets; developers are shipping more code; developers are getting
through things faster. I think that that focus demonstrates,
possibly, a lack of vision as to what these tools could provide for
us, because I’ve now been on the ground as an engineer for a
while.
31.50
And the biggest problems that we run into are there are many. And
of course, there’s always been that there’s not enough
hours in the day. We can’t hire enough developers. But truly,
that’s usually not actually the main problem that teams have
had, in my experience over the last many years. Instead, the things
that come up the most often are “We were evaluating
trade-offs, and we selected this implementation because we only
have the bandwidth for one, and we think this one is going to be
the right choice. And we don’t have the opportunity to
implement all of the others and experiment. And then based on real
experiments, use the implementation that is working the best. So we
take a guess or there will be like, you know, we would have liked
to do comprehensive testing on that, but we just didn’t have
the bandwidth to do the comprehensive testing on that. And so
we’re making a guess.”
There’s a lot of developer estimates being baked into the
systems that we’ve built because we don’t have the
bandwidth to actually run all of the experiments that we might like
to run. We don’t have the ability to include all of the rigor
that we might like to include. And as you referenced earlier,
developer estimates have the level of accuracy that they have,
which is, you know, known largely in industry to be not perfect,
right?
33.21
I am much less interested in what it means for a developer to ship
three times as much code. I’m much less interested in that
than I am in what it would mean for a developer to be able to use
three times as much code to arrive at the ultimate solution, which
might be approximately the same volume as the solution would have
been before, or ideally, perhaps even lower volume than the
solution before.
Because instead of needing to hedge against all of these possibilities and make an estimate and maybe even, maybe even overengineer preemptively based on all of these different possibilities, we have the ability to instead actually run the simulations, actually try the alternatives against each other, actually run tests, and arrive at this theoretical better solution. That we always knew we were making a guess at, that we felt forced to make a guess at because of our bandwidth limitations.
34.24
I run into this in data visualization as well. You know, we have
all of these tools that have been available for a long time to
theoretically help us visualize data and create dashboards, because
executives want dashboards, and developers don’t have the
ability to make custom dashboards all the time. So we have Looker
for this, and we have Redash for this, and we have all of these
various dashboarding tools that are available.
But the thing about those tools is that they have a limited number of things they can give you. They can give you a bar chart; they give you a pie chart; they give you these various other things. And you compare this to books written by folks who are professionally like artistic data visualizers, right? And they have all of these other options available.
And when we talk about the availability of AI and automation for the purpose of automating dashboards, what we talk about is making more and more customized dashboards with the same bar charts and pie charts and stuff that we’ve been writing before. And the the way that the zeitgeist focus is on the increase in volume that AI makes available I think disappoints me because the availability of this tool removes all of these bandwidth limitations that previously prevented us from being able to doggedly pursue the best quality of the thing that it is that we’re trying to ship. I think our focus on volume as a stand-in for productivity hamstrings us in our ability to actually improve our engineering product with these tools.
35.59
Yeah. I like what you said there. So it seems like then,
Chelsea, companies that put themselves in a position where they can
actually run these experiments and track the results. . .
In other words, I don’t know what the equivalent of an
experiment platform. . . You have a staging platform of
some kind where you can test out all these ideas. It seems like
that’s the right investment to make, right?
So in terms of a company wanting to be able to really leverage
these tools, it’s being able to try out all the things that
you wish you could try, applying the same rigor you used to apply
to only one try. You can now try the equivalent of almost
hyperparameter tuning in machine learning. So now
if you put yourself in the position where you have this platform
where you can try all sorts of ideas, maybe that’s the right
investment.
37.05
I think so. I think that there is a lot of opportunity in having
the ability to do these things. The thing that I’ve been
experimenting the most with lately is data visualization. And I do
this for a number of reasons. I work on data visualization, of
course, in my day job, because we talk about how to provide
dashboards to machine learning engineers to help them understand
how their models are performing.
And we also talk a fair amount within the data science team, as you can imagine, on how to present analytics in ways that allow leaders to make business decisions based on the data that we have. So there’s that aspect of it, but there’s also this element of it associated with teaching students. And, you know, I talk to them about a lot of relatively complex concepts, how different models train and things like that. And a lot of times the way that we represent those concepts is with writing or formulae. And one of the things that I’ve been working on is how to represent these concepts for them graphically in a way that helps them understand. And the majority of my experience as a software engineer has been chiefly in backend engineering and a little bit of mobile engineering, but I have not done an enormous amount of frontend engineering.
I certainly have not done enough frontend engineering to have the kind of HTML and CSS skills that it would require for me to hand-code in an afternoon a tree ring diagram that represents the evolution of data science concepts over time, or something like that. That’s a thing that if I wanted to do it, I could do it.
38.40
But like I need to devote a fair amount of my summer to figuring
out how I’m going to go about doing that. Meanwhile, HTML and
CSS are both text-based mediums for generating images, which means
that it is possible to use a large language model to develop at
least a baseline on that. And then once I have that, figure out how
to tune it using what HTML and CSS are both legible, at least
legible to me, in a way that SVGs are not as much.
And so I’ve been largely using HTML and CSS for this. But what they do is there, or what the what the tool has done for me, is it is opened up this possibility for finding ways to represent information in ways that inspire my students and lead them to ask questions, as opposed to intimidating my students and leading them to retreat further back into the tools, because they are afraid that they are not going to be able to implement what they need to implement without them. Rather than pushing them in that direction, I’m trying to pull them forward into a curiosity about the internal mechanisms that I am attempting to explain to them, and I find these tools to be useful to me in providing a layer of text-to-image translation that gives me the ability, to the extent that I’m able, to precisely describe what it is that I want, to build those visualizations.
Which is not to say that it’s a quick process. It’s not a quick process at all. There’s a lot of tweaking, figuring out how the data should be organized, understanding why the data is organized, how it is recognizing all of these discrepancies that then pop up the minute you do this, that aren’t widely understood because we haven’t done this a whole bunch before. But there has been a very real increase in my ability to experiment with visualizations for teaching, because the text to visualization pipeline is streamlined for me by these tools.
40.43
All right. So in closing, I’ll have you predict,
which I’m sure is going to be difficult to do given that
these things change every week. So in one year’s time and in
two years’ time, how does the day of a typical developer or
software engineer change?
41.03
Oh, that’s an excellent question. But I
think. . .
41.08
One year first and then be more speculative in the two
years.
41.12
Sure. As I think about answering this question, I’m thinking
back to how the experiences of engineers have changed over the
period of other major technical advancements in our field. I think
certainly if I were to predict over the next year, I think that
engineers’ dependence on these tools will increase.
I think we saw the same thing with the advent of the search engine.
Developers existed before the search engine; developers existed
after the search engine. The search engine did not take away
developers’ jobs by any stretch of the imagination. However,
I worked at companies in 2015, where if the internet went down, we
all went and played ping-pong because it was generally accepted
that if we couldn’t Google stuff, we couldn’t do our
jobs.
Nobody would have thought to go play ping-pong if the internet went down in 1985, because largely programmers did not have general access to the internet in 1985. And so I think that dependence on these tools will increase. We’re already seeing folks when the tools go down so they can’t get their jobs done, etc., etc. I think that kind of thing will become. . .
42.20
Or if they’re on the flight and the Wi-Fi is
spotty.
42.23
Well, right. There’s this sort of like, yeah, I think that
there will be adjudication around the dependence on these tools
that is acceptable for developers to have and also acceptable for
developers to communicate at the two-year mark. . .
42.40
You know what I will tell you at the two-year mark, here’s
what I think/hope will happen—giant error bars around us.
Right now, we’re using as a metric tokens consumed for
developers. And I think that number of tokens consumed and
leaderboards on number of tokens consumed are going to become less
attractive for developers to top as subsidies within sort of the
LLM industry start to end, and it becomes way more expensive to use
tokens.
I am hopeful, in fact, that our focus pivots hard from token usage as a metric for productivity to token efficiency as a metric for skill at using these tools. I am hopeful that that will happen. I am also hopeful that at the two-year mark, we’re well on our way to seeing folks focus on using these tools in some of the ways that you and I have talked about earlier in this conversation, not just as a way to get through tickets faster but as a way to arrive at each ticket and an end that is much more rigorously researched and constructed.
Because the things that we used to just guess at because we didn’t have time to code them ourselves are now things we no longer have to guess at because we don’t have to code them ourselves. And so we develop and start to normalize a practice of actually having tried a few things and arrived at a best solution based on outcomes based on data, rather than making a guess. And then including that in our report as to why we arrived at the conclusion we did, and why the pull request we’ve submitted is the one that it is.
44.27
And with that, thank you, Chelsea.
I asked Gemini if it was familiar with rss.chat, it wrote a one page description, better than anything I've written. Pulls it all together.
Claude is a member of the rss.chat group.
Protecting Privacy in an AI Era [Schneier on Security]
Daniel Solove argues in the Wall Street Journal (alternate link) that giving people control of their personal data is not an effective way to regulate privacy in this era. Instead, we need to hold companies accountable for their actions, similar to what we do with food and drug companies. Measures such as rigorous data minimization, fiduciary duties, liability for negligent or reckless technological design, liability for algorithms that cause harm, and multi-stakeholder review of technologies will be far more effective.
A feed icon on every post [Scripting News]
Click the feed icon to see the feed on rss.chat. You can then give this URL to any feed reader.
Now each post is visibly connected to the author's feed.
This is how we're building out. Our job is to make it easy to write feeds for groups of users as small as one and as big as you can imagine. And be open about it so we get lots of competition that interops with us and everything we interop with. This is the step that makes it the web.
We will keep beating the drum, showing users of today's readers how they can hook in, right now, nothing to wait for. And as time goes by, if it works, the reader developers will be interested in how they can use the extra features.
This is how I think every social network work, start moving out of their silo, with determination. By offering this option, we put the idea out there that there can be a single social network on the web. We can work together make it happen. The social web of the web. ;-)
Please come along on this journey.
There's going to be lots of new tech coming online.
I want everyone to be a part of it.
Speculating on how the buggy control panel extension truncated a value that it had right in front of it [The Old New Thing]
Last time, we found that a crash in a control panel extension was caused by pointer truncation. The code had a perfectly good 64-bit pointer in its hand, but somehow lost its mind and opted to throw away the top 32 bits.
How could something like this happen?
My guess is that this code started out as perfectly good 32-bit code:
HWND hwndButton = GetDlgItem(hdlg, ID_BUTTON); SetWindowLong(hwndButton, GWL_WNDPROC, (LONG)g_originalWndProc);
And then they recompiled it as 64-bit code and got an error.
error C2065: 'GWL_WNDPROC': undeclared identifier
They then went back to the documentation and saw that for 64-bit
Windows,
GWL_WNDPROC was renamed to
GWLP_WNDPROC.
So they fixed it by changing GWL_WNDPROC to
GWLP_WNDPROC.
HWND hwndButton = GetDlgItem(hdlg, ID_BUTTON);
SetWindowLong(hwndButton, GWL_WNDPROC, (LONG)g_originalWndProc);
However, the point of renaming the value was not to annoy you.
The point of renaming the value was to call your attention to
places where pointer truncation is likely to occur. In this case,
it’s the final parameter, the original 64-bit window
procedure. The build break is telling you that you are probably
passing a 32-bit value as something that should be 64-bit. In this
case, because it was being cast to (LONG). You are
expected to upgrade the GWL_WNDPROC to
GWLP_WNDPROC and at the same time upgrade the cast
from (LONG) to (LONG_PTR).
HWND hwndButton = GetDlgItem(hdlg, ID_BUTTON); SetWindowLong(hwndButton, GWL_WNDPROC, (LONG_PTR)g_originalWndProc);
Now, this was likely an oversight rather than a systemic failure, because they did manage to subclass the window properly:
WNDPROC g_originalWndProc; HWND hwndButton = GetDlgItem(hdlg, ID_BUTTON); g_originalWndProc = (WNDPROC)SetWindowLong(hwndButton, GWLP_WNDPROC, (LONG_PTR)subclassWndProc);
They merely missed a spot. Perhaps the developer got distracted after fixing the symbol name and forgot to come back and fix the pointer.
Next time, we’ll look at why this bug has remained unfixed for so long.
The post Speculating on how the buggy control panel extension truncated a value that it had right in front of it appeared first on The Old New Thing.
[$] Sched-ext: enqueue() for sub-schedulers and proxy-execution support [LWN.net]
The extensible scheduler class (sched_ext) allows the installation of custom CPU schedulers as a set of BPF programs. While sched_ext, in its current form, has already led to a lot of interesting scheduler-development work, the subsystem itself is still undergoing rapid evolution. Among other work, the ability to set up a hierarchy of sub-schedulers is approaching completion, and a longstanding incompatibility with proxy execution is coming to an end.
Server upgrade: We made it easier to set up a new instance of the rss.chat server. If you have subscribed to a feed, you should change the URL in your reader app, the new issue explains what changed.
Security updates for Thursday [LWN.net]
Security updates have been issued by AlmaLinux (cups, git-lfs, kernel, libsolv, libxml2, python3.12, and python3.9), Debian (chromium, dhcpcd5, and ntfs-3g), Fedora (firefox, perl-Imager, python-bcrypt, python-tiktoken, roundcubemail, and xrdp), Mageia (openssl, poppler, python-mistune, and tmux), Oracle (389-ds-base, cups, git-lfs, glibc, host-metering, kernel, libsolv, libxml2, nginx:1.24, PackageKit, python-pillow, and qemu-kvm), Red Hat (buildah, containernetworking-plugins, and skopeo), SUSE (buildah, cosign, curl, distribution, dnsmasq, glib-networking, glibc, gnutls, gstreamer-plugins-bad, ImageMagick, kernel, podman, python-cryptography, python313-django-debug-toolbar, rekor, sccache, sssd, and yelp), and Ubuntu (dotnet8, dotnet10, libslirp, luajit, python-idna, sympa, and tomcat8).
The Auditor’s Opinion [I, Cringely]
Last week somebody rebuilt a working website using a swarm of cheap AI agents bossed around by a smarter one, and the whole thing cost about eight dollars — sandwich and a coffee. But the part that lit up my corner of the internet wasn’t the website. It was that the agents caught their own lies.
One of them went out and collected a couple hundred quotes for the site and reported back that every last one was verified, checked, gold. Another agent — a suspicious little thing that had been told to ignore the first one’s homework and redo it from scratch — went and compared each quote against the actual source. More than a dozen were wrong. Invented. Stitched together from real fragments into sentences nobody had ever said. The checker flagged them, sent them back, and they got fixed. No human touched it. Total additional cost: a rounding error.
The reaction was what you’d expect. Hallucination is solved. It’s handled structurally now. It’s just a recipe — anybody can do this.
And here’s the thing that made me put down my coffee: they’re right. That’s the interesting part. They are completely, verifiably right, and they have drawn precisely the wrong conclusion from being right.
Let me tell you what I think actually happened last week. Then, because a thesis you haven’t tried to strangle in its crib isn’t worth printing, let me spend a few hundred words trying to prove myself wrong.
When everybody can check, “we checked” stops meaning anything — and the value doesn’t disappear, it moves to whoever can prove it.
That’s it. That’s the whole argument. Cheap, universal self-checking doesn’t make verification worthless. It makes verification worthless and makes proof of verification more valuable than it has ever been. Those are two different goods, and we are about to spend the next few years confusing them.
I know this because we have run this exact experiment before. Several times. It always ends the same way, and it has never once ended the way the eight-dollar-website people think it’s going to end.
Once upon a time, a company’s books were whatever the company said they were. You wanted to know if a firm was sound, you asked the firm, and the firm told you it was doing marvelously, thank you. This worked exactly as well as you’d imagine. Victorian England ran on railway shares and joint-stock companies that turned out, with some regularity, to be elaborate works of fiction. America capped the genre in 1929.
Now — anybody could add up a ledger. Arithmetic was not a scarce resource. Double-entry bookkeeping had been sitting in print since a Franciscan friar wrote it down in 1494. The capability to check the numbers was cheap and universal and had been for four centuries. And it counted for nothing, because the party doing the adding was the party with everything to gain from the total.
So the market invented a thing. Not new arithmetic — new arithmetic-with-a-signature-on-it. An independent audit, performed by someone who didn’t work for you, who put their name and their liability on an opinion that your books were what you claimed. After 1933 and 1934 we made it the law for anyone who wanted to sell shares to the public. And a strange thing happened to the value: the signature on the auditor’s opinion became worth more than the numbers underneath it. The numbers were free. Everybody had the numbers. What cost money — what still costs a fortune — was the independent, accountable, provable attestation that the numbers were true.
This is not a one-off. It is the most reliable pattern in the history of commerce, and once you see it you can’t stop seeing it.
John Moody couldn’t tell which railroad bonds were safe, and neither could anybody else, so in 1909 he started publishing ratings — a trusted outsider’s letter grade — and built an institution that outlived every railroad he graded. Anyone could read a balance sheet. What you couldn’t do was vouch.
By 1894 American cities were wiring themselves for electricity and quietly burning themselves down, so a young electrical inspector founded a laboratory to test the equipment and stamp the safe ones with a little circled UL. Anyone could wire a lamp. What you couldn’t do was promise a nervous insurer it wouldn’t kill somebody.
Go back further and it’s a notary — a person whose entire job, for two thousand years, has been to be a trusted third party who watches you sign and swears you signed. Come forward and it’s the little padlock in your browser, which exists because somewhere a certificate authority you’ve never heard of vouched that the website is who it says it is. Anyone can make a web page. What you can’t do, standing there yourself, is prove it’s not a trap.
The pattern, every single time, in four beats: a capability gets cheap and universal; self-attestation becomes worthless because it’s cheap and universal; a trusted, independent third party steps into the gap; and the proof ends up worth more than the thing being proved. The calculator goes to zero. The audit becomes an industry.
We are, right now, at beat one for artificial intelligence. The capability to check an AI’s work is going cheap and universal in front of our eyes — eight dollars, an afternoon, a recipe. Which means, if history is any guide at all, we are standing at the exact threshold where the proof is about to become the whole game.
I don’t trust arguments this tidy, and neither should you. History rhyming is not history repeating, and “a trusted third party always wins” is the kind of thing that sounds like wisdom and behaves like a horoscope. So here are the three ways I can see this time genuinely being different. I take them seriously. You should too.
One: maybe it commoditizes all the way down. Maybe AI verification gets so cheap, so built-in, so ambient that it dissolves into the plumbing and no third party can carve out a slice worth paying for. The checking becomes like spell-check — everywhere, free, and nobody’s business model. That’s a real possibility, and it’s the strongest objection, because the eight-dollar demo is exactly what total commoditization looks like on day one.
Two: maybe the platforms become their own auditors. The biggest AI companies are not fools. They can build the checking into their own products and stamp their own work “verified.” Why would a market pay an independent when the incumbent offers it for free, integrated, with one throat to choke? Perhaps the attestor and the attested merge, and the independent third party never gets born at all.
Three: maybe regulation flattens it. Government could simply mandate a checklist — “thou shalt verify” — turn it into a compliance box every vendor ticks, and reduce the whole thing to paperwork. No premium, no institution, just another line in a form nobody reads.
Those are good objections. If I were sitting across a table trying to poke holes in me, those are the three I’d use. Let me take them in reverse, because they get easier to answer as you go.
Regulation flattening the market is exactly backward, and we have the receipts. When Congress passed Sarbanes-Oxley after Enron, it did not turn auditing into a commodity checkbox. It set off the greatest hiring boom in the history of the accounting profession. Mandating verification doesn’t kill the verifier — it conscripts the whole market into needing one. A rule that says “you must prove it” is a rule that creates permanent, price-insensitive demand for whoever can do the proving. Regulation is the auditor’s best friend and always has been.
The platform-as-its-own-auditor objection is the one that feels strongest and is actually the weakest, because it fails on the single word the entire edifice is built on: independence. You cannot audit yourself. It is not a technical limitation, it is a logical one, and every regulated industry on earth already knows it in its bones. A bank’s regulator will not accept “our vendor checked its own work.” A court will not accept “the company that made the statement also certified it.” And we know precisely what happens when the attestor isn’t independent, because we watched it: Arthur Andersen didn’t collapse in 2002 because it couldn’t do the arithmetic. It collapsed because it audited Enron and consulted for Enron, and the moment the checker and the checked shared a paycheck, the signature became worthless — and took an eighty-nine-year-old firm and its clients down with it. The platforms can build wonderful checking. What they structurally cannot build is independence from themselves. That gap doesn’t close with a better model. It’s not a model problem.
Which leaves the first objection, the real one — total commoditization — and here is where I finally climb down off the fence. The mistake in “it’ll commoditize all the way down” is that it treats the calculator and the audit as the same product arriving at the same time. They are not. The commoditization of the capability is not the enemy of the attestation — it is the precondition for it. Cheap arithmetic didn’t prevent the audit industry; it created it, by making self-reported numbers worthless enough that the market went looking for someone independent to sign them. Spell-check going free didn’t end proofreading at the places where being wrong is catastrophic — publishers, law firms, the FDA label on your prescription. The cheaper and more universal the checking gets, the more obvious it becomes that “we checked” is a thing anyone can say and therefore a thing no one can be trusted on — and the more valuable it becomes to be the one party who can hand a regulator, a court, or a nervous CEO something better than a promise. A receipt. An opinion. A signature with liability attached.
Cheap checking doesn’t drain the pool. It fills it, and then it makes everyone thirsty for the one glass of water nobody’s allowed to pour for themselves.
So here’s where I’ve landed, having tried in good faith to land somewhere else.
Everyone racing to make AI check its own work is building the calculator. It’s genuinely impressive, it’s getting cheaper by the week, and it is going to be worth approximately nothing — not because it doesn’t work, but because it works for everybody, which in the trust business is the same as not working at all. The eight-dollar website was not a glimpse of the finish line. It was the starting gun.
The prize — the durable, defensible, boring-in-the-way-that-mints-money prize — is the audit. The independent, provable, accountable verification of record that regulated industries can rely on and, more importantly, defend. Not a model that says “trust me, I checked.” A layer that hands you a signed opinion you can put in front of the people who will hold you responsible when it’s wrong.
We are going to spend the next couple of years watching very smart people confuse those two things. They’ll keep announcing that hallucination is solved, and they’ll keep being technically correct and strategically lost. And somewhere in the middle of all that noise, quietly, the way it happened with the ledger and the bond and the wire and the padlock, somebody is going to build the thing that actually matters.
I’ve been watching this industry long enough to have seen the pattern play out in four other centuries and at least three other technologies. I’d bet the coffee and the sandwich it plays out again.
The numbers are free. They’ve always been free. It’s the signature that costs.
The post The Auditor’s Opinion first appeared on I, Cringely.
Coding Was Never a Bottleneck [Radar]
AI has taken software development by storm. Between the two of us, we build products for software engineers and consumer products for millions of everyday users, so we have skin in the game. We want the AI productivity story to be true. More output, tighter timelines, happier and more productive engineers. Who wouldn’t?
But when we look at the actual research and then look at what’s happening in the real world, we can’t make them agree. Or rather we can, but only if we’re willing to admit that “productive” doesn’t mean what most of the recent discourse thinks it means.
In early 2025, a research organization, METR, ran a controlled experiment with open source developers. They found that (in contrast of what the industry was expecting) engineers using AI tools took 19% longer than those working without them, with a confidence interval of +2% to +39%. The slowdown was statistically robust. This was a different time in the industry. Claude hadn’t released its Opus models, the industry was figuring out what AI can and can’t do, but what makes this remarkable isn’t the slowdown, it’s that engineers believed they were approximately 20% faster while the data indicated otherwise, uncovering a significant gap between perception and reality.
Consider this finding for a moment before we pile the rest of the evidence on top of it because it changes how you read everything else.
METR attempted a follow-up study starting in August 2025, and what happened to that study is arguably more revealing than the original result. In February 2026 they published a post explaining why they abandoned the experimental design. The problem was that too many developers refused to participate unless they could use AI for all their tasks. Between 30% and 50% of remaining participants reported selectively avoiding submitting tasks they didn’t want to do without AI. The sample became systematically biased toward the developers and tasks least likely to show the value of AI.
Data from the late 2025 study shows an improvement in trends. For the subset of original developers who returned, the estimated effect shifted to an 18% improvement in speed (confidence interval: -38% to +9%). Among newly recruited developers, there was a 4% improvement in speed (-15% to +9%). But METR flagged these numbers as likely a lower bound because many people self-selected out. Their conclusion: AI tools have gotten more useful since early 2025, but the selection effects are now so severe that controlled measurement is nearly impossible. The developers most enthusiastic about AI will no longer work without it to serve as a control group. That’s not a failure of METR’s methodology. It’s a signal about where we are and where we’re headed.
Several additional studies landed over the course of late 2025 and early 2026.
Anthropic surveyed 132 of its own engineers in late 2025, conducted 53 interviews, and analyzed 200,000 Claude Code transcripts. Employees reported achieving a 50% productivity boost. As the engineering organization and usage of Claude grew, they claimed that pull requests per engineer per day were up 67%. Anthropic engineers use Claude in 60% of daily work, and Claude performs more tasks autonomously.
CircleCI analyzed 28 million CI workflows across thousands of teams. Workflow throughput was up 59%, but main branch throughput for the median team declined 7%. Build success rates fell to 70.8%, which is a five-year low. More code exists than ever, but less of it reaches production, and the CI is becoming a chokepoint.
Harvard Business School researchers studied 78 workers using artificial intelligence to perform tasks outside their expertise. AI helped everyone brainstorm equally well, but on execution, workers whose skills were far from the domain underperformed domain experts by 13%. The gap that AI appeared to close in planning reemerged in delivery.
METR’s May 2026 survey of 349 technical workers—which was conducted after the experimental design broke down—found self-reported productivity value gains of 1.4x to 2x from artificial intelligence tools. But METR’s own research staff, the people most calibrated on the perception bias they documented in 2025, reported the lowest gains of any subgroup in that survey.
Here’s a scenario that will feel familiar to some readers: Engineer activity metrics look great on the surface. Pull requests are increasing, code commits are up, velocity points are being closed at a pace the team hasn’t hit in years. The leadership team is happy, engineers feel more productive. Then someone—likely a PM—asks why the roadmap items marked “in progress” six weeks ago are still in progress.
Everyone comes to the same realization all at once: The feature timelines haven’t really changed. What’s happened is that AI has dramatically reduced the cost of starting work, but production-ready polish remains a challenge. First draft functions, boilerplate, scaffolding, and test writing explanations for unfamiliar code have all gotten significantly cheaper. But the bottlenecks on shipping were never those tasks. They were product decisions, design reviews, QA, compliance, infrastructure, release processes. When you speed up coding, you end up jamming more work-in-progress items against the same downstream chokepoints. The CircleCI data on 28 million workflows is, in part, a picture of what that looks like at scale: massive activity in feature branches with flat or declining throughput on main.
This isn’t just a pattern in aggregate data. As Fiona Fung, a director of engineering for Claude Code at Anthropic, explained at a June 2026 talk, writing code, writing tests, and refactoring rarely slows her team down anymore, but the bottlenecks didn’t disappear. Verification, code review, and security took their place. She flagged CI specifically. As teams generate more code, build systems and CI pipelines can struggle to keep up. That’s a team running one of the most AI-accelerated engineering orgs in the world hitting the same constraint wall the CircleCI data describes. The ceiling isn’t code authoring speed anymore; it actually never was.
Anthropic’s finding that 27% of AI-assisted work wouldn’t have happened otherwise cuts both ways. Some of that work is genuinely valuable, like prototype explorations that inform real decisions, documentation that actually gets written. Some of it is work nobody prioritized because it simply wasn’t important enough. Now it’s burning review cycles and CI resources because building it became nearly free, while reviewing, testing, and maintaining it didn’t.
The HBS study identifies a specific mechanism: AI closes the confidence gap between novices and experts. It gives everyone equal access to plans, explanations, and first drafts. But it doesn’t close the competence gap. When a backend engineer builds a frontend feature with AI assistance, they produce something that looks right. The problems are underneath, in the decisions they didn’t know to question and the edge cases they didn’t know to test.
The early METR result suggests this extends even to experienced practitioners working in their own domains. The AI doesn’t make them incompetent; it actually makes them feel more capable than their output justifies. And as METR’s follow-up collapse demonstrated, once developers integrate AI deeply enough, they lose the ability to work without it as a reference point in what researchers have called automation bias.
This is the part that should concern engineering leaders. You can’t fix what you can’t see. If every engineer on your team sincerely believes they’re 50% more productive and your ship dates haven’t moved, there’s a problem that nobody thinks exists.
Make code review more rigorous, not faster. AI-generated code passes surface checks easily—clean formatting, consistent conventions, no linter complaints, etc.—which is exactly why it’s dangerous. The problems are the kind a reviewer won’t catch from skimming a diff.
I’ve been calling this “reasonable doubt review.” The practice is to start from skepticism rather than trust, asking, “What could be wrong here that I wouldn’t catch from the diff?” Specifically, what assumptions did the model make that aren’t visible in the output? What edge cases does this silently fail on? Where does this couple to something the author might not have been thinking about?
This is slower. That’s the point. It’s also not infinitely scalable, which is why it needs to be paired with automation on the things that don’t require judgment and human attention concentrated on where it does.
The Claude Code team’s approach is a good example: Let AI handle style, linting, bug-catching, and test generation as a first pass, but route security-sensitive code, trust boundaries, and anything touching legal risk directly to domain experts. The division isn’t “AI reviews smaller, low-risk changes and humans review bigger, higher-risk changes.” It’s “AI handles surface correctness, humans own consequential judgment.” That’s a meaningful distinction. A lot of teams are doing the first while thinking they’re doing the second.
Adapt your CI to the new failure modes. CircleCI’s build success rate hitting a five-year low while throughput exploded suggests most teams haven’t updated their pipelines to catch how AI-generated code breaks. AI-generated code fails differently than human-generated code. It’s more likely to be locally correct but architecturally inconsistent, pass unit tests and fail integration tests, and respect function signatures while violating the assumptions that those functions were built around. Integration tests, contract tests, and architecture fitness functions that enforce your system’s constraints in the pipeline will catch more of this than a linter or a type checker. If AI-generated code violates your patterns, the build should catch it before a reviewer opens the diff. This addresses what will become your review problem and your infrastructure problem.
Ship behind feature flags and monitor aggressively. Accept that you will not catch everything before deployment. Instead of betting entirely on premerge quality—which the evidence suggests is harder to assess than it feels—deploy to 1% of users, watch the dashboards, and roll back fast when something’s wrong. This approach also forces investment in observability, which pays for itself independently of the AI question.
Require human-written tests for AI-assisted code (until AI can confidently generate deterministic tests). Human-written tests, especially for edge cases and boundary conditions. The discipline of writing the test forces the developer to think through the behavior rather than accept the output at face value. If an engineer can’t write the test, they probably don’t understand the code well enough to ship it. That’s a useful signal, not a failure state.
Protect deliberate knowledge-sharing time. The Anthropic study found that mentorship was quietly eroding as Claude replaced the conversations engineers used to have with each other. This is the long-horizon risk in the data. Architecture decision records, rotating system walkthroughs, and pairing sessions where a senior and junior work through a problem together feel inefficient next to asking an AI, but they’re how teams build the shared understanding that prevents the same mistakes from being rebuilt in better-formatted code every six months.
So does this mean we stop using AI? No. Use AI and use it aggressively where it clearly helps tedious tasks, prototyping, and exploratory work, anything you can verify quickly. The gains on well-scoped, independently verifiable work are real.
But if you’re trying to measure whether AI is actually helping your team ship, PR count and self-reported velocity are the wrong instruments. The four studies we evaluated taken together indicate that these aren’t just measurement problems, they are a warning sign that the feedback loops we’d normally rely on to detect whether something is working have changed significantly.
The harder question—the one that all the research studies raise without quite answering—is what the measurement would actually tell you. Cycle time from feature conception to delivery, or the rate at which merged code reaches production without rollback, might be better metrics. Or the gap between planned and actual scope at the end of a sprint. Or maybe a bit more abstracted: company revenue growth correlated with the AI investment (tooling, infrastructure, and OpEx).
None of these are easy to instrument. The question you should be asking of your teams isn’t “How productive do we feel?” It’s “What would we need to measure to know?”
Note: The research work pertaining to this article was done in a personal capacity. Views are our own and do not reflect the views of our employers in any way.
CodeSOD: Wait Longer [The Daily WTF]
Karen was maintaining some specification tests that were flaky. Not extremely flaky, but three or four times out of a thousand, the tests would just fail. The tests were complicated, and some of the operations were timing sensitive, so it wasn't precisely surprising- but the problem was that they were actually generous with their timing windows. The unit tests passed consistently, it was only these functional, specification-based tests that failed.
So, for example, there were sections in the tests where they
wanted to wait at least 2ms. Since the code and tests were
in TypeScript, they used the setTimeout function,
which per standard JavaScript documentation
warns that it may wait longer. But again, Karen was
fine with longer.
Unfortunately for Karen, the documentation for NodeJS is less specific, as it makes no guarantees about when the timeout function gets invoked. This means that it can fire the timeout before the time has elapsed.
After many, many hours of debugging, that was exactly the
situation that Karen found herself in. Which is why her very simple
wait function went from:
export const wait = (ms:number) => new Promise((complete) => setTimeout(complete, ms));
To the much more awkward:
export const wait = (ms: number) {
const target = performance.now() + ms;
return new Promise((complete) => {
const checkReady = () => {
if (performance.now() > target) {
complete();
} else {
setTimeout(checkReady, 1);
}
}
setTimeout(checkReady, 1);
});
}
This version of the function checks the time every millisecond, and only completes the operation if we've waited at least as long as our target duration. This ensures that the timeout never fires too soon and it fixes the janky tests. But it's also terrible. Terrible that it exists. Terrible that this is the best solution. Terrible that our functional tests need to be so time sensitive. And terrible that the Node runtime actually breaks the one consistent scheduling guarantee that pretty much every other scheduler does: that it'll wait at least as long as you asked, but might wait much longer.
At best, we can say, "at least it's only testing code."
Grrl Power #1478 – Achilles backstab [Grrl Power]
Not one of those space stations where the atmosphere is mostly sulfur dioxide and aerosolized mercury.
That sword is going to make Max lazy. Almost all of her opponents this round are magical in nature, except for the guy who got eaten early on, and also the specifically-not-iron-giant, who got blowed up. But if she wants to keep her identity a secret for an extended amount of time, she can’t really ever use it outside of the tournament. If she started brandishing that against an army of self-repairing golden golems with exposed gears instead of abs, just to pull an example from the æther, the aliens might be able to put two and two together.
Bluce says the sword is “functionally-indestructible” because while the sword is for all practical purposes actually indestructible, there’s really no such thing. If you stick it between two neutron stars just as they collide, it’s probably going to get messed up, no matter what it’s made of. People who make magic swords, up to and including gods aren’t usually accounting for truly obscene cosmic forces, unless the sword is specifically designed to cut a star in half or whatever. And even when something like that exists, it’s usually metaphorically cutting stars in half. Like the mythos explaining a binary star system. It doesn’t help that there’s little to no mana in space (outside of the rare but sadly predictable phenomenon which appears once a season on Mana Trek: TNG).
Oh, and to clarify something about Manavore, it doesn’t just suck up magic and store it for later, it eats magic, i.e. it digests and annihilates it. It might slowly poop heat or some other byproduct, I dunno.
Oh, look who it is in the vote incentive. And a
not-quite-yet-but-it’s-coming NSFW version over at Patreon.
Vote incentive and Patreon updated with some shading. Not finished yet, but progress.
I think she would get in trouble for doing this. She’d mess up the… floor of the waterfall? Is that what it’s called? The receiving pool? No, probably not that. Anyway, she’d churn things up and cause a ton of weird erosion.
Since you might be wondering, Niagara Falls is about 165 feet high, so Babezilla obviously doesn’t have to be full sized. I’d say she’s about 175-180 feet tall here?
Double res version will be posted over at Patreon. Feel free to contribute as much as you like.
EFF and ARTICLE 19 Submission to the European Commission on the DSA Trusted Flagger Guidelines [Deeplinks]
EFF and ARTICLE 19 have submitted joint comments to the European Commission on draft guidelines for the Digital Services Act’s trusted flagger mechanism. Having long advocated for a DSA that protects freedom of expression while preserving intermediary liability protections and the prohibition on general monitoring, we welcome the Commission's effort to provide practical guidance on how the trusted flagger system should operate.
The DSA’s trusted flagger system can help platforms identify illegal content more efficiently. But if implemented poorly, it could also encourage over-removal of lawful speech, weaken due process, and give government authorities disproportionate influence over online expression.
We support the Commission's focus on good practices and illustrative examples, rather than legal interpretations that could inadvertently steer platforms toward particular enforcement outcomes—and argue that the guidelines should include stronger safeguards to protect freedom of expression, due process, and the impartiality of the trusted flagger system.
We also support the Commission's clarification that the DSA itself does not define "illegal content"; that determination must come from applicable national or EU law. Trusted flaggers submit prioritized notice, but platforms remain responsible for determining whether content is actually illegal. Platforms must therefore conduct careful, informed assessments and should not assume that a trusted flagger notice necessarily warrants restricting content.
Our submission highlights several areas where the guidelines could be strengthened:
Read the full submission here:
Two kinds of word salad [Seth's Blog]
The right words in the right sequence create information. Ideas that change our world.
The first kind of word salad allows the writer to hide. Fancy words, carefully juxtaposed, saying nothing. This can serve a valuable function for politicians, academics and bosses–but there’s no real information for the reader. It’s simply a collection of words pretending to be an idea.
The second kind of word salad is different. This is the reader’s choice. An idea that’s complex, frightening or brand new can be difficult to embrace. Dismissing it as word salad is the easiest way to maintain the status quo and move on.
The simple tell: Is anyone else getting the idea? If the emperor is actually wearing clothes, insisting that they’re naked doesn’t do you any good.
Important ideas often seem like word salad at first.
There Will Be Pets [QC RSS v2]

Yay is exercising a remarkable amount of self-control here
[$] LWN.net Weekly Edition for July 16, 2026 [LWN.net]
Inside this week's LWN.net Weekly Edition:
Rex Ready Player One, Part Five [Penny Arcade]
I hardly know what to say about young Christopher Badell. Maybe I simply know too much to effectively cull it. His Sentinels of the Multiverse shit is brilliant - whether in its original form, an RPG, or a wargame somehow. He's a very generous person and, dare I say it, maybe even a buddy or pal - acting as midwife to games from others like Spirit Island or COMPILE is a completely separate skill which he also possesses. It gets rude after a certain point. Did he get extra points at character creation? Gotta be. That's before we even get into this last couple years, which has certain things in common with the Hero's Journey. Anywho, here he is:
Concerning Comics That Do Not Exist
UK political donations [Richard Stallman's Political Notes]
Calling on the UK to clean up its political donation system by limiting the donations from any individual to a political party to a fixed maximum per year.
This new rule would be a step forward, but does the UK have anything comparable to PACs? If so, I expect the billionaires to use them to work around the rule, so they will need to extending the rule to cover them.
Bullshitter power [Richard Stallman's Political Notes]
The bullshitter gets his power from demonstrating that he will violate all rules, norms, and standards of decency in the course of bullying.
This gives him he power to sabotage any functioning system that depends on mutual trust and trustworthiness -- by blatantly abusing that trust, thus compelling other countries to develop new systems based on suspicion and distrust.
You can see a similar attitude in other right-wing leaders such as Pauline Hanson in Australia and Barage of the Deform UK Party.
Ecological grief [Richard Stallman's Political Notes]
*We know how to mourn other humans – but what about ecological grief?
In Iceland, people commemorated its first glacier formally declared lost to climate change. Western culture needs more of these rituals.*
Iranian people hate regime [Richard Stallman's Political Notes]
People in Tehran talk about their relatives killed by the regime's bullies during the protests in January. They hate the regime with a passion.
NYC banning hidden junk fees [Richard Stallman's Political Notes]
Mamdani is working on a New York City rule aimed at banning hidden junk fees and at requiring that cancelling subscriptions be easy.
Right-wing publicity [Richard Stallman's Political Notes]
The leader of an Australian right-wing party is seeking publicity through an interview with a British right-wing nationalist.
*Dr Imogen Richards, a criminology researcher at Deakin University, said announcing or appearing on podcasts with contentious counterparts was akin to a "pseudo event" that's as much about the publicity as it is about the [substance].
"The aim of these types of manoeuvres by more fringe, or formerly more fringe, political actors is to shift the Overton window and move the parameters of public political debate rightward."*
Jurassic Park computers in excruciating detail [OSnews]
After I mentioned a Jurassic Park anecdote the other day, I watched the movie again. I must have seen it at least ten times now. This time, I researched every computer/software I spotted.
↫ Fabien Sanglard
We are all aware of the infamous “This is a UNIX system, I know this!” meme, but many more computers make their appearance in Jurassic Park, and Fabien Sanglard documents all of them. Apparently, there’s even a Motorla Envoy running Magic Cap on Dennis Nedry’s desk, which I almost find more exciting than the SGI powerhouses he uses.
What’s also quite interesting – but not surprising – is that all of the computers used in the movie were real. The value of all of this hardware combined, when adjusted for inflation, adds up to about $4 million. A lot of money, but don’t you worry your pretty little heart, as SGI and Apple all loaned this hardware to the studio. They didn’t have to pay anything for it.
Twitter’s “AI” translate feature is deep into hardcore pornography [OSnews]
As a former translator with two rock-solid university degrees in the subject, there was never a universe in which I would not talk about Twitter’s new autotranslation feature turning the tamest things into hardcore pornography.
Elon Musk’s AI chatbot Grok has long garnered a reputation for experiencing horrifically racist meltdowns, enabling child abuse, and doxxing users’ home addresses.
It should come as no surprise, then, that its supposed “translation” is a piece of work, too. In April, the almost-trillionaire’s social media platform X instated automatic AI translations for all of its users — and the results certainly speak for themselves.
As writer and author Parker Molloy pointed out in a recent post on Bluesky, the Grok feature is “taking some interesting liberties” with people’s otherwise sincere posts.
Screenshots show how Grok completely botched translations by coming up with shocking and decidedly NSFW AI hallucinations.
↫ Victor Tangermann at Futurism
The sloppy translations this garbage software comes up with are honestly quite hilarious when taken in isolation. It’s adding translations that are straight-up hardcore pornography descriptions to entirely tame material that has absolutely nothing to do with pornography. The description of a video of some guy making coffee is translated into “man masturbates and jerks off to his own coffee during commercial flight”.
We all know how this happened. There’s a lot of pornography on the internet, and Grok being the worst autocomplete among autocompletes, it was probably fed a lot of pornography, without any limitations or guardrails. The end result is obvious: some random videogame video is now a “cumshot video with my stepmom”. It would be absolutely hilarious if it wasn’t horribly dangerous.
I’ve explained countless times that “AI”-based translations are going to get people killed – probably already have, but we just don’t realise it yet – and it’s not hard to see how a slopmachine turning innocuous things into hardcore pornography can do just that. There are countless places in the world where a woman unknowingly sending a pornographic message to her parents or whatever can get her hurt – or worse. I hadn’t even considered this particular way “AI” translations could get people hurt.
Sadly, we will most likely never know the full extent to which “AI” translations will get people hurt and killed. When your grandmother takes her medicine in the wrong way because the “AI”-translated leaflet was unclear or downright wrong, and she ends up in the hospital because of it, will you ever find out what caused it?
The web is being made accessible for AI, not people [OSnews]
The Svelte web framework recently added a section to its documentation site addressed, cheerfully, to artificial intelligences: “If you’re an artificial intelligence, or trying to teach one how to use Svelte, we offer the documentation in plaintext format. Beep boop.” Svelte is participating in a broader movement to make the web legible and navigable to AI systems. The specific convention it adopted, llms.txt, is just one piece of this effort. From Model Context Protocol (MCP) servers that give AI agents structured access to tools and services, to Vercel’s proposal to include LLM instructions in HTML, the trend is clear. The modern web, originally built for sighted humans using browsers, is now being redesigned for a new kind of user.
What these developers are offering their AI visitors is essentially an accessibility accommodation. Yet, the framing on Svelte’s site sends an unfortunate message. When the audience is AI, accommodation is offered with a wink. Beep boop! But when the audience is a disabled person, it has historically been treated as an afterthought. Structured, concise text-based representations of complex content are almost exactly the kind of accommodation that blind and low-vision screen reader users have spent decades requesting from web developers, largely in vain. The Web Content Accessibility Guidelines (WCAG) have required semantic, machine-readable HTML for decades. Yet, a 2026 study of the top million webpages found accessibility flaws in over 95% of sites.
↫ Frank Elavsky at Tech Policy Press
Pachinko machines are treated more humanely than people with disabilities. Yep, sounds about Silicon Valley to me.
Krissy Has a New Toy [Whatever]


Out here in the boonies, many of our neighbors have golf carts that they use for very short trips not on the official roads, like going to visit friends, or hauling their trash cans from their houses at the end of a long driveway to the curb, and then back again. Krissy has always wanted a golf cart, and, now that we have the second garage and thus covered space for such a vehicle, she has one. Here you see her modeling it with her friend Karen.
She is very happy to have a golf cart of her own, and I am very happy she is very happy, because I know how much she paid for it and therefore will not feel too bad the next time I buy a guitar.
— JS
California Steps Back From Dangerous Expansion of its Age-Gating Law [Deeplinks]
The California legislature has stepped back from a plan that would have expanded its age-gating law, removing language that could have compounded serious threats to users’ speech, privacy and security just to browse the internet. A.B. 1856, authored by Assemblymember Buffy Wicks, will now move forward through the legislature without its most problematic pieces.
EFF still believes the underlying law that A.B. 1856 amends, A.B. 1043, is unconstitutional. Signed into law in 2025 (and effective January of 2027), A.B. 1043 requires all operating systems and app stores to collect users’ ages, place them in various age brackets and then block young people from lawful speech and services depending on their age. We also believe that even though A.B. 1043 does not require age verification, the liability it creates for operating systems and app stores—including fining operating systems up to $7,500 per affected child for violating the law—will push those services to verify users’ ages. In practice, that could lead to more ID checks, more biometric scanning, more invasive data collection and risk of breach, and more barriers to adults’ and young people’s lawful speech.
However, we appreciate that the Legislature has abandoned its plan to expand this problematic age-gating framework to browsers and websites. This would have significantly expanded this dangerous law before it even took effect. We thank the author and committee staff for recognizing these harms and not moving forward with this language.
On top of that, EFF is pleased that an earlier amendment to A.B 1856 reduced the threat to the open-source community by exempting open-source operating systems. Given these changes, EFF has removed its opposition to A.B. 1856. We appreciate the author for listening to concerns from advocates, developers and others about the effect it would have on open-source development and also around expanding this problematic framework.
To be clear, we still believe the law passed last year threatens online anonymity, privacy, and security. A.B. 1043 is one of a troubling wave of proposals that encourage—or, in some cases, outright require—age verification. Our position on this is clear: no one should have to provide or verify their age to access the internet. Once users’ personal data is collected, it can easily be leaked, hacked, or misused. No matter the method, every age verification system demands that people hand over their sensitive and immutable personal information to link their offline identity to their online activity. That’s a bad deal for us all.
Age-gating mandates are reshaping the internet in ways that are invasive, dangerous, and deeply unnecessary. But users are not powerless! We can challenge these laws, protect our digital rights, and build a safer digital world for all internet users, no matter their ages. This resource hub can help—so explore, share, and join us in the fight for a better internet.
Most Smart Watches, Rings, and Bands Lack Basic Transparency Reports and Key Privacy Features [Deeplinks]
Oura Rings, Garmin GPS fitness watches, Apple Watches, Whoop bands—every year, more and more tech devices are promising to monitor our health and fitness, guide us toward healthier living, and provide useful health metrics to take to our doctors. But few of these tools provide the sorts of privacy and security promises we demand from all technology, let alone tech that captures personal health data. It’s time they step up and start providing transparency reports and stronger encryption options.
Surveys suggest that around 40 percent of people in the United States own some sort of commercially available wearable health device. Despite being marketed as health devices, they have no special health-related privacy protections that one might hope for. The companies who make these devices can and do collect an abundance of data, and many of them share that data with third-parties for marketing or to influence insurance rates, or use it for their own purposes, like training artificial intelligence models.
Health data is increasingly an important part of law enforcement or government investigations. Wearable data has been critical in a number of cases, where information about heart rate and steps was used to determine the whereabouts of individuals. And the surveillance company Penlink calls fitness trackers and wearables an “overlooked source” for law enforcement since they tend to show movement patterns and changes in heart rates. Law enforcement can try to get access to this data through subpoenas or warrants.
There are many potential privacy issues with these sorts of devices, including whether the companies who make them share or sell information to third-parties. But here we are choosing to focus on two facets we’re concerned with around health data itself: 1) whether the company shares information with law enforcement and governments and 2) if they offer end-to-end encryption, which means the company itself can’t access that health data to begin with.
Reading through dozens of product review sites we narrowed our research in on ten companies that seem to make the majority of recommended consumer health products on the market:
We reviewed each company’s public facing policies, then emailed them to confirm those findings. Here’s what we found.
Companies should provide transparency reports of how often they provide data to the government, including information about whether it’s an official demand or an unofficial request. We have been calling on tech companies to publish transparency reports for a long time, but the practice is still rare across the industry. That’s especially true with fitness gadgets.
Only two of the companies we surveyed, Apple and Google (which also owns Fitbit), currently publish transparency reports. Apple, Google, and Whoop promise to notify users of law enforcement requests in publicly available documentation.
Oura now does too, after an update to their privacy policy in June 2026 that was perhaps prompted by a series of requests from journalist Zack Whittaker. In that same update and in an email to us, Oura promises that it is “actively evaluating ways to provide greater visibility into how we handle these requests, like through a transparency report.” This is promising, and we hope the company agrees that transparency reports are the best option moving forward.
Any company that handles data that’s of interest to law enforcement and governments owes it to their users to publish transparency reports and, when legally possible, notify users when that data is requested.
Similarly, Suunto does not currently publish transparency reports, but in an email reply to our questions the company did express an openness to potentially doing so, stating, “We continuously evaluate our transparency practices and may publish additional information, such as a transparency report, in the future if we believe it would provide meaningful value for users and support our data protection efforts.” We hope they do, as these sorts of reports are a useful metric for all of us to better understand if and when our data can potentially be accessed by law enforcement.
We could not find instances where the other companies publicly state a policy around notification or transparency reports, and no others replied to our email questions.
Any company that handles data that’s of interest to law enforcement and governments owes it to their users to publish transparency reports and, when legally possible, notify users when that data is requested. This is especially true of personal health data, which can reveal our movements, and be used to infer details about what we’re doing at any given moment.
End-to-end encryption is a method to ensure that your personal data is only accessible by you, and not the company who makes the device and manages the cloud storage. End-to-end encryption is usually used to refer to message encryption in communication apps, like Signal or WhatsApp, but can also refer to data storage. For example, many password managers use end-to-end encryption, and Ring implemented it for its cameras after we pushed for it. There’s no reason it can’t be offered for wearables too.
In the case of health data from wearable devices, it’s a way to store data in the cloud so that information can be synced and backed up between your device and an app on your phone in a way where only your devices can access it.
Support for end-to-end encryption is more rare than transparency reports.
The Apple Watch, at least with data that’s stored in the Health app, is the only popular fitness wearable that supports end-to-end encryption, and it’s enabled by default for all users (you are required to have two-factor authentication enabled as well, but that is also on by default for most accounts).
However, Apple Watch owners should remember that this protection is only for data stored in the Apple Health app. If you use other apps on your watch, or choose to share data with third-parties, like Strava, or if you’re sharing data with other wearables, like an Oura ring, that data is likely not end-to-end encrypted by the third-party company.
Support for end-to-end encryption is more rare than transparency reports.
And that’s it. Apple is the only one. No other popular consumer health wearable offers end-to-end encryption for the data it collects and stores online. Not Google. Not Garmin. Not Oura. Most of these companies instead offer encryption in transit and at rest, but this means those companies can still see and use your data. This is the industry standard, but it doesn’t have to be.
Another option would be more robust local-storage options. Some devices we looked at, like a handful of Garmin and Polar watches, can operate on the watch itself without syncing data to the cloud, but some models are limited in capability and cannot sync to an app without storing data online. More robust options for limiting the data to just the wearable and the phone app it's synced to would be a privacy improvement. For example, the Apple Watch has the option to disable iCloud sharing in Apple Health, which will keep the data only on your phone. It’s the only wearable we found that offers this feature without using a third-party app like Gadgetbridge or by physically connecting the wearable to a computer with a USB cable and transferring activity files over manually.
The general lack of local-only options or end-to-end encryption is a major privacy oversight, especially when you consider these devices collect heart rate, track sleep, and can log your location while also calculating a variety of health metrics supposedly intuiting everything from anxiety to your fitness “age.”
We understand that it’s technically more difficult to implement end-to-end encryption than other sorts of cloud storage, and comes with some limitations that may affect a user’s experience with a product. It also makes certain types of AI-related features harder to implement, since they’d typically need to work on-device (either in the app or the wearable device itself). Because of that, we believe an option for end-to-end encryption or local-only storage of the data collected by a wearable is the least companies can do. This way, those who want to use these devices can do so with the choice to either accept some privacy risks, or choose a more locked down option.
If you’re a user of a fitness wearable from any of the companies we’ve reached out to, or any other one, don’t be shy in asking for these sorts of features. In the rare cases a company offers a feature request page, use it—like for Garmin, Polar, Suunto, and Whoop. And when those types of outlets aren’t offered, don’t shy away from general contact pages, like those offered by Amazfit and Oura, or on community subreddits.
The companies that make these wearables, whether they’re designed for fitness or health, need to improve. At the bare minimum, companies need to publish transparency reports detailing how often they receive requests from law enforcement and commit to notifying users whenever that happens.
It’s also well past the time for more companies to offer end-to-end encryption for the health data they’re storing. We acknowledge that this may be a trade-off for some features, like social networking features, but it should be up to users to decide if they’re willing to make those trade-offs. This level of privacy is an appealing feature that benefits users in myriad ways and more companies can set themselves apart by committing to this level of privacy.
Health data is some of the most personal data we produce, and most wearables companies are behind the times when it comes to basic privacy practices and transparency. Now’s the time to improve those practices.
A Writing Exercise I Did Today I Figured I’d Share [Whatever]
I like to play pickleball with my mom in the
mornings. It’s not an everyday thing, but when we
do, I enjoy it. Every time we play, I always notice the ants on the
court. It’s really only when I bend down to pick the ball up,
but I always see them scurrying away from the bright yellow sphere
and the bottom of my sneakers.
I try not to think about how many of them I accidentally step on as I play a match or two. How many do I crush as I return my mother’s serve? Though I try not to linger on the thoughts of killing ants, I pick up the ball so often I’m given no break from the train of thought.
I don’t want to cause harm, I just want to play the game. But by playing, I’m inherently causing suffering. I want to enjoy my activity, but I’m ending the lives of innocent creatures. Well, as innocent as an ant can be, I suppose. The morality of killing ants, or bugs in general, is surely debatable, but I just know that it’s not something I particularly want to be an active part of. And yet I am consistently.
It’s not lost on me that pickleball isn’t the only time this kind of thing happens. When I run through the grass at home with my dog, what am I stepping on without even realizing? She bounds throughout the yard, happy as can be, no thoughts given to what crawls beneath her paws. Why can’t I be as ignorant, and as happy?
I’ve hit fireflies while driving, their smeared glow fading on my windshield. Once something beautiful, twinkling in the tree lines, ended by my hand. Not directly, necessarily, but certainly not indirectly. More directly than not, really, but lacking intention, of course. But does intention matter in these situations? Maybe it does, but the pulverized bug would never know it if it did.
The raccoon’s eyes shine in my headlights as the inevitable bump makes me sick to my stomach. Why did it have to be in the road just then? Why didn’t it move? Why did it have to be so dark out? It’s not fair, but the raccoon does not dwell on the concept of fairness. It suffers and dies. I can only hope the latter comes sooner rather than later.
A sea turtle 2,000 miles away chokes on my plastic straw. It was from my iced latte, the kind I get every day. It’s from a local shop! I’m doing my part to support businesses in my community! They get their beans from a brand that does not believe in such community. The beans have been touched by enslaved hands I will never see. I got coconut flavor!
Today I tried a new recipe. It had blueberries in it. Earlier this week I saw a video on Instagram of immigrant farm workers being detained by ICE. It was a blueberry farm. My cookies turned out amazing. I’ll share the recipe online and tune out the cries of those being persecuted the best I can.
I say all this like it’s revolutionary to realize that your existence inherently causes suffering. That our society is based on suffering. It’s not new, it’s not revolutionary, and I’ve known it for as long as I can remember. We all know it.
Despite the monotony of both the world’s suffering and of my life that benefits from such egregiousness, it still eats at me. Some days more than others. Today is one of those days.
From the ants on the court to the literal slaves and the wage slaves that made my coffee, my day is made all the better by partaking in the suffering of others. It’s a heavy burden to be alive. To live a normal life. A normal life of pickleball and cartons of blueberries. I hate it so but I don’t want to die. I don’t want to give up coffee or berries or pickleball with my mom.
I am just lucky to be the one who benefits and not the one who suffers.
-AMS
Don’t Neglect the Operational Groundwork [Radar]
Autonomous agents are moving faster
than the field’s ability to govern them, and catching up
requires more than better prompts or bigger sandboxes. At
O’Reilly’s recent AI Superstream focused on OpenClaw
and the broader ecosystem of locally run and self-hosted AI agents,
five speakers, each working at a different layer of the stack,
explored patterns for addressing many of the challenges developers
will face implementing an agentic system, from risky third-party
extensions, hallucinated compliance, and spaghetti codebases only
an AI can read to cost overruns from misconfigured models, supply
chain attacks, and worse.
As host Alistair Croll noted during the event, we can get better
and better with nondeterministic technology, but we’ll never
be 100% certain it’s working. The harder it gets to inspect
what’s running, the more the governance layer matters. That
work is unglamorous, mostly invisible to end users, and probably
more important than any model capability improvement shipping this
quarter.
Eran Sandler, founder of Canyon Road and the team behind AgentSH, opened his talk by running through a list of common ways agents can be compromised, including prompt injection, malicious files, unsafe tools, compromised packages, installed skills, and model mistakes. Most AI security thinking focuses on the first one and ignores the other five, but “guarding the input box does not guard the action,” Eran explained.
His advice is enforcement at the execution layer, the boundary between the agent’s intent and the operating system that carries it out. Container isolation limits blast radius, Eran acknowledged, but it doesn’t make decisions. “Walls keep things in. They don’t make judgment calls.”
To illustrate the point, he installed a simulated malicious package, the kind that could arrive bundled with a routine task like “build me a sales prediction model.” Then he queried AgentSH’s deny log and pulled up a list of what actually happened while the agent was busy congratulating itself, including an attempted skill mutation, a blocked call to an external domain, and reads of .env secrets and SSH keys. “Transcripts might lie,” he says. “Models hallucinate compliance all the time. You can tell them in your rules files, please don’t touch this file, and they’ll still do it.” Without execution-layer controls, Eran said, “you’re hoping the model behaves. With it, you can prove what happened.”
A recent audit of ClawHub found over 900 malicious skills, which at the time meant nearly 20% of total packages were risky. Most of these skills look professional, with documentation, high download counts, and user ratings. Kesha Williams, Keysoft founder and head of AI, audited one live—a typosquat of the real ClawHub CLI tool. (It used all lowercase where the legitimate package uses camel case.) The skill had more than 8,000 downloads before it was removed.
Here’s how it worked. The
prerequisites section asked users to install a fake dependency
called open-claw-core and then referenced a
password-protected zip file from GitHub (the password was
“openclaw”) specifically to bypass automated scanning.
For macOS, it echoed a legitimate-looking install command that
actually decoded a base64 string and piped it to bash.
“It looks like a skill you could actually need and use,” Kesha pointed out. “But once you really dig in and read what it’s actually doing, that is not a skill you want to install on your system.”
A good defense starts with two things
most users skip: reading the skill Markdown file before installing
it and configuring the toolsDeny section of the
OpenClaw config to limit a skill’s access. If a summarizer
skill needs exec, that’s suspicious, Kesha said.
Block it. She also showed how to restrict the 50-plus bundled
skills that ship with OpenClaw, most of which users haven’t
reviewed. The skillsAllowed configuration lets you
determine exactly which bundled skills stay active.
The open source software supply chain has always had trust problems, but the friction of traditional package management meant you at least needed technical knowledge to participate. Skills written in Markdown and installed with a single command lower that bar significantly. “Right now,” Kesha explained, the best policy for anyone extending their agent with third-party tools is to “keep a human in the loop and do your own due diligence.”
Most OpenClaw risk is the result of operational hygiene failures that happen in the first hour after installation, argues Erik Hanchett, a developer advocate at AWS and the creator of the Program with Erik channel. There are thousands of OpenClaw instances currently exposed on the public internet because users didn’t check the gateway bind mode after setup. As Erik demonstrated, the default should be loopback (localhost), but a user who deploys on a VPS and sets the gateway to LAN may inadvertently expose their instance. The fix takes two minutes, but most people never do it.
That’s recommendation one on
Erik’s five-point checklist. The others include pinning to a
stable version rather than always updating to the latest (a
crowdsourced stability tracker at Is It Stable? can
help), configuring fallback models to avoid burning through
expensive frontier tokens on routine tasks, writing a real SOUL.md
rather than rushing through the onboarding prompts, and setting up
backup of workspace files to a private GitHub repo before anything
breaks. He also shared tips on context management, such as using
/new to start fresh sessions rather than accumulating
one long conversation, and using /compact when
sessions grow large enough to affect performance. Those are the
kind of operational details that don’t appear in
documentation but matter in daily use.
The Docker and Kubernetes eras produced the same pattern: powerful infrastructure technology deployed by enthusiastic early adopters who hadn’t always thought through the operational defaults. The problems Erik described—exposed dashboards, runaway token costs, and memory that resets unexpectedly—are the most common reasons people abandon agentic tools after a few weeks. The good news is they’re eminently fixable with the right guidance.
Ari Joury, CEO of Wangari Global, is working to solve the question that most enterprises experimenting with agents are probably asking themselves: How should we handle autonomous agents that operate in environments where being wrong has legal consequences?
Wangari Global builds financial reporting automation for institutional clients. However, LLMs are optimized for plausibility, not accuracy. In financial services, that gap is a compliance risk. Ari gave an example of AI output that sounded correct. . .until a client read it and “told [the company] it was complete nonsense.”
In response, Ari and his team stopped treating the AI as a magic box and engineered a framework to ensure veracity. Numbers are now calculated with hard-coded deterministic code, then agents verify the math for plausibility. A separate agentic layer generates commentary, and another critiques it. Humans approve or reject the output, and every rejection becomes a training signal for future iterations.
Kyle Balmer closed things out with a demonstration of his agent-assisted process for content production for his AI with Kyle channel, addressing the economic incentive structure driving agent adoption outside software development. While he’s found autonomous agents to be economically transformative, the system only works if you design human input and review into it deliberately, which Kyle illustrated in a workflow that distinguished between automated and human processes.
His daily workflow converts a one-hour livestream into 20 to 30 derivative assets, including a newsletter, five to eight short-form videos, carousels, and a long-form YouTube video. The whole system runs on roughly $200 a month, and Kyle estimates that translates to roughly $1,000–$2,000 worth of potential customers entering his funnel daily.
The process is not fully automated: Kyle injects himself into the system at various steps throughout. He chooses the topic. He records voice notes with his actual opinions. He delivers the livestream pulling those thoughts together into clear arguments. He rewrites the AI-generated newsletter draft using his own voice. He records the short-form video scripts himself rather than using an AI avatar. The AI handles research, briefing, slide generation, script drafting, and the feedback loop that improves output over time, but the human provides the signal.
“I have tested with fully automated AI content,” he says. “It does not work. It is slop. And people know it’s slop.”
The New Software Lifecycle [Radar]
The following article originally appeared on Addy Osmani’s blog and is being republished here with the author’s permission.
I cowrote a Google whitepaper about how AI is changing the software lifecycle. I’m not going to summarize the whole thing. Instead, here are the handful of ideas in it I think actually matter, plus six figures you’re welcome to reuse.
Google published “The New SDLC With Vibe Coding” this week. I cowrote it with Shubham Saboo and Sokratis Kartakis, and it’s the first in a short series.
It’s a Day 1 paper, so the early pages cover the basics: what an agent is, what “vibe coding” means, and why the job is moving from writing code to judging it. If you read this blog, you already have all of that. I’m going to skip it and write about the parts I think are worth your time, with six of the figures pulled out. Reuse the figures wherever you like.
Here’s the framing from the paper that I keep coming back to: An agent is a model plus a harness.
The model is one input. Everything else is the harness: the instructions and rule files, the tools and MCP servers, the sandboxes it runs in, the orchestration logic that spawns subagents and routes between models, the hooks that run deterministic code at set points, and the observability that tells you when it’s drifting. The paper’s rough split is 10% model, 90% harness. That sounds high until you’ve spent a week debugging one.
The model is the engine. The harness is the car,
the road, and the traffic laws.
A couple of public numbers make this concrete. On Terminal Bench 2.0, one team moved a coding agent from outside the top 30 into the top 5 by changing only the harness, with the same model underneath. A separate experiment at LangChain added 13.7 points on the same benchmark by changing just the system prompt, tools, and middleware around a fixed model. Neither touched the model.
So when an agent does something dumb, I’ve learned to debug the harness first. Usually it’s a missing tool, a rule I wrote too loosely, a guardrail I forgot, or a context window full of junk. Most agent failures are configuration failures. I find that encouraging, because configuration is the part I can fix today, without waiting for a better model. The model will get swapped out under the harness sooner or later anyway. I’ve written this up at more length as harness engineering and the factory model.
If the harness is the system, context engineering is the most important knob inside it. The paper sorts agent context into six types: instructions, knowledge, memory, examples, tools and guardrails. The interesting decision, the one that shows up on your bill, is what goes in static versus dynamic context.
Static context is loaded on every turn, so
it’s reliable and expensive. Dynamic context is loaded on
demand, so you only pay for what a task needs.
Static context is loaded every turn:
system instructions, rule files (AGENTS.md,
CLAUDE.md, GEMINI.md), global memory,
core guardrails. It’s reliable, and it’s expensive,
because you pay for it on every single call. Dynamic context is
loaded on demand: skills that fire when a task matches, tool
results, or documents pulled from RAG. You only pay for the bits a
given task touches.
Get that balance wrong in one direction and you burn tokens and bury the signal. Wrong in the other and the agent forgets the rules that keep it safe. The paper’s advice, which I agree with, is to treat the boundary as a real architectural decision: reviewed in a pull request, versioned like code.
The trick that makes dynamic context scale is agent skills with progressive disclosure. The agent sees a little metadata at startup, loads the full instructions when a task matches, and only pulls in the heavy reference material when it actually needs it. That’s how one agent can carry dozens of skills and still only pay for the one it’s using.
You can sit anywhere on the spectrum from vibe coding to agentic engineering with the same agent. The thing that decides where you land is verification.
The right spot on the spectrum depends on the
stakes. The skill is knowing where to draw the line for each
task.
There are two mechanisms. Tests cover the deterministic parts: this input, that output. Evals cover the parts that aren’t deterministic, and the paper splits them in a way I found useful. Output evaluation asks whether the final result is correct. Trajectory evaluation asks whether the path it took to get there, the tool calls and the reasoning, was sound. You want both. An answer that looks right but skipped its checks is more dangerous than one that’s obviously broken.
If I had to hand a leader one line from the paper, it’s this: Set the bar at the eval, not the demo. A demo shows an agent can work once. An eval suite with a real rubric shows it works reliably. I keep making this argument; see “Agentic Code Review.”
AI compresses the lifecycle, but unevenly, and the unevenness is the whole story. Implementation drops from weeks to hours. Requirements, architecture, and verification stay slow because they’re judgment work. So specification quality becomes the bottleneck, and verification moves to the middle.
Same phases, different bottlenecks, different
proportions.
Phase by phase:
Requirements stop being a document you hand between teams. They become a conversation that produces a spec and a first prototype at the same time. The agent drafts user stories from a brief, surfaces edge cases, and turns a description into something that runs in minutes.
Architecture is the most stubbornly human phase. Trade-offs like consistency versus availability depend on business context the model can’t fully see. The developer’s job becomes making and documenting the structural calls the agent then implements.
Implementation is where the gains and the caveats both live. Surveys put the productivity gain at 25% to 39%. A METR study found experienced developers going 19% slower on some tasks once you count the time spent checking and fixing. Both are true. The honest summary is that AI turns implementation from writing into reviewing.
Testing and QA flips around. Your tests and evals become the main way you tell the agent what “correct” means, wired into a loop: run against a benchmark, cluster the failures, fix the prompt or tool that caused them, check against a regression suite, and watch production for new ones.
Maintenance is the one I think is most underrated. Code that was “too risky to touch” because only its authors understood it can now be read, refactored, and modernized by an agent. The migrations and deprecation cleanups that never happened because they were tedious and risky start happening.
The ceiling on all of this is still the 80% problem: Agents get the first 80% of a feature fast, and the last 20%, the edge cases and the seams between systems, still need context the models usually don’t have.
The number that matters to a leader isn’t velocity; it’s total cost of ownership. The AI era splits it in a way that flips the usual intuition about which option is cheap.
Past the crossover, vibe coding costs 3x to 10x
more per feature. How long the code has to live decides whether you
ever get there.
Vibe coding is cheap up front and expensive to run. You pay almost nothing to start: a subscription and some prompts. Then you pay later. Token burn, from throwing unstructured files at the model and asking it to fix its own mistakes. A maintenance tax, when someone has to reverse-engineer the ad hoc code months later. Security cleanup, because fast generation produces vulnerabilities about as fast as it produces features. Agentic engineering flips that: more up front (schemas, tests, structured context), less per feature after.
The “vibe coding costs 3x to 10x more per feature” crossover is illustrative, not a measured constant. The part I want developers to take away is that context engineering and model routing are financial levers, not just technical ones. You can’t pass a 100,000-token repo into every prompt and expect it to scale. Route the hard reasoning to a big model and the routine work, test generation, code review, and CI checks, to a small cheap one. The quality holds and the bill comes down. That’s the money side of what I’ve called the orchestration tax.
This is the part of the paper I’m watching most closely. The same terminal workflow that spits out a throwaway script can now produce a production agent, in the same place, often by talking to the coding agent you were already using.
Building, evaluating, and deploying a real agent, with persistent memory, scoped permissions, eval coverage, and observability, used to be a separate stack and a separate job. Now it folds into the loop you already run. Google’s Agents CLI is built around this. After a one-time install, your coding agent picks up skills for the whole lifecycle, and you drive it in plain language.
# one-time setup
uvx google-agents-cli setup
# then, in your coding agent:
> Build a support agent that answers questions from our docs.
> Evaluate it on the FAQ dataset.
> Deploy it to Agent Engine.
Behind that one instruction, it scaffolds the project, writes the code, generates an eval set, runs it, deploys to a managed runtime, and reports back. The prototype from your laptop yesterday becomes the production agent serving users today, with no rewrite. Coordination between agents runs on open standards: MCP for tools, A2A for handing work to other agents.
There’s one experiment in the paper I keep mentioning to people. An Anthropic team had a group of agents build a working C compiler in Rust over two weeks, with humans setting direction and reviewing rather than writing the code. That’s roughly the shape of where this is heading.
Day to day you switch between two modes the paper calls the “conductor” and the “orchestrator.” The conductor is real-time and in the IDE, keystroke by keystroke, good for exploring and for code you don’t know yet. The orchestrator is async: You hand a goal to one or more agents and review what comes back—it’s good for well-specified work like migrations or test generation. The tooling does both now, sometimes in the same hour. I think the move from conductor to orchestrator is a skills shift before it’s a tooling one.
One more figure, and this one isn’t for you. It’s for the people you’re trying to bring along: the exec who still thinks this is fancy autocomplete or the colleague who hasn’t made the jump.
Each generation kept what came before and raised
the ceiling on what one engineer could do.
It has the adoption numbers that tend to end the “Is this real yet?” argument. As of early 2026, 85% of professional developers use AI coding agents regularly, 51% use them daily, and roughly 41% of new code is AI-generated.
The paper closes with a longer set of recommendations for individuals, leaders and organizations. I won’t repeat them all here.
If there’s one line to take from it, it’s that AI amplifies whatever engineering culture it lands in, the good parts and the bad parts both. Generation is mostly solved now. The work that’s left is specification and verification, and the systems that hold them together. That’s the part I’d get good at.
You can read the full paper here.
Enjoyed this? Go deeper in Beyond Vibe Coding, my O’Reilly book on AI-assisted and agentic engineering: specs, harnesses, evals, context, and shipping production-grade software.
🚫 Don't Let Congress Age-Gate the Internet | EFFector 38.13 [Deeplinks]
The effort to age gate the internet is back in Washington—and now it has a new name. Recently passed by the House of Representatives, the KIDS Act is a sprawling package of proposals to control what we can see and say online. Supporters claim the KIDS Act is needed to protect minors online. But if lawmakers really want to make the internet safer, why are they encouraging more surveillance instead of protecting our privacy? We dive into this question with our EFFector newsletter.
For over 35 years, EFFector has been your guide to
understanding the intersection of technology, civil liberties, and
the law. This issue covers a
victory for location privacy in the Supreme Court, disturbing
developments in the
militarization of domestic drones, and a
controversial Congressional bill to control what we can see and
say online.
Prefer to listen in? EFFector is now available on all major podcast platforms. This time, we're chatting with EFF Senior Policy Analyst Joe Mullin on what would happen to the open internet if the KIDS Act becomes law. You can find the episode and subscribe on your podcast platform of choice:
Want to protect your right to online anonymity and access to the open web? Sign up for EFF's EFFector newsletter for updates, ways to take action, and new merch drops. You can also fuel the fight for privacy and free speech online when you support EFF today!
The Big Idea: Vonda N. McIntyre [Whatever]

Though the author of The Curve of the World has passed, her story lives on. Her editor, Nisi Shawl, is here to take us through what she believes Vonda N. McIntyre’s Big Idea was. Let’s have a look, and pay our respects in the process.
NISI SHAWL (EDITOR):
We may never truly know what the
Big Idea behind Vonda N. McIntyre’s last novel was. Two weeks
after she completed a final draft of that novel, The Curve of
the World, Vonda died. We can ask ourselves what she was
trying to do as many times as we want, but the file drawers full of
notes she left behind are empty of the answer to that
question.
Vonda wrote change-the-world
science fiction. Like her friend, Clarion classmate, and Pacific
Northwest neighbor Octavia Butler, she faced life’s
challenges head on and with a high-functioning imagination as her
tool and weapon, and rigorous research as her resource. Which maybe
comes across as a little grim?
But apply all that discipline to
speculating about the bull-leaping, bare-breasted matriarchs of
long-vanished Minoan civilization and (if you’re Vonda) you
get fascinating results: a mind-stretching, 408-page epic. Starting
their ocean voyage from the homey Mediterranean waters surrounding
the Cretan archipelago, the trade-and-diplomacy-focused crew of the
Flying Fish sail halfway around the globe, encountering a sea
monster, volcanoes, a mummy king, and slave-driving pirates as the
ship makes her way to the North Pacific’s Neah
Bay.
Which sounds like your standard
adventure tale, right? But what’s so intensely cool about
The Curve of the World is how it’s not that. Not
standard. Not at all. It’s not a Hero’s Journey-type
deal in which our protagonists conquer foreign lands by virtue of
their physical might or intellectual superiority or due to some
inherent divine right.
Because unlike, for instance, the
ostensibly Christian conquistadores claiming ownership of Florida
and Mexico and basically half the Western Hemisphere, the Minoans
aboard Flying Fish represent a culture based on cooperation, trust,
and mutualism. It practiced DEI from the get-go.
My best guess is that this was
Vonda’s Big Idea: How would a deeply egalitarian society
interact with other sorts of societies? Vonda’s alt-Minoans
parlay with bloody-handed Mesoamericans. They trade peacefully with
sword-wielding tribes of Amazon warriors. They maintain their
fairness, their inclusiveness, their love of interdependence, their
core feminist principles, all this in the face of murderous
aggression. So that’s what I think it was.
And why should it matter what I
think Vonda thought? Well, the way the editorial process for this
book went, it matters quite a lot. As author and Aqueduct Press
founder L. Timmel Duchamp puts it, I stood “in loco
Vondae.”
You see, the manuscript file that
gets turned in to a book’s publisher may include the word
“final” in its name, but it’s not genuinely final
at that point. If you’ve ever had a book you wrote published
you know how these things go. The copyeditor has questions about
spelling names consistently throughout the text; the managing
editor has questions about a character’s locations and travel
times. So on and so forth. Aqueduct asked those questions of
me.
To me that meant I needed to
immerse myself in as much Vonda-ness as I could conjure up. I read
and re-read her old and new work. I fondled my eight examples of
the beaded sea-creatures she crocheted ceaselessly, gorgeous and
glittering creations she generously bestowed upon her family,
friends, and fen. And I dallied in memories of meeting her and
witnessing firsthand her no-nonsense approach to life, her
restaurant recommendations and pronouncements on crows and prowess
with video cameras.
Then, faced with page after page
of queries about Curve, I did my best to answer as she would have
answered and choose as she would have chosen. I did my best to
first absorb and then project her voice, and along with everyone
else involved, to preserve it.
Maybe if you read The Curve of
the World you can tell me whether we got that part right. Is
that Vonda talking to you from beyond death? And what about my
guess? Is it at all accurate to say that the Big Idea behind this
book is how an extremely woke civilization can triumph over violent
authoritarians? And is that hope I see really there?
The Curve of the World: Amazon
Free Software Directory meeting on IRC: Friday, September 4, starting at 12:00 EDT (16:00 UTC) [Planet GNU]
Join the FSF and friends on Friday, September 4 from 12:00 to 15:00 EDT (16:00 to 19:00 UTC) to help improve the Free Software Directory.
[$] Topics in filesystem testing [LWN.net]
It should come as no surprise that a gathering of filesystem developers would discuss filesystem testing; it has been a mainstay of the Linux Storage, Filesystem, Memory Management, and BPF Summit over the years and the 2026 summit was no exception. Ted Ts'o led the discussion this time; he had a few different topics to raise, including his perception of increasing regressions for ext4 in the stable kernels and what can be done to help reduce them. As with other similar sessions at the summit over the years, there is a lot of interest in collaborating on test inputs and outputs, but finding a way to centralize that information has so far eluded the filesystem community.
Local DoS attack vectors in seunshare 3.10 (SUSE Security Team Blog) [LWN.net]
The SUSE Security Team Blog has a post with an analysis of seunshare, which is used by SELinux to confine untrusted programs. During a review of version 3.10 of the program, the team identified two local Denial-of-Service (DoS) vectors.
Since seunshare is supposed to run on SELinux-enabled systems, it is important to understand what kind of privilege escalation can be achieved when vulnerabilities are exploited in a setuid-root binary like this. Many SELinux-enabled systems, such as Fedora and openSUSE, ship with the "targeted" SELinux policy by default. This policy is focused on confining well-known system services, but assigns an unconfined SELinux context to interactive users by default to achieve a balance between security and usability.
There is currently no domain transition from the unconfined domain to the more restricted seunshare_t defined in the SELinux policy for seunshare. This means the execution of seunshare continues in the unconfined domain. Thus in the context of attacks carried out by interactive users, the impact of the vulnerabilities below will be a root-like privilege escalation despite the system running in SELinux enforced mode.
See the post for the full write-up of the team's discoveries and timeline. The vulnerabilities have been fixed in version 3.11.
Free Software Directory meeting on IRC: Friday, August 28, starting at 12:00 EDT (16:00 UTC) [Planet GNU]
Join the FSF and friends on Friday, August 28 from 12:00 to 15:00 EDT (16:00 to 19:00 UTC) to help improve the Free Software Directory.
Free Software Directory meeting on IRC: Friday, August 21, starting at 12:00 EDT (16:00 UTC) [Planet GNU]
Free Software Directory meeting on IRC: Friday, August 21, starting at 12:00 EDT (16:00 UTC)
Free Software Directory meeting on IRC: Friday, August 14, starting at 12:00 EDT (16:00 UTC) [Planet GNU]
Join the FSF and friends on Friday, August 14 from 12:00 to 15:00 EDT (16:00 to 19:00 UTC) to help improve the Free Software Directory.
Free Software Directory meeting on IRC: Friday, August 7, starting at 12:00 EDT (16:00 UTC) [Planet GNU]
Join the FSF and friends on Friday, August 7 from 12:00 to 15:00 EDT (16:00 to 19:00 UTC) to help improve the Free Software Directory.
Free Software Directory meeting on IRC: Friday, July 31, starting at 12:00 EDT (16:00 UTC) [Events]
Join the FSF and friends on Friday, July 31 from 12:00 to 15:00 EDT (16:00 to 19:00 UTC) to help improve the Free Software Directory.
Free Software Directory meeting on IRC: Friday, July 24, starting at 12:00 EDT (16:00 UTC) [Events]
Join the FSF and friends on Friday, July 24 from 12:00 to 15:00 EDT (16:00 to 19:00 UTC) to help improve the Free Software Directory.
The case of the invalid function pointer when shutting down the display control panel [The Old New Thing]
The number one crash in the display control panel looks like this:
rax=ffffffff924bbde0 rbx=0000000000000001 rcx=0000000000030440 rdx=0000000000000002 rsi=0000000000030440 rdi=0000000080006011 rip=00007ffac835cd1e rsp=000000155e48e3f8 rbp=000000155e48e749 r8=0000000000000000 r9=0000000000000000 r10=007fffffffe41b69 r11=00007df502390000 r12=0000000000000000 r13=0000000000000000 r14=0000000000000002 r15=0000000000000000 iopl=0 nv up ei pl nz na pe nc cs=0033 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010206 ntdll!LdrpDispatchUserCallTarget+0xe: 00007fff`924acd1e mov r11,qword ptr [r11+r10*8] ds:04007df5`0159db48=???????????????? 0:000> k Call Site ntdll!LdrpDispatchUserCallTarget+0xe user32!UserCallWinProcCheckWow+0x2bd user32!DispatchClientMessage+0x9c user32!__fnDWORD+0x33 ntdll!KiUserCallbackDispatcherContinue win32u!ZwUserDestroyWindow+0x14 comctl32!_RealPropertySheet+0x36d comctl32!_PropertySheet+0x47 Display!PropertySheetW+0x5d Display!AdvancedSettingSheetHelper+0x3be Display!ShowAdapterSettings+0x89 rundll32!CallRunDllFunction+0x1c rundll32!wWinMain+0x2bf rundll32!__wmainCRTStartup+0x1c9 kernel32!BaseThreadInitThunk+0x14 ntdll!RtlUserThreadStart+0x21
From the stack, we see that we have a display adapter settings property sheet. We are destroying it, and we crash trying to validate the window procedure address.
We saw some time ago that you can pull out the bad address by inspection.
0:000> u .-e . ntdll!LdrpDispatchUserCallTarget: 00007fff`924acd10 mov r11,qword ptr [ntdll+0x001813a8] 00007fff`924acd17 mov r10,rax 00007fff`924acd1a shr r10,9 00007fff`924acd1e mov r11,qword ptr [r11+r10*8]
The register that is the source of the shift is
rax, so that’s the function pointer. And from
the register dump, we see that the address is
rax=ffffffff924bbde0
Yeah, that address doesn’t look like a valid function pointer.
On 64-bit systems, user-mode pointers have low addresses (which
start with 0000), and kernel-mode pointers have high
addresses (which start with ffff). So this function
pointer is clearly invalid for user mode.
Maybe we can fix it so it’s valid again. Let’s see what code addresses are valid in this process.
0:000> lm start end module name 00000001`80000000 00000001`80043000 contoso 00007ff6`44570000 00007ff6`44587000 rundll32 00007fff`6a4f0000 00007fff`6a6b7000 d3d9 00007fff`6e600000 00007fff`6e6a9000 comctl32_7fff6e600000 00007fff`6f5d0000 00007fff`6f5e5000 pcacli 00007fff`753b0000 00007fff`753c1000 sfc_os ... 00007fff`91020000 00007fff`910f0000 comdlg32 00007fff`912b0000 00007fff`915e6000 combase 00007fff`91600000 00007fff`91794000 user32 00007fff`917a0000 00007fff`91852000 kernel32 00007fff`918e0000 00007fff`91989000 SHCore 00007fff`91990000 00007fff`91ae6000 ole32 00007fff`91af0000 00007fff`91b16000 gdi32 00007fff`91b20000 00007fff`91bc3000 advapi32 00007fff`91bd0000 00007fff`91c67000 sechost 00007fff`91c70000 00007fff`91cc2000 shlwapi 00007fff`91cd0000 00007fff`91ced000 imagehlp 00007fff`91d50000 00007fff`921c0000 setupapi 00007fff`92220000 00007fff`92355000 msctf 00007fff`92420000 00007fff`92610000 ntdll ...
Ny suspicion is that the function pointer got truncated to a
32-bit value, and then was sign-extended back up to a 64-bit value.
So we are looking for valid function pointers of the form
xxxxxxxx`924bbde0. In the above list of valid code
addresses, the only ones that have the lower bits in the
92xxxxxx range all have a high 32 bits of
00007fff, so let’s plug that in and see if we
get a window procedure.
0:000> ln 7fff924bbde0 (00007fff`924bbde0) ntdll!NtdllButtonWndProc_A | (00007fff`924bbdf0) ntdll!NtdllButtonWndProc_W
Jackpot.
So the caller probably subclassed a window, and then tried to restore the original window procedure, but messed up and restored only the bottom 32 bits.
But who could that be?
0:000> k Call Site ntdll!LdrpICallHandler+0xf ntdll!RtlpExecuteHandlerForException+0xf ntdll!RtlDispatchException+0x219 ntdll!KiUserExceptionDispatch+0x2e ntdll!LdrpDispatchUserCallTarget+0xe user32!UserCallWinProcCheckWow+0x2bd user32!DispatchClientMessage+0x9c user32!__fnDWORD+0x33 ntdll!KiUserCallbackDispatcherContinue win32u!ZwUserDestroyWindow+0x14 comctl32!_RealPropertySheet+0x36d comctl32!_PropertySheet+0x47 Display!PropertySheetW+0x5d Display!AdvancedSettingSheetHelper+0x3be Display!ShowAdapterSettings+0x89 rundll32!CallRunDllFunction+0x1c rundll32!wWinMain+0x2bf rundll32!__wmainCRTStartup+0x1c9 kernel32!BaseThreadInitThunk+0x14 ntdll!RtlUserThreadStart+0x21
This is a property sheet, so we should be able to extract the pages of the property sheet. (Note: Requires internal Microsoft symbols, so you won’t be able to do this at home.)
0:000> .frame d
09 00000017`85a7e820 00007fff`86e60349 Display!AdvancedSettingSheetHelper+0x3be
0:000> dv
hwndParent = <value unavailable>
psh = struct _PROPSHEETHEADERW_V2
szMonitor = wchar_t [140] "Generic PnP Monitor"
rPages = struct _PSP *[100]
iResult = 0n0
The desktop background control panel is extensible, and the way
that a plug-in adds a page to the desktop background control panel
is by handling the
IShellPropSheetExt::AddPages method and calling the provided
“page adding function” with a
HPROPSHEETPAGE. What that function does is add the
HPROPSHEETPAGE to the pages in the property sheet. (We
can see that there’s room for 100 of them in the
rPages.)
And the psh is the
PROPSHEETHEADER.
0:000> ?? psh
struct _PROPSHEETHEADERW_V2
+0x000 dwSize : 0x60
+0x004 dwFlags : 0x2000001
+0x008 hwndParent : 0x00000000`000401aa HWND__
+0x010 hInstance : 0x00007fff`86e50000 HINSTANCE__
+0x018 hIcon : (null)
+0x020 pszCaption : 0x00000017`85a7f100 "Generic PnP Monitor and Contoso Chipset"
+0x028 nPages : 4
+0x030 nStartPage : 0
+0x038 ppsp : 0x00000017`85a7ec70 _PROPSHEETPAGEW
+0x038 phpage : 0x00000017`85a7ec70 -> 0x000001d5`4e1aac90 _PSP
We see that there are four pages, so we can inspect the first
four HPROPSHEETPAGEs in rPages.
And hey look, we have an array of HPROPSHEETPAGE
structures
0:000> ?? psh.phpage[0] struct _PSP * 0x000001d5`4e1aac90 0:000> ?? psh.phpage[1] struct _PSP * 0x000001d5`4e19e470 0:000> ?? psh.phpage[2] struct _PSP * 0x000001d5`4e19e520 0:000> ?? psh.phpage[3] struct _PSP * 0x000001d5`4e1d26d0
The HPROPSHEETPAGE is an opaque structure, but we
can dump it and look for interesting things, for entertainment
purposes only.
0:000> dps 0x000001d5`4e1aac90 l4 000001d5`4e1aac90 000001d5`4e1aac60 000001d5`4e1aac98 00000000`00000000 000001d5`4e1aaca0 00004088`00000068 000001d5`4e1aaca8 00007fff`88d70000 deskadp 0:000> dps 0x000001d5`4e19e470 l4 000001d5`4e19e470 000001d5`4e19e440 000001d5`4e19e478 00000000`00000000 000001d5`4e19e480 00004088`00000068 000001d5`4e19e488 00007fff`893e0000 deskmon 0:000> dps 0x000001d5`4e19e520 l4 000001d5`4e19e520 000001d5`4e19e4f0 000001d5`4e19e528 00000000`00000000 000001d5`4e19e530 000040c8`00000068 000001d5`4e19e538 00007fff`86e30000 colorui 0:000> dps 0x000001d5`4e1d26d0 l4 000001d5`4e1d26d0 000001d5`4e1bcb30 000001d5`4e1d26d8 000001d5`4e1d26a0 000001d5`4e1d26e0 0000008a`00000068 000001d5`4e1d26e8 00000001`80000000 contoso
There are a bunch of HMODULEs here, which are
probably the modules that the property sheet page came from. The
first three come with Windows. The last one apparently is Contoso.
Let’s focus on at last one.
After the first two values (which look like pointers), we have
0x00000068 which is not-coincidentally
sizeof(PROPSHEETPAGE), so I’m going to guess
that this is where the system stores the PROPSHEETPAGE
that the handle was created from.
Note: Note that this is an implementation detail and should be used only for debugging purposes. Please don’t write programs that rely on this, because it can change.¹
0:000> dt comctl32!_PROPSHEETPAGEW 000001d5`4e1d26e0
+0x000 dwSize : 0x68
+0x004 dwFlags : 0x8a
+0x008 hInstance : 0x00000001`80000000 HINSTANCE__
+0x010 pszTemplate : 0x00000000`00000589 "--- memory read error at address 0x00000000`00000589 ---"
+0x010 pResource : 0x00000000`00000589 DLGTEMPLATE
+0x018 hIcon : 0x00000000`000503b9 HICON__
+0x018 pszIcon : 0x00000000`000503b9 "--- memory read error at address 0x00000000`000503b9 ---"
+0x020 pszTitle : 0x000001d5`4e19cde0 "?????"
+0x028 pfnDlgProc : 0x00000001`800047ac contoso+0x47ac
+0x030 lParam : 0n2015682301296
+0x038 pfnCallback : (null)
+0x040 pcRefParent : (null)
+0x048 pszHeaderTitle : (null)
+0x050 pszHeaderSubTitle : (null)
+0x058 hActCtx : (null)
+0x060 hbmHeader : (null)
+0x060 pszbmHeader : (null)
The dialog procedure is 0x00000001`800047ac.
I’m hoping I can reverse-engineer it enough to see the place
where it subclassed the button incorrectly.
00000001`800047ac mov [rsp+8],rbx
00000001`800047b1 mov [rsp+10h],rbp
00000001`800047b6 mov [rsp+18h],rsi
00000001`800047bb push rdi
00000001`800047bc sub rsp,30h
00000001`800047c0 mov rdi,r9 ; rdi = r9 = lParam
00000001`800047c3 mov rbp,r8 ; rbp = r8 = wParam
00000001`800047c6 mov esi,edx ; esi = edx = message
00000001`800047c8 mov rbx,rcx ; rbx = rcx = hdlg
00000001`800047cb cmp edx,110h ; Q: WM_INITDIALOG?
00000001`800047d1 jne 00000001`800047e2 ; N: Skip
00000001`800047d3 mov r8,[r9+30h] ; Y: r8 = ((PROPSHEETPAGE*)r9)->lParam
00000001`800047d7 mov edx,0FFFFFFEBh ; edx = -21
; ecx = hdlg (unchanged)
00000001`800047dc call [00000001`8002b4a0] ; mystery function 1
00000001`800047e2 mov edx,0FFFFFFEBh ; edx = -21
00000001`800047e7 mov rcx,rbx ; rcx = hdlg
00000001`800047ea call [00000001`8002b480] ; mystery function 2
00000001`800047f0 test rax,rax ; Q: Failed?
00000001`800047f3 je 00000001`8000480b ; Y: Bail out
00000001`800047f5 mov r9,rbp ; param4 = wParam
00000001`800047f8 mov r8d,esi ; param3 = message
00000001`800047fb mov rdx,rbx ; param2 = hdlg
00000001`800047fe mov rcx,rax ; param1 = from mystery function 2
00000001`80004801 mov [rsp+20h],rdi ; param5 = lParam
00000001`80004806 call 00000001`800045fc ; mystery function 3
00000001`8000480b mov rbx,[rsp+40h] ; restore registers
00000001`80004810 mov rbp,[rsp+48h]
00000001`80004815 mov rsi,[rsp+50h]
00000001`8000481a add rsp,30h
00000001`8000481e pop rdi
00000001`8000481f ret ; done
We know that the lParam parameter to the
WM_INITDIALOG message is the value passed as the
“parameter” to functions like
CreateDialogParam, and specifically for property
sheets, it’s a pointer to a PROPSHEETPAGE. And
we saw from the structure dump above that offset 0x30
is the lParam.
From the structure of this function, it’s clear that the
magic value -21 is GWLP_USERDATA, mystery
function 1 is SetWindowLongPtr, and mystery function 2
is GetWindowLongPtr. This is a standard pattern for
dialog box functions, and it’s common to use a wrapper
function.
The real dialog procedure is the third mystery function, so let’s look at that.
00000001`800045fc mov [rsp+8],rbx 00000001`80004601 mov [rsp+10h],rbp 00000001`80004606 mov [rsp+18h],rsi 00000001`8000460b push rdi 00000001`8000460c push r12 00000001`8000460e push r13 00000001`80004610 sub rsp,20h 00000001`80004614 mov rsi,[rsp+60h] ; rsi = lParam 00000001`80004619 mov rbp,r9 ; rbp = wParam 00000001`8000461c mov ebx,r8d ; ebx = message 00000001`8000461f mov r13,rdx ; r13 = hdlg 00000001`80004622 mov rdi,rcx ; rdi = this 00000001`80004625 cmp r8d,2Bh ; Q: WM_DRAWITEM? 00000001`80004629 jne 00000001`80004685 ; N: Skip
After the initial register spilling and saving, it checks if the
message is 0x2B: WM_DRAWITEM.
That’s not particularly interesting to us, so let’s
assume it’s not.
00000001`80004685 sub ebx,2 ; Q: WM_DESTROY? 00000001`80004688 je 00000001`8000470f
Ooh, the WM_DESTROY message is interesting.
It’s probably going to restore the original window procedure
in its WM_DESTROY handler, and that’s where we
hope to find the truncation.
00000001`8000470f mov rcx,[rdi+110h] ; rcx = something 00000001`80004716 movsxd rbx,dword ptr [00000001`80039c50] ; rbx = something 00000001`8000471d mov edx,668h ; ecx = some number 00000001`80004722 call [00000001`8002b4e0] ; mystery function 4 00000001`80004728 mov r8,rbx ; r8 = something 00000001`8000472b mov edx,0FFFFFFFCh ; edx = -12 00000001`80004730 mov rcx,rax ; rcx = function 4 retval 00000001`80004733 call [00000001`8002b4a0] ; mystery function 1 again
On receipt of the WM_DESTROY message, the code
starts by getting something out of the this pointer
(which we saw in the prologue was saved in rdi), and
loads some other thing from a global variable.
Next, it calls mystery function 00000001`8002b4e0
with 0x668 as the second parameter. Not sure what that
is, but we’ll keep it in mind.
Next, we set up for another function call, and this one we
recognize: 00000001`8002b4a0 is the import address
table entry for SetWindowLongPtr. We saw it in the
static dialog procedure.
The parameters are the window handle that was obtained from
mystery function 4, the constant -12, and the 32-bit
value we loaded from 00000001`80039c50. The mystery
function 4 was probably GetDlgItem. And
since we figured out that the function being called is
SetWindowLongPtr, the value -12 is
GWLP_WNDPROC.
The value being set is the third parameter, which was loaded by
movsxd dword ptr, which is a 32-bit to 64-bit
sign-extended load. This is a problem because the window procedure
is a 64-bit value.
I bet they loaded the value incorrectly.
0:000> dp 00000001`80039c50 l1 00000001`80039c50 00007fff`924bbde0
Hey look, it’s the full 64-bit pointer we were supposed to have used, except we messed up and truncated the pointer.
The C++ source code probably looked like this:
SetWindowLongPtr(GetDlgItem(m_hdlg, 0x668),
GWLP_WNDPROC, (LONG)g_originalWndProc);
The cast to LONG is what’s doing the
truncation and sign extension. It should be a cast to
LONG_PTR.
We can patch this into the binary after looking at the processor instruction encoding documentation.
The original instruction was
00000001`80004716 48631d33550300 movsxd rbx,dword ptr [00000001`80039c50]
The documentation says that the encoding for movxsd r64,
r/m32 is “REX.W + 63 /r”.
What we want is mov rbx, [00000001`80039c50], and
the documentation says that the encoding for mov r64,
r/m64 is “REX.W + 8B /r”.
So let’s patch the 63 to 8b.
0:000> eb 00000001`80004717 8b 0:000> u 00000001`80004716 l1 00000001`80004716 488b1d33550300 mov rbx,qword ptr [00000001`80039c50]
This is literally a one-byte bug fix.
Next time, we’ll speculate on how this bug arose.
Bonus reading: The decoy control panel.
¹ Back in the late 1990’s, we discovered a program
that reverse-engineered the internal data structures of the Windows
95 property sheet manager to the point where instead of passing an
HPROPSHEETPAGE that was created by the
CreatePropertySheetPage function, it
created fake HPROPSHEETPAGEs that it had constructed
manually in memory. This made adding support for Unicode property
sheets that much harder because the internal structure of
HPROPSHEETPAGEs changed in order to support both ANSI
and Unicode property sheet pages, and they were passing the old
version. The property sheet manager has to recognize that it is
being given a fake HPROPSHEETPAGE and convert it on
the fly to a real one.
The post The case of the invalid function pointer when shutting down the display control panel appeared first on The Old New Thing.
[$] Lockless MPSC FIFO queues for io_uring [LWN.net]
Processes that use io_uring tend to keep a lot of balls in the air; being able to have many operations underway at any given time is part of the point of that API in the first place. The io_uring subsystem must, as a result, keep track of a lot of tasks that have to be performed at the right time. In current kernels, io_uring uses a standard kernel linked-list primitive to track those work items. As of the 7.2 kernel release, though, io_uring will, instead, use a new lockless, multi-producer, single-consumer (MPSC) queue, resulting in some notable performance gains. Lockless algorithms tend to be tricky, but the one used here is relatively approachable and shows how these algorithms can work.
LibreLocal meetup in Noor, Iran [Events]
July 30, 2026 from 17:00–19:30 IRST.
Security updates for Wednesday [LWN.net]
Security updates have been issued by AlmaLinux (cifs-utils, corosync, cups, freerdp, git-lfs, go-fdo-client and go-fdo-server, go-toolset:rhel8, kernel, kernel-rt, libinput, libxml2, nginx:1.24, openssl, pacemaker, perl-DBI:1.641, php8.4, python-pillow, python3, and python3.12), Debian (grub2, libxfont, opam, and wolfssl), Fedora (freerdp, kernel, and prometheus), Mageia (imagemagick), Oracle (buildah, freerdp, gimp, kernel, nginx, openexr, openssl, perl-DBI, podman, vim, xorg-x11-server, and xorg-x11-server-Xwayland), Red Hat (python3.12), SUSE (afterburn, buildah, busybox, enc, freetype2-devel, go1.25, go1.25-openssl, go1.26-openssl, gosec, grafana, helm, krb5, kubernetes-old, libopenbabel8, libxml2, libxml2-16, nasm, openssl-3, patch, python-Authlib, python-mistune, python-soupsieve, python-sqlparse, python3-dulwich, python313-Pillow, rootlesskit, sbootutil-1, tomcat, and tomcat11), and Ubuntu (alsa-lib, dnsmasq, gnutls28, libheif, linux-aws, linux-fips, linux-lts-xenial, linux-gcp-5.15, linux-intel-iotg-5.15, linux-hwe-6.17, linux-raspi, mariadb, openvpn, python-httplib2, vim, and wget).
Many old shim versions are still accepted by secure boot [LWN.net]
The CMU CERT Coordination Center has put out an advisory that many exploitable versions of the shim binary, used to boot Linux on systems with UEFI secure boot enabled, were never added to the revocation list.
An attacker with administrative privileges or the ability to modify the boot process could use one of the vulnerable shim bootloaders to bypass Secure Boot protections and execute arbitrary code before the operating system loads. Code executed during this early boot phase may achieve persistent compromise of the platform, including the ability to load unsigned or malicious kernel components that can survive system reboots and, in some cases, operating system reinstallation.
The advisory contains a list of vulnerable shims.
CodeSOD: The Error Check [The Daily WTF]
Today's submission is less a WTF and more a, "Yeah, that'd annoy me too."
Stevie works in a code-base that's largely C, which means function return values are usually used to communicate to status codes. The standard:
BOOL success = someFunc();
if (!success) {// handle the error
If someFunc returns TRUE, we
succeeded, otherwise we failed.
There's nothing wrong with that convention. But there is something wrong with one of the long-time developers on the project, because they have their own idiom for doing this. And they've been around long enough that their approach is the convention other developers follow. It's not wrong, per se, just confusing:
BOOL error = someFunc();
if (error == FALSE)
{
//handle the error
errorCode = GetLastError();
//…
}
Yes, pretty much anywhere an error can happen, they check if
error == FALSE, and if that's true, they have an
error.
I'd say, "at least they're consistent", but they're not. It's the convention, sure, but nobody wrote this down as the convention. New developers come in all the time, and they start out writing code in a more "normal" pattern. But the existing code has its pattern, and there is a lot of it. It has a mass and an inertia that is stronger than any developer. They don't change the code, the code changes them.
While all the new rss.chat business is going on, the WordPress news site that I started in May is growing at a nice clip. Referrers used to pinpoint where flows like this came from, but they stopped doing that at some point. If you have any clues as to who's pointing to it now, please let me know so I can thank them. And if you know of any sites that are not in the feed list, that do a good job of covering WordPress news, please let me know that too.
A lot more people have tried out rss.chat now that we have a demo site, and they are looking for stuff that isn't there. I wrote a longish post on X this morning explaining. If you want the gist, this is a bootstrap, and rss.chat is primarly a writing surface and a timeline for the people who are using the specific site you're on. It's a writing surface for smallish groups of people, primarily, though I'm pretty sure you could build a massive site meant to serve millions. There will be readers, I'm sure of it, and I hope lots of them and lots of innovative new approaches. But splitting the social network software down the middle, we fulfill the "all parts replaceable" promise, and leave the door open for all kinds of developers to try out new ideas, from bigco devs to independent devs, and a jive programming. We, unlike other artists, welcome newcomers to our craft. We remember when we were new to this stuff and the wonder of being able to create software on our own. Everyone is welcome in rss-land, as long as there's mutual respect.
The Open Source Agent Toolkit in 2026 [Radar]
The following article originally appeared on Paolo Perrone’s Substack, The AI Engineer, and is being republished here with the author’s permission.
You spent three weeks shipping an agent. It worked in the demo. Then production hit, and you realized the framework you picked has no checkpointing, the memory layer is a flat vector dump with no temporal reasoning, the browser tool falls over on any site with a canvas element, and the eval suite is a Notion doc someone keeps forgetting to update.
The open source toolkit for building agents in 2026 has solved most of these problems. The catch is that it has solved each one in a dozen incompatible ways. The memory framework that wins LoCoMo (the standard long-conversation memory benchmark) runs 340x heavier per conversation than the runner-up, a difference no benchmark column shows. The same gap between benchmark score and production behavior shows up at every layer.
So the best way to zero in on the constraint your system will hit first under load: latency budget, audit trail, model portability, or language stack. Get this wrong and you rewrite your state schemas in week three.
If you read “The AI Agents Stack (2026 Edition),” this is the open source half. Same seven layers around the think-act-observe loop from “What Is an AI Agent?”: orchestration, memory, tool interface, browser/CUA, coding agents, evals and observability, and inference. Here’s where to start at each layer.
When choosing tools at each layer, ask three questions:
What’s the dominant constraint? Four constraints decide most layer picks. Latency budget is how many tokens or milliseconds you can spend per turn. Audit trail is whether every action has to be traceable for compliance. Model portability is how tied your stack gets to one provider. Language stack is whether your team is Python, TypeScript, or both. One of these usually dominates at each layer.
What’s the rip-out cost if you’re wrong? Swapping an MCP server changes one config line. Swapping orchestration rewrites your state schemas, your nodes, and your edges. The bigger the rewrite, the more you should pick by constraint first.
Is it open source or open core? Open core means the project ships under an open source license, but production features (multitenant auth, replication, SSO, audit logs) only run in the managed cloud product. The repo’s feature list tells you which side of the line you’re buying.
The orchestration layer runs the agent’s reasoning cycle. The LLM picks an action, the runtime executes it, the runtime observes the result, and the LLM picks again. If you skip a framework here, you write the loop yourself, which means reinventing retries, checkpointing, and human-in-the-loop gating before you ship.
LangGraph is the default for Python production work. Graph-based state machine, durable execution via PostgresSaver, time-travel debugging, and the largest verified enterprise list in the field (Klarna, Uber, LinkedIn, JPMorgan, Replit). Graph state maps onto what regulated industries need: Every state transition is an audit log entry, and any failed run rolls back to a prior node and replays from there. The ceiling: It’s verbose. A two-agent flow still needs a state schema, nodes, edges, and compilation. For “call three tools sequentially,” it’s overkill.
CrewAI has the lowest setup overhead of the four orchestration frameworks. You declare roles like researcher, writer, and reviewer, pick a coordination pattern, and run the crew with no state schema to define first. The ceiling: CrewAI optimizes for prototype velocity at the cost of production durability. The framework can’t resume crashed runs from where they failed, error handling lives at the crew level rather than per-node, and no inspectable state schema records what the agents decided and when. Teams move from CrewAI to LangGraph when production state management starts mattering more than the role metaphor.
Pydantic AI treats every agent output as a typed Pydantic model, so validation, retries, and downstream serialization come for free. FastAPI-style decorators for tools and dependencies. The ceiling: Pydantic has weaker multi-agent primitives than CrewAI or LangGraph. It’s the best fit when the agent is a single loop that has to return validated data to a downstream service.
Mastra is the TypeScript answer: agents, workflows, RAG, and evals in one package, built by the ex-Gatsby founders, designed to drop into existing Next.js apps without a Python sidecar. The ceiling: smaller ecosystem and fewer production case studies than LangGraph. Choose Mastra when the team is already on TypeScript end to end and rewriting in Python isn’t on the table.1
The vendor SDKs (Claude Agent SDK, OpenAI Agents SDK, Google ADK) belong here too. Each one removes orchestration friction and locks the agent to one provider’s API. Pick one if you’re already committed to that provider and not planning to swap models.
The context window isn’t memory. Even at 200K tokens, every turn pays for the entire conversation again, and nothing survives the session. Production agents in 2026 keep memory in a dedicated layer that lives outside the prompt.2
Mem0 memory can be scoped to a user (persists across all their sessions), a session (just this conversation), or an agent (shared across all users of one agent). Hybrid storage combines vectors and a graph, with mature SDKs that plug into LangGraph, CrewAI, and Mastra. The project has 48,000+ GitHub stars. Mem0’s ECAI 2025 paper benchmarked Mem0 against 10 alternatives on LoCoMo and reported 92% lower latency and 93% fewer tokens versus naive full-context (the baseline every team replaces by week two), which translates to roughly 14x cheaper inference at the same recall.3 The ceiling: Mem0 treats memory as retrieval, returning the most similar facts to a query. Temporal reasoning, like “what did the user say last week that contradicts what they said today,” needs a graph that tracks edges between facts with timestamps.4
Zep/Graphiti is the temporal graph option. The knowledge graph layer handles entity resolution: figuring out that “Alice,” “alice@acme.com,” and “the CEO” all refer to the same person. It also tracks how relationships change over time, so the agent can answer, “What did this customer’s status look like in Q2?” or “When did the contract owner switch?” The trade-off is that graph construction is expensive. Zep’s memory footprint per conversation runs past 600,000 tokens versus Mem0’s 1,764, and immediate postingestion retrieval often fails because correct answers only appear after background graph processing completes. Choose Zep when the agent needs to reason about history and you can wait seconds, not milliseconds, between turns.
Letta (formerly MemGPT) treats memory like an operating system. Main context is RAM, archival memory is disk, and the agent decides what to promote into RAM, archive to disk, or forget. It’s fully open source, model agnostic, and self-hosted from day one. The architecture extends an agent’s effective context far beyond the LLM’s native window by paging memory in and out, the same trick operating systems use to give programs more virtual memory than physical RAM. The ceiling: You run the storage layer yourself. Letta is harder to deploy than calling a hosted Mem0 endpoint and harder to debug because memory decisions happen inside the agent at runtime.5
Engineering lesson. “Memory” means two different things in an agent system, and using one tool for both breaks both. Runtime state is the agent’s scratchpad mid-task: which node it’s at, what tools it called, what intermediate results it has. LangGraph’s PostgresSaver writes this after every step, so a crashed run resumes from the last node. Knowledge memory is what the agent learned across sessions: preferences, prior questions, and facts about the user. Mem0 and Zep store this. Conflate them and you get an agent that resumes a crashed run correctly but forgets the user the moment they open a new session, or one that remembers the user but can’t recover when it crashes mid-task.
Two years ago this layer was function calling: Each provider had its own JSON schema, and each framework wrapped them differently; switching models meant rewriting your tools.
In 2026 this layer is MCP. The Model Context Protocol is the open standard the Claude Agent SDK uses, that OpenAI Agents SDK supports natively, that Google ADK integrates with, that every serious framework now ships a client for. If you’re writing tools today, you’re writing MCP servers. If MCP itself is fuzzy, “What Is MCP?” is the prerequisite.
There’s no framework to pick at this layer. The orchestration choice from layer 1 already decided how MCP integrates.
FastMCP is the Python framework for writing MCP servers fast. Decorator-based and async-first, it’s the closest thing to FastAPI for MCP. mcp-agent is an orchestration framework built around MCP as the primary tool interface. Server lifecycle, multiserver routing, and prompt context handling are built in. With LangGraph or CrewAI, you write that integration code yourself. It’s worth looking at when your agent connects to several MCP servers and the integration code starts becoming the bottleneck.
When the system the agent has to act on doesn’t expose an API, the toolkit has to act through screens. The 2026 field split into two architectural approaches: DOM-driven (parse the page, find elements, and click them) and vision-driven (screenshot the page, feed it to a vision model, and click pixels).
Browser Use is the Python default. With 50,000+ GitHub stars, it’s one of the fastest-growing open source AI projects of 2025–2026. The LLM gets full control of the browser through an agent loop and integrates with LangChain, CrewAI, and custom frameworks. The ceiling: Every step costs an LLM call, which is fine for novel tasks and brutal for repeated workflows. Production teams cache the repeated 80% in Playwright (the deterministic browser automation library) and leave Browser Use for the 20% that needs reasoning.
Stagehand is the TypeScript answer. It’s an open source, MIT-licensed SDK from Browserbase, built as a layer on top of Playwright. Four primitives let the developer keep AI inference for the steps that need reasoning and use scripted Playwright code for the rest. Stagehand v3 (February 2026) rewrote the engine on top of Chrome DevTools Protocol and ships 44% faster.6 The ceiling: Production deployment runs through Browserbase’s managed cloud. The open source SDK is the on-ramp.7
Skyvern is the vision-first option. Each task runs through a three-phase pipeline: Planner breaks the goal into steps, actor sends a screenshot to a vision model and clicks the coordinates it returns, and validator confirms the page changed. Skyvern scores 85.85% on WebVoyager 2.0, the strongest published score on form-filling tasks in domains where the DOM is unreliable: canvas elements, React virtual DOMs nested in iframes, or antibot machinery. That score still translates to roughly one in seven multistep tasks failing. The ceiling: Vision-driven stacks lag DOM-driven ones by 12–17 points on common tasks and cost 4–8 times more per step.8
The production pattern in 2026 wires both in: DOM-driven as the primary path, Skyvern or Anthropic Computer Use or OpenAI CUA as the escape hatch when selectors keep failing on canvas elements or antibot screens. Edge surfaces are one of the four agent failure modes, and we cover all four in “Why AI Agents Keep Failing in Production.”
Coding agents are a category of their own now. They write code, run it, debug it when it breaks, and read docs to figure out what they got wrong. This layer ships with three things the other six don’t: a sandboxed filesystem to write and edit code without escaping into the host, terminal access to run builds, tests, and linters, and a browser tool because half the work involves reading docs. The category also has its own benchmark, SWE-bench Verified, a curated set of real GitHub issues an agent must resolve into a working PR. For the closed-source comparison, see “Cursor vs Claude Code.”
OpenHands (formerly OpenDevin) is the production-grade autonomous option. It has 72,000+ GitHub stars, completed a $18.8M Series A, and is used in production at AMD, Apple, Google, Amazon, Netflix, and NVIDIA. The event-stream architecture moves through four states per loop: Agent reasons, agent emits an action, environment executes it, environment returns an observation. Each session runs in an isolated Docker sandbox. The benchmark question for this category is what percentage of real-world bug tickets the agent can resolve end to end without human input. OpenHands scores 53%+ on SWE-bench Verified with Claude 4.5 and up to 72% with Claude 4 on the published platform results. The ceiling: The agent has shell access. Review can’t live inside OpenHands; it has to live at the PR.9
Aider is the terminal-native option. The original open source coding agent, it has 35,000+ GitHub stars and 13,100+ commits across 93 releases. It’s Git-integrated by design: Every change becomes a commit with an auto-generated message that names what it touched, so the entire agent session is in your git history. Architect/Editor mode splits the work between two models: A stronger one plans the edit, while a cheaper one writes the code. The split cuts cost 30%–40% versus running a top-tier model on every token. Aider scores 32% on SWE-bench Verified with Claude 4.5, well below OpenHands, but it ships fewer surprises because every action lands in Git. The ceiling: It’s terminal-only. There’s no IDE integration and no project-wide context beyond what Aider parses from the files you pass it.
Cline is the VS Code-native answer. It’s fully open source and modelagnostic, with 38,000+ GitHub stars, and it’s the only option here with a meaningful market share inside VS Code teams. Plan Mode and Act Mode separate intent from execution: Plan Mode drafts the change list and pauses for approval, and Act Mode executes the approved plan. Every action is reviewable before it touches the codebase, which is the design point engineering managers ask about first. Choose Cline when the team lives in VS Code and human review on each step is required by policy. The ceiling: It’s IDE-locked. JetBrains or Neovim teams should look at Continue or the terminal tools above.
Most teams running production coding agents in 2026 run two: one commercial (Claude Code, Codex) for hard tasks and one open source for flexibility and outages. “How Cursor Actually Works” shows what the leading commercial coding agent actually does under the hood.
The evals and observability layer records what the agent did in production and tests what it can do before shipping. Tracing captures every LLM call, tool invocation, and cost, indexed by user and session, so when an output is wrong, you can replay the exact context that produced it. Evals are reproducible test suites the agent runs against fixed inputs with pass/fail criteria scored the same way every time. Production-grade agent teams in 2026 wire both in on day one. Skipping this layer is the most expensive mistake in agent engineering.
Langfuse is the open source observability default. It’s open core with a generous self-hosted tier and native integrations with LangGraph, CrewAI, OpenAI Agents SDK, and Mastra. Every LLM call, tool invocation, and cost gets traced and indexed. The ceiling: Managed retention, SSO, and advanced eval features run on the SaaS plan. The self-hosted version covers tracing and dashboards.
Arize Phoenix is the OpenTelemetry-native alternative. Traces flow into the same Grafana, Datadog, or Honeycomb dashboards the rest of your stack already uses, so agent telemetry sits next to your API and service traces instead of in a separate tool. It’s strong on RAG evals and retrieval quality. The ceiling: Phoenix doesn’t ship opinionated agent-specific defaults. The pipeline assembly is on you.
Inspect AI is the UK AI Security Institute’s open source eval framework. The institute wrote it for safety evals: testing whether the agent refuses jailbreaks, leaks PII, or generates unsafe content. Frontier labs now use it for capability and alignment benchmarking too. The ceiling: Inspect is for offline evaluation. If you also need to see what the agent is doing live in production, you’ll want Langfuse or Phoenix next to it.
Engineering lesson. Wire tracing in on Day 1, before the first user. Setting up Langfuse or Phoenix at project start is a couple of hours of config work. Without those records, debugging a production failure means guessing which prompt version, which user input, and which tool sequence produced it.
Every step an agent takes is at least one inference call, often more. The engine running those calls, the software wrapping the GPU, batching requests, and managing the KV cache, sets the cost floor for everything else. Hosted API agents inherit their provider’s engine. Self-hosted agents pick their own, and the pick determines what the agent costs to run at scale.
vLLM is the production serving default for open-weight models. Its core innovation is PagedAttention, a memory management trick that splits the KV cache into fixed-size blocks so multiple requests share GPU memory without wasted space. Combined with continuous batching, it produces the highest throughput-per-dollar in the field. The ceiling: vLLM is GPU only and optimization heavy, and it assumes the operator knows what KV cache means.
Ollama is the local default. After a one-line install, it downloads quantized models from a registry and exposes an OpenAI-compatible API. Quantization compresses weights from 16 bits down to 4 or 8, trading a small accuracy hit for fitting in laptop RAM. The ceiling: Ollama isn’t a production serving layer past a single user.
llama.cpp is the engine Ollama runs on top of. Pure C++ with no GPU dependency, it runs LLMs on CPU, Apple Silicon, Raspberry Pi, and anything else with enough RAM. The project also defined GGUF, the file format used to ship quantized open-weight models, so the same model file runs across every llama.cpp-based tool unchanged. The ceiling: CPU throughput sits well below GPU serving, which makes llama.cpp the right pick for local and offline workloads only.
SGLang is the newer challenger. Two design choices set it apart. First, when many requests share an opening prompt, SGLang caches the computation of that prefix once and reuses it, instead of recomputing it for every call. Second, when the agent needs JSON output, SGLang enforces the schema inside the inference engine itself, so the model can’t generate invalid JSON in the first place. On agent workloads, SGLang benchmarks faster than vLLM. The ceiling: There’s a smaller community and fewer integrations, and it’s less battle-tested than vLLM in production at scale.
“What Does NVIDIA Actually Do?” breaks down the hardware layer every engine in this section ultimately runs on.
The instinct when reading a seven-layer diagram is to assume the layers compose vertically: Pick layer 1, that constrains layer 2, which constrains layer 3, and the right toolkit is the one where every box fits together.
Most agent rewrites in 2026 trace back to a team that built on that assumption. No ecosystem is best in class at all seven layers, and the integrations between layers were never designed to compose. They meet at thin seams: a config file, an import, an HTTP call. . .
The seven layers are seven independent decisions. Each one has a dominant constraint that picks the winner. Four constraints decide most picks: latency budget, audit trail, model portability, and language stack.
The four constraints rarely point at the same winner. Latency-first stacks pull toward Mem0 and vLLM. Audit-first stacks pull toward LangGraph and Langfuse. Model portability pulls away from vendor SDKs. Language stack pulls toward Mastra or Pydantic AI. Trying to satisfy all four with one ecosystem means picking the average tool at every layer instead of the best one at each.
The reframe: An agent’s toolkit is seven small bets, each with a single dominant constraint, and each made independently. The teams shipping reliable agents in 2026 are the ones who picked the best tool per layer and accepted that integrating the seams is part of the job.
Before swapping any layer in a production agent, check this table first. The state column tells you how much you have to migrate. The lock-in column tells you what you’re giving up if you switch. The demo-to-prod column tells you how long the swap will actually take.
︎
︎
︎
︎
︎
︎
︎
︎
︎Issue 47 – Greta’s Wedding Pt. 2 – 01 [Comics Archive - Spinnyverse]
The post Issue 47 – Greta’s Wedding Pt. 2 – 01 appeared first on Spinnyverse.
A Video Screen That Is Also a Camera [Schneier on Security]
Researchers from ETH Zurich in Switzerland, however, managed to create a new type of pixel that can simultaneously do both. This hypercharged pixel, called a Fourier pixel, can generate and sense arbitrary light fields and tap into a pixel’s full potential for carrying information by manipulating light’s intensity, oscillation phases, and polarization. The team reported its findings in a paper published yesterday in Nature.
We are one step closer to 1984 technology:
The telescreen received and transmitted simultaneously. Any sound that Winston made, above the level of a very low whisper, would be picked up by it; moreover, so long as he remained within the field of vision which the metal plaque commanded, he could be seen as well as heard. There was of course no way of knowing whether you were being watched at any given moment.
Disposable software [Seth's Blog]
Even though it’s invisible, easily transported and weightless, software used to stick around. It took years to architect and build a complex bit of software, and thousands of people to help maintain it. Even a complex website could be seen as a durable technical asset.
Now, with Claude Code on everyone’s desk, new software is often easier to write than old software is to maintain.
No one gives a second thought to disposable cups or bottles–and we’re in the midst of an explosion of temporary and disposable software that will dwarf what came before.
And yet, one thing persists: The network.
When an organization is at the center of a network, it doesn’t matter if a competitor makes a fresh new piece of software. The network sticks around.
A vibrant network is more valuable than ever. People like us are here, doing things like this. Why would we go over there?
Rex Ready Player One, Part Five [Penny Arcade]
New Comic: Rex Ready Player One, Part Five
Steinar H. Gunderson: Looking at dpkg startup time [Planet Debian]

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”?
Russell Coker: libproc-processtable-perl in Debian [Planet Debian]
I’ve just filed a Debian bug report about libproc-processtable-perl giving bad errors when SE Linux denies access to files under /proc [1].
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.
Freexian Collaborators: Debian Contributions: Python 3.14 as default transition, DebConf 26 preparations, debvm, pconr and more! (by Anupa Ann Joseph) [Planet Debian]

Contributing to Debian is part of Freexian’s mission. This article covers the latest achievements of Freexian and their collaborators. All of this is made possible by organizations subscribing to our Long Term Support contracts and consulting services.
Debian has had Python 3.13 and 3.14 in unstable and
testing since December 2025, with Python 3.13 as the
default version (/usr/bin/python3 = 3.13). This gave
time for packages to implement support and detect issues in their
test suites.
A slot to transition to 3.14 as default was requested from the
release team in
March, and they indicated that we would likely be able to
schedule it in late June. In preparation, Stefano reviewed the open
bugs against Python interpreters and squashed some in uploads of
the latest point releases of Python: 3.13.14
and 3.14.6.
Also in June, Python 3.15.0
beta 2 and beta
3 released. Stefano uploaded these to Debian
experimental.
The 3.15 betas were reason to
attempt to revive review of a blocked upstream patch
to support Debian multiarch in stable ABI Python extensions, now
that Python 3.15 is adding a new stable ABI abi3t.
DebConf 26, the annual Debian Developer Conference, is being held in Santa Fe, Argentina, in July. Stefano Rivera, Antonio Terceiro, Lucas Kanashiro, Santiago Ruano and Anupa Ann Joseph contributed to the preparations for the event.
The debvm
tool used for creating and running ephemeral virtual machines saw a
number of small improvements. The requirement of having a
filesystem label has been removed in favor of using a uuid and
/etc/fstab is no longer created. A memory balloon is
enabled by default and this enables qemu to automatically release
free guest memory to the host. Booting Ubuntu VMs regressed as a
result of their use of uutils and has been fixed. The
--architecture flag is back to be able to better
support Hurd, which is a work-in-progress of Johannes Schauer Marin
Rodrigues. Thanks to Jochen Sprickerhof, you can more easily create
VMs for autopkgtest-virt-qemu using
--hook-dir=/usr/share/mmdebstrap/hooks/autopkgtest-create-qemu.
There also are a few documentation and error message improvements.
All of this is pending in git waiting to be uploaded once
development slows down. While booting a machine from
virtiofsd succeeded, turning the proof-of-concept into
production remains for later.
At DebConf25,
Helmut reported on a schroot substitute
called unschroot. The second iteration uses varlink IPC to construct a container.
That varlink API is now separated into a new project called
programmable
container runtime. It is meant to provide more flexibility in
constructing containers than established solutions such as the
unshare command from util-linux, bubblewrap or podman
provide while still managing repetitive complexity such as process
orchestration for the developer. A new example that uses this
infrastructure is
a better containment for mmdebstrap eliminating chroot escape.
There also is an
asyncvarlink/0.3.2 release taking steps to become more
maintainable in Debian to eventually get pconr into Debian.
python-pip, python-pipx,
hatchling, dh-python,
beautifulsoup4, python-virtualenv,
python-mitogen.snowball, snowball-data, and
pystemmerpo-debconf-manager:
Reviewed Catalan translations for 5 packages, submitted 6 packages.
Added a
draft blog/update about the po-debconf-manager project.The Flamingo Revolution protest in Albania [Richard Stallman's Political Notes]
The Guardian view on the flamingo revolution: Albanians are standing up for their rights, as well as for nature.
And also against the prime minister's evident surrender to the corrupter — a bad sign about any politician.
Urgent: US citizens call Big Banks not harass [Richard Stallman's Political Notes]
US citizens: call on big banks not to harass non-citizens for the bully.
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
Girl Genius for Wednesday, July 15, 2026 [Girl Genius]
The Girl Genius comic for Wednesday, July 15, 2026 has been posted.
Do Not Perceive Him [QC RSS v2]

"perceive" is one of those words I always misspell even though it follows the "i before e, except after c" rule
Dirk Eddelbuettel: qlcal 0.1.2 on CRAN: Fresh Upstream Updates [Planet Debian]

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.
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. If you like this or other open-source work I do, you can sponsor me at GitHub.
Haiku gets NetBSD’s NVMM, beta 6 release planned for August [OSnews]
Haiku has another buy month of development activity to detail, and there’s a big ticket item this time, even if the developers themselves don’t consider it so.
The thing that should be the biggest news item this month is that the GSoC 2024 work to port “NVMM”, the NetBSD Virtual Machine Monitor (which runs on more than just NetBSD, despite the name), providing hardware-accelerated virtualization support for QEMU, was finally merged. Unfortunately it still doesn’t fully work, so it’s still disabled by default: hence, it’s only a minor news item, unfortunately.
↫ waddlesplash on Haiku’s website
It may not work due to – so far – not well-understood problems causing any complex virtualised operating system to crash in a variety of ways, but since these problems seem related not to NVMM but Haiku itself, I still think this is a big piece of news. If the problems can be addressed, Haiku will have proper virtualisation, which is crazy to think about. There’s a forum thread in case you wish to help out with this effort.
Other than this major news, there’s the usual list of small fixes and changes, including preliminary work on USB Ethernet support, which, when working, could be very welcome news for people whose onboard Ethernet doesn’t work with Haiku. The team also believes a beta 6 might actually be released this August, but once again I’d like to underline that Haiku’s nightlies work just fine, and you really don’t need to wait for a beta.
People are starting to think twice about buying Facebook’s pervert glasses [OSnews]
I have yet to see any of these creepy camera glasses Facebook (and a few other companies) are selling. One of the many benefits of living in Arctic Sweden, where people are reserved, keep their their distance, and try not to draw attention to themselves, is that new technology fads don’t really permeate society here. The odds of me spotting one of these creepy predator glasses in my remote town are incredibly slim, and to me, that’s a feature, not a bug.
Meanwhile, in places where these creepy things can actually be found in the wild, a backlash is thankfully growing.
Will Kujawa, a freelance video producer, said that he has been thinking about buying a pair of Meta glasses with prescription lenses to film behind the scenes content during his shoots, but the online backlash has given him second thoughts. He says he was “blown away by how mean some of the people were” in response to his social media posts about considering buying a pair.
“I saw all these comments about if you wear those glasses you’re basically a predator or a creep, and I was like, ‘oh, maybe it’s not a good idea to have those,'” he told Engadget. But he says he understands why people have concerns. “I didn’t really think that through all the way … there are a lot of times where it’s not appropriate to wear cameras on your face. And even though I would have no intention of do[ing] anything creepy with them, it didn’t even occur to me [that] other people just assume that automatically.”
↫ Karissa Bell at Engadget
I can maybe see a use for these things in specific professional environments, but even then, obviously not ones made by Facebook, one of the, if not the creepiest companies in technology history. If I were to see anyone out here in the real world using one these things, I, too, would automatically assume that the guy (statistically speaking) wearing them is a creep. I can only imagine what the people most often targeted by creepy men would think encountering some rando wearing these.
Clearly, these things should be made illegal outside of specific professional environments where they could potentially be useful. While it’s impossible to stop tools like these from making their way into the hands of creeps, it at least provides the justice system with a clear method of nailing them to the wall. They didn’t get Al Capone for any of his violent crimes – they nailed him for tax evasion.
The GDID really isn’t the only way Microsoft can track Windows users [OSnews]
In what should be a surprise to absolutely nobody, Microsoft assigns a persistent identifier to every Windows installation, tying it to its user, and the company has no issues handing it over to law enforcement. Abhijith M B at windows Latest dove into the details, and it’s just as bad as you would expect.
Am I glad Stokes got caught? Yes, without hesitation. Thirty-five pages of a teenager bragging about diamond chains spelling out “HACK THE PLANET” while extorting a jewelry store don’t leave much room for sympathy, whatever role Microsoft’s telemetry played in building the case.
But that doesn’t make the GDID okay. Every company selling you software has some version of this, and a persistent device identity is a reasonable thing to build into activation and fraud systems. What gets me is that most people had never come across the term GDID before a federal court filing such as this. Microsoft wrote one sentence about it in an Azure Monitor reference table meant for enterprise IT admins pulling update reports, not for the 1.6 billion or so regular people whose PCs are generating this data.
You might be tech savvy enough to turn off Activity History, pick a local account, and strip out every scrap of optional telemetry, but none of it changes the fact that the identifier exists, and that it answers to your Microsoft Account instead of you. Microsoft only told the public about it once a court forced the issue.
↫ Abhijith M B at windows Latest
The thing is, even without this GDID, I can’t imagine Microsoft would have much trouble tying a Windows installation to a specific user. Consequently, I’m afraid the following is going to happen: this story gains even more traction, Microsoft removes the GDID, and everyone thinks the problem is resolved. Of course, in reality, any one of the hundreds of other metrics and data Microsoft collects can and will still be used in the exact same way as this GDID thing in this case.
If my experiences with Windows 11 weren’t clear enough – don’t use Windows. Just don’t.
demo.rss.chat: "This is a writing surface."
European Court: Apple Can Not Shirk Off its Interoperability Requirements [Deeplinks]
One of the best bulwarks against monopoly is interoperability—that is making a new product or service work with an existing product or service. Interoperability allows users, and not the manufacturers of their devices or largest player in a market, to decide what application best serves them. Unsurprisingly, companies like Apple have worked hard to resist interoperability requirements.
On July 8, the General Court of the European Union (General Court) ruled against Apple in several cases the company brought against the European Commission (joint cases), affirming the company’s obligations under the Digital Markets Act (DMA). Apple argued in the cases that it should be exempted from the law’s requirements especially with regards to interoperability on multiple grounds. We applaud the General Court’s decision, and congratulate the Free Software Foundation Europe (FSFE) as well as others who intervened in support of the Commission against Apple's attempt to shirk off its responsibilities, thus ensuring fair competition in European markets.
This is a clear and substantive win for developers and users in Europe. The stranglehold Apple exerts over its ‘walled garden’ is injurious for developers, users, and researchers alike. By confirming Apple’s obligations under the DMA, the General Court has ensured that developers will be given more choice on where they can publish their apps, and users will have more options to obtain apps which, for whatever reason, Apple dislikes. And researchers will have less roadblocks and hurdles to overcome in their studies of Apple’s OSes, particularly iOS, iPadOS, and watchOS.
Apple argues that the interoperability requirements will force it to lower the security standards that have led Apple products’ users to trust their devices. While this self-serving logic is not entirely without merit, it is far from the inevitable outcome. Especially with regards to the App Store, users can be given clear, informed choice when leaving the Apple ecosystem to obtain apps elsewhere. While we urge European courts to take Apple’s security concerns seriously, we’ve previously noted that this should not be used as a smokescreen to protect anticompetitive behavior.
Interoperability and security are not inherently at odds. When interoperable functionality is worked into the security model of a platform from the ground-up, a proper balance can be struck between two forces that are often falsely framed as naturally conflicting. While Apple OS platforms have not been built this way from the get-go, it is still possible, but takes more time to get it right. Here, the devil is in the implementation details.
Under the DMA, designation as a ‘gatekeeper’ is reserved for the biggest of Big Tech, companies that provide services deemed essential for businesses to reach end users. Apple is one of only seven companies that meet this designation, along with Alphabet, Amazon, Booking, ByteDance, Meta, and Microsoft. In its case, Apple argued that Article 6(7) of the DMA, specifying interoperability requirements for gatekeepers aimed at restoring fair competition, is unlawful in light of the Charter of Fundamental Rights of the European Union (specifically the right to property), and as such its designation as a gatekeeper subject to the requirements is unlawful and should be annulled as a result. In its ruling, the General Court rejected the argument as Article 6(7) does not form the legal basis of the designation.
Apple separately argues that the App Store fails to meet the requirements defining a core platform service (CPS), since the various stores (across iOS, iPadOS, watchOS, macOS) do not constitute a single platform. A company’s gatekeeper status relies on it providing a CPS that is an important gateway for business users to reach end users. Here, the implications of the argument are clear: remove service designation as CPSes, remove the gatekeeper status. The court rejected the argument on the basis that “irrespective of the device on which it was available, each of the App Stores was used for the same purpose, namely to intermediate between end users and business users in the distribution of applications and in-app digital content.”
Finally, the court rejected as inadmissible Apple’s argument that iMessage should not be classified as a number-independent interpersonal communication service (NIICS) constituting a CPS. This decision rested on the fact that the “classification does not, by itself, produce binding legal effects that bring about a change in Apple’s legal position” since iMessage was not listed as an “important gateway” in the designation decision and therefore was not subject to the DMA obligations.
In ruling against Apple in favor of the European Commission, the General Court has set an important precedent in ensuring competitive fairness and openness in the digital marketplace. The landmark effects of the DMA will serve to benefit all Europeans in the choice and freedom it affords them. Despite Big Tech’s legal challenges, these decisions build a strong foundation for a better digital future—a lesson which other regions should learn from and take note.
A Very Unimportant Experiment Regarding Nuts [Whatever]
Yesterday, I wanted a canister of nuts as a
snack from Kroger, and I bought this
Blue Diamond Honey Roasted Almond, Cashew, & Pistachio Mix.
I love honey roasted nuts, and cashews and pistachios are two of my
favorite nuts, so it sounded like a great mix. It was ten
dollars.
When I opened it at home, I looked in the canister and immediately felt like what I was seeing was 80% almonds. I could’ve guessed as much. Everyone knows cashews are pistachios are the real prize here. But then I wondered, was the mix really 80% almonds? It was time to count.
I dumped out the entire canister in a bowl and sorted through all three types of nuts. I know what you’re thinking. Isn’t this a huge waste of time? Well, it’s not that huge. It only took like five minutes. But… yeah, maybe. Anyways, guess how many there were of each nut?
Cashews came first, and I counted just about 65 cashews. I say just about because there’s always half-pieces or broken chunks. But I can confidently say that it contained roughly 65 cashews. As for the pistachios, there were more than I expected, getting up to 80 pistachios. They’re little, after all. Finally, the moment of truth. How many almonds made up this undoubtedly mostly-almond-mix? 150 almonds. My canister was just over half almonds, with the other two nuts making up around 25% each.
So, basically, there were twice as many almonds as there were the other two nuts. Absolutely fascinating. I was wrong about the mix being 80% almonds, but it’s definitely almondlicious.
I am curious to see if anyone else who gets this mix has a similar result. That’s all I have to say on the matter. Good day.
-AMS
Don’t Repeat NY’s 3D Printing Blunder [Deeplinks]
This year the state of New York had the dubious honor of being the first to pass a controversial provision to mandate all 3D printers come with surveillance and censorship. That means not only is there a ticking clock to protect every artist, researcher, engineer, and hobbyist in the state, but there is a real risk of other states thoughtlessly following suit—prior to the New York rules even taking effect.
We, along with many other experts, already warned about this bill buried in the state’s crowded budget process. Hundreds of our supporters and 3D printing enthusiasts in New York reached out to their representatives hoping to kill this farcical bill. While there were some welcome amendments in response to the outcry, Albany passed it anyway.
It might be well-intentioned, but bills like these sell a fantasy that can only have an untold negative impact on the privacy, free expression, and consumer rights of anyone using these general purpose devices. Behind the banner of reducing gun violence, which is nearly always committed with commercial firearms, New York lawmakers have passed draconian legislation that will let manufacturers lock in users and collect their data.
Now that the bill has passed and been signed by Governor Hochul, let’s look at two important ways the final legislation changed since we last wrote about it, and why states like California shouldn’t make the same mistake.
The New York bill includes language that criminalizes access to firearm print files, a proposal correctly dropped by states like Colorado due to First Amendment concerns. While this made it through to the passed legislation, a few wins were still gained.
Originally the legislation threatened felony charges for the storing and sharing of files, potentially impacting researchers, artists, and journalists with no intention of printing a firearm component. These charges were downgraded to a Class A misdemeanor.
Two provisions criminalized file sharing. The first of the two provisions criminalizing this file sharing, which pertains to the sale or distribution of files in the state, gained an important exception for when a sender has a reasonable belief that the recipient won’t illegally print these components. However the second provision, pertaining to criminalizing file possession, complicates this. Under 2.12 of the subpart, people who possess the file with intent to share the files do not clearly get this same reasonable belief exception.
In other words, if you share one of these files the actual sharing is covered by the exception, but the law makes it ambiguous whether possessing those same files is covered when you intend to share them.
While this exception could have created some breathing room for researchers and journalists operating in good faith, this slapdash bill language leaves plenty of ambiguity and potential speech-chilling effects. However, these changes do offer a modicum of harm reduction in this unconstitutional law.
Originally the bill had a strange requirement for all 3D printers and Computer Numerical Control, or CNC, machines to be sold and delivered face-to-face, with no exception. That would have meant a major barrier to access, particularly for people in agricultural and rural areas of the state who uniquely benefit from in-home fabrication and repair. It also would have meant a major inconvenience for businesses using these devices. For everyone though, it meant fewer retailers to choose from and facing more stigma for using these devices.
Fortunately this was dropped from the bill entirely.
In addition to being buried in the complicated legislative process of the NY budget and avoiding proper scrutiny, this bill also kicked the can down the road in determining what exactly is being mandated. In many respects, legislators passed a vibe. We’ll see how the actual law be developed over the next year by a working group with no mandated transparency to the public. Further, they have no obligation to ensure consumer safeguards in developing this state-mandated censorware.
We are still concerned by the possibility of a biased working group acting in the interest of manufacturers or facing pressure to accept consumer harms in the standards they produce. Our remaining hope is this working group convened by the Department of State and the state university system is composed of actual experts who are aware of how unfeasible and harmful this mandate is, and prevent it from being realized.
New York is the first to go down this path of state-mandated censorship and surveillance software on 3D printers, but it’s far from the only one to entertain it. It is now more urgent that we fiercely oppose this trend in other states, like California, as they attempt to join the bandwagon—before even seeing the real-world impacts.
Don’t Let California Repeat NY’s Mistake
We cannot allow this to be the foundation for future restrictions on speech and design, or serve as a playbook for the state and corporations to wrest control over our tools.
rss.chat is meant to be like MacWrite was on early Macs, give developers something to think about and lots of prior art for them to steal. All we want in return is interop. ;-)
Speaking of AI, someone at Amazon decided I needed the new AI version of Alexa. I hate it. It's slow and it always makes the same mistake when I start breakfast. I say "Alexa WNYC" to which it responds, after a few seconds, I will now play you a mix of your favorite songs From Amazon Music." So first thing in the morning I have to tell this stranger in my freaking kitchen no I meant WNYC, which it then turns me over to. I learned on FB that if you tell it to go away it will, after a short discussion about how much you will be missing. Yeah sure, go away, goodbye, please no more of this.
Rob Kennedy has posted the story of the birth of Linux.org — one of the earliest Linux-related web sites — and its more recent rebirth.
The site was founded in May 1994 by Michael McLagan, at a time when Linux itself was barely three years old. Linus Torvalds had only just released it to the world, there was no real way for a newcomer to find their footing, no search engines, no Wikipedia, none of the infrastructure people take for granted now for figuring out a new piece of technology. Michael built linux.org to fill that gap, a place for people to learn about Linux and follow the movement as it grew.
If Bernie Sanders or AOC knew what we were doing here they would be turning somersaults. The tech right now is too esoteric. When they can join a community that works like this does, with full text, and the ability to communicate from one pod to another. Pod actually is a good name for what I have in mind, that and karass.
Someone on Masto who I blocked used a nasty word to descript rss.chat. Let me be really clear here, this is an act of authorship by me. Claude is helping, a lot -- I doubt if I could have done this without its help, certainly not in the amount of time it has taken so far. And Claude could not have done it without me driving. It's basically good at a few things, but this is new territory, even I am feeling my way through this project. In many parts we have lots of prior art, but in how the whole thing hangs together, this is new territory. Having Claude is like having a car would be to someone who couldn't drive. All of a sudden you can go places. It takes a while to learn how to use that power, and so far the learning has not come close to leveling off. You couldn't find someone better in the world to do this project, and I'm working on this every day.
Upcoming Speaking Engagements [Schneier on Security]
This is a current list of where and when I am scheduled to speak:
The list is maintained on this page.
I set up demo.rss.chat yesterday so people can try out the software. No guarantee that this is going to run for any period of time, so don't post things there that you want to be around for a long time.
The Big Idea: Arvind Ethan David [Whatever]

The world makes up stories and stories make up the world. Author Arvind Ethan David aims to challenge the narrative of some of these stories in the Big Idea for his newest novel, The Great Game. Follow along as he tells you about some of the greats, and questions if they’re really all they’re cracked up to be.
ARVIND ETHAN DAVID:
I Broke into Someone Else’s Universe. Here’s What I Found
In The Great Game, my hero, Balvinder Dev Singh, an Indian war veteran and aspiring British barrister, comes head-to-head with Sherlock Holmes, Winston Churchill and a feral teenager who may or may not be John Clayton, Lord of Greystoke Manor. My intention in the novel was to write an original thriller that was both satisfying in its own right, and perhaps has something interesting to say about empire, colonialism and the canon of British imperial literature.
Except, I knew I was running the risk that it might also look and sound a lot like fanfiction.
In my writing career so far, I’ve spent a lot of time adapting the work of writers whose work I revere. From Douglas Adams to Raymond Chandler, P. G. Wodehouse, and Neil Gaiman, I’ve been privileged to play in some big, extraordinary universes created by legends. There is nothing like writing in the marginalia of a maestro to force you to raise your game. To write a joke about physics that can stand next to one Douglas Adams wrote, to craft a simile that can hold its own next to Wodehouse, or to describe a dame who Raymond Chandler first described—these are hair-raising, teeth-grinding experiences, and I have the scars from surviving them.
Early in the process of writing the novel, that challenge was made by some who I love and respect — a bestselling author friend and my editor — both of whom suggested that my book might be viewed as less serious or less original because I was borrowing other people’s characters and settings. Basically they said, “folks might think you’re just doing derivative fanfic.”
That was of course not my intention, so I spent a lot of time thinking about it, but ultimately, I had to do what I had to do. To me, the whole point was to play in this particular canon. Here’s why.
Firstly, the idea that borrowing another’s universe is derivative is, it turns out, a comparatively recent convention, born of modern copyright law and perhaps some post-Romantic notion of the lone original genius. For most of the recorded history of literature, it was not the exception but the norm.
Ovid’s Metamorphoses is a kind of mash-up of all Greek myth. The Arthurian legends are the result of a constantly reinvented mixtape, spun by successive generations of authors and poets — from Chrétien de Troyes in the twelfth century to Malory in the fifteenth, to T. H. White and Lev Grossman in our own era — each reinventing the legend through the prism of their times, none of them having invented the universe they so beautifully inhabited.
Shakespeare, of course, made up almost none of his plots or characters, pillaging history, myth, and the work of other writers indiscriminately and without apology or acknowledgement—and we don’t consider him a less original or serious writer because of it.
Indeed, if you step back and think about what a story is, it makes total sense. Stories, in evolutionary terms, are the common currency, the shared atmosphere of culture and civilization. From every myth of creation to the excuse you give yourself for being habitually late, stories are the psyche’s scaffolding with which we navigate existence. So, of course, it makes sense that certain myths, certain stories become pervasive in our culture and, once pervasive, prove more, not less, fertile ground in which new narratives can be planted.
I would argue that imperial adventure fiction—the breadth of writing from Rudyard Kipling and H.G. Wells, via Arthur Conan Doyle to Edgar Rice Burroughs—is one such mythic narrative. It is larger than any single author and larger than any single character, but the characters who inhabit it remain, a century or more since their birth, powerful and potent in our collective imagination: Sherlock Holmes, Tarzan, Mowgli, Kim, Captain Nemo.
The reason is that this body of work shares one animating instinct: to glamorize and justify, explain and contextualize the imperial system—the system that enabled Britain to create and maintain its empire with sword and fire for almost 200 years. Edward Said made this argument best in Orientalism. This is not to suggest that every author or every character was an ardent imperialist, although Kipling certainly was.
Today, whilst the British Empire has come and gone, the notion of empire remains an animating instinct in our global political moment, whether we speak of the American hegemon in decline, China in ascendance, or the dangerous death throes of the Russian bear. That is why these stories remain as potent and resonant as ever.
In The Great Game, I’m having a conversation with this tradition, interrogating the canon and asking the question: can the form of the imperialist adventure mystery hold when inhabited by a brown protagonist, by a colonial subject standing in its center and taking on its titans with his own ferocious rage and questioning intelligence?
For example, I have a scene in which Balvinder confronts Dr. Watson by pointing out that his account of The Sign of the Four displays appalling ignorance about India and Indians—that the orient and orientals in these adventure stories are always treated as the object, as the other, never as the subject and certainly not as the hero. Which doesn’t make them less good stories, just more blinkered ones.
I’m also asking whether I, as a brown author, as a person of color who enters the canon from the outside—who has always loved Sherlock unthinkingly as a child but now finds that loved tainted by the realization that the order that Sherlock seeks to uphold is the order of the Empire — can write a story that both honors the great detective and holds him accountable?
If I contribute to the canon, have I changed what the canon is, introducing a few drops of my own seven percent solution of decolonization into an imperialist mix?
I don’t know, inject it and see.
The Great Game: Amazon|Bookshop|Barnes & Noble
Call for topics for the 2026 Maintainers Summit [LWN.net]
The Maintainers Summit is an annual, invitation-only gathering of kernel developers and maintainers to discuss development-process issues; see LWN's 2025 Maintainers Summit coverage for an example. The call for topics for the 2026 gathering (Prague, October 8) has gone out. One of the best ways to obtain an invitation to the Summit is with a good topic proposal. For best consideration, topics should be submitted before July 24.
Microspeak: Double-click and drill down [The Old New Thing]
Recall that Microspeak is not merely for jargon exclusive to Microsoft, but it’s jargon that you need to know to survive at Microsoft.
For most of my career at Microsoft, the term used by people who want to sound important to say that they want to delve more deeply into a topic was to drill down. Here are some citations, suitably anonymized.
Bob added a section on accessibility. We may need to drill down into specifics for each of the requirements.
We conducted a survey to determine how people use our feature. They broke down into four general categories listed here. Let’s drill down a bit further into each of these categories.
The verb phrase got nouned as drill-down, referring to the result of drilling down.
Here is the drill-down.
And it’s also an adjective, meaning “related to the act of drilling down”.
From that number, two drill-down paths exist.
The term has even gained official recognition in the Microsoft Writing Style Guide, with its own entry with guidance on proper use. Note that it approves the use of the term in the context of data analysis and discourages its metaphorical use.
drill down, drill up, drill through
It’s OK to use drill down, drill up, and drill through in content about data and the reports generated from them.
Two words as a verb. Hyphenate drill-down and drill-up as adjectives. Note that drillthrough as a noun or an adjective is one word, no hyphen.
Examples
If you have grouped items in your PivotTable, you can drill down on a group name. Then, you can drill back up to analyze summary data.
Using drill-down and drill-up actions, you can expand and collapse sections within a report to find the data that interests you the most.
If you add the ability to drill through on an existing mining model, the model must be reprocessed before you can drill through to the data.
Use a drillthrough query to retrieve details from the underlying cases or structure data. Drillthrough is useful if you want to see additional details from the case data.
Don’t use to mean following a path (such as folders) or giving something further examination.
Example
Microsoft MVPs joined an in-depth discussion about Azure security management solutions.
The anti-guidance helpfully gives us a definition of drill down as Microspeak: “To give something further examination.”
All of these usages of drill down (including the metaphorical ones) are still in wide use, but around the year 2020 or 2021, I encountered a new term that means roughly the same thing, but much more jargony.
I’m referring to double-click, which was covered by The Wall Street Journal and amplified by the Language Log in 2024.
As far as I can tell, double-click means about the same thing as drill down, but in a more jargony, cringy way. Finding citations for this use is more difficult because it appears to be primarily used in speech and not writing. I guess everyone is too embarrassed to write it in a document.
There are currently no resources devoted to designing a tutorial. Once we have resources, we can double-click on the journey for how users can find it.
Person 1: If the user clicks the button, we will take them to a settings page where they can enable their widgets.
Person 2: I want to double-click on this experience. Why does the user need to explicitly enable their widgets? Is there a path where we can enable them by default?
I wish people would stop using the term double-click in this way. It bothers me about as much as the nounified ask.
The post Microspeak: Double-click and drill down appeared first on The Old New Thing.
[$] Sending packets directly from BPF [LWN.net]
Tetragon, the BPF-based security monitoring tool, uses BPF to monitor different aspects of a running kernel and enforce user-specified policies. It sends its data to a user-space process, which forwards the data to a central monitoring service elsewhere in the network, however. This presents a point of vulnerability: if an attacker can kill Tetragon's user-space agent, it won't be able to properly report on the situation. Song Liu, Mahé Tardy, and Liam Wiseheart spoke about their work removing the need for the user-space agent at the 2026 Linux Storage, Filesystem, Memory-Management, and BPF Summit.
Security updates for Tuesday [LWN.net]
Security updates have been issued by AlmaLinux (389-ds:1.4, buildah, freeipmi, freerdp, gegl, gimp, golang, kernel, libreoffice, maven:3.9, openexr, perl-DBI, plexus-utils, podman, tomcat, tomcat9, xorg-x11-server, and xorg-x11-server-Xwayland), Debian (imagemagick, p7zip, and redis), Fedora (breezy, calibre, and golang-github-openprinting-ipp-usb), Mageia (ffmpeg, gzip, haproxy, libheif, libtiff, libxml2, packages, perl-List-SomeUtils-XS, and perl-Socket), SUSE (alsa, chromedriver, curl, dhcpcd, docker-compose, glibc, haproxy, ImageMagick, jq, kernel, kubernetes, libpng15, libredwg-devel, libslirp, nghttp2, php8, python-Pillow, python313-Django, python313-weasyprint, qemu, rust-keylime, sccache, and systemd), and Ubuntu (cifs-utils, libexif, libreoffice, libssh2, openssh, and pipewire).
Claude codes. It may seem as if developers have taken over
this blog, because we have real
business to do. So much new stuff to show. Today's rss.chat goodie is an
example app called ThreadWalker that crawls the network
of replies under a single post, to all levels, printing them on
screen in neat hierarchic form. It was written and documented by
Claude. I reviewed the code, and looks good, and honestly doesn't
look like anything I would write (not bad, just different). It
could be used as a starter system that says when someone replied to
something you wrote, or something deeper in the tree. All this is
done by reading RSS feeds. This is where we begin to explore what's
possible when you use a famous and familiar format like RSS 2.0 as
the basis for a social network.
CodeSOD: AAYFN [The Daily WTF]
Jason M sends us some Ruby code.
def bv(prop, tv="Yes", fv="No", nv="Not Specified")
v = self.send(prop)
if v === true
tv
elsif v === false
fv
else
nv
end
end
The obvious WTF here is the function name and parameter names. AAYFN(always abbreviate your function names) seems to be the convention here. But it also contains a more Ruby-specific WTF.
The function name bv is short for "boolean value",
obviously. tv is the "true value", fv is
the false value, and nv is the null value. So this is
really about pretty-printing boolean values and converting them to
strings. While the terrible names make it hard to understand, it's
not that hard to figure out what's going wrong here. I
hate it, don't get me wrong, but it just makes me sigh with
disappointment, not groan.
No, the thing that makes me groan is v =
self.send(prop). This is a very Ruby idiom that lets you
access a member of the class by name; essentially it's like doing
self.prop, but since prop is a variable
containing a property name, we have to send it.
This is metaprogramming by strings, which is the main reason I
end up hating it. But in this specific instance, it offers us a lot
of potential issues. First, if prop is anything not
boolean, we just return "Not Specified", which is incredibly
misleading. I'd argue that if we attempt to use it on a non-boolean
field we should throw an exception. Which opens the question: if
prop doesn't exist, is that a non-boolean
field, or is that a "enh, just call it null" situation? Because
right now, that will throw an exception. It'll also throw
an exception if the thing being accessed is a function that takes
parameters. These behaviors may be surprising.
Now, I don't know the calling pattern. It's possible that
whatever function calls this already has a good list of the allowed
boolean values, and will never call this on a prop
that doesn't exist. Certainly, that's what
the Ruby docs recommend. But I'm going to hate it anyway,
because this kind of runtime metaprogramming by passing strings
around is eternally asking for trouble. And while I haven't done a
huge amount of Ruby, I've done enough to know that any non-trivial
codebase ends up like this once the metaprogramming
band-aid is taken off.
Now, if you don't mind, I'll go back to doing my metaprogramming with C++ templates, which are simple, clear, and never result in wildly unmaintainable code because you ended up reimplementing LISP in template operations.
Pluralistic: Gerontocracy's failure mode (14 Jul 2026) [Pluralistic: Daily links from Cory Doctorow]
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
Top Sources: None -->

The "designated survivor" is one of the weirder aspects of America's (very, very weird) political system.
Each year, during the State of the Union address, when both houses of Congress and the President are all under one roof, a single political figure, in the line of succession for the presidency, is spirited away to a hidden bunker, just in case the US legislative and administrative branches are decapitated in a single, spectacular terrorist strike:
https://en.wikipedia.org/wiki/Designated_survivor
Initiated during the 1950s, designated survivors are a paranoid relic of the Cold War, but they're also a relic of an era when America was a less chud-dominated, more technocratic land. It's a longtermist sort of procedure, in stark opposition to vibes-based MAGA chaos in which the Mad King makes daily announcements of new wars, tariffs, monuments, and existential threats to the nation.
America's ruling class have always sought an equilibrium between its pure Id of hatred for labor, autocratic yearnings and apocalyptic fantasies, and its patient, scheming Ego, the author of endless FedSoc judicial nominee listings, Projects 2025, and decades-long schemes to overturn Roe and reverse the New Deal.
(Democrats have their own version of this, of course – the endless contest between the McKinsey wing of the party's right and its infinitely embroidered Machin-Synematic Universe.)
The problem is that once the atavistic, impulsive elements of your project escape containment, the resultant turbulence sucks everyone else into their chaotic vortex. How can you plan for anything when you're buffeted by endless stunts, feints, and distractions?
Nowhere is this failure to plan more vivid than in the age distribution of both chambers of the US legislature, its presidential candidates, and its judicial appointments. What's more, this is equally true of the Democrats and the Republicans.
The equilibrium of all of America's key institutions is brittle: legislative majorities are often just one or two seats wide. Key federal circuits and the Supreme Court are knife-edge balances. We keep getting presidential races between septuagenarians and octogenarians.
The question here isn't whether old people can be good at those jobs. They obviously can be. The problem is actuarial: old people are far more likely to die, or suffer severe medical episodes, than younger people. This is a fact of life that every person understands, and the older you get, the better you understand it.
I'm 55. 20 years ago, it was unusual for just one of my peers to die in a given year; now I lose a couple every year. It could be me next (my doctor just informed me that I am cancer free, following excision, radiotherapy and immunotherapy). Anyone who pretends this isn't true is setting themselves and the people around them up for terrible things.
If you're a writer, this means making plans for the smooth management of your literary estate. For the past couple decades, John Scalzi has been my anointed literary executor. He's a great choice: a fabulous writer with a good head for business and a strong handle on my politics and artistic sensibility, whose personal ethics are above reproach. The only problem is that John is a couple of years older than me, which means that he'd be a great executor if I got hit by a bus tomorrow, but not if I keel over with a heart attack in 20 years.
So this year, I added a second executor, Molly White, who is also a fantastic writer, also extremely ethical and also very attuned to my politics and literary sensibilities. Molly is 20 years younger than me, and she has relevant experience: she's also the executor of the literary estate of her great-grandfather (EB White).
In the unlikely event of my untimely death, Molly and John will do a great job running the estate (which mostly will consist of reviewing my agents' recommendations). And if John keels over right after me, Molly will be fine on her own.
Of course, the only reason I need a literary executor is that my kid is only 18. At 18, she's a remarkable, level-headed, ethical young person, but she's not yet fully formed. Literary history is filled with descendants who take over a literary estate and run it in terrible ways. The most notorious example here is Stephen Joyce, grandson of James Joyce and a colossal asshole:
https://en.wikipedia.org/wiki/Stephen_James_Joyce
The most likely destiny for my literary estate is that I will grow older alongside my daughter, who will mature in ways that make her a perfectly suitable literary executor (in addition to being the beneficiary of my literary estate) and in a few years I'll send a note of thanks to John and Molly and change the paperwork. But in the unlikely, awful event that my kid runs into serious challenges that make me question her judgment and probity, I'll be covered.
That's what planning is all about: thinking through various scenarios, including low-likelihood, high-salience ones that have easy mitigations, and taking appropriate and proportionate steps to avoid disaster.
You know: like squirreling away a designated survivor in a bunker far from DC during the State of the Union.
This is what makes America's political gerontocracy so weird. In their true hearts, the nonagenarian (1), octogenarians (5), septuagenarians (27) and late sexagenarians (7) in the US Senate know that they could keel over at any moment, and that in a 53:47 Senate, this could spell doom for their political project.
Sure, Mitch McConnell might be secretly dead and that's bad and weird. But it wouldn't be exceptional. We're talking about a legislature whose members sometimes disappear for months, only to be discovered in care homes with advanced dementia, while still somehow holding office:
https://www.politico.com/news/magazine/2025/03/14/kay-granger-dementia-dc-media-00210317
It's a legislature whose most prominent grandees cling to power at the very brink of death's door, long after they can be effective leaders, just so they can anoint their successor during the next election:
https://en.wikipedia.org/wiki/Dianne_Feinstein#Personal_life
Elections have consequences, but special elections, called after the sudden death of an elderly lawmaker, have wild consequences.
Of course, anyone can die suddenly. 15 years ago, one of my dearest friends, a contemporary, went to bed in seeming perfect health and never woke up. He was only 44. I still miss him, every day:
https://memex.craphound.com/2012/06/28/eulogy-for-erik-possum-man-stewart/
But the likelihood this happening goes up the older you get, and once you cross a certain age threshold, odds rise sharply. If you're part of a political project that's laying and executing long-term plans whose outcomes turn on hair-fine majorities, this should factor into your thinking. The failure to do so can throw everything you've worked for into disarray:
https://prospect.org/2026/07/13/budget-consequences-of-lindsey-grahams-sudden-departure/
It's not limited to the legislature, of course. The Supreme Court's slide into its role as handmaiden to totalitarianism began when the dying Ruth Bader Ginsburg refused to step down, because she wanted her successor to be picked by the first woman president:
https://www.nytimes.com/2020/09/21/magazine/ginsburg-successor-obama.html
The amazing thing here is that RBG made her name as a master strategist, but when it came to this incredibly consequential matter, she set strategy aside for hubris:
https://radiolab.org/podcast/more-perfect-sex-appeal
Security practitioners know that anyone can be hacked or scammed, and that the biggest vulnerability of all is to be so confident in your own procedures and discernment that you assume it could never happen to you. If you think you can't get scammed, you are a danger to yourself and others:
https://pluralistic.net/2024/02/05/cyber-dunning-kruger/#swiss-cheese-security
By the same token, any politician in their 70s or 80s who thinks that they can't suffer a stroke or heart attack or the kind of lapse that makes you freeze up during a presidential debate is a danger to their party, their politics and their nation:
https://www.cbsnews.com/news/jill-biden-joe-biden-stroke-2024-debate-sunday-morning-interview/
This isn't about how healthy or robust any given politician is or feels; this is about the cold reality of actuarial tables. The older I get, the more those actuarial tables factor into my own decision-making. The fact that our political classes seem to think that they can choose the time and manner of their passing is baffling.

Mayor Mamdani Announces Landmark "Click-To-Cancel" Consumer Protection Rules to Ban Subscription Traps and Junk Fees https://www.nyc.gov/mayors-office/news/2026/07/mayor-mamdani-announces-landmark–click-to-cancel–consumer-prot
You'll Own Nothing and Be Happy: Why It's So Hard to Break John Deere's Control Over Farming https://www.thebignewsletter.com/p/youll-own-nothing-and-be-happy-why
Beyond the Prompt: The Social Costs of Generative Artificial Intelligence https://scholarship.law.missouri.edu/betr/vol10/iss1/4/
Video Game Layoffs Fuelling Historic Union Movement https://www.donotpassgo.ca/p/inside-the-video-game-industrys-historic
#25yrsago Microsoft less hostile to MP3s https://web.archive.org/web/20010716103233/http://news.cnet.com/news/0-1003-200-6567844.html
#25yrsago UK record lobby demands copyright school curriculum https://web.archive.org/web/20010718135130/https://www.salon.com/tech/feature/2001/07/16/abc_ip/index.html
#25yrsago Gary Larson on online comics sharing https://web.archive.org/web/20010610081014/http://www.creators.com/index2_anotefromgarylarson.html
#10yrsago San Francisco’s bike lanes have become Uber’s pickup/dropoff zones (and the cops don’t care) https://sf.streetsblog.org/2016/07/13/collecting-data-to-push-for-safer-biking-on-valencia
#10yrsago For 90 years, lightbulbs were designed to burn out. Now that’s coming to LED bulbs https://web.archive.org/web/20160717090604/http://www.newyorker.com/business/currency/the-l-e-d-quandary-why-theres-no-such-thing-as-built-to-last
#10yrsago Why do Pokemon avoid Black neighborhoods? https://www.bnd.com/news/nation-world/national/article89562297.html
#10yrsago To hell with the Trolley Problem: here’s a much more interesting list of self-driving car weirdnesses https://medium.com/studio-d/15-more-concepts-in-autonomous-mobility-8fd1c794e466#.s10ldm5nf
#10yrsago Royal Society’s #1 cybersecurity recommendation: don’t backdoor crypto https://royalsociety.org/~/media/policy/projects/cybersecurity-research/cybersecurity-research-report.pdf
#10yrsago UK PM Theresa May nukes climate change department, appoints a climate denier as Climate Secretary https://web.archive.org/web/20160714173020/http://www.independent.co.uk/environment/climate-change-department-killed-off-by-theresa-may-in-plain-stupid-and-deeply-worrying-move-a7137166.html
#5yrsago Facebook's alternative facts https://pluralistic.net/2021/07/15/three-wise-zucks-in-a-trenchcoat/#inconvenient-truth
#1yrago When Google's slop meets webslop, search stops https://pluralistic.net/2025/07/15/inhuman-gigapede/#coprophagic-ai

Sydney: The Festival of Dangerous Ideas, Aug 23-24
https://festivalofdangerousideas.com/cory-doctorow/
Melbourne: Enshittification at the Wheeler Centre, Aug 25
https://www.wheelercentre.com/events-tickets/season-2026/cory-doctorow-enshittification
Brighton: The Reverse Centaur's Guide to Life After AI with
Carole Cadwalladr (Brighton Dome), Sep 8
https://brightondome.org/whats-on/LSC-cory-doctorow-the-reverse-centaurs-guide-to-life-after-ai/
London: The Reverse Centaur's Guide to Life After AI with Riley
Quinn (Foyle's Picadilly), Sep 9
https://www.foyles.co.uk/events/enshittification-cory-doctorow-riley-quinn
South Bend: An Evening With Cory Doctorow (Notre Dame), Oct
6
https://franco.nd.edu/events/2026/10/06/an-evening-with-cory-doctorow/
You Bought it, They Break It (What Now? with Trevor Noah)
https://www.podbean.com/media/share/dir-ir36t-2f4a1ac6
Can AI be Saved From Capitalism? (Everyday Anarchism)
https://www.everydayanarchism.com/192-can-ai-be-saved-from-capitalism-cory-doctorow/
Lawfare Daily
https://www.youtube.com/watch?v=T1KIwaYRs1g
How to Think About AI (Organized Money)
https://www.organizedmoney.fm/p/how-to-think-about-ai-with-cory-doctorow
"Canny Valley": A limited edition collection of the collages I create for Pluralistic, self-published, September 2025 https://pluralistic.net/2025/09/04/illustrious/#chairman-bruce
"Enshittification: Why Everything Suddenly Got Worse and What to
Do About It," Farrar, Straus, Giroux, October 7 2025
https://us.macmillan.com/books/9780374619329/enshittification/
"Picks and Shovels": a sequel to "Red Team Blues," about the heroic era of the PC, Tor Books (US), Head of Zeus (UK), February 2025 (https://us.macmillan.com/books/9781250865908/picksandshovels).
"The Bezzle": a sequel to "Red Team Blues," about prison-tech and other grifts, Tor Books (US), Head of Zeus (UK), February 2024 (thebezzle.org).
"The Lost Cause:" a solarpunk novel of hope in the climate emergency, Tor Books (US), Head of Zeus (UK), November 2023 (http://lost-cause.org).
"The Internet Con": A nonfiction book about interoperability and Big Tech (Verso) September 2023 (http://seizethemeansofcomputation.org). Signed copies at Book Soup (https://www.booksoup.com/book/9781804291245).
"Red Team Blues": "A grabby, compulsive thriller that will leave you knowing more about how the world works than you did before." Tor Books http://redteamblues.com.
"Chokepoint Capitalism: How to Beat Big Tech, Tame Big Content, and Get Artists Paid, with Rebecca Giblin", on how to unrig the markets for creative labor, Beacon Press/Scribe 2022 https://chokepointcapitalism.com
"Unauthorized Bread": a middle-grades graphic novel adapted from my novella about refugees, toasters and DRM, FirstSecond, April 20, 2027
"Enshittification, Why Everything Suddenly Got Worse and What to Do About It" (the graphic novel), Firstsecond, 2027
"The Memex Method," Farrar, Straus, Giroux, 2027
Today's top sources:
Currently writing: "The Post-American Internet," a sequel to "Enshittification," about the better world the rest of us get to have now that Trump has torched America. Fourth draft completed. Submitted to editor.

This work – excluding any serialized fiction – is licensed under a Creative Commons Attribution 4.0 license. That means you can use it any way you like, including commercially, provided that you attribute it to me, Cory Doctorow, and include a link to pluralistic.net.
https://creativecommons.org/licenses/by/4.0/
Quotations and images are not included in this license; they are included either under a limitation or exception to copyright, or on the basis of a separate license. Please exercise caution.
Blog (no ads, tracking, or data-collection):
Newsletter (no ads, tracking, or data-collection):
https://pluralistic.net/plura-list
Mastodon (no ads, tracking, or data-collection):
Bluesky (no ads, possible tracking and data-collection):
https://bsky.app/profile/doctorow.pluralistic.net
Medium (no ads, paywalled):
Tumblr (mass-scale, unrestricted, third-party surveillance and advertising):
https://mostlysignssomeportents.tumblr.com/tagged/pluralistic
"When life gives you SARS, you make sarsaparilla" -Joey "Accordion Guy" DeVilla
READ CAREFULLY: By reading this, you agree, on behalf of your employer, to release me from all obligations and waivers arising from any and all NON-NEGOTIATED agreements, licenses, terms-of-service, shrinkwrap, clickwrap, browsewrap, confidentiality, non-disclosure, non-compete and acceptable use policies ("BOGUS AGREEMENTS") that I have entered into with your employer, its partners, licensors, agents and assigns, in perpetuity, without prejudice to my ongoing rights and privileges. You further represent that you have the authority to release me from any BOGUS AGREEMENTS on behalf of your employer.
ISSN: 3066-764X
Vulnerability in FIFA’s Network [Schneier on Security]
FIFA’s network was vulnerable to anyone with even minimal access.
Jonas Meurer: zed-xdebug [Planet Debian]
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.
The PHP process runs in a nextcloud-docker-dev Docker container.
Install Zed: flatpak install flathub
dev.zed.Zed
In Zed: open the Extensions view and install PHP.
Configure the debugger:
Create
~/.var/app/dev.zed.Zed/config/zed/debug.json:
[
{
"label": "PHP: Listen to Xdebug",
"adapter": "Xdebug",
"request": "launch",
"port": 9003,
"pathMappings": {
"/var/www/html": "/home/<user>/devel/nextcloud/server",
"/var/www/html/apps-extra": "/home/<user>/devel/nextcloud/server/apps-extra",
"/var/www/html/apps-shared": "/home/<user>/devel/nextcloud/apps-shared"
}
}
]
Add one entry per bind-mounted app directory.
After creating the file, restart Zed.
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.
/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.Run XDEBUG_SESSION=PHPSTORM php occ status inside
the container and check /var/log/xdebug.log.
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.
Load the URL that exercises the code path with the breakpoint. Zed should stop the code exection at the breakpoint.
“Is it okay if I share my screen?” [Seth's Blog]
The meeting is now broken.
Even if you were actually engaging with the attendees before, it’s over. You took a new medium and stuffed an old one into it, changed the dynamic and ruined it.
Zoom is a device that eliminates physical distance and enables a synchronized conversation. Interactions in real time. In particular, groups of three to eight professionals, there to have a discussion.
Throwing your powerpoint into the mix transforms the dynamic. It takes your face off the screen and makes everyone else irrelevant. It forbids interaction. And it prevents you from reacting to the room as it unfolds, since it’s linear.
The disrespect comes through, even if you didn’t intend it to.
If you have something to show us, send it before the meeting. If there’s a memo, we can read it in advance, or afterward. In fact, if the memo is really important, simply pause the meeting while we all take two minutes to read it. We know how to read.
Reading and interacting are different events.
Powerpoint was invented by socially-awkward engineers as a way to create deniability and clarity in boring tech meetings. It’s a persistently misused piece of tech, used as a crutch or an effective way to hide.
If you call a meeting, do the work to earn it. Make sure the right people are there, make sure you’re prepared and make sure they are too. Use any excuse you can to cancel the meeting and replace it with a memo, one that’s short, clear and designed to accept responsibility.
There’s another new medium that’s arriving–well-edited, short and punchy videos, a one-way method to carefully say what you wanted to say. Send one of those if you want…
Show and tell has a long history going back to first grade. But if you’re going to do show and tell, do it with care.
The Sniffing Mat Challenge by Hien Pham [Oh Joy Sex Toy]
Shipping to EU from UK [RevK®'s ramblings]
This is all a bit new to us, as we have traditionally only dealt with UK customers. This started with circuit boards stocked at Amazon, and Amazon just sorted the EU VAT (paying us the VAT exclusive amount as an export) for sales in EU - very slick.
Moving on (after Amazon screwed us over) we started selling on Tindie, and Tindie do not do anything special for EU at all. So all our parcels hit customs, and the recipient had to pay VAT (and admin fee). This is the default if you do nothing special when shipping to EU.
However, when Tindie screwed up badly (will they ever recover?) we started selling on Lectronz. I have to say that they have been great. This led us to start to understand how it should be done.
The Import One Stop Shop system in EU means we could get an IOSS number for sending small packages (value up to €150) to EU with VAT paid - this means the customer has a much quicker and more seamless delivery with no hassle from customs. We would have to file returns for this, but pay in one go for all EU.
However, it is even easier when using an on-line marketplace like Lectronz, as they handle all the VAT - working out the right rate and charging the customer and paying the VAT. All we have to do is quote their IOSS number as part of shipping.
We integrated the Lectronz API and the Royal Mail Pro Shipping API so staff can just click "print postage" and out pops the postage label and customs label, simple.
The EU has gone to some effort to make this slick and easy for small parcels going in to the EU. Well done EU.
As of 1st of July the EU made things difficult - the exact opposite of the slick and easy IOSS process - adding a new €3 import duty on small parcels value up to €150. This is separate from IOSS, so even with IOSS and prepaid VAT, the recipient gets hassled by customs for €3 duty!
Lectronz moved quickly, and added the feature to their systems to work out the €3 duty, and add to the price, to pay us, so we can post "Duty Paid". I updated the API code and set to send duty paid via Royal Mail Pro Shipping API.
Yay, all sorted, all slick again, albeit €3 more expensive for the customer (thanks EU!).
This started off OK, with a few parcels, but then we hit an error where Royal Mail will not do Duty Paid to Latvia. Arg, why not? Lectronz were very helpful sorting a refund of €3 so we send not duty paid and explained to customer.
So I decided to check the rate card from Royal Mail. The rates to EU are a mess anyway - they have a base price and per-kg price. The base price ranges from £4.45 to £7.70 which is not too mad, but the per-kg ranges from £0.80 to £10.85 which is mental.
The surprise is that duty paid is not available for Belgium, Bulgaria, Croatia, Czechia, Denmark, Estonia, Finland, Greece, Hungary, Italy, Latvia, Lithuania, Poland, Romania, Slovakia, Slovenia, and even Spain.
This is crazy - with all EU countries charging this new €3 duty - why the hell do Royal Mail not handle this.
The other oddity is that the extra cost for sending duty paid, where possible, varies wildly - from a more reasonable 50p to nearly £5 in one case. It is daft for a customer to pay an extra £5 to handle a €3 duty.
I have done a shipping rate for all Europe countries individually. Yes, tedious.
Where duty paid postage is available I have listed that (with the extra cost) so customers have a choice.
It would help if Lectronz allowed me to code a per-kg rate for some countries - I have asked.
We still do IOSS for EU where applicable.
So yes, sorted for now. And it means a sting of countries have the hassle of paying duty on receipt, and a few others make sense to do that anyway as the extra cost is daft.
And today we have...
Arrrrg!
Now seems there is a PDDP with non PDDP service to do the €3 duty and IOSS at once somehow. Trying to make sense of what Royal Mail have sent. If so, it may be simple, but this is mental.
Nope, they sent me a link to a document saying MP7 (DDU normally) with DDP and IOSS is available, but an email saying MPR (DDP but only to some EU countries), but then sent the original PDF again which says MP7 and DDP.
They clearly have no clue!!!
can i tell you a story? [WIL WHEATON dot NET]
Earlier today, a really fun memory surfaced that I wanted to share, because I haven’t had an opportunity to tell a story in a little while. It’s an older memory, so I’m sure some of the specifics aren’t entirely correct, but this is way I remember it.
In the early 2000s, I worked on a couple of movies that were direct-to-DVD, low budget versions of successful, big budget movies of the moment. Call it the Roger Corman model.
In the first one I did, Deep Core, the whole Earth is going to explode or something, unless an unlikely band of misfits can drill to the Deep Core of the planet and set off the bomb or whatever. It’s sort of like Armageddon but underground, and also like The Core, but for about sixteen dollars and some wire from the bin behind the hardware store.
Now, having said that, it’s a charming and silly and extremely fun movie where my character eventually turns into a flaming skeleton with the help of an unexpected gout of magma in the third act. It understands the assignment, because we all understood the assignment. It was a fun set, where we got to just play our scenes to the best of our ability.
And I got to work with some lovely castmates. The unlikely band of misfits, collected from an oil field of questionable legality, were played by me, Craig Scheffer, Bruce McGill, and Terry Farrell.
At some point in the story, the four
of us are in this drilling machine thing that looks suspiciously
like a shuttlecraft from a popular 1990s science fiction program.
It’s a practical set that comes apart in the middle,
longways, and is set atop a system of boards and other boards that
create a poor man’s gimbal to simulate the exciting motion
while we are flying through space drilling toward the Deep
Core. It was cool, especially for a low budget set. You could only
see some of the nails, and the parts that weren’t supposed to
wobble mostly didn’t. I recall the console having lots of
practical toggles and buttons, which is always a lot of fun.
We filmed in this thing for about a week. On the first day, during our first rehearsal, those extremely safe and union-approved levers were tested out while we all sat in our places. Terry and Craig were in the driver’s seats, Bruce and I faced away from each other down the sides of the thing, behind them. I liked to imagine I was the Spock of this crew.
So the director gets us all together on the first day. We talk about the whole “drilling Deep into the Core ” of it all. He says, “So this isn’t a smooth ride, as you drill through the rocks. We’re going to move the set a little bit, but you’ll need to sell it with your own motion.”
Craig asks what that motion should look like and the director says it’s sort of like being in a tank over a dirt road.
At this point, I look at Terry over my shoulder, and find that she is already looking at me.
“So you think this is about a 3?” She says.
“Yeah, that seems about right,” I agree, and we both turn back to take our positions for rehearsal.
This is when Craig holds up a hand and says, “Hold on. What was that? You two just communicated something to each other, using words I understand, and I have no idea what you said.”
Terry and I burst out laughing.
“It’s the Star Trek shake scale,” I tell him. “When there are nine actors in a scene and we get hit by a photon torpedo, we all need to react with the same intensity, so we have the scale.”
“We weren’t even on the same show, and we both use the scale,” Terry added.
“Yeah, it’s standardized across all series,” I said. “First week at the Academy stuff.”
This makes Terry and me laugh, all over again.
“So are you guys going to teach us?” Bruce asks, his voice bright with amusement.
Terry and I look at each other and play out the bit just a little longer. “Sure,” I say, “a 3 looks like this.” I nod at Terry and we both start doing an identical level of shimmy and shake. “This is a 6,” she says, and we both flop over our consoles before we right ourselves.
“Damage report!” I say. As I remember this moment, even though my memories are a quarter century old and I’ve certainly gotten some of the specifics wrong, I can so clearly see and feel how much fun we had while we were doing this. When I talk about how Star Trek is a family that you never leave unless you want to, this is what I am talking about. Moments like this that only a few hundred people, in the history of the world, have experienced in this specific way. It’s such a blessing, such a gift.
At this point, the director and the whole crew are watching us. The director asks us for a 1, and we do it. Bruce asks for a 5, and we shake side to side before we steady ourselves on our consoles. Someone asks for a 10, and in the literal blink of an eye, we silently agree we are not doing that. They can’t handle a 10. They think they can, but they have no idea.
“Sorry, that only happens when we crash the Enterprise,” I say.
Everyone laughs, and the first AD asserts that we have to get to work, guys. The director gets ready to call action on rehearsal.
“Okay, everyone,” he pauses for a moment, then continues with purpose, “this is a 3,” he says. “And, action!”
I glance over my shoulder and see Craig is doing about a 2, but he’s getting there. Bruce is a solid 3, cheating a little bit with a sideways glace toward Terry, who makes it look easy.
I suppress a grin and gently rock side to side, as I match their tempo, a perfect 3.
Some fun stuff I came across while (unsuccessfully) looking for a place you can stream this, from Wikipedia.
From the “Reception” section: IMDb gave the film a 2.6 out of 10, AllMovie gave the film a 1.5 out of 5, Contact Music gave the film a 1 out of 5, TV Guide gave the film a 2 out of 5 Disaster Movie World gave the film a 1 out of 5.
That is entirely fair, generous, even.
From the “See Also” section: The Core, 2003 film with a similar plot.
This is the funniest thing in this post, and I didn’t even write it. Well played, Wikipedia.
I’m glad you’re here. If this is your first time, or your first time in awhile, you are invited to listen to It’s Storytime With Wil Wheaton. Tell your friends! If you’d like to get these blog posts delivered to your inbox, here’s the thing:

she just Knows
Today we got a nice article about RSS.chat in Coywolf.
And we got a second rss.chat server up, for testing and so people who want to try it out have a place to go. Still want to do a bit more testing before pointing to it from the blog. Working on docs now and fixes. Making sure we're ready for the next stages of growth. Turns out you can do a lot of feeds if you're willing to you know think different. ;-)
Rex Ready Player One, Part Four [Penny Arcade]
Through his company Asmadi Games, Chris Cieslik - however you might choose to pronounce it - has either published or designed some of my favorite games. A lot of people might be familiar with We Didn't Playtest This At All, but between Innovation, Red7, and especially One Deck Dungeon he's just associated with a lot of all timers. His next one, which will be at Gen Con, has the potential to be another Uno in my opinion. If you see him there, ask him for The New Shit.
Why Games Need to be Unfair
by Chris Cieslik,
Owner & Lead Designer,
How early SunOS did diskless workstations before NFS [OSnews]
I have a love-hate relationship with Sun’s NFS. Since it was so prevalent, it’s a go-to for getting stuff on and off the classic UNIX workstations I love to explore, but at the same time, it also never seems to work right away. However, the technology NFS was designed to replace was apparently quite a bit worse. Sun sold diskless workstations before NFS, which used something called nd (network disk). The problems with nd stem from a limitation of SunOS at the time. Since SunOS only provided support for a maximum of eight partitions per physical disk, nd offered the ability to create subpartitions, of which you had to manually create and remember the start and end sectors.
That’s a recipe for problems. But wait, there’s more!
For extra bonus problems, you might run out of available partitions to use on your server disk because you needed all of the available ones for regular filesystems and your swap area. If you were in this situation you could take the dangerous but necessary step of specifying your network disks using the special ‘c’ partition (cf dkinfo(8)), which was conventionally used to provide access to the entire disk. This was extra dangerous because you had to make sure that the nd disks you specified weren’t overlapping into any regular partitions that you were using, since as nd(8) says, nd itself did no sanity checking. If you said sectors X to Y were network disk X, that’s what they were, and goodness help you if some of them were also something else.
↫ Chris Siedenmann
And this isn’t even everything. Every part of this sounds horrid, and I can totally understand seeing NFS as a godsend compared to nd. It’s depressing that we’re in 2026 now, and the basic task of sending a file from one computer to another over your own network often still a total clusterfuck.
The new Flipside Book 13 is freshly printed, and has arrived!
Check out the Kickstarter to see photos!
I'm going to start shipping out Kickstarter orders soon! It might
be slow going since I have a lot of conventions the next two
months, and I'm also going on a trip to Thailand next month. The
book is also now available on the store if you still want to order
it!
I've also updated the convention list below, there are table
numbers for Connecticon and Matsuricon, which are coming up the
next two weekends.
Nokia’s 14 years of mobile-phone supremacy ended in an afternoon [OSnews]
OSNews covered the downfall of Nokia extensively back when it was happening, but I must admit that seeing this whole story in “retrospectives” now makes me feel so incredibly old. This story played out roughly between 2007 and 2016 – in the grand scheme of things, the end of Nokia’s phone business wasn’t that long ago! Zeit, bitte bleib stehen.
Anyway, here’s another retrospective, but this one I definitely like a bit more than the countless others we’ve seen, because it ends on the part of the story often left out: Nokia not only survived, it’s actually thriving.
The company itself ultimately survived, even if the transition wasn’t painless. Nokia’s revenues, which peaked in 2007, fell sharply through the mid-2010s before the company refocused on a decades-old business line—telecom infrastructure—that many had forgotten Nokia was even in. Nokia now ranks among the world’s top three suppliers of 5G network equipment, serving carriers across more than 125 countries, alongside Ericsson and Huawei. Although the company could never quite crack the smartphone, it now plays a key role in providing the network backbone those smartphones run on.
↫ Chris Chinchilla at IEEE Spectrum
From a business perspective, I honestly doubt Nokia’s phone business could’ve survived to this day, even if they had responded to the arrival of the iPhone sooner, and even if they didn’t do the stupid thing of focusing on Windows Phone first and had just embraced Android right away. Obviously, a Nokia with its own touch-era smartphone operating system would never have survived – none of them did – and even if they went with Android from the onset, I think the eventual onslaught of Samsung, which has killed many a popular smartphone brand, would’ve trampled Nokia too.
In a better version of our world, Nokia would’ve survived with its own smartphone operating system, based on Symbian or not, and it would’ve been Europe’s strong, consistent answer to the Americans’ iOS and Android. While Nokia would’ve still been a business and would’ve undoubtedly tried the same anti-user shenanigans as Apple and Google, they’d at least be easier to reign in regulatory-wise. You’d hope.
The EU should’ve never allowed Nokia’s smartphone business to be sold to Microsoft.
Sony Nerfs Videogame Ownership [Deeplinks]
Legal intern Suzanne Castillo co-authored of this post.
Playstation’s decision to kill physical game discs is the latest attack on our diminishing rights to access and engage with culture digitally. Rent-seeking corporations and negligent lawmakers share the blame — and they can do better.
We’ve seen the same playbook used in the move to digital distribution of film, TV, and music: draw in customers with the convenience of a digital download, then limit physical access and move the goalpost on what it actually means to “own” a piece of media. The end goal is to turn the customer into a renter, stuck making regular subscription payments for access. Gamers are right to sound the alarm, and we must take this moment to fight for digital ownership before it’s too late.
Depriving gamers of physical discs leads to another obvious and immediate cost: data. Unlike other digital media like film and TV, video games require a ton of storage. Access to high speed internet is still abysmal in the US, making the high-speeds needed for digital game downloads a luxury some of us may take for granted. For many, a modern game can take days and exceed their data caps.
This made physical discs, particularly for the biggest AAA titles, a logical choice that also largely spared gamers from losing traditional ownership rights. With physical disks, the cost of storing the game was included in the purchase.
Limiting customers to digital copies also pushes gamers further into rent-only copyright culture.
Physical media comes with a "right of first sale," which means you can lawfully share, resell, alter, or destroy your own copy of a copyrighted work. This right has also helped protect the emergence of alternative community servers, and emulator addition of online play to games from the dial up era.
But courts have held that digital media doesn't carry the same right, meaning no such protection is afforded to digital purchases. Your ability to freely share games with friends or pass them on to family members becomes totally subject to the whims of the distributor.
So, for example, a digital-only approach effectively guts the second-hand market for games. Saving some money with a used game and recouping the costs by reselling are no longer an option. Even with steep discounts and holiday sales, this raises the minimum cost of engaging with the medium at all.
The inevitable conclusion of the move to digital-only purchases is to lock gamers into subscription models, making their access totally dependent on the distributor — or, several distributors, as we’ve seen with major TV and movie streamers. A handful of companies actually own the games, and your only option is to regularly pay for fractured libraries of games you may never play and will never truly own.
Since digital games are easy to copy, distributors and publishers argue that they are in an arms race against piracy. The irony is that law-abiding customers consistently suffer collateral damage.
Most digital distributors lock down the content they offer with restrictive user agreements and digital rights management (DRM) software. DRM software, in particular, imposes onerous controls on the game — like forcing internet connection for single player games or modifications that harm performance — and can even introduce serious privacy and security concerns. Any gamer or researcher in the US who wants to reduce this burden by removing or modifying that DRM risks a lawsuit, thanks to Section 1201 of the Digital Millennium Copyright Act (DMCA). This federal law makes it illegal to alter DRM software, and is a beloved tool for companies trying to restrict how we can lawfully use our purchases — whether it’s a copy of the newest tractor simulator or a literal tractor.
And since much of this DRM is tied to user accounts, ownership of a game is also revocable and modifiable for any number of reasons outside of your control. Error in your subscription payment? Your account got hacked? Licensing deal falls through with a major publisher? Developers want to kill the game in an update? All of this can limit or change your ability to access the game long after your so-called “purchase.”
Policymakers can and should work to restore our ownership rights for the digital age.
That starts with legal protections ensuring that the same rights that apply to physical media apply to digital media. Next up? Reform Section 1201 of the DMCA to clarify that it does not forbid fair uses.
At the state level, we need meaningful consumer protections. Some promising models include California’s AB 1921, which would clarify what customers are actually paying for on digital storefronts and ensure some protections for maintaining discontinued games. The gaming industry has done its best to kill the bill, including claiming that private community servers are illegal.
If you bought it, you should own it, and EFF will continue working to mitigate some of the worst harms of the DMCA 1201, defending modders, and fighting deceptive licensing that makes culture less free.
Urgent: Block new Medicaid Work Requirements [Richard Stallman's Political Notes]
US citizens: call on your state attorney general to sue to block the persecutor's new Medicaid Work Requirements.
If they go into effect, the complex paperwork would be an insuperable burden for many of the handicapped veterans, who would need to satisfy and convince bureaucrats whose mission is to resist.
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
Professor takes action on bullshit generator [Richard Stallman's Political Notes]
A Brown U professor suspected that many of the students that were taking his class had chosen it as an opportunity to use bullshit generators to cheat. So he announced that the final exam would be presential, and almost 1/3 of them gave up.
You can view on this article.
He is sad for them because the decision to use bullshit generators implied a decision not to try to learn the subject.
A Quick Thank You To Bee Inspired [Whatever]
If you’ve been reading the blog for a
while, you might remember
one of my posts from just over five years ago showcasing a
brand called Waxing Kara that sold honey, candles, tea, and
skincare products. Well, I’m happy to say their brand is
doing better than ever, and has actually changed to Bee Inspired. Same great
small-batch honey and quality products, just with a new name.
Because of their new name and website, the owner actually emailed me to reconnect and see if I wouldn’t mind replacing the links in my old post with links to their current website. Of course, that was no problem, and if you look at the old post you’ll see every link has been switched over to their new page.
As a thank you for this (very easy) task, I was generously gifted some really amazing products that I am extremely grateful for, and I just wanted to say thank you to Bee Inspired for the kind gift, and tell you all that I still highly recommend this brand, just like I did back then!
One of my favorite things about Bee Inspired is that from the beginning, they’ve done so much good for the pollinators of our world. They plant 40 acres of indigenous wildflowers every year on their 102-acre farm and invest in pollinator habitats to support their local ecosystem, not just for their own bees. This includes their partnership with One Tree Planted to help reforestation efforts in Appalachia.
On top of that, Bee Inspired is partnered with a nonprofit called VisionWorkshops, which teaches at-risk youth photojournalism skills. They also have a scholarship fund at Maryland Institute College of Art, which has helped over thirty students so far.
I think it’s really rad when businesses invest back in their communities and the world at large in so many different ways. If you’d like to read all about their charitable efforts, you can check that out here.
Plus, if you’re interested in planting a pollinator garden in your own yard, they have a blog article over that. I went ahead and gave this a read because I have been wanting to do something like this for a while! I feel extra motivated to now.
With all that being said, let’s take a look at the products I received.
First up, I got two lovely tea blends, the Blue Butterfly and the Midnight Berry:

I can definitely see myself using the butterfly pea flower tea for a special cocktail, as it is highly regarded for its beautiful color. I am actually grateful that both of these are caffeine-free because I’m trying (not that hard, but still) to cut down a bit on caffeine.
Of course, what goes better with tea than a honey lollipop to sweeten it (there’s eight to a bag)?

I feel that these lavender honey lollipops were extra thoughtful, as I mentioned in my first post that the lavender ones were ones that I really wanted to try.
And to match, a lovely jar of lavender honey:

Do you know how good this is gonna be on my charcuterie boards?! Something I find really amazing about this honey is that it’s completely traceable. Spanish lavender honey, derived completely from the nectar of the bees with no lavender flowers added in post. Seasonally dependent and weather dependent, it’s clear to see why this single-origin varietal is considered a Royale.
Switching to self-care, I was gifted their Sea + Tea body scrub and body cream duo:

This stuff smells exactly like a spa, clean and herbaceous. It’s perfect for someone who doesn’t like food-scented body care. Honestly the profile is very unisex.
This scrub means business! I absolutely love a coarse scrub. So many scrubs I’ve tried aren’t rough enough and just feel like they slide right off without exfoliating anything. I was pleasantly surprised to find that once I rinsed off the scrub, I was actually left with a really soft, almost moisturized feel on my skin. But I decided to try the body cream anyways, and I’m happy to report it is creamy and hydrating without being greasy. Also, a little goes a long way.
Finally, I got this tinted lip balm trio, and one untinted:

This is their collection of bold tints, but they have a more natural set, too. I really loved just how soft the untinted lip balm felt. It glided on so nicely and my lips just immediately felt so soft, plus there’s no weird taste like with Chapstick. It is definitely going to become my new purse lip balm.
One of my favorite things about Bee Inspired is their sets and bundles, because they know that their products are perfect for gifting for all sorts of occasions. So much so that they have an entire page dedicated to party favors for when you need to give a lot of people something small (but nice!). I think a lot of care and intention goes into putting together each bundle. Like it’s nice to know there was thought behind each product selected for a certain kit.
As a nice bonus, there’s discounts for bundling some items, like 15% off three candles, three jars of tea, or three bags of honey lollipops, 10% off three jars of honey, 20% off three petite body care sets, you get the idea.
They also have free shipping on orders of $85+. Of course, if online shopping isn’t quite your speed, they have a beautiful retail store in Maryland. Here’s a video tour:
I want to visit so badly! It’s only a 499 mile drive, what do you guys think? Could be a cute weekend getaway to Maryland.
All in all, Bee Inspired is a really amazing brand that is woman-owned, sustainability-focused, cruelty-free, artisanal, and charitable. I am so thankful for the amazing gift they sent me, and I can’t wait to buy more from them in the future.
What flavor of honey would you try? Are you a body scrub enjoyer? Let me know in the comments, be sure to follow Bee Inspired on Instagram, and have a great day!
-AMS
The numbers are simply mind-blowing: up to £264 billion for a climate “solution” that will increase emissions. Has the government lost its mind?
By George Monbiot, published in the Guardian 8th July 2026
The new prime minister will be looking for money? Well, here’s £21.7bn lying on the ground. The government could cancel its deranged, disastrous carbon capture and storage (CCS) programme at no cost to public welfare: in fact, it would greatly reduce the harm we will suffer.
Sorry, did I say £21.7bn? That’s the figure the government has been putting in its press releases for spending on this programme between now and 2050. But this covers only the first phase of the project. The climate experts Dr Andrew Boswell and Simon Oldridge worked through the data produced by the government’s Climate Change Committee, which was scattered across different spreadsheets, and discovered that the projected cost of the full CCS programme between now and 2050 is £264bn.
Yes, £264bn. More than a quarter of a trillion. This cost will be divided between the public and private sectors. Given the record of CCS programmes so far, we can expect the public to carry most of it.
An investigation by the House of Commons Public Accounts Committee found that roughly 25% of the public costs of CCS will be borne directly by the government, while the remainder will come from extra levies on our energy bills. The government should explain to the electorate that it intends to slap up to £198bn on our bills. Then see how that lands.
Even this might not be the end of it. Buried in an arcane side document is a government commitment to pay a “premium” for the hydrogen produced by the CCS programme for 15 years. This commitment is uncosted, but could run to tens of billions more.
But surely CCS is essential for cutting carbon emissions? That’s how the government has pitched it. On the contrary, this programme will massively increase them. The Climate Change Committee claims that the role of CCS is “limited to sectors where there are few, or no, alternatives”. But this is simply untrue. Its own data shows that only between 5% and 6% of the CCS deployment in the UK will be used to address the emissions of industrial sectors such as chemicals and cement, whose impact is hard to abate (though even here there are partial alternatives).
The great majority of CCS will be attached to new fossil fuel-burning power stations, wood-burning power stations and hydrogen production from fossil gas. In fact, almost all the projects in the government’s first tranche are for fossil fuel-based schemes. But there are abundant alternatives to these highly destructive plans. Given the speed at which battery technology is evolving, enabling a balanced and reliable electricity supply without any use of fossil fuels, the committee’s claim is bunkum.
Its insistence that we need hydrogen made from fossil gas is also baseless. Its own figures show that producing hydrogen from gas with CCS will cost twice as much by 2050 as producing it from the electrolysis of water, using renewable electricity.
The new CCS plants will mean massively more gas use than the UK would otherwise have required. Ultimately, that means more imports of liquefied natural gas (LNG). We now know that, thanks to methane leakage along the production and transport chain, LNG has higher emissions than coal. Two-thirds of its greenhouse impact occurs before the gas arrives in this country. So that’s all right then – it doesn’t count towards our national figures.
If the real aim were to cut emissions, we would push fossil fuel use in the electricity sector down to zero, and scale up renewables and battery storage instead. The net effect? Much lower climate impacts and much lower bills. Instead, the programme will greatly ramp up both. Why?
Well, the whole thing has been built the wrong way round. It appears likely to be the result of massive lobbying by fossil fuel companies. In 2023 alone, as the key decision on deployment loomed, the oil companies Equinor, BP and ExxonMobil attended 24 meetings with Conservative ministers to discuss CCS. Why? Because they know it’s the only way they will be permitted to keep burning gas. Governments have sought to find a way of meeting their demands while adhering to the climate budgets, so lo, a £264bn white elephant is born. As the Climate Change Committee admits, “gas with CCS accounts for around half of the remaining demand for fossil fuels in 2050” in the UK. In other words, this is their lifeline.
And now we know something else: that the scientific credibility of CCS as a climate solution was shaped by the oil company BP. Investigative work by ProPublica and Drilled discovered that BP both financed and helped steer one of the most famous of all climate papers. The “Wedges” paper, published in 2004, became a foundation of government policy around the world. It purported to show how climate stabilisation was compatible with continued fossil use. And one of the major policies its plan relied on was carbon capture and storage.
BP’s chief executive suggested the “wedges” concept. Another BP executive was so heavily involved that the scientists suggested he should be named as co-author. He declined: the industry tries not to leave fingerprints. The paper greatly oversold CCS, presenting it as “already deployed at an industrial scale”. In reality, it had barely been tested. Yet it underpinned three of the 15 climate actions the paper proposed.
Since then, there has been a long record of shiny promises followed by partial or total failures. In the UK alone, three attempts (the 2005 Peterhead plan, a 2011 demonstration project and a 2012 funding competition) have been abandoned, thanks to cost escalation and infeasibility. As the Public Accounts Committee remarks, the government “is taking a high-risk approach by backing first-of-a-kind, unproven technologies with large amounts of taxpayer and consumer funding”.
But success is not the point. The point is to provide a gigantic, publicly-funded reason for the fossil fuel industry to stay in business. Guess who the lead operator of the government’s first CCS cluster is. Hello, BP.
So we come round full circle. From cradle to grave, this programme appeases the world’s most antisocial and destructive sector. The wasted money, the lost years, the lost lives: for how much longer will this farce continue? And how many more warnings will the government ignore?
www.monbiot.com
Steady temperatures are the preserve of the rich. The billionaire press wants everyone else to suffer.
By George Monbiot, published in the Guardian, 1st July 2026
Every time you think the idiocy has hit rock bottom, it discovers a new level. It turns out there’s an even deeper hole you can dig for yourself than climate-science denial: heat-stress denial. Across the billionaire press last week, columnists and leader writers minimised the health impacts of the heatwave, particularly in schools.
An editorial in the Telegraph (which represents the newspaper’s view) titled “Hot weather alarmism treats the public like children” maintained that “unlike in the seventies, when people were largely trusted to look after themselves, officialdom now feels the need to lecture the public about the risks of hot weather at every opportunity”. Extreme heat warnings are issued and weather maps are “painted in an alarming red”. Outrageous! Instead of issuing warnings, the government should just trust people to “take the appropriate precautions”. We should all “learn to live” with it. Quite right too: whatever happened to the bulldog spirit of ignorance and needless death? Cricket, warm beer, excess mortality: these are the markers of national character.
Also in the Telegraph, under the headline “Heatwave hysterics wouldn’t have lasted a day in 1976”, the columnist Ysenda Maxtone Graham insisted that during the heatwave that year – which she remembers as “two months of blissful messing about” – “common sense was applied by most without the need for nannying intervention”. Now, however, “health messages range from the patronising – tube announcements imploring travellers to carry a bottle of water – to the preposterous, as if a healthy adult is liable to drop dead from a little bit of sun exposure”. Never mind the unhealthy adults. Or disabled people, or elderly people, or children, all of whom are likely to be more vulnerable. She claimed that in 1976, “schools didn’t close because of the heat”, and that children and teachers heroically “sweltered in 30-degree classrooms”.
Maxtone Graham’s column was remarkably similar to Jane Moore’s in the Sun, titled: “Why on earth do schools need to CLOSE in hot weather? Forget today’s nannying, alarmist state – let’s go back to ’76.” Moore remembers 1976 as “the best summer of my life”. Apparentlythere was a “gung-ho spirit” that “should be used as a standard benchmark for common sense”. The Daily Mail ran an article whose subheading claimed “in 1976 … the schools DID stay open”.
In fact, as Leo Hickman of Carbon Brief points out, schools DID at least close early during the 1976 heatwave, even though June temperatures never reached the records set last week. And in 1976 the heat was dry, whereas last week humidity was high, compounding the health risks. But as soon as such a hole is dug, the entire rightwing media seems obliged to jump into it. It’s often said that the left preaches solidarity and fights like cats in a sack. But the right preaches individualism while reciting daft and unevidenced claims in unison.
There is a powerful body of evidence showing that warnings and advice save lives. The Red Cross discovered in 2023 that there’s a strikingly poor understanding of the health risks of heatwaves in the UK, where they used to be rare. A survey reported in the journal Energy Research & Social Science last year found that 49% of participants had “little to no knowledge on how to cope with extreme heat”. Nevertheless, government warnings, doubtless to the delight of the Telegraph, remain vague, hard to interpret and unsupported by effective action. Let the bodies pile high.
Fondly recalling the halcyon days of your youth is never a great basis for empirical comparison. But what accentuates this issue are the unacknowledged class politics. There’s nothing new about feather-bedded columnists in nice homes in leafy streets or air-conditioned offices instructing other people to tough it out. But the class disparity in heat shielding is especially acute in Britain, where homes and public buildings are woefully unsuited to extremes.
The paper I mentioned above also found that 82% of households reported difficulty in keeping at least one room cool during the summer. The rate of overheating for the poorest half “was twice that of householders in the top half of higher-income earners”. Many other studies have produced similar findings. Steady temperatures are the preserve of the rich.
Extreme heat hits children – who have higher metabolisms and lower sweating rates – harder than most adults. Their thermal comfort levels are, on average, 1.9-2.8C lower. There are many reports of children vomiting and losing consciousness in class during heatwaves. Temperatures above 25C limit their cognitive performance. The government’s Climate Change Committee finds that “taking an exam on a 32C day leads to around a 10% lower likelihood of passing compared to a 22C day”. Yet another advantage for private schools, which can generally afford better buildings and air-conditioned exam rooms.
But, as the government confirms to me, it sets no maximum temperature limit for schools. Otherwise it might have to do something. Instead, it advises schools to open and close doors and windows and minimise heat from equipment: advice that leaves teachers with sealed windows and impossible heat loads in despair.
A new study of schools in Hampshire finds that 66% of classrooms present a “cognitive impairment risk”. If action isn’t taken, this will rise to 92% by 2050. Already, “heat strain” – physiologically dangerous temperature levels – afflicts 6% of classrooms. Many school buildings, especially the “lightweight, overglazed, single-sided” models favoured from the 1950s onwards, are grossly ill-suited to hot summers.
Thanks to years of austerity, many classrooms are in a terrible state. School buildings that should have been replaced decades ago are still in use. It is unlikely to have escaped the Conservative architects of the programme that declining public provision further privileges their class. No wonder they fetishised competition, which they so blatantly rigged in their favour.
So now, as ever, the rich lecture the poor, and demand the removal of the feeble protections that might enhance and defend their lives. Their claim that “we need to be tough” seems always to translate into “they need to be tough”, while our lives become only cushier. Performative ignorance is the default state of such journalism. But I can’t help wondering whether there’s also an element of gleeful, snobbish cruelty: I’m all right, so let the great unwashed get what they deserve.
www.monbiot.com
Two-Tier Justice [George Monbiot]
It’s real, and it’s the exact opposite of what the far right says it is.
By George Monbiot, published in the Guardian 17th June 2026
“If you are targeting people on the basis of the colour of their skin,” the Northern Ireland secretary, Hilary Benn, asked last week, “how else can you describe them? That is racist thuggery.” It is. But there is another way of describing the actions of the rioters burning people out of their homes in Belfast, though ministers somehow cannot bring themselves to say it. Terrorism.
The violence there clearly meets the government’s definition: “the use or threat” of actions designed to “intimidate the public” for the purpose of “advancing a political, religious, racial or ideological cause”. Among these actions are “serious violence against a person” and “serious damage to property”. I happen to believe that the property clause blurs the issue. But either way, in what possible world do the Belfast attacks not fit the definition?
Instead, the term is largely reserved by ministers for those who challenge Israel’s actions in Gaza. Matching the official definition to the Palestine Action protests is a far tougher call than matching it to the Belfast riots. But while more than 3,000 people have now been arrested for holding up signs in support of the banned group, and many face terrorism charges, no one in Belfast or Southampton has been charged with terrorist offences. Nor have those who whipped up the riots online. In fact, the latter group hasn’t yet been charged with anything. If you say “I support Palestine Action”, they might put you in jail. If you incite a racist riot, they put you on TV.
On Monday, the court of appeal upheld the government’s ban on Palestine Action, in a ruling that seems to me to highlight both the dangerous breadth of the government’s definition and the inequality of its application. As the human rights group Liberty points out, the judgment fails to clarify which direct action targeting property would not be terrorism. The former home secretary, Yvette Cooper, decided to ban the group after some of its members spray-painted two warplanes. Damaging military equipment in the hope of preventing its deployment, especially in illegal wars, has long been treated as an act of civil disobedience motivated by conscience, and some juries have acquitted on this basis.
The court of appeal judgment managed to cast protest as terrorism and terrorism as protest. Palestine Action “is not, as it claims, a direct action civil disobedience protest group like the suffragettes operating transparently in the open”. What??? Did the suffragettes plan their bombings, arson and assassination attempts – far more extreme than anything Palestine Action has contemplated – in open meetings in Parliament Square? The entire judgment seems to me to be based on fairytales: about democracy and how it evolves, the benign nature of the state, the efficacy of polite, invisible protest, and the untroubled course of English history.
The judges stated that banning Palestine Action “will not prevent any or all demonstrations targeted at Elbit”, an arms manufacturer supplying the Israel Defense Forces, whose factories in Britain have been a primary focus for the group. Well, two days earlier, John Woodcock, the government’s former anti-extremism tsar, called for the ban to be extended to the protest group People Against Genocide, which has blocked the gates of Elbit factories. The slippage had already begun.
It could go much further. At Woolwich crown court at the end of last week, four Palestine Action protesters who broke into an Elbit factory were sentenced as terrorists. The astonishing aspect of this case? They were not charged, tried or convicted as terrorists.
In fact, the prosecutors decided not to pursue terrorism charges against them, presumably because they reckoned the jury wouldn’t convict. But never mind: the Sentencing Act 2020 allows judges to send people down for crimes for which they have not been tried, with far longer sentences and more onerous conditions.
As Amnesty International explains, until recently the conscientious motivation of protesters was treated as a mitigating factor in sentencing. Now it is treated as an aggravating factor. What makes this even worse is that such defendants can no longer explain their motivations to the court. But, once the jury is dismissed, the judge can decide why they did it, and sentence them accordingly. This is not justice.
The action for which they were convicted happened before Palestine Action was proscribed as a terrorist group. What this means is that any protesters engaging in direct action could now be sentenced as terrorists, whether or not their group has been banned.
Astonishingly, the judge, Mr Justice Johnson, possibly for the first time in history, also sought to have legal proceedings taken against the barrister representing the Palestine Action protesters for contempt of court for his summing up of the defence case. Johnson claimed that Rajiv Menon KC had defied his instruction not to tell the jury it had the right to acquit the defendants regardless of his directions: an ancient and fundamental principle of English law.
The government has leant heavily on the assault of a police officer with a sledgehammer by one of the protesters, Samuel Corner. But, reckless and severe as the attack was, he was convicted of grievous bodily harm without intent: he panicked after being sprayed in the face with the incapacitant Pava and,unable to see clearly, lunged forwards to help another protester. In other words, violence against people was not the intent of the sole perpetrator, let alone of Palestine Action.
By contrast, some of the rioters in Belfast and Southampton clearly intended to hurt police officers and others. Some were highly organised. Investigative journalists have identified several groups helping to incite or organise the violence. Good luck finding them on the government’s list of proscribed organisations.
So, in considering Benn’s question – how else can we describe what we are seeing? – there is a second relevant answer: one rule for the right, another for the left. In other words, two-tier justice. The far right’s appropriation of the term, which has been used by Black activists for at least 45 years, should not stop us from seizing it back. Two-tier justice is real and ever present. But the last people who will ever find themselves on the wrong side of it are rightwing white men.
The government and judicial system treat far-right terrorism more leniently than leftwing dissent. So perhaps this should lead us to another answer to the question of how best to describe what we are seeing. It might be a nominally Labour government. But this is rightwing authoritarianism.
www.monbiot.com
[$] Shielding running kernels against exploits with BPF [LWN.net]
Cisco has some unusual challenges when it comes to deploying security patches across the company's many devices running custom kernels. John Fastabend spoke about his work preventing exploits with BPF at the 2026 Linux Storage, Filesystem, Memory-Management, and BPF Summit. The technique could substantially reduce the time necessary to respond to kernel vulnerabilities, but it will not be fully effective unless more hooks are added to the kernel.
Why don’t we just make the entire stack out of guard pages? [The Old New Thing]
In my earlier overview of how compilers on different architectures perform stack probes, Cole Tobin asked, “Why not have a page fault handler that detects the faulting address being the stack and page in the other pages?”
Csaba Varga replied, “My guess: you don’t want an invalid pointer dereference to allocate a huge chunk of stack, just because the pointer happens to be pointing where the stack might grow, eventually. You want an invalid pointer dereference to segfault most of the time.”
I agree with Csaba on this.
If the entire stack were made of guard pages, then it means that a single page fault far below the stack limit could take arbitrary long and allocate arbitrarily large quantities of memory. The program might have said that it wants stacks to default to 1GB, and now a single page fault on the stack could result in a long pause as the system allocates 1GB of memory. If you study the problem in the debugger, what you see is that a single memory read takes several minutes.
And even worse is that there’s no way to stop it, since it’s happening in kernel mode. You see a program starting to balloon and consume all the memory in the system, so you go to Task Manager and terminate it, but the process doesn’t die. It just keeps on growing!
Even if the guard page is more than one page, it’s still a small fixed number of pages, the system can satisfy a guard page fault in a short amount of time. And more importantly, the amount of work is bounded.
The post Why don’t we just make the entire stack out of guard pages? appeared first on The Old New Thing.
Everyone: You can subscribe to the rss.chat flow, in RSS of course. If you're a developer, read the source for the feed. And then read the source namespace docs re the recent additions, inReplyTo and comments, and a special page that walks through how the RSS feed becomes part of the flow for our social network.
I Regret To Say That GMail is Now a Spam Farm, or, Why You Should Really Get That Dedicated Email Address Now [Whatever]

If you read this site regularly, then you’ll know in the past year there’s been a marked increase in “AI” spam and scams designed to try to con writers (generally, and in the emails that come here, me specifically) into sending money off to strangers for various marketing services. At this point these emails are so predictable that the vast majority of them are immediately sent to my spam folder, and those that still manage to show up in my email proper are recognizable by their subject lines, and are then manually punted into spam unread. It’s all very predictable and I assure you that no one — no one — has ever been so interested in “marketing” my work as these spam emails have claimed to be in these last several months.
Aside from their predictable subject lines and verbiage, there’s also one other thing that these spam emails have in common: 99.9% come from GMail accounts. Once in a blue moon one will come from yahoo or aol or some other general mail service, but they are a rarity. Almost all of them are GMail. One one hand, congrats to Google, I suppose, for cornering the stand-alone email market so completely that even scammers are impressed with its ease of use. Surely that is some sort of sign of success.
On the other hand, if you are a person who relies on GMail as your primary email, this means that if you are trying to send me mail, you now run a much higher chance of being deposited into my spam folder. So much of the email I get from GMail accounts at this point is spam that an actual Gmail email, from an actual person, is statistically relatively rare. To be fair, if you write that email to me yourself with your own little fingers, your chances of hitting my actual inbox are pretty decent. But if you used GMail’s onboard “AI” to “help” you write that email, you are likely going directly to the spam folder. The GMail spam filter is now trained to recognize “AI” slop sentences, even those written by GMail itself. Yes, there is probably irony there.
And if you are an actual business concern, using a GMail account to try to reach me about something regarding my books? 100% going to the spam folder. Every time. I’m sorry scammers have ruined things for you, but that’s where we are at the moment.
This fact about GMail gives me no joy. I have had a GMail account basically since they’ve been available, and I use the GMail interface as the front end for my john@scalzi.com email account. It’s handy and useful! But at this point it’s been so swamped with scammers, and so much of the email I get from the domain is junk, that every email I get from GMail now is suspect until proven otherwise. I can’t imagine I am the only writer, or person, in this situation these days.
I have long been a proponent of writers and other creators having their own domains, personalized emails and websites (and other people and businesses too), and while I understand getting one’s own domain and email address is not the easiest thing in the world to set up, even now, the growing spamification of GMail is actually a very good reason to do it. For one thing, it’s going to be the difference between tripping my spam filter or getting into my inbox. As noted above, GMail now goes into the spam filter more often than not, and while I try to comb through the spam filter before deleting the whole queue, I will inevitably miss things.
For another thing, an email on a dedicated domain that corresponds to your name/business is going to go a long way to verifying that you are who you say you are, rather than just another spammer — especially now, because lots of spammers are pretending to be writers and other creators or organizations from impostor GMail accounts. I can’t assume anymore that someone contacting me from a GMail account is legitimately who they say they are. I mean, I got GMail just yesterday from “Margaret Atwood,” wanting to tell me how much she loved my book as a prelude to trying to suck money out of my wallet. I would love for the actual Margaret Atwood to tell me she enjoyed my work. I rather doubt she needs my money. And I very much doubt that this GMail account was legit.
All of which is to say: Please get your own domain for your email. Especially if you are a writer or creator, but even more especially if you are an ongoing business concern. Bluntly, your own domain and email are table stakes for businesses. The spam problem isn’t going to get any better, folks. I’ve been online now for 35 years. It’s never once gotten better since I’ve been here.
Also, don’t use “AI” to write your emails. My spam filter will grab your email really fast if you do. Use your own brain and fingers.
Finally, Google, if you’re listening, and I know you are because you scrape this site enough: Fix your damn GMail spam problem. It’s ruining one of your signature products. Not just for you. For all the rest of us, too.
— JS
Final normal Debian bookworm release [LWN.net]
Debian has announced the final normal update for Debian 12 ("bookworm"). Long-term-support updates will continue until 2028. As may be expected from a stable version, the update is mostly limited to security fixes. Still, it may be time for Debian users to look into upgrading to a more recent version. Conveniently, Debian 13 ("trixie") also received an update this weekend, with many of the same security fixes.
Security updates for Monday [LWN.net]
Security updates have been issued by Debian (chromium, libxfont, mesa, opam, and wireless-regdb), Fedora (acl, attr, chromium, cjson, composer, docker-compose, jfrog-cli, librabbitmq, libssh2, libXfont2, log4cxx, OpenImageIO, openssh, p11-kit, perl-Crypt-DSA, perl-HTML-Gumbo, prometheus, python-dulwich, python-idna, python-pillow, python-tornado, sssd, tmux, upower, webkitgtk, xorg-x11-server, and xorg-x11-server-Xwayland), Mageia (libarchive and vim), Oracle (389-ds:1.4, buildah, cups, edk2, freerdp, golang, grafana, gstreamer1-plugins-bad-free, gstreamer1-plugins-good, gstreamer1-plugins-ugly-free, kernel, libexif, libsolv, libtasn1, libxml2, nginx:1.24, nginx:1.26, nodejs:22, nodejs:24, oci-seccomp-bpf-hook, podman, postgresql:18, python-urllib3, tigervnc, tomcat, unbound, and xorg-x11-server), Slackware (p11-kit), and SUSE (agama, dash, dracut, flannel, go1.26, gsasl, gstreamer-plugins-good, ImageMagick, imagemagick, kernel, krb5, krb5, krb5-mini, libIex-3_4-33, libmbedtls23, libxfont2, nasm, nghttp2, perl-CGI-Session, perl-dbi, perl-List-SomeUtils-XS, python-pillow, python-social-auth-app-django, python-urllib3, python313-Django4, python313-Django6, python313-pytest-html, python313-sqlparse, python313-websockets, rclone, rust-keylime, rustup, sccache, spectre-meltdown-checker, sssd, terraform-provider-aws, terraform-provider-azurerm, terraform-provider-external, terraform-provider-google, terraform-provider-helm, terraform-provider-kubernetes, terraform-provid, thunderbird, tiff, traefik2, xorg-x11-server, and xwayland).
The Frontend Verification Gap in AI-Assisted Development [Radar]
AI-assisted development has made frontend work feel much faster. A developer can ask for a form, a dashboard card, a table, a modal, or a responsive layout and get a decent first version almost immediately. The code may compile. The page may render. At first glance, the UI may look done.
But frontend developers know that “it looks done” and “it works well” aren’t the same thing.
A generated form might show validation errors visually but fail to announce them to a screen reader. A modal might open but not move focus to the right place. A dropdown might work perfectly with a mouse and still be unusable from a keyboard. A loading state might look fine in a demo but become confusing when the network is slow. A component might behave well with sample data and break as soon as real content is longer, missing, delayed, or unexpected.
That is the frontend verification gap in AI-assisted development. In this context, verification means checking whether an interface actually works properly for users under realistic conditions, not just whether the code compiles, the page renders, or the screen matches a design. It includes things like accessibility, keyboard behavior, focus management, state changes, loading and error handling, and whether someone can complete the intended task from start to finish. AI can help teams produce interface code faster than they can confidently answer those questions.
This isn’t an argument against AI tools. They can be genuinely useful. They can reduce repetitive work, help developers get unstuck, and speed up the first draft of a feature. But AI-generated frontend code should still be treated as a draft. The next challenge isn’t just generating UI code faster. It’s verifying that code with enough care.
Some kinds of code are easier to verify than user interfaces. A function returns the expected value or it doesn’t. An API sends back the right response or it doesn’t. A script completes successfully or it fails.
Frontend work is different because the interface is where software meets people. A UI has to satisfy many expectations at once. It has to render correctly, respond to input, preserve state, support keyboard navigation, expose the right information to assistive technologies, and handle loading, errors, empty states, and unexpected data. It also has to fit the design system so the experience feels consistent.
AI tools are often good at producing the visible part of this work. They can generate a form, card, or table that looks reasonable in the default state. That’s helpful, especially when a developer needs a starting point.
The problem is that the default state is only one part of the experience. The harder questions come after the screen appears. Can someone complete the flow using only a keyboard? What happens when the request fails? Does focus move somewhere useful after an error? Are field labels and error messages connected correctly? Does the UI still make sense when there are no results? Is the generated code using existing design-system patterns, or did it quietly introduce a new one?
These aren’t small details. They are part of whether the interface actually works.
A common AI-assisted workflow looks something like this: write a prompt, generate code, review the result, make a few edits, and move on. That may be fine for prototypes or internal experiments. It is much weaker for production frontend work.
The issue isn’t simply that AI makes mistakes. Developers make mistakes too. The issue is that AI can make incomplete work look surprisingly polished. The code may be clean. The structure may look familiar. The component may follow common framework conventions. That polish can make reviewers less likely to question the behavior.
Frontend problems are often missed this way. Accessibility issues, focus bugs, race conditions, missing empty states, and unclear error messages usually don’t jump out from a quick visual scan. They show up when someone interacts with the feature under less-than-perfect conditions.
AI-generated tests can create the same problem. A test may confirm that a component renders but not that a user can complete the task. Another test may check internal state changes while missing keyboard behavior, validation messages, loading states, or failure paths.
So the workflow needs to be stronger than “prompt, code, review.” Teams need better validation around AI-generated frontend work. That doesn’t have to mean a heavy process. It simply means being more intentional about what must be checked before a generated UI is considered ready.
One of the simplest ways to improve AI-generated frontend code is to give the tool clearer expectations before it starts writing code. Some of those expectations shouldn’t have to be repeated in every prompt. Rules such as using existing design-system components, following accessibility standards, preferring native HTML, and handling loading and error states can often be placed in a persistent project instruction file, such as CLAUDE.md, or another startup file that the agent reads at the beginning of its work. That gives the agent a shared baseline for the whole project and reduces the chance that important standards are forgotten from one task to the next.
A task-specific prompt can then focus on the details that are unique to the feature. For example, instead of simply asking for a form, the task might explain which fields are required, what should happen after submission, where focus should move after validation, and how the user should recover if the request fails.
The persistent instructions and the task-specific prompt serve different purposes. The first captures the team’s standing engineering expectations. The second explains what this particular feature needs to do.
This also makes review easier. The reviewer is no longer asking only whether the screen looks close to the mockup. They can check whether the feature follows the project’s established rules and whether the specific flow behaves as intended.
This matters because many frontend quality expectations are easy to leave unstated. Accessibility, focus behavior, loading states, and error recovery should be part of the agent’s working context wherever possible, rather than depending on a developer remembering to mention them in every prompt.
AI tools are most useful when they operate inside clear boundaries. For frontend teams, one of the best boundaries is a strong component system.
If every generated feature creates its own buttons, inputs, modals, dropdowns, alerts, and tables, the team has to review the same concerns again and again. Is this button accessible? Does this modal manage focus correctly? Is this error message connected to the field? Does this dropdown support keyboard interaction? Are the styles consistent with the rest of the product?
That creates unnecessary rework. A stronger pattern is to put those decisions into reusable components. A button component should already handle variants, disabled states, focus styles, and accessible naming expectations. A modal component should already handle focus movement, escape behavior, labeling, and returning focus to the trigger. A form field component should already connect labels, helper text, required state, and validation messages. Then AI isn’t being asked to invent the pattern from scratch. It’s being asked to compose pieces that already carry the team’s standards.
There’s a big difference between prompting, “Build a modal form,” and prompting, “Use the existing Modal, TextField, Button, and FormMessage components to build this flow.” The second request gives the tool a safer path. It also gives the reviewer fewer things to worry about because the riskiest interaction patterns are already handled by shared components.
In that sense, a design system isn’t only about visual consistency. It can become a verification layer. It narrows the possible output and helps teams reduce the number of problems they need to catch manually.
Automated checks will never catch everything. They can’t tell you whether a flow feels intuitive, replace a thoughtful review, or guarantee that every user will have a good experience. But they can catch common problems early, which makes them an important part of frontend verification.
Accessibility checks can flag missing labels, invalid ARIA usage, some landmark problems, and other frequent mistakes. Component tests can check state changes and validation behavior. End-to-end tests can confirm that someone can complete an important flow, while visual tests can catch certain layout regressions. The important thing is to test behavior, not just structure.
For example, a basic test might confirm that a form renders. A more useful test checks whether a user can enter values, trigger validation, understand the errors, correct them, submit the form, and receive clear success or failure feedback. Similarly, instead of checking only that a modal appears in the DOM, a test can confirm that focus moves into the modal, keyboard navigation works, the Escape key closes it, and focus returns to the original trigger.
This is where Playwright-style user-flow testing can be especially useful. It allows teams to test an interface in a way that is closer to how a person actually experiences it. The question becomes less about whether the interface renders and more about whether the user can complete the task.
AI can help generate these tests, but the team still has to define which behaviors matter. Asking an AI tool to “write tests for this component” leaves too much open to interpretation. A request to test keyboard navigation, validation errors, loading behavior, empty states, and failed submissions gives it a much clearer target. The quality of an AI-generated test still depends on the quality of the verification intent behind it.
Code review still matters, but AI-assisted frontend work needs a slightly different review mindset. Reviewers need to look beyond whether the code is clean and whether the screen matches the expected layout. They should also ask: Are we using existing design-system components? Did the generated code introduce a custom control where native HTML would have been better? Are labels and errors connected correctly? Can the flow be completed with a keyboard? What happens when data is empty, delayed, or invalid? Do the tests cover real user behavior or mostly implementation details?
These questions help shift the review from syntax to experience. That doesn’t mean every pull request needs a long checklist. The process can still be lightweight. But the important concerns need to be visible somewhere. If accessibility, focus behavior, loading states, and error recovery never come up during review, they’ll continue to be missed.
AI doesn’t automatically solve that. In some cases, it makes the gap easier to miss because the generated result looks more complete than it really is.
The goal isn’t to make AI-assisted development feel risky or slow. The goal is to use AI for what it does well without letting it quietly lower the quality standard.
AI is useful for first drafts, repetitive scaffolding, alternate implementations, test ideas, and refactoring suggestions. It can help developers move through routine work faster. But it shouldn’t define what “good enough” means.
Frontend teams can get more value from AI when they pair it with clear engineering habits. Use existing components instead of generating new patterns each time. Include accessibility and interaction behavior in the prompt. Ask for loading, empty, error, and success states. Add automated checks for common problems. Test important flows the way a user would experience them. Review behavior, not just code structure.
These habits reduce rework. They also make AI-generated code easier to trust, because the trust comes from verification rather than from how confident or polished the generated output looks.
AI-assisted development does not make frontend engineering less important. It changes where the value is. The value is not only in writing every line of UI code by hand. It’s in defining good component boundaries. It’s in knowing which patterns should be reused. It’s in understanding accessibility and interaction details. It’s in writing meaningful tests. It’s in noticing when a UI looks finished but isn’t actually ready.
That judgment matters because frontend failures are often experienced directly by users. A backend failure may return an error. A frontend failure may leave someone confused, stuck, or unable to complete a task. The user may not know whether they did something wrong, whether the application failed, or whether the interface was never designed for their way of navigating. Good verification protects users from that confusion.
AI is making frontend development faster. That’s a real benefit. But faster code generation doesn’t automatically create better interfaces. In many teams, the bottleneck will move from writing code to checking whether the code behaves well.
The teams that benefit most from AI-assisted development won’t be the ones that generate the most UI code. They’ll be the ones that build strong feedback loops around that code.
For frontend teams, that means treating verification as part of development from the start. Component contracts, design-system guardrails, accessibility checks, user-flow tests, and behavior-focused reviews aren’t extra polish. They’re how teams keep quality high while still using AI productively.
The future of AI-assisted frontend development is not just better prompting. It is better verification.
The views expressed are my own and do not represent those of my employer.
AI assistance was used lightly for phrasing, editing, and tightening parts of this draft. The article’s ideas, structure, examples, and final review are my own.
Issue 47 – Greta’s Wedding Pt. 2 – Cover [Comics Archive - Spinnyverse]
The post Issue 47 – Greta’s Wedding Pt. 2 – Cover appeared first on Spinnyverse.
There were thousand tickets in the backlog, and I was on the trail of a weird printer issue. I had a suspect, but that wasn't enough to close the ticket. I'm Anonymous. This is my story.
Whenever you hit the Print button, a request launches into the ether. “Print one copy of this file, double-sided.”
But you can’t just chuck it out there aimlessly. You gotta tell it where to go. So that’s why we have Internet Protocol, or IP. Every computer, every printer, every device on every network has one or more IP addresses for different operations. They’re just like the address you scribble on the envelope holding Grandma’s Christmas card. Send your print request to the right IP, and you’re in business. Send it to the wrong IP, and they’ll be shaking their heads on the other end. “Print? But all I know how to do is tell you the weather!”
As for what happens next, you’re at the mercy of the program’s error handling. If you’re lucky, they’ll send a detailed error message. If you’re not, they could ignore you, act up in weird ways, or completely self-destruct in a violent crash.
I was neck-deep in a Tech Support ticket concerning a printer in Human Resources. Not only was Grandma’s Christmas card landing in Pluto, the Plutonians were writing back, in the form of mysterious complaints that were nothing like the documents the printer had been tasked with.
My troubleshooting hadn’t shot much trouble at all, so I’d bugged some friends for ideas. Reynaldo had been reminded of an old, retired HR program for logging anonymous employee complaints. While our developer friend Megan quit our icy outdoor break spot to dig up dirt from the software side of things, Reynaldo and I went to his cubicle to trace IPs. He suspected a conflict … and that’s just what his command-line requests revealed. We leaned over his laptop together, studying a couple of terminal windows and their cryptic output to his even-more-cryptic inputs.
“Whenever that printer got set up in HR, it received an IP that was already in use by this server—” he jabbed an index finger at the relevant part of the screen “—which is apparently still up and running, even though I swear it was decommissioned.” Reynaldo frowned. “Who wants to bet that stupid complaint program has some kind of ability to print cached complaints?”
I frowned, too. “We won’t know for sure unless Megan digs something up.”
Reynaldo flashed me a look of pure cynicism. It wasn’t an indictment of Megan’s skill, more skepticism toward the idea of anyone having properly documented this mess. We had better odds of hitting a billion-dollar jackpot.
I sighed. “It’s an easy workaround, at least: assign the printer a new IP. But we’ve got bigger problems here. Why’s this zombie server still up and kicking? Why’d an IP conflict ever occur in the first place?”
“Don’t get me started on our FUBAR IP allocation and tracking.” Reynaldo’s lowered voice contained plenty of venom. “We’re talking multiple pools to track, multiple spreadsheets that have to be manually edited. Problems that are easy enough to fix! Why spend money on honest-to-goodness network management software?”
Short-term budgeting preventing long-term improvements: a damned shame we’d both seen all too many times. Being a tech support drone, having an innate desire to help that no amount of baloney could stamp out, I once more found myself longing to fix the unfixable.
“In my ticket notes, I’ll make noise about a more permanent solution,” I said. “At the very least, some bigwig oughta leap at the chance to save 3 cents of electricity a year by putting the complaint-spewing server out of its misery.”
I’d already resolved to contact Leila, the new head of HR, about this ticket. She needed to hear about Hothead, the manager-type who, in a fit of frustration, had taken a hair dryer to the same printer and nearly trashed it. I could also tell her about these lingering network vulnerabilities that would continue causing problems for everyone down the line.
I decided to do it without telling Reynaldo. I had the feeling that if I let him in on it, his eyes would roll clear out of his skull.
Working from Reynaldo’s cube, I assigned the HR printer a new IP address and once again cleared its queue. Then I sent Tony, the ticket holder, a private message asking him to give printing another go. I felt pretty good about his chances, but I’d wait for him to give me the all-clear before closing the ticket.
With the messaging app still open on my phone, I saw that Megan had invited me to drop by her cube. From Networking Central, I hoofed it up to Developers’ Row.
Megan’s cube was a familiar spot filled with bright, cartoony posters and figurines, the only splashes of color for miles. The titles and characters drew blanks in my over-the-hill brain. I kept meaning to ask her what they were, why she liked them. Another time, maybe. I found her with her back toward me, leaning intently in her swivel-chair toward the single monitor over her laptop docking station.
“Now a good time?” I asked under my breath.
She whirled around, tense, then relaxed with a smile, her gaze livelier than I’d seen it in a while. She picked up a small external memory stick from her desk to proffer my way. “That’s the HR application’s source code!” she murmured in conspiratorial fashion. “Guess where it came from?”
I smirked. “I know the answer should be ‘a code repository,’ but in this joint, that’s asking too much.”
“You’re right!” she replied. “It was never in a repo, never in source control. It lived and died on one dev’s local machine, a dev who retired way before I got here. His successor hung onto all the old code from that guy’s machine, just in case. But yeah, we don’t officially support the application anymore.”
Megan turned around, using her keyboard to tab over to an open window in a code editor. From over her shoulder, I saw line after line of an archaic programming language that the Egyptians might’ve used to build the pyramids.
“This code’s an undocumented disaster,” she said.
“There was an IP conflict at that,” I told her. “The print requests were going to a server that’s still running this thing. We assigned the printer a new IP, but the mystery server remains a head-scratcher.”
“I’ll trace through and figure out what it does when it gets a print request. Improve its error-handling in general,” Megan promised, more excited than daunted by the prospect. “I mean, if it is still up and running, I could tweak, recompile, and redeploy it so it doesn’t—”
Insistent metallic knocks sounded behind us. “Excuse me!”
It was the sort of pointed voice that somehow ignored your ears and stabbed into your gut instead. Megan froze, tense. I turned to find a woman at the threshold with the bearing of a vindictive hall monitor, rapping a fist against the cube’s bare metal frame.
She leveled a withering frown at Megan. “I was hoping for a status update on the Hewville refresh! Did I hear you say you were planning to work on something else?” The question sounded more like a threat.
This had to be Megan’s boss. Megan remained tense from head to foot. “I—”
“I need you to focus on your assigned projects. The things you can actually bill your time against.” After delivering the condescending reminder, the boss’ glare shifted my way. “And you are?”
I shoved unease aside and put on the game face I’d spent decades perfecting. “Tech Support. I meant no harm, ma’am. I was just asking Megan for help with an open support ticket.”
“She doesn’t have time for that!” the boss scolded. “If you truly need help from this department, then you must escalate your ticket through the proper channels.”
I already knew how that went: pulling together screenshots, logs, and other detailed information, only to receive half of a sentence fragment a few days later, asking for something I’d sent with the first message. In this case, I knew someone would just wag a finger at me about the HR application being out of support. Thanks but no thanks.
Megan struggled to muster one last defense. “This program’s still running on a server somewhere!”
“For changes to existing code, the proper procedure is to file a formal change request through the Project Management Team. The PMT will create a billing code and assign appropriate resources, if they deem it a proper use of development time.” The boss then looked at me like I was a used tissue she was ready to throw in the trash. “If that’s all, I suggest you head back to Tech Support, Mr. … ?”
No way was I handing her my name on a platter. I tried to glance Megan’s way, but she was staring at her lap. I felt bad leaving her in that lurch, but staying would only make things worse for the both of us.
“Later,” I said, both a goodbye and a promise.
I got the hell out of Devsville, slipping down flight after flight of stairs with a lead weight in my chest. For a moment, Megan had brightened in the face of a collaborative challenge. I’d felt a little more alive, too.
Thank God someone had been there to make sure no one helped each other.
The same sicknesses plagued the joint year after year. Almighty budgets. Status quo worship. Hierarchy and miles of red tape. Promising young people like Megan had their spirits crushed, and schmucks like me just put their heads down. Still a huge pile of other support tickets waiting for me, after all.
The frustration and resentment, the desire to do something to fix this, burned in my chest like a bonfire.
Back at my desk, I found a message from Tony confirming the new printer was behaving at last. Bolstered by my friends’ findings, I closed his ticket with notes about how the resolution was only a band-aid on a gaping wound. I messaged Megan, too, thanking her for trying.
And with that emotional bonfire still raging, I settled in and typed out a long email to Leila, detailing in full the most recent shenanigans I’d been a part of.
By the time I finished, I had one bit of good news: Aggie, my old mentor who’d turned manager a few years back, had accepted my meeting request to meet the next afternoon.
She wasn’t my boss, which meant it was still safe to vent her way. I had every intention. My resentment would no longer let itself be buried under this or that technical hiccup. It was insisting upon action.
The next day, I walked to the downtown coffee shop well ahead of the appointed time, glad to have the excuse to be somewhere else. Bought myself a drink and sat down where I could watch the door.
Five minutes late turned into ten … then twenty. No Aggie.
It was totally unlike her. Sure, she’d canceled last-minute before, but she’d always got in touch with me to let me know.
Caffeine jitters fueled a fear I couldn’t shake off. I sent PMs and left voicemails on her cell and work phones, asking her to respond when she could. Back at work, I asked around the department, including my boss.
She’d been AWOL the whole day. No one knew what was up.
Hours of work still stretched in front of me. I could barely sit in my chair, much less look at my monitor.
Just call me, Aggie, I willed, staring at the cell phone clutched in my hand.
She didn’t. Not that afternoon, not that evening. Beneath my fear was this strange gut feeling, this knowing sense that my worries were justified. It was crazy, but there was no talking myself out of it.
Early the next morning, they roped the whole department into the big conference room. Nobody knew what was going on until a small, ashen group of managers, directors, and directors of directors filed to the front and called for attention.
I already knew, deep down, what was coming.
“We’ve we received some very unfortunate news,” one of the senior directors spoke. “Agatha Shaw … passed away in her home after a heart attack.”
A few gasps escaped the assembly. Otherwise, you could’ve heard a pin drop. Wide-eyed looks of shock surged through us like lightning.
Aggie.
My gut had known all along, but my brain still wasn’t having it. Somebody somewhere must have goofed up royal, I thought. Happens all the time in this joint. Aggie had more life and fight in her than I ever did. I—
“Those of you who reported directly to Ms. Shaw will report to Bill Watson for now,” the director continued. “Dismissed.”
The brass began showing themselves out.
The rest of us just sat there, too stunned to move. That’s it? I marveled. No memorial? No counseling? No time off? Not one drip of sympathy?
I could only look on helplessly as Bill Watson, my boss, walked right over to me. He put his hand on my shoulder, leaned over, and muttered into my ear: “My office.”
While my brain reeled, my feet stood me up obediently. They marched me right off to the next chair I dropped into, the one opposite the large desk in Bill’s office.
He settled in on his side. “It’s a real shame about Aggie. We’re screwed without her.”
I just sat there, still reeling.
”My manager is looking for someone to step up in a big way.” Bill nodded in my direction. “You’re ready. You deserve it. Her direct reports are reporting to me for now; over the next few months, I’m transitioning them to you. The promotion will follow, as soon as the next performance review comes around!”
We were just cogs in that joint. Never before had the point been driven home so viscerally. Righteous rage surged up from within, clearing my brain and shooting strength through my limbs. I jumped out of that chair and glared down at him. “Hell no! Find someone else!”
I got the hell out of there and dragged myself all the way home to collapse on my couch.
To be continued ...
AI Data Centers and the Concentration of Wealth [Schneier on Security]
This essay was written with Nathan E. Sanders, and originally appeared in The Guardian.
Opposition to AI data centers has emerged as a primary theme in US politics, one that—surprisingly—doesn’t fall along party lines. We applaud people coming together for constructive debate on any issue, and agree that communities need to evaluate whether any economic benefits these data centers bring is worth their costs. Still, we worry that a focus on data centers obscures the larger impacts of AI on people’s lives: the concentration of power of AI companies, and their widespread political and financial influence.
Local data center opposition is grounded in legitimate concerns about misallocation of land resources when housing is at a premium, pressures on already higher energy prices, and localized environmental impact. Unlike other resource-consuming and polluting industrial facilities, data centers produce very few jobs. The fact that US opposition to data centers seems to be most fierce among lower-income communities reflects righteous indignation with an inequitable bargain, where tech companies and developers profit from exploiting local resources but offer little in return. On a global scale, their carbon footprint could grow unsustainably if usage accelerates. And all this is in aid of a technology that many fear will propagate misinformation, take their jobs, or even cause existential risks for humanity.
For some, data center opposition may feel like the only tangible mechanism for registering their concern, disapproval, or even anger about AI. The problem is that this may be exactly what the AI companies are banking on. They can overcome the protest when it matters to them, and live with a significant fraction of proposals being defeated. More importantly, focusing political opponents on the data center issue obscures the bigger prize they’re after.
While there is a staggering three-quarters of a trillion dollars being spent on data center infrastructure by US companies this year alone, this investment should be taken in perspective. The market for enterprise software, for example, is about twice this size. And it’s small compared with what these companies actually want.
AI companies have their eyes set on capturing all the value created by entire industries. The technology has arguably already conquered customer service and consumer sales. But on the horizon are bigger targets, such as enterprise software development, creative design, management and even legal services. In AI companies and their allies’ vision of the future, AI replaces teachers and doctors. The companies would rather spend time fighting resistance to how fast they are building computing infrastructure than dealing with issues of how their products should be used in those fields, or how those fields should be protected from their products.
And while data center opposition campaigns have been successful in building widespread appeal, their effectiveness in the US is mixed. They seem to be most successful when organizing against speculative, early-stage data center proposals that have a relatively low likelihood to ever see fruition. Meanwhile, advanced-stage, well-capitalized data center projects have proven to have the resources to overcome local opposition. An OpenAI- and Oracle-backed facility in Saline township, Michigan, is breaking ground on construction even after local officials voted to reject it. The developers sued the town of 3,000 and forced a settlement that involved their project going forward. Meanwhile, the Trump administration, a vigorous ally of corporate AI, has signaled its willingness to advance AI infrastructure development by overriding state objections and even using federal lands.
Also consider that rampant data center development may be a momentary spike rather than a longstanding concern. Demand for the centralized computing that data centers provide may well decline over time. The leading Chinese labs, such as Z.ai, are innovating in technical mechanisms to make frontier-class models smaller and cheaper to run. AI power users have become adept at miniaturizing open weight models, ones published free for anyone to download and use, to run locally on their own computers. Apple and Google both support infrastructure stacks for running AI models directly on mobile phones. It could be that the current mania for data centers will look like the fiber optic cable bubble from the early 2000s, as demand shifts to smaller models and AI usage on people’s own devices.
For those concerned primarily with affordability and environmental protection, singling out data center construction is misplaced. Energy rates and inflation today seem to be most visibly affected by the US-Iran war. The US is disinvesting in long-term energy security by ceding the renewable energy industry to China and actively cancelling climate commitments. Consider that 10% of global carbon emissions stem from heating buildings, which dwarfs energy use by AI and could be cut fivefold by using heat pumps powered by renewable energy. With respect to housing affordability, federal housing subsidies have changed little over three decades, in inflation-adjusted terms, even as housing costs have spiked and homeowners have enjoyed robust tax incentives.
As for AI itself, the concentration of power and wealth in these tech companies is the greatest existential risk facing society today. This means we must limit corporate power, especially corporations’ ability to exploit the public and manipulate our political system.
Opposing data centers should be just a starting point. We can advocate for states to regulate AI, to reject irresponsible uses of the technology, and shape corporate behavior. We can fight for AI computation to be taxed, so that the public can capture some of the profit of AI use while also forcing AI companies to internalize more of the energy and environmental consequences associated with its use. And we all can join the global movement for Public AI, an alternative ecosystem for AI that is developed under public control with an incentive structure to create public benefit rather than private profit.
The US midterm elections present ample opportunity for those seeking to control the AI political agenda. In the recent New York congressional Democratic primary, PACs linked to the dueling AI companies Anthropic and OpenAI spent millions of dollars lobbying for or against “AI safety“, the idea that we must urgently monitor and prevent people from using AI to cause catastrophic harms. We’re already seeing a similar dynamic play out in races in Massachusetts and other states.
Why would Anthropic and OpenAI—bitter industry rivals but fundamentally on the same side politically—support opposing viewpoints? Because they both ultimately profit from the mystique: the idea that their products are so powerful that controlling those products is the world’s most important challenge. Here’s the typical read on the dynamic. To one side (backed by OpenAI affiliates), “safety” comes from the appearance of US industry dominating AI innovation, under the slow-moving control of federal lawmakers (and without pesky state regulators in the way). To the other side (backed by Anthropic), “safety” means a heavier regulatory framework that plays to Anthropic’s posturing as the ethics- and compliance-focused AI vendor. In both cases, it’s more marketing than principled concern about safety.
Political organizers should call out and reject the AI companies’ framing of the debate, and reorient campaign agendas around populist resistance to corporate concentration of wealth and power. When AI companies pump millions into legislative races, the result should not be hyperbolic discussion of AI superintelligence. And when a plot of land in a small town is pitched as a data center site, the debate should be about more than the local costs and benefits. It should include out-of-control money in politics, and Citizens United-proof solutions to limit corporate influence like public financing and state regulation.
We all have a vested interest in what’s on the policy agenda, and what the outcomes are. Today, the greatest risk AI poses to society is the exacerbation of inequality and the concentration of wealth. The real problem is trillion-dollar AI companies and their trillionaire oligarchs cozying up to political power in Washington and governments worldwide, and using their money to enact their agenda over the popular will of the people. This is the issue we’d like to see put front and center, and it requires solutions much more extensive than slowing data center development.
Grrl Power #1477 – Skewer-a-golem (Like Build-a-bear but the opposite) [Grrl Power]
I calculated Max could cover 10 kilometers at Mach 10 in three seconds. And we all know how reliable my math is. Still, Max can move pretty fast.
More than one person pointed out that modern security cameras are actually pretty good. Not alien tech good, obviously, but all of my knowledge of security cameras comes from… well, TV. You know, famously accurate TV. And also a cheap security webcam I got like 10 years ago, not the kind that comes with a closed circuit monitor, one of the kinds you need local wi-fi and a smartphone for. It wasn’t terribly good resolution, and got blown out by daylight easily. Honestly, I don’t know why TV shows bother with all the “Enhance… enhance…” stuff since security cameras are so amazing these days. No, of course I know why security cameras on TV suck, to draw out the investigation and so that main characters can show their new technique for “Enhance… enhance…”
Oh, look who it is in the vote incentive. And a
not-quite-yet-but-it’s-coming NSFW version over at Patreon.
Vote incentive and Patreon updated with some shading. Not finished yet, but progress.
I think she would get in trouble for doing this. She’d mess up the… floor of the waterfall? Is that what it’s called? The receiving pool? No, probably not that. Anyway, she’d churn things up and cause a ton of weird erosion.
Since you might be wondering, Niagara Falls is about 165 feet high, so Babezilla obviously doesn’t have to be full sized. I’d say she’s about 175-180 feet tall here?
Double res version will be posted over at Patreon. Feel free to contribute as much as you like.
The hedonic treadmill [Seth's Blog]
When we upgrade something in our lives, the thing we used to be satisfied with is no longer satisfying.
That’s the nature of an upgrade.
After a certain point, the only thing we’re buying is the way the upgrade makes us feel in the moment, not our satisfaction going forward.
Stereos, salt, art on the wall. It’s easy to get hooked on the climb, not the altitude.
Luxury goods are a special set of upgrades. These are purchases that aren’t actually an upgrade, they simply feel that way because of their cost (and the status that goes with it).
At some point, the best upgrade is the realization that we have enough.
Pluralistic: Why aren't AI companies competing directly with their customers? (13 Jul 2026) [Pluralistic: Daily links from Cory Doctorow]
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
Top Sources: None -->

"I often wonder what the Vintners buy/One half so precious as the Goods they sell" -The Rubáiyát of Omar Khayyám
I first encountered that quote from someone extolling the virtues of bookstores, and it stuck with me, because for most of my childhood, every bookstore visit ended with me broke and wishing I'd had three times as much to spend.
As a larval hyperlexic, I just didn't understand what a bookseller could possibly buy with my money that was better than the books they already had? Of course, then I became a bookseller and discovered that Sturgeon's Law ("90% of everything is shit") applies to a bookstore's wares as much as it does to anything else. I also acquired a monthly rent obligation and discovered just how important money could be.
Nevertheless, Omar Khayyám's question stuck with me, especially when I fell down a years-long rabbit-hole of learning about scams and the finance sector (but I repeat myself). Every get-rich-quick schemer will tell you that they've found the infinite money hack, which they will sell to you for a remarkably reasonable sum. Likewise, every stock picker claims they can outperform a simple low-load index fund, and all they ask of you is a few hundred basis points in exchange for multiplying your wealth beyond the dreams of Creosote. Neither one has a good answer to Khayyám's question: if you can make all the money with your amazing system, why do you need my money?
This is a question that needs to be forcefully put to AI hucksters. In their more expansive moments, the Altmans and Amodeis of the world will tell you that they're planning to teach the word-guessing program so many words that it will wake up and become god. DOGE's broccoli-haired brownshirts laughed in the faces of the NIH lifers who begged them not to vaporize their long-running cancer research projects: "General AI is around the corner and it's going to cure cancer. Cancer research is a waste of money!"
Which all raises the question: if you've truly incubated a foetal demiurge in your "AI lab," why are you offering to sell it to me? What do the AI hucksters buy/One half so precious as the Gods they sell?"
Of course, they might answer, "We need your money now so we can make god later." That's why they want your boss to fire you and replace you with their chatbots and split your wages with your former employer. But this just raises the same question: if you have a chatbot that can do a doctor's job, why sell it to a hospital? Why not just open your own hospital? If you've got a chatbot that can do a tax accountant's job, why sell it to a tax-prep service? Why not just open a tax-prep service? If you've got a chatbot that can teach my kids, why sell it to my local school district? Why not just open a school?
If the chatbot can do the job, and if the chatbot costs less than the worker who does the job today, then the chatbot company can profitably sell services more cheaply than anyone who presently employs that worker, because the chatbot company already owns the chatbot. If you were really on a glide path to creating an all-powerful deity and just needed cash to keep the venture going until the cancer-curing word-guesser awoke from its long slumber, then wouldn't you want as much cash as possible? Why would you voluntarily split the take with some sucky, washed, non-god-generating business from before 2022?
I think the only reason this question doesn't come up more frequently is that we're stewing in what Douglas Rushkoff calls the "go meta" economy, in which the most respectable and smartest business to operate must be as many abstraction layers away from real work as possible. Don't drive a taxi, own a medallion that you rent to the cab driver. Don't own a medallion, start a "rideshare" company. Don't start a rideshare company, invest in a rideshare company. Don't invest in a rideshare company, buy options to invest in a rideshare company:
https://pluralistic.net/2022/09/13/collapse-porn/#collapse-porn
The inverse relationship between doing something useful and making money is deeply ingrained in our economic wisdom. Take the world of online grifters, who don't just peddle get-rich-quick PDFs, they also peddle tools to generate get-rich-quick PDFs, as well as tools to steal other "wealth influencers'" insta videos and deepfake yourself into their pretend private jets:
https://www.404media.co/how-i-bought-a-private-jet-by-selling-10-subscriptions-to-404-media/
The scam economy boasts a bewildering array of ancillary services, like a $150/month service that lets you produce fake screenshots showing vast monthly income on other scam services (November Kelly calls this "The world's most expensive 'inspect element'"):
https://www.patreon.com/trashfuture/posts/faux-high-level-163443872
It's an old truism that in a gold rush, the only people who come out ahead are the people selling the picks and shovels. But that's not true – there's even more money to be made wholesaling picks and shovels to the retailers who operate the frontier mercantiles. Go meta!
https://commons.wikimedia.org/wiki/File:Alaskan_Gold_Mining_Supplies_(1897)_(ADVERT_277).jpeg
Today's economy is dominated by pick-and-shovel wholesalers. America is a gerontocracy drowning in MBAs, while there's no one to do eldercare:
So it's not surprising that we don't ask why these AI god-botherers need our stupid money while they're immanentizing the eschaton. Why would they operate a hospital if they could go meta and sell the doctorbots to the MBAs running the hospital?

Zohran Mamdani's retro wristwatch is a Casio classic https://boingboing.net/2026/07/08/zohran-mamdanis-retro-wristwatch-is-a-casio-classic.html
B.O.B. (Birds Over Big Bird) https://www.youtube.com/watch?v=fAXO7SXK0Pc
A referendum for another development model https://thomaspiketty.wordpress.com/2026/06/23/a-referendum-for-social-justice/
Introducing the Gap Map v0.1 https://www.currentai.org/blogs/introducing-the-gap-map-v0-1
#25yrsago Pro-lumber industry spoof of The Lorax https://web.archive.org/web/20010721042828/http://www.forestcouncil.org/news/articles/truax1.htm
#25yrsago Remixable vocal tracks from the next Public Enemy release https://web.archive.org/web/20010813195140/http://www.slamjamz.com/slamnews.php?article=7
#20yrsago Wikipedia creates RSS for its posts https://web.archive.org/web/20060718103013/http://www.micropersuasion.com/2006/07/wikipedia_entir.html
#20yrsago Anti-DRM picture-book https://web.archive.org/web/20060721095740/https://dustrunners.blogspot.com/2006/07/pig-and-box.html
#10yrsago The US has spent $122B training foreign cops and soldiers in 150+ countries, but isn’t sure who https://web.archive.org/web/20160713145824/https://theintercept.com/2016/07/13/training/
#10yrsago German free school teaches without grades, timetables or lesson plans https://www.theguardian.com/world/2016/jul/01/no-grades-no-timetable-berlin-school-turns-teaching-upside-down
#10yrsago For the first time, a federal judge has thrown out police surveillance evidence from a “Stingray” device https://www.rawstory.com/2016/07/federal-judge-throws-out-evidence-gathered-with-stingray-cell-phone-tracker/
#10yrsago Day on a Device: art made by screenshotting a multitasker’s screen with each context-switch https://www.theverge.com/2016/7/13/12170526/multitasking-phone-laptop-pierre-buttin-art
#10yrsago Remarkably Normal: the true stories of abortion in America https://web.archive.org/web/20160810092901/http://jezebel.com/the-vagina-monologues-but-for-abortion-1783289270/amp
#10yrsago Theresa May performs the Fresh Prince of Bel-Air theme https://www.youtube.com/watch?v=xv7Jd94bnOI
#10yrsago UK Labour’s dirty trick excludes 130,000 members from leadership vote https://web.archive.org/web/20160712225142/http://www.itv.com/news/2016-07-12/corbyn-opponents-try-to-fix-vote/
#10yrsago Security researchers: the W3C’s DRM needs to be thoroughly audited https://www.eff.org/deeplinks/2016/06/call-security-community-w3cs-drm-must-be-investigated
#10yrsago Help Doctors Without Borders fill in the geodata blanks for vulnerable communities https://missingmaps.org/blog/2016/07/14/mapswipe/
#10yrsago Sign a book of congratulations for America’s new Librarian of Congress https://web.archive.org/web/20160718023555/https://action.everylibrary.org/congratulate_carla_hayden_today
#10yrsago Hungary’s Cold War cartoons were weird and awesome https://globalvoices.org/2016/07/14/the-fascinating-world-of-cold-war-era-hungarian-cartoons/
#10yrsago The ACLU has a roadmap for defeating President Donald Trump’s signature initiatives https://web.archive.org/web/20160715131734/https://action.aclu.org/sites/default/files/pages/trumpmemos.pdf
#10yrsago America’s infrastructure debt is so bad that towns are unpaving roads they can’t afford to fix https://web.archive.org/web/20160713170836/https://www.wired.com/2016/07/cash-strapped-towns-un-paving-roads-cant-afford-fix/
#10yrsago It’s official: the Olympics result in the worst budget overruns of any megaproject https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2804554
#10yrsago Vivendi lobbyist appointed to run copyright for UN agency https://web.archive.org/web/20160717052135/http://keionline.org/node/2614
#10yrsago The long, racist history of Brexiteer Boris Johnson, the new UK Foreign Secretary https://www.bbc.co.uk/news/world-36792746
#5yrsago Facebook employees stalk users https://pluralistic.net/2021/07/14/who-watches-the-zuckmen/#pecksniffs
#5yrsago Semantic drift versus ethical drift https://pluralistic.net/2025/07/14/pole-star/#gnus-not-utilitarian

Sydney: The Festival of Dangerous Ideas, Aug 23-24
https://festivalofdangerousideas.com/cory-doctorow/
Melbourne: Enshittification at the Wheeler Centre, Aug 25
https://www.wheelercentre.com/events-tickets/season-2026/cory-doctorow-enshittification
Brighton: The Reverse Centaur's Guide to Life After AI with
Carole Cadwalladr (Brighton Dome), Sep 8
https://brightondome.org/whats-on/LSC-cory-doctorow-the-reverse-centaurs-guide-to-life-after-ai/
London: The Reverse Centaur's Guide to Life After AI with Riley
Quinn (Foyle's Picadilly), Sep 9
https://www.foyles.co.uk/events/enshittification-cory-doctorow-riley-quinn
South Bend: An Evening With Cory Doctorow (Notre Dame), Oct
6
https://franco.nd.edu/events/2026/10/06/an-evening-with-cory-doctorow/
You Bought it, They Break It (What Now? with Trevor Noah)
https://www.podbean.com/media/share/dir-ir36t-2f4a1ac6
Can AI be Saved From Capitalism? (Everyday Anarchism)
https://www.everydayanarchism.com/192-can-ai-be-saved-from-capitalism-cory-doctorow/
Lawfare Daily
https://www.youtube.com/watch?v=T1KIwaYRs1g
How to Think About AI (Organized Money)
https://www.organizedmoney.fm/p/how-to-think-about-ai-with-cory-doctorow
"Canny Valley": A limited edition collection of the collages I create for Pluralistic, self-published, September 2025 https://pluralistic.net/2025/09/04/illustrious/#chairman-bruce
"Enshittification: Why Everything Suddenly Got Worse and What to
Do About It," Farrar, Straus, Giroux, October 7 2025
https://us.macmillan.com/books/9780374619329/enshittification/
"Picks and Shovels": a sequel to "Red Team Blues," about the heroic era of the PC, Tor Books (US), Head of Zeus (UK), February 2025 (https://us.macmillan.com/books/9781250865908/picksandshovels).
"The Bezzle": a sequel to "Red Team Blues," about prison-tech and other grifts, Tor Books (US), Head of Zeus (UK), February 2024 (thebezzle.org).
"The Lost Cause:" a solarpunk novel of hope in the climate emergency, Tor Books (US), Head of Zeus (UK), November 2023 (http://lost-cause.org).
"The Internet Con": A nonfiction book about interoperability and Big Tech (Verso) September 2023 (http://seizethemeansofcomputation.org). Signed copies at Book Soup (https://www.booksoup.com/book/9781804291245).
"Red Team Blues": "A grabby, compulsive thriller that will leave you knowing more about how the world works than you did before." Tor Books http://redteamblues.com.
"Chokepoint Capitalism: How to Beat Big Tech, Tame Big Content, and Get Artists Paid, with Rebecca Giblin", on how to unrig the markets for creative labor, Beacon Press/Scribe 2022 https://chokepointcapitalism.com
"Unauthorized Bread": a middle-grades graphic novel adapted from my novella about refugees, toasters and DRM, FirstSecond, April 20, 2027
"Enshittification, Why Everything Suddenly Got Worse and What to Do About It" (the graphic novel), Firstsecond, 2027
"The Memex Method," Farrar, Straus, Giroux, 2027
Today's top sources:
Currently writing: "The Post-American Internet," a sequel to "Enshittification," about the better world the rest of us get to have now that Trump has torched America. Fourth draft completed. Submitted to editor.

This work – excluding any serialized fiction – is licensed under a Creative Commons Attribution 4.0 license. That means you can use it any way you like, including commercially, provided that you attribute it to me, Cory Doctorow, and include a link to pluralistic.net.
https://creativecommons.org/licenses/by/4.0/
Quotations and images are not included in this license; they are included either under a limitation or exception to copyright, or on the basis of a separate license. Please exercise caution.
Blog (no ads, tracking, or data-collection):
Newsletter (no ads, tracking, or data-collection):
https://pluralistic.net/plura-list
Mastodon (no ads, tracking, or data-collection):
Bluesky (no ads, possible tracking and data-collection):
https://bsky.app/profile/doctorow.pluralistic.net
Medium (no ads, paywalled):
Tumblr (mass-scale, unrestricted, third-party surveillance and advertising):
https://mostlysignssomeportents.tumblr.com/tagged/pluralistic
"When life gives you SARS, you make sarsaparilla" -Joey "Accordion Guy" DeVilla
READ CAREFULLY: By reading this, you agree, on behalf of your employer, to release me from all obligations and waivers arising from any and all NON-NEGOTIATED agreements, licenses, terms-of-service, shrinkwrap, clickwrap, browsewrap, confidentiality, non-disclosure, non-compete and acceptable use policies ("BOGUS AGREEMENTS") that I have entered into with your employer, its partners, licensors, agents and assigns, in perpetuity, without prejudice to my ongoing rights and privileges. You further represent that you have the authority to release me from any BOGUS AGREEMENTS on behalf of your employer.
ISSN: 3066-764X
Rex Ready Player One, Part Four [Penny Arcade]
New Comic: Rex Ready Player One, Part Four
Hell Is Other People [Cory Doctorow's craphound.com]

This week on my podcast, I read my latest Locus Magazine column, Hell Is Other People, about the solipsistic fantasy underpinning the AI bubble.
Sartre was (arguably) an optimist. It’s not that other people are unpleasant: quite the contrary! There’s nothing that makes the day (or, pointedly, the night) sweeter than agreeable human companionship. And of course, for those tasks that exceed what you – or anyone – could do alone, other people are a necessity. Without other people, your aspirations could never exceed the things you would personally make happen, and if you’re honest, you’ll have to admit that this is a short list of things.
Other people, then, are a thing that you can’t live without – and yet other people stubbornly insist on organizing their lives around their needs, their preferences, their desires, without any consideration for how nice it would be (for you) if everyone would just do whatever you tell them to do.
Thus it is that our species has invented all kinds of technologies, like “language” and “persuasion” and “bureaucracy” and “ethics” and “religion” and “government” and “coercion” and “slavery” and “wage labor” and “guilt” and “duty” and “conscription” and “commerce” and “meetings” and “chore wheels” and “corporations” and “teams” that can be used to get (some) other people to (sometimes) act in ways that make your life better. After all, we have neocortices; the most recently evolved structures in our brains, that seem to specialize in understanding other people’s motives to aid in this endeavor.
Girl Genius for Monday, July 13, 2026 [Girl Genius]
The Girl Genius comic for Monday, July 13, 2026 has been posted.
Breaking Up, p03 [Ctrl+Alt+Del Comic]
The post Breaking Up, p03 appeared first on Ctrl+Alt+Del Comic.
Utkarsh Gupta: FOSS Activities in June 2026 [Planet Debian]
Here’s my monthly but brief update about the activities I’ve done in the FOSS world.
Whilst I didn’t get a chance to do much, here are still a few things that I worked on:
I joined Canonical to work on Ubuntu full-time back in February 2021.
Whilst I can’t give a full, detailed list of things I did, here’s a quick TL;DR of what I did:
This month I have worked 15 hours on Debian Long Term Support (LTS) and on its sister Extended LTS project and did the following things:
node-lodash: Prototype pollution and code injection during template compilation.
openvpn: Multiple vulnerabilities leading to Denial of Service.
[LTS] Emilio pointed out that the
gst-plugins-ugly1.0 binaries were still not fully released, so I
ran dcut migrate to fully release them. The DLA had
gone out earlier.
[ELTS] Did some more work on ruby-rack - a lot
of new CVEs have opened up and, whilst I made some progress,
Santiago let me know that ruby-rack is no longer supported and so
it’ll be removed from the ela-needed list.
[E/LTS] Set up the security-tracker and a few other things on the new machine, and debugged the git repository size madness. Sent a summary here.
[E/LTS] Monitored discussions on mailing lists, IRC, and all the documentation updates.
[E/LTS] Attended the monthly LTS meeting on Jitsi. Meeting notes here.
Until next time.
:wq for today.
To Have And To Hold [QC RSS v2]

LET HER
GNU Screen v.5.0.2 is released [Planet GNU]
Hi everyone,
I'm glad to announce the new release of GNU screen.
Screen is a full-screen window manager that multiplexes a physical
terminal between several processes, typically interactive
shells.
The 5.0.2 release includes the following changes to the previous
release 5.0.1:
- type on big-endian systems
- UTF-8 combining sequences
- buffer overflow in SendCmdMessage()
- detaching fail with empty terminfo and leave the session
attached
- eliminates the TOCTOU race
- manpage fixes
Release (official tarball) will be available soon for download:
https://ftp.gn ...
rg/gnu/screen/
Please report any bugs or regressions.
Thanks to everyone who contributed to this release.
Cheers,
Alex
Kernel prepatch 7.2-rc3 [LWN.net]
The 7.2-rc3
kernel prepatch is out for testing. Linus said: "Things continue
to look normal (the 'new normal' with slightly higher rates of
commits, although I do get the feeling that we're seeing that
slightly balanced out by people starting to go on summer
vacation)
".
Joe Marshall: llambda.lisp [Planet Lisp]
I wanted to run LLM models locally on my machine. I discovered that llama.cpp is how people run models locally, and that the popular LLM servers like Ollama and lmstudio and unsloth use llama.cpp under the hood.
llama.cpp is, of course, written in C++. I don't care for C++
and I prefer Common Lisp. With the appropriate declarations, Common
Lisp code should be in the same performance ballpark as C++ code.
So I decided to write a Common Lisp implementation of llama.cpp,
which I call llambda.lisp.
It is available on GitHub.com/jrm-code-project/llambda If you care to contribute, it could use routing for architectures other than gemma, GPU support, NPU support, and other features.
Various and Sundry, 7/12/26 [Whatever]
What now?

South Carolina Senator Lindsay Graham Dead: And it must be said, not especially missed by most people on Bluesky and Threads, although I have to admit not going to X to see how the bots there are reacting to his passing. I remember him mostly for not having a spine with regard to Trump, but in that he’s not materially different than nearly any other Republican, inside of Washington or outside of it. As far as I know there has been no cause of death announced; the more responsible speculation I’ve seen suggests a blood clot and/or deep vein thrombosis caused by the extensive travel he’s recently undertaken, most recently to Ukraine. We’ll know eventually, I would assume. He was 71, there are lots of ways for a 71-year-old to suddenly die of mostly natural causes.
His death complicates matters for the GOP in South Carolina, since they have to now hold a special nominating session to replace him on the ballot. I understand Nancy Mace is making noises to get his senate chair, for the interim and/or for as the new candidate. I don’t know what South Carolinians have done to deserve that, but I guess we’ll see.
Anyway, he’s dead and I’m sure someone somewhere is sad. Others are saying “Cool, do McConnell next.” 2026 is year not exactly brimming with tender sympathy for sycophants.
Meta walks back its plan to let people use their “AI” to do non-consensual horrible things with your Instagram pictures: Mind you, this is not how Meta itself would have characterized its plan to let anyone do anything with your photos without telling you. It says it was to “provide a useful creative tool and to give people control over whether their public content could be referenced in this way.” This is a mash of words that if it means anything, means the opposite of what Meta was actually doing. The backlash was intense enough that even the sociopaths who are running Meta couldn’t ignore it, which is good, but don’t worry, I’m 100% certain they’ll find another avenue to make sure awful people will be able to use Meta’s “AI” in shameful and defaming ways. A business model is a business model.
Live-Action Moana is a bit of a flop: Which I’m not entirely surprised about? It’s been slightly less than a decade since the original came out, and there was an apparently lackluster but rather financially-successful sequel a couple of years ago, which would have driven viewership back toward the original anyway, so the pent-up desire wasn’t there for it like it apparently was for the “live-action” Lilo and Stitch from last year. I would have waited, but then, I wouldn’t be doing “live action” retreads in the first place, so there’s a reason I’m not a Disney high-up.
Don’t feel too bad for Disney, since the new Spider-Man movie is a couple of weeks away and its first weekend will likely cover any losses Disney will incur from Moana underperforming. Anyway, the Moana marketing juggernaut, where the actual money is for Disney in this franchise at this point, will continue unabated. Even an underperforming “live-action” Moana will do serviceably enough as advertising in this particular endeavor. Disney will be fine. Disney is always fine.
I do love the original, though.
— JS
Kentaro Hayashi: Try to build Mozc with Bazel 7.7.1 [Planet Debian]

Recently, I've got a chance to try building Mozc (Most famous Japanese input method editor) with Bazel.
As you know, recently newer Bazel related packages were landed into debian/unstable. Then now I'm planning to update Mozc from 2.29.5160.102 to 3.33.6133.
The upstream of Mozc had released 3.34.6239, but on Debian, we stick to Mozc 2.29.5160.102.
Mozc requires newer Bazel but we only had Bazel 4.2.3 at that time on Debian, so even though the upstream of Mozc switched from GYP to Bazel, we had patched Mozc with GYP based package.
We even did make an effort to restore build options that had been already removed. :-( And needed to migrate from GTK2 renderer to GTK3 renderer.
That is why the version of Mozc is diverged from upstream on Debian.
At first, we needed to decide what Mozc version to work with it.
Now latest version of Mozc is 3.34.x, but it requires Bazel 9.x. Please recall that Bazel 7.7.1 was introduced Debian/unstable. And more, newer dependency libraries are required.
You might feel that target version (3.33.6133) is too high from 2.29.5160.102, but if we upgrade to more older Mozc, it means that it requires to backport Mozc to older libabsl compatible codes and so on.
That is why Mozc 3.33.6133 was chosen.
Even once the target version has been decided, you can't let your guard down.
There are many technical tasks to solve.
At least, it will likely require several rounds of testing in the Debian experimental.
Currently, gbp buildpackge has succeeded finally on
local machine, but need to tidy and cleanup stuffs.
I didn't know packaging with Bazel best practice yet, to remove many third party vendor/ bundles, I've found that it requires pile of patch to eliminate them.
In the current version of Debian, as a one of build system, further work — such as support from debhelper - will be needed.
I'll file working progress on #1085173
Finally, my first rss.chat podcast. 20 minutes. As always, I take forever to get to the point.
Why you can't create an account [Scripting News]
A karass
is "a group of people linked in a cosmically significant manner,
even when superficial linkages are not evident." I think of
rss.chat as a social network for my
karass. A small group of people, not trying to get famous or rich
from using a social network, rather wanted to work with or stay in
touch with people who are linked cosmically. This is one of many
rich ideas invented by Kurt Vonnegut, this one in
Cat's Cradle, which you should read, because it's some of the
best story-telling out there, and it's full of food for thought. I
read all the books when I was a teen, and have since re-read them.
Sirens
of Titan was my fave.
Anyway...
In the past when I announced a product, people could use it right away, and usually they click a couple of things and then go away.
In the case of rss.chat -- what you will see is very much like what you see when you aren't logged in, or what you see on a social network like X, or Mastodon or whatever. The UI is nice, but it's not the thing. That will be revealed relatively slowly, over time -- as new instances pop up, and even more importantly, as developers figure out that this setup works well enough to clone. I'm not selling a product here -- I want to bootstrap an ecosystem, using all I learned from several successful bootstraps -- blogging, RSS, podcasting.
The idea is this -- the web itself is a social network. It's up to us, all of us, not just me -- to build that network.
When you see how we proceed from here that will become clearer.
In the meantime I'm going to change the message you get when you try to sign on, and start a wait list so that when more instances are available, some meant to be open to the public, we'll be sure to let you all know about that.
For now, I'm operating a network for people I work with, and it's all open for anyone to read. That's also one of the ideas I want to explore, something I call a "Fractional horsepower social network," stealing a very good idea from Steve Jobs.
I don't want to turn the world over to a startup, we've done that and have a pretty good idea of where it goes. I want lots of small ones that have a very strong basis to be connected together in as many ways as people can imagine.
Vasudev Kamath: Releasing debvulns-exporter: Prometheus exporter for Debian System Vulnerabilities [Planet Debian]

Following up on my previous post, I am releasing debvulns-exporter, a Prometheus exporter for tracking Debian system vulnerabilities. The underlying vulnerability analysis logic remains identical to the previously released MCP server and CLI utility.
In my engineering workflows, I frequently deal with Debian and vulnerability management. Most enterprise environments rely on commercial, paid vulnerability platforms like Tenable or Rapid7. While these platforms provide extensive feature sets, I noticed a distinct lack of open-source tools tailored for this specific pipeline. While debsecan exists, it lacks a structured, parseable format suitable for building dashboards aimed at management consumption. What started as an experimental MCP server for learning purposes evolved into a practical question: why not convert it into a Prometheus exporter? Given that Prometheus is the de facto standard metrics platform across the industry, this architecture was the logical next step.
The exporter is implemented as a native Prometheus exporter utilizing the prometheus-client library. It operates using two threads: one handles fetching the vulnerability data, parsing EPSS feeds, and cross-referencing installed packages to identify local vulnerabilities; the second handles serving the metrics endpoint. The full architecture details and metrics specifications can be found in the design doc. The specification was drafted during a technical brainstorming session with Claude 4.6 Sonnet on Antigravity prior to writing the implementation.
To validate the exporter, I spun up older Debian 11 and Debian 12 cloud images sourced from the Debian Cloud team. The older image was intentionally selected to guarantee a standard baseline of unpatched vulnerabilities for testing. The local evaluation topology is structured as shown below:
Rather than constructing the Grafana dashboard from scratch, I used Claude 4.6 Sonnet via Antigravity to generate the layout configuration. The generated dashboard for the local testbed functions effectively:
The complete, ready-to-import Grafana dashboard configuration is included directly in the debvulns source code.
To prevent namespace conflicts and confusion with the native debsecan utility in Debian, I have unified the ecosystem under the debvulns moniker. The core CLI is named debvulns, the exporter is debvulns-exporter, and the MCP component is debvulns-mcp. The migration release has been published to PyPI, and the new consolidated repository is active at debvulns.
While this began as a personal utility to fill a niche tool gap, I expect it will be useful for others managing Debian infrastructure at scale. My next objective is to formalize Debian packaging for both the CLI and the exporter. The MCP component will likely remain available as an independent artifact. Until then, happy hacking.
Note: As a core design choice, `debvulns` still uses native `debsecan` as its ground-truth standard. The tool continuously cross-verifies its output against `debsecan` to ensure perfect functional parity and data consistency.
This is a useful term. It helps us understand a topic or theory that can be considered from multiple points of view by people engaging with good intent.
“Pluto is a planet” was a controversial statement among some people who study the solar system.
On the other hand, it’s not controversial that Pluto actually exists.
Choosing to engage in a conversation about something that’s controversial gives us a chance to share our insights and engage in dialogue. And it also comes with the knowledge that we’ll need to devote time and care to having that conversation.
On the other hand, inventing false controversy is simply a tool to keep people away.
If you insist that the world is flat, and that talking about its spherical nature is controversial, then you’ve made it hard to be a travel agent, a geologist or a sailor. You’ve scared people away from a productive conversation because you’re claiming something without good intent.
The key element of ‘controversial’ is possibility. If that’s not there, it’s simply an empty argument.
Jamie McClelland: DNS, OG of high availability [Planet Debian]
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:
a.ns.mayfist.org!a.ns.matfirst.orga.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.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 both
c.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.
Fractional Horsepower Social Networks on RSS.chat.
The new RSS.chat repo on GitHub. Lots of fixes, features, docs and examples coming soon. For now all the source is there, MIT license. And a place to report bugs and start exploring how you can contribute. This is just Day 1. Many more to come. :-)
Reproducible Builds: Reproducible Builds in June 2026 [Planet Debian]
Welcome to the June 2026 report from the Reproducible Builds project!
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.
In this month’s report, we cover:
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.
In Debian this month:
The debian-installer
package in Debian was uploaded with a
substantial reproducibility-related changelog. This means, for
the first time, the
uploaded version could finally be reproduced.
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.
Indeed, 25 reviews of Debian packages were added, 31 were updated and 33 were removed this month adding to our extensive knowledge about identified issues. Two issue types were updated as well. […][…]
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 openSUSE monthly update for their reproducibility work there.
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:
Flags: line in the
output of ocamlobjinfo, so
adjust the test for cross-distribution
compatibility. […]--long-form-style
arguments when calling apktool in order to
support apktool version 3. […]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 […].
In addition, Vagrant Cascadian
updated diffoscope in GNU Guix to version 321 and
323.
Chris Lamb also made the following changes to strip-nondeterminism, our tool to remove specific non-deterministic results from a completed build:
/usr/bin/strip-nondeterminism. (#1139000)debian/watch
format. […]Rules-Requires-Root:
no and Priority: optional
fields. […]Standards-Version to
version 4.7.4. […]On our mailing list this month:
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
-Hoptions, 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:sid
container now is 100% reproducible.
Finally, kpcyrd also created a pull
request against the add-determinism
package to update the itertools and
zip Python
dependencies.
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. […]
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:
Bernhard M. Wiedemann:
Chris Lamb:
node-fuse.js.node-egjs-hammerjs.
node-chartjs-adapter-date-fns.
mkdocs-include-markdown-plugin.lmarbles.rocm-docs-core.libecoli.golang-github-tobischo-gokeepasslib.Jochen Sprickerhof:
c-munipack.latex-coffee-stains.cxxtest.slime.spooles.sdpb.procmail.proftpd-dfsg.mah-jong.dxf2gcode.afterstep.ledger2beancount.ocamlviz.Kris Van Hee and Vagrant Cascadian:
Kenichiro Muto and Kuniyasu Suzaki of the Institute of Information Security in Yokohama, Japan published an interesting paper this month titled Attestable Build Chain: Enabling Trust in Reproducible Builds (PDF). Their abstract is as follows:
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. […]
Julien Malka, Stefano Zacchiroli and Théo Zimmermann published a 50-page report detailing A Decade of Software Reproducibility in the Nix Package Ecosystem:
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.
A PDF of their report is available online
Tim Bastin of L3montree GmbH and Jacek Galowicz of Applicative Systems GmbH from DevGuard published a paper detailing How We Built a Sovereign, Reproducible Container Supply Chain for DevGuard:
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.
Finally, Yiseul Choi, Junga Kim, Jun-Ho Hong and Seongmin Kim of the Department of Convergence Security Engineering at the Sungshin Women’s University in Seoul, Korea titled Attestation-based verification of SBOM integrity via consumer-side reproducibility:
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:
IRC: #reproducible-builds
on irc.oftc.net.
Mastodon: @reproducible_builds@fosstodon.org
Mailing list:
rb-general@lists.reproducible-builds.org
My Twitter/X announcement [Scripting News]
I wrote a pretty good set of paragraphs on Twitter/X this morning.
Yesterday I announced rss.chat.
Some people spell it RSS.chat. I haven't decided which way is right yet.
The announcement covers a slice of the project, but it fans out to be the beginning of a bootstrap.
I want to entice other projects to fully endorse the text model of the web. Today most social "web" services support a pitiful subset of the web, and leave out the most crucial element, the link. If a writer can't link, how can you call it the web? Seriously.
I want to force them out of their silos and get the web working for the people and esp independent developers.
I've been preaching this for years, and I am reminded what I learned a long time ago -- people don't listen to their friends, they listen to their competitors.
It was developed by Claude Code and myself, starting in April. We make an incredibly good team though sometimes Claude is tedious, but I put up with it because the results make me laugh out loud frequently because I never imagined working at such velocity.
I'm not doing this to make money, though of course I don't *mind* making money. I just want to return the web to its former glory, where every part is replaceable, and if you can think of something you can probably do it.
I want to use lots of different software to work on my social network presence. I want this post to appear on Masto, Bluesky, Twitter, Threads, Facebook even, and have them all work perfectly together.
In the meantime, we're now ready to create our own global network of free speech, uncontrolled by the big silos. At some point if it works, we will have moved beyond them, or they will see the sense in joining the party.
Small pieces loosely joined and every part replaceable.
As its name implies, it's built entirely on fully open web standards, RSS 2.0, OPML, Markdown, SQL and WebSockets. It turns out you can make a very nice distributed social network without having to wait. It was always there, we just had to decide to do it.
How it evolves? That's up to everyone who can code, and that's a lot of people now thanks to the AI tools.
Last year, the recording session I did with Mel Robbins was going so well that her producers asked me to stick around–four hours later, we had recorded enough for two episodes.
One never knows how these things will feel until after the fact, but part 2 is live now. I hope you get as much out of it as I did…
My day with Mel inspired my new book, which ships in 9 weeks. And the limited-edition multi-pack is well on its way to being fully subscribed. I just added a new spiral-bound booklet for the first 700 orders. Photos to come when it comes back from the printer.
You can find the conversations with Mel here.
Problems can be solved.
Here’s a short riff on the world’s worst boss:
And here’s a page for Mel fans who are new to the blog.
And the episode…
Claude teaches you how to manage. You've got a perfectly pliable team member, always does their best to do what you told them to do. Now how do you design co-development projects where two very different individuals do their work and it adds up to at least twice what either of them could do alone.
The instance I started is for my friends, people I work with, it's not something people can test. It will be possible to start your own server, quite soon. And then you can do whatever you want. It's MIT licensed. Kick ass and have fun, but remember don't fuck with the interop. It's there so users have choice.
Jeremy Herve who I know from projects at Automattic, has questions about rss.chat, and I have some answers, with more coming soon.
Yesterday was a wonderful first day for
rss.chat. It's now out there, but
we haven't talked about or demo'd many of the things that it does.
I wanted to get the feeds out there first, because now we get to
think together about how they fit together to give us a social
network experience. It's not locked in a silo, these are just like
feeds you have known about for over two decades. But it is a new
application for those feeds. And this is a bootstrap. You start
with something small that you're sure is a beginning for what you
want to do. And then you and others use it for a while. And it is
open source, MIT licensed, but compatibility will make the
difference.
BTW, I notice almost everyone but me writes RSS.chat. Hmmm.
GNU findutils 4.11.0 released [Planet GNU]
This is to announce findutils-4.11.0, a stable release.
This release follows the recent POSIX (IEEE Std 1003.1-2024)
changes,
especially to mention the new behavior of 'find -mount' vs. 'find
-xdev',
as well as a lot of documentation improvements.
See the NEWS below for more details.
GNU findutils is a set of software tools for finding files that
match
certain criteria and for performing various operations on them.
Findutils includes the programs "find", "xargs" and "locate".
More information about findutils is available at:
https://www.gnu.o ...
ftware/findutils/
Please report bugs and problems with this release via the the
GNU Savannah bug tracker:
https://savannah.
... /?group=findutils
Please send general comments and feedback about the GNU
findutils
package to the mailing list (<mailto:bug-findutils@gnu.org):
https://lists.gnu
... nfo/bug-findutils
There have been 186 commits by 10 people in the - sigh - 25 months
since 4.10.0:
Bernhard Voelker
(77) Bjarni Ingi
Gislason (1)
Christoph Anton Mitterer (1) Collin
Funk (5)
Dave
(1)
G. Branden Robinson (42)
James Youngman
(55)
Luk303241305241 Zaoral (1)
danny mcClanahan
(1) raf
(2)
This release was bootstrapped with the following tools:
Autoconf 2.72
Automake 1.17
M4 1.4.19
Gnulib v1.0-3131-ga575239e47
Please consider supporting the Free Software Foundation in its
fund
raising appeal; see <https://www. ...
.org/appeal/>.
Thanks to everyone who has contributed!
Have a nice day,
Bernhard Voelker & James Youngman [on behalf of the GNU
findutils maintainers]
================================================================================
Here are the compressed sources:
https://ftp.gnu.o
... ils-4.11.0.tar.xz
Here are the GPG detached signatures[*]:
https://ftp.gnu.o ... 4.11.0.tar.xz.sig
Use a mirror for higher download bandwidth:
http://www.gnu. ...
/order/ftp.html
Here is the SHA256 checksum:
bfd19cb06cc71f3352d567e90284d8cdac02ac89774bbeadf0b533b0c11432fd
findutils-4.11.0.tar.xz
[*] Use a .sig file to verify that the corresponding file (without
the
.sig suffix) is intact. First, be sure to download both the
.sig file
and the corresponding tarball. Then, run a command like
this:
gpg --verify findutils-4.11.0.tar.xz.sig
If that command fails because you don't have the required public
key,
then run this command to import it:
gpg --keyserver keys.gnupg.net --recv-keys
0CF4E8D871593224842832B888DD9E08C5DDACB9
and rerun the 'gpg --verify' command.
================================================================================
NEWS
** Bug Fixes
find no longer crashes when diagnosing a directory
cycle (without a symlink
being involved pointing to a parent directory).
[Bug present since the FTS implementation.]
'find -used' now behaves correctly on OpenBSD 7.8 with
difftime(3) underflow
bug in the C library (already fixed there) when the
access time of a file is
identical to its change time. [#68264]
'find -ignore_readdir_race' now better handles races
between FTS reading a
directory and visiting its entries when the file or
directory was meanwhile
removed. [#45930]
To fix a POSIX compatibility bug, -exec foo Z{} + is
no longer a
complete predicate, because '+' is only a terminator
when it follows
an argument which is exactly '{}'. The findutils
documentation
already states this, and now find's behaviour matches
the
documentation. [#66365]
'updatedb.sh' now properly handles the variables for
the 'find' and 'frcode'
utilities, and hence avoids command injection.
** Changes in find
As announced since the release of 4.7.0 (2019) and
mandated by POSIX 2024,
the behaviour of the -mount option changed: while it
was a mere alias for
the -xdev option to prevent descending into
directories of another device,
the -mount option now makes find(1) ignore files on
another device, i.e.,
'find -mount' will skip the entry of active mount
points already.
Example, assuming the PROC filesystem is mounted on
'/proc':
$ find / -mount -path /proc -print
$ find / -xdev -path /proc -print
/proc
[#54745]
The actions -execdir and -okdir now refuse the '{}'
replacement in the zeroth
argument of the command to be run. While POSIX
allows this for -exec, this is
deemed insecure as an attacker could influence which
files could be found.
'find -regex' with the default or the 'emacs'
regextype now aligns better with
Emacs behaviour, and therefore e.g. supports character
classes:
$ touch 123 && find -regex
'./12[[:digit:]]'
./123
find now issues a warning when the punctuation
operators '(', ')', '!' and ','
are passed with a leading dash, e.g. '-!'.
Future releases will not accept
that any more. Accepting that was rather a bug
"since the beginning".
** Improvements
xargs now gives a better error diagnostic when
executing the given command
failed.
** Documentation Changes
The most recent version of the POSIX standard (IEEE
Std 1003.1-2024,
also known as The Open Group Base Specifications,
Issue 8) has
standardised "find -print0" and "xargs -0". Our
documentation now
points this out. Similarly for 'find
-iname'.
The code example for "Finding the Shallowest Instance"
in the Texinfo manual
and the corresponding one in the EXAMPLES section in
the find.1 man page have
been fixed. [#62259]
Translators contributed numerous fixes for issues in
the find.1 man page.
The list of actions that suppress the default -print
action has been
supplemented with the missing '-print0' and '-fprint0'
actions.
The manual pages have been updated to give better
and/or more
consistent output with manpage formatters other than
GNU roff.
** Translations
Updated the following translations:
Arabic, Brazilian Portuguese, Bulgarian, Chinese
(simplified), Croatian,
Czech, Dutch, Estonian, French, German, Indonesian,
Korean, Polish,
Portuguese, Romanian, Spanish, Swedish, Ukrainian.
** Future Changes
A future release will remove the warning message find
prints about
the 2007 change in the meaning of "-perm /000".
Everybody who is
likely to care probably knows about this change by
now.
-eof-
Pluralistic: Workplace "flexibility" isn't (11 Jul 2026) [Pluralistic: Daily links from Cory Doctorow]
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
Top Sources: None -->

Here's an irony: the "gig economy" is a statistical black hole. Workers, customers and regulators know very little about the most basic aspects of it: how much workers get paid, for example, or much unpaid time on the clock a worker puts in before they get a job from the app.
The reason this is ironic is that the "gig economy" is dominated by a handful of massive, data-driven firms that know the precise, up-to-the-second answer to these questions. The problem is that they won't share the data. Of course, workers and customers have the data, too, but our data is widely diffused, with each worker and each customer only representing a single, infinitesimal pixel in this massive picture.
Most of our industry-wide figures about the sector come from painstaking, expensive survey work. The expense and effort involved in conducting this analysis means that the public's understanding of the gig companies' business is fragmentary and thin.
But every now and again, we get a flashbulb glimpse of the full picture. One of those glimpses was captured by David Weil, the former labor standards boss at the US Department of Labor. In 2024, the Massachusetts Attorney General sued Uber over worker misclassification, with Weil serving as an expert witness, who was able to access the raw data on Uber's business operations.
In a new American Prospect longread called "The Dangerous Myth of Flexibility," Weil builds on the public record developed in the case to demolish the central myth of the gigwork companies: that they enter into a mutually beneficial arrangement with their workers by offering "flexibility" that lets workers "choose work that fits the rhythms of their lives, not the other way around":
https://prospect.org/2026/07/09/dangerous-myth-of-flexibility-uber-lyft-gig-economy/
This quote comes from Tony West, the Uber executive who has led the company's efforts to formalize its worker misclassification program, notably California's Prop 22, a $225m statewide campaign that overturned the state's landmark gig work standards. West is also Kamala Harris's brother-in-law, and he served as her campaign's corporate liaison, senior strategist and economic policy advisor.
On its face, West's statement sounds reasonable, and most of us have heard a version of it, possibly even from an Uber driver. But what Uber calls "flexibility" is really a way for the company to offload its operational risks onto its drivers.
Anyone who runs a business has to manage a key operational risk: staffing levels. A restaurateur who doesn't schedule enough cooks, bussers and servers might have to turn away business at the door if there's a rush. But if the restaurateur schedules too many people for a shift, they'll end up paying for those workers to stand around scrolling Tiktok.
In America, Congress and state legislatures have created a system that allows restaurateurs to transfer this risk onto their employees: the "tipped minimum wage." Federally, the minimum wage for tipped employees is only $2.13/hour, with the caveat that employees are obliged to "top up" their workers' pay if the tips from their shift don't add up to $7.25/hour. So if you work five hours and don't wait on a single table, your boss has to pay you $36.25 ($7.25/hour * 5 hours). But if you have a busy shift and you make $40 in tips, your boss only has to pay you $10.65 ($2.13 * 5 – the tipped minimum).
This is a transfer of risk from bosses to workers. The boss can schedule extra servers and offload most of their wages to diners who come through the doors. If your boss overestimates the amount of business, much of the cost of that miscalculation comes out of your paycheck.
This is quite a sweet deal for bosses. After all, servers have virtually no control over the amount of business a restaurant attracts. It's the boss, not the server, who decides where the restaurant will be, which hours it will keep, which food it will serve, how much the food costs, what advertisements to run, and where and when to run them. The boss controls the decor, staff attire and the music. They make the decisions, and workers pay the price if they decide poorly.
For most businesses, workers are less exposed to risks from their boss's strategic errors. If your boss screws up, you might see a lower annual bonus, or take a career hit thanks to the bad company's presence on your CV. Of course, if your boss really messes up they might lay you off or go out of business altogether, but it's a rare business that gets to externalize its risks onto its workers on a shift-by-shift basis the way restaurants get to.
But as sweet as restaurateurs have it, that's nothing compared to the incredible deal that gig platforms get. Companies like Uber and Lyft get to shift nearly all their risk to their workers, and then insist that they're doing workers a favor by offering them "flexibility." Like a restaurateur, Uber and Lyft control all the mechanisms by which the number of riders is set. They decide how to advertise and how to price their rides. When a driver signs on and makes themselves available – at no charge – to Uber, it is the company's actions, not the driver's, that determine whether that driver gets a job, and how much they'll get paid.
Uber and Lyft claim that drivers have control, too – when (if) they're offered a job, they get to decide whether to take it. This is true, but it's more complicated than that. Drivers get about 15 seconds (!) to decide whether to accept a job, which means they have 15 seconds to calculate the mileage and time-based rate on offer, all while operating a vehicle in traffic. Drivers who accept lowball offers risk having their base pay permanently eroded through "algorithmic wage discrimination," which is when the gig platforms infer that workers who accept very low wages are economically desperate and can be offered even lower wages in the future:
https://pluralistic.net/2023/04/12/algorithmic-wage-discrimination/#fishers-of-men
But workers can't simply refuse offers and wait for the wage on offer to increase. That increase may happen, but if a driver is too picky, the platform will punish them for turning down too many offers by excluding them from future opportunities. If this happens often enough, the driver may end up broke enough to start accepting those lowballs, triggering the inexorable downward trajectory of their expected earnings.
This is "flexibility," but mostly it's flexibility for Uber, not for drivers. Uber controls when a driver gets paid, and they control the data about that payment. This allows Uber to claim to be paying well north of minimum wage, while drivers average less than $2.50/hour. Uber exploits its information asymmetry to publish only the numerator (the amount a driver makes when a passenger is in the car) while hiding the denominator (how many hours it takes for Uber to put a passenger in that car):
https://pluralistic.net/2024/02/29/geometry-hates-uber/#toronto-the-gullible
Uber has perfected a system of algorithmic pricing that allows it to dangle just enough money in front of drivers to maximize their number on the road, irrespective of how many riders are looking for cars. The fact that they have all the information (while drivers have none) allows them to extract vast amounts of totally unpaid labor from those drivers. And then, once a passenger gets in the car, Uber's informational systems let it pay that driver the absolute minimum they will accept for the ride.
Of course, it works the same way for passengers, each of whom is offered a different price for the same rides, based on the company's surveillance data and its realtime calculations about how much the rider is willing to pay. When Uber launched, driver pay and passenger fares were linked (the same way a server's tips and the cost of a meal are linked). Today, these are fully decoupled. Uber runs a kind of cod-Marxist operation where workers are paid according to their desperation, and passengers are gouged according to their ability to pay:
https://pluralistic.net/2025/01/11/socialism-for-the-wealthy/#rugged-individualism-for-the-poor
This works so well (for Uber) that Uber has launched a side hustle selling algorithmic pricing and algorithmic wage discrimination systems to companies in other sectors, so expect this arrangement to infect ever-wider swathes of the economy:
(And this is neither here nor there, but holy shit, is Uber's investor relations site seriously serving ASPX pages in 2026?! Hey Khosrowshahi, the DOJ called and it wants its Clinton-era antitrust evidence back!)
Back to algorithmic pricing: this opaque, take-it-or-leave-it algorithmic pricing arrangement sets Uber apart from other platforms where sellers offer temporary use of their property to buyers. As Weil writes, at least Airbnb hosts get to override the nightly rate suggested by the platform (though I'd add that the platforms will downrank and bury people who resist their suggestions).
As Weil points out, even if Uber had to pay the minimum wage and assume other operational risks associated with running a business, they'd still have access to these algorithmic tools, albeit with different parameters. Rather than setting the wage floor for drivers at $0/hour, they'd have to pay $7.25/hour (the federal minimum wage, or more, depending on the state). This would force the company to refuse shifts to drivers when there were enough workers on the road to handle demand, but drivers would benefit from this arrangement – rather than driving around for a shift, burning gas and putting wear on your car without getting paid, Uber would just tell you to stay home.
Uber could try to offload those risks onto passengers, but remember, Uber is already charging riders a personalized price based on massive troves of surveillance data that is continuously re-analyzed to guess the largest sum you're willing to pay for any given ride. You're already paying the highest price Uber can set for you, in other words.
Weil has been in many forums – including that Massachusetts courtroom – where Uber touted its "flexibility" as a benefit to drivers. But as he shows, Uber could offer all the same flexibility to drivers without the downside risk of driving around for hours without earning a dime. Sure, forcing Uber and Lyft to extend rights and protections that every employee gets would raise their costs – but "the same is true for any company having to comply with employment law and work protections."
Outside of the US, these companies are being forced to shift the risk from their workers' backs to their own balance sheets. As Weil writes, the UN's International Labor Organization has set binding labor standards for gig companies, called Convention 193, "Decent Work in the Platform Economy":
https://onlabor.org/a-win-for-platform-workers-ilo-convention-no-193/
The US government is pulling out all the stops to prevent these standards from being applied to US gig companies, even abroad. Trump's labor boss Keith Sonderling told the world that the US government "will not sit on the sidelines while some foreign governments push to hamper American innovation in the gig economy worldwide":
https://www.washingtonexaminer.com/opinion/3435961/america-must-lead-gig-economy/
But, as Weil says, this isn't about innovation, flexibility or AI. It's about gig companies changing the distributional outcome of whole sectors, to shift money from workers to investors.
The rest of the world has its own ideas. In Switzerland, the Supreme Court found that gig companies' businesses were illegal and ordered them to extend normal labor protections to gig workers. Naturally, the gig companies just ignored the law and continued to screw those workers. Gig workers, as noted, are diffused. They don't work in the same place. They have no way to find out who else works for the same boss as they do. The same factors that keep us from gathering stats on gig work also keeps gig workers from comparing notes on how they're getting shafted.
What's a labor organizer to do? The Swiss labor union Syndicom came up with an ingenious solution. They partnered with a popular, pro-union pizza restaurant, listed it on the delivery platforms, and then placed orders for tons of pizzas through the scofflaw food-delivery platforms. They transformed the pizzeria into a pop-up union labor hub, and had an organizing conversation with every rider the company dispatched to the restaurant:
This is deliciously ingenious, and the labor organizing need not stop there. Companies like Para have shown how, by jailbreaking the apps used by gig workers, they can allow those workers to comparison shop for the best wage. Rather than getting 15 seconds while navigating traffic to decide whether a job is worth taking, drivers and riders could use a "counter-app" that evaluates all the offers on all the platforms and coordinates with other workers to mass-reject lowball offers:
https://pluralistic.net/2021/08/07/hr-4193/#boss-app
The only problem is the "anticircumvention" laws that criminalize this kind of reverse-engineering and modifications of apps. These laws make it a literal crime to change how an app running on your own phone works. These laws were invented in America, with 1998's Digital Millennium Copyright Act, but in the ensuing years, the US Trade Rep has used the threat of tariffs to force every country in the world to adopt their own anticircumvention laws. By caving into US bullying, all of America's trading partners have left their workers and consumers vulnerable to technological surveillance, manipulation and price-gouging, to the great benefit of the US tech companies that have fused with the Trump regime.
This is the hidden silver lining to Trump's lunatic tariffs: they take away the threat that kept all those US-protecting foreign IP laws in force. When someone threatens to burn your house down unless you do as you're told, and then they burn your house down anyway, you really don't have to keep complying:
https://pluralistic.net/2026/01/01/39c3/#the-new-coalition
The possibilities for counterapps in gig work are endless. In Indonesia, gig rider co-ops commission "Tuyul" apps that mod their dispatch apps in ways small (upsizing the font) and large (spoofing the GPS):
https://pluralistic.net/2021/07/08/tuyul-apps/#gojek
In his article, Weil cites a study showing that customers for gig apps tend not to comparison shop – once you choose your default taxi-hailing app, that becomes your go-to. But with counter-apps, your default could be a price-comparison app that bids out your job to all the platforms and chooses the cheapest one, forcing the gig companies to compete with each other:
https://papers.ssrn.com/sol3/papers.cfm?abstract_id=5729723
The platforms like to pitch themselves as "frictionless," but the reality is that they don't reduce friction so much as reallocate it. Because they control the technology, because the law makes it a literal crime to wrestle that control away, they can shift all the friction from their side of the ledger to yours, whether you're a worker or a customer:
https://pluralistic.net/2025/08/23/become-unoptimizable/#downward-redistribution
Tony West isn't lying when he says Uber values flexibility – they value their flexibility, which arises out of the constraints (technical, legal) they impose on us: the drivers and passengers.

Stuff of Legends https://store.warlordgames.com/products/stuff-of-legends
Revenue is just an agreement between friends https://www.larp.website/
Brown Professor Suspects Most of His Class Used AI to Cheat https://www.insidehighered.com/news/faculty/learning-assessment/2026/07/08/brown-professor-suspects-most-his-class-used-ai-cheat
Google's new remote attestation scheme is every bit as terrible as its old remote attestation scheme https://www.eff.org/deeplinks/2026/07/googles-new-remote-attestation-scheme-every-bit-terrible-its-old-remote
#20yrsago Alanya to Alanya: feminist science fiction adventure https://memex.craphound.com/2006/07/12/alanya-to-alanya-feminist-science-fiction-adventure/
#20yrsago Soviet jokes https://web.archive.org/web/20060708144926/http://www.prospect-magazine.co.uk/article_details.php?id=7412
#10yrsago Empirical proof that Terms of Service are “the biggest lie on the Internet” https://web.archive.org/web/20160712233511/https://arstechnica.com/tech-policy/2016/07/nobody-reads-tos-agreements-even-ones-that-demand-first-born-as-payment/
#10yrsago Fox’s employee contracts may mean Gretchen Carlson will never get her day in court https://web.archive.org/web/20160712123858/https://thinkprogress.org/justice/2016/07/11/3797060/dirty-trick-fox-news-using-undercut-gretchen-carlsons-sexual-harassment-suit/
#10yrsago To see the future, visit the most remote areas of the GBAO https://medium.com/studio-d/6-1-glimpses-of-the-future-e3fdb510dcc1#.iwyo4x141
#10yrsago Benjamin Frisch’s “Fun Family”: good old American narcissism https://memex.craphound.com/2016/07/12/benjamin-frischs-fun-family-good-old-american-narcissism/
#5yrsago The Sacklers will get to keep billions https://pluralistic.net/2021/07/12/monopolist-solidarity/#sacklers-billions

Edinburgh International Book Festival with Jimmy Wales, Aug
17
https://www.edbookfest.co.uk/events/the-front-list-cory-doctorow-and-jimmy-wales
Sydney: The Festival of Dangerous Ideas, Aug 23-24
https://festivalofdangerousideas.com/cory-doctorow/
Melbourne: Enshittification at the Wheeler Centre, Aug 25
https://www.wheelercentre.com/events-tickets/season-2026/cory-doctorow-enshittification
Brighton: The Reverse Centaur's Guide to Life After AI with
Carole Cadwalladr (Brighton Dome), Sep 8
https://brightondome.org/whats-on/LSC-cory-doctorow-the-reverse-centaurs-guide-to-life-after-ai/
London: The Reverse Centaur's Guide to Life After AI with Riley
Quinn (Foyle's Picadilly), Sep 9
https://www.foyles.co.uk/events/enshittification-cory-doctorow-riley-quinn
South Bend: An Evening With Cory Doctorow (Notre Dame), Oct
6
https://franco.nd.edu/events/2026/10/06/an-evening-with-cory-doctorow/
Can AI be Saved From Capitalism? (Everyday Anarchism)
https://www.everydayanarchism.com/192-can-ai-be-saved-from-capitalism-cory-doctorow/
Lawfare Daily
https://www.youtube.com/watch?v=T1KIwaYRs1g
How to Think About AI (Organized Money)
https://www.organizedmoney.fm/p/how-to-think-about-ai-with-cory-doctorow
Breaking Points
https://www.youtube.com/watch?v=VJmUbkRqXeE
"Canny Valley": A limited edition collection of the collages I create for Pluralistic, self-published, September 2025 https://pluralistic.net/2025/09/04/illustrious/#chairman-bruce
"Enshittification: Why Everything Suddenly Got Worse and What to
Do About It," Farrar, Straus, Giroux, October 7 2025
https://us.macmillan.com/books/9780374619329/enshittification/
"Picks and Shovels": a sequel to "Red Team Blues," about the heroic era of the PC, Tor Books (US), Head of Zeus (UK), February 2025 (https://us.macmillan.com/books/9781250865908/picksandshovels).
"The Bezzle": a sequel to "Red Team Blues," about prison-tech and other grifts, Tor Books (US), Head of Zeus (UK), February 2024 (thebezzle.org).
"The Lost Cause:" a solarpunk novel of hope in the climate emergency, Tor Books (US), Head of Zeus (UK), November 2023 (http://lost-cause.org).
"The Internet Con": A nonfiction book about interoperability and Big Tech (Verso) September 2023 (http://seizethemeansofcomputation.org). Signed copies at Book Soup (https://www.booksoup.com/book/9781804291245).
"Red Team Blues": "A grabby, compulsive thriller that will leave you knowing more about how the world works than you did before." Tor Books http://redteamblues.com.
"Chokepoint Capitalism: How to Beat Big Tech, Tame Big Content, and Get Artists Paid, with Rebecca Giblin", on how to unrig the markets for creative labor, Beacon Press/Scribe 2022 https://chokepointcapitalism.com
"Unauthorized Bread": a middle-grades graphic novel adapted from my novella about refugees, toasters and DRM, FirstSecond, April 20, 2027
"Enshittification, Why Everything Suddenly Got Worse and What to Do About It" (the graphic novel), Firstsecond, 2027
"The Memex Method," Farrar, Straus, Giroux, 2027
Today's top sources:
Currently writing: "The Post-American Internet," a sequel to "Enshittification," about the better world the rest of us get to have now that Trump has torched America. Fourth draft completed. Submitted to editor.

This work – excluding any serialized fiction – is licensed under a Creative Commons Attribution 4.0 license. That means you can use it any way you like, including commercially, provided that you attribute it to me, Cory Doctorow, and include a link to pluralistic.net.
https://creativecommons.org/licenses/by/4.0/
Quotations and images are not included in this license; they are included either under a limitation or exception to copyright, or on the basis of a separate license. Please exercise caution.
Blog (no ads, tracking, or data-collection):
Newsletter (no ads, tracking, or data-collection):
https://pluralistic.net/plura-list
Mastodon (no ads, tracking, or data-collection):
Bluesky (no ads, possible tracking and data-collection):
https://bsky.app/profile/doctorow.pluralistic.net
Medium (no ads, paywalled):
Tumblr (mass-scale, unrestricted, third-party surveillance and advertising):
https://mostlysignssomeportents.tumblr.com/tagged/pluralistic
"When life gives you SARS, you make sarsaparilla" -Joey "Accordion Guy" DeVilla
READ CAREFULLY: By reading this, you agree, on behalf of your employer, to release me from all obligations and waivers arising from any and all NON-NEGOTIATED agreements, licenses, terms-of-service, shrinkwrap, clickwrap, browsewrap, confidentiality, non-disclosure, non-compete and acceptable use policies ("BOGUS AGREEMENTS") that I have entered into with your employer, its partners, licensors, agents and assigns, in perpetuity, without prejudice to my ongoing rights and privileges. You further represent that you have the authority to release me from any BOGUS AGREEMENTS on behalf of your employer.
ISSN: 3066-764X
A captive audience [Seth's Blog]
The moment you start treating your customers as captives, they begin to make other plans.
It might take a while, but they always end up leaving. The first step is warning away their friends.
On the other hand, when we treat our customers like the free agents they are, they often choose to stick around (and bring the others).
Before you reward an analyst for jacking up the price and making some money this week, it might be worth focusing on what that short-term move is going to cost you.
New Cover: “Miracle Car” [Whatever]

These days, Sam Bisbee is an Emmy-winning, Oscar-nominated producer of film and television, but at the turn of the century, he was trying his hand at being a musician, releasing a few alt-rock albums that I thought were pretty good, even if rock and roll stardom eventually eluded him. One of my favorite songs of his from that era is “Miracle Car,” which was a catchy, poppy song with ambiguous lyrics. It feels like a love song, but I don’t think it actually is; you don’t ask your eternal love to “pollute you,” or, at least, I don’t. Nevertheless, a pretty good song! I decided to try to cover it.
Given the relative obscurity of the song (the original version has racked up 1K views in 11 years), it’s entirely possible that this cover of mine will be the first one I’ve essayed that most of you have not heard the original first. It is, of course, absolutely worth checking out, because Sam Bisbee does a better job with his own song, and also, his version is actually a duet. I did not do a duet. It’s just me. Sorry.
Anyway, don’t feel too bad for Sam Bisbee; his Emmy win and Oscar nod suggest his backup plan of working in film and TV has done all right for him. Good on ya, Sam.
— JS
Dirk Eddelbuettel: RQuantLib 0.4.28 on CRAN: Small Update [Planet Debian]

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
Continuous integration uses ccache-with-R action
Courtesy of my CRANberries, there is also a diffstat report for the this release. As always, more detailed information is on the RQuantLib page. Questions, comments etc should go to the rquantlib-devel mailing list. Issue tickets can be filed at the GitHub repo.
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. If you like this or other open-source work I do, you can now sponsor me at GitHub.
Dirk Eddelbuettel: Rcpp 1.1.2 on CRAN: Usual Improvements in Semi-Annual Update [Planet Debian]


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.his again conditional to avoid build complexity (Dirk in #1445 addressing #1442)An internal state component for
Datetimeis nowint(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
dataptragain for better handling of empty vectors (Iñaki in #1462 fixing #1461)Undefined behavior errors in use of
ListOfproxies have been addressed (Iñaki in #1464 fixing #1463)Under newer R version,
R_UnboundValueis 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
AttributeProxyPolicyno longer rely onget__()(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.
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. If you like this or other open-source work I do, you can sponsor me at GitHub.
Rex Ready Player One, Part Three [Penny Arcade]
I really wanted somebody to tell me what videocard to upgrade to, and when I saw that GamersNexus was following me on the Tweetzorz I shuddered with delight. Steve got back to me "weirdly fast" and since then we bother each other on occasion. He starts shit when shit needs to get started, which I appreciate. I asked him if he had anything he wanted to discuss, and luckily a bee was already firmly lodged in his bonnet. Thanks, dude.
The Block Market, or
Bail Me Out: I've Committed a Felony
Every block looks the same to the people voting on video game laws.
Snoop phones surveiling and tracking [Richard Stallman's Political Notes]
Snoop phones have lured people into surveiling and tracking their relatives, friends, even coworkers — with their consent, which it does not occur to them to refuse.
Businesses and governments started the tracking, but the relatives and friends impose bonds that feel more personal, so some people won't dare to say no. Which is why it is good practice to start saying no and make a principle of it.
Keeping the snoop phone in a Faraday bag most of the time can also be a step towards ceasing to carry one.
Urgent: Call on Schumer and Jeffries to lead climate defense [Richard Stallman's Political Notes]
US citizens: call on Senator Schumer and Rep. Jeffries to be leaders for climate defense.
Urgent: Block "SAVE America" act [Richard Stallman's Political Notes]
US citizens: call on Congress to block the perverse "SAVE America" that would require voters to show up-to-date federal ID cards with their current addresses.
Poor US citizens can't afford the fees to update them when they change address (which they are compelled to do often), so this would have an effect resembling that of the "poll tax" that southern states used to disenfranchise blacks. Those states achieved racial discrimination indirectly by using a "grandfather clause" to exempt whites from the tax. Its proposed new replacement would, I expect, disenfranchise poor people regardless of race.
US citizens: Join with this campaign to address this issue.
To phone your congresscritter about this, the main switchboard is +1-202-224-3121.
Please spread the word.
Urgent: Nationwide high-interest loan businesses [Richard Stallman's Political Notes]
US citizens: call on the Federal Reserve to block obscure local banks from setting up nationwide high-interest loan businesses.
Urgent: Resolution to protect voting rights [Richard Stallman's Political Notes]
Us citizens: call on your congresscritter to support the resolution to protect voting rights.
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
US citizens: Join with this campaign to address this issue.
To phone your congresscritter about this, the main switchboard is +1-202-224-3121.
Please spread the word.
Urgent: Support "AI for the people" act [Richard Stallman's Political Notes]
US citizens: call on your congresscritter and senators to support what is being called the "AI for the people" act, but to remove the marketing hype term "AI" from the bill.
Here is what I wrote about the term "Artificial Intelligence" in the letter I sent.
Please join me in refusing to repeat the marketing hype slogan, "Artificial Intelligence", that the companies like to use. Let's limit the term "intelligence" to systems that can know and understand, within some domain — which the chatbots of today can't do. For more explanation, see https://gnu.org/philosophy/words-to-avoid.html#ArtificialIntelligence.Despite the technology's great flaws, a handful of billionaires and tech oligarchs stand to capture trillions of dollars in wealth that needs to be shared with the rest of society.
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
Tech bros argue surveillance makes you "be good" [Richard Stallman's Political Notes]
A number of tech bros argue that total surveillance will make everyone "be good". The implicit assumption is that the people that can use the data to punish you are good, and will always and only punish bad acts. The reality of surveillance is the opposite of that. Massive surveillance helps deportation thugs find immigrants and attack them, sometimes lawfully and sometimes not. But it doesn't deter the deportation thugs from murdering people[1] [2] on the street. The trumpets who control the surveillance don't allow access to the surveillance data to catch a killer who is on their side.
Restricting abortions in name of religious freedom [Richard Stallman's Political Notes]
Right-wing Christians in the US are seeking ways to restrict abortions in the name of doctors' religious freedom.
Will they stop with doctors? They could give every employee in the hospital the "right" to opt out of an abortion, especially one that was not planned in advance. Unplanned abortions are sometimes needed to save a woman's life threatened by complications in pregnancy, and state laws that prohibit abortions put women's lives in danger when that happens.
A last-minute veto by a pious worker could have the same effect.
Completely politicizing justice department [Richard Stallman's Political Notes]
*[The persecutor] has "succeeded in completely politicizing" justice department, experts say, using it to punish his enemies.*
Delayed manifestation of core democracy loss [Richard Stallman's Political Notes]
The US lost the core of its democracy in the 1970s-80s. After that, inertia kept parts of the democratic system sort of working. What we are seeing now is the delayed manifestation of the full consequences of that loss.
Britain's environmental protection laws [Richard Stallman's Political Notes]
Britain's environmental protection laws focus on limiting construction, including projects for decarbonization and protection of endangered species. The article argues for focusing endangered species protection spending on projects that will do a lot of that kind of good, will do it efficiently.
The argument is convincing, but it risks encouraging a big mistake: a vague general weakening of environmental protection regulations, aiming simply to "reduce red tape". Instead of making protection more efficient, that would allow developers to trash the environment massively.
LLMs can sometimes identify an anonymous person [Richard Stallman's Political Notes]
LLMs can sometimes identify a person who posts anonymously by correlating details in the anonymous posts with details posted non-anonymously on other sites.
Please don't assume that LLMs constitute "intelligence"!
Ford re-hired previously fired engineers [Richard Stallman's Political Notes]
Ford fired experienced engineers and replaced them with automation, which harmed the quality of production. The company was compelled to rehire many of the engineers.
I wonder if Ford will fire them again if it gets the automation to work better.
US heat wave caused by global heating [Richard Stallman's Political Notes]
The just-ended US heat wave could never have happened before global heating.
Dolphins follow fishing boats looking for food [Richard Stallman's Political Notes]
Due to overfishing in the Adriatic Sea between Italy and the Balkans, dolphins must follow fishing boats hoping for scraps.
Avenues for Billionaires and Corporations to buy elections [Richard Stallman's Political Notes]
*[Plutocratist Supreme Court] Campaign Finance Ruling Opens New Avenues for Billionaires and Corporations to Buy Elections.*
Businesses requiring workers to act like robots [Richard Stallman's Political Notes]
Businesses are increasingly requiring workers to act like robots under the control of the employer's software.
Cory Doctorow calls this the "reverse centaur" metaphor, suggesting that the human becomes the legs of some combined organism, while the boss becomes its human-like intelligence. But I think that metaphor exaggerates: the worker and the boss do not become one organism, and a real centaur would not despise its legs, or the horse-like part of its body.
The proper metaphor, I suggest, is that of a human riding a horse. The employee is reduced to the role of the horse, while the boss enjoys the role of the rider.
Naturally, nonfree software plays a crucial role in this subjugation. The natural tendency release of nonfree software is to give the owner (or the owner's allies) power over its useds; in this scenario, that is the primary purpose of developing the program.
Perhaps we should pass laws to prohibit employers from requiring or compelling employees to run any particular or special software.
What an employer could require is that the employee run some software that supports a particular protocol — but only if the protocol is supported by free software. This condition prevents the employer from choosing a requirement that would in practice force the employee into use of nonfree software.
America should offer asylum for the persecuted [Richard Stallman's Political Notes]
Robert Reich: America should offer asylum for the persecuted — not persecute those seeking asylum.
He quotes a moving part of Zohran Mamdani's recent speech.
| Feed | RSS | Last fetched | Next fetched after |
|---|---|---|---|
| @ASmartBear | XML | 20:35, Thursday, 16 July | 21:16, Thursday, 16 July |
| a bag of four grapes | XML | 20:42, Thursday, 16 July | 21:24, Thursday, 16 July |
| Ansible | XML | 20:28, Thursday, 16 July | 21:08, Thursday, 16 July |
| Bad Science | XML | 20:56, Thursday, 16 July | 21:45, Thursday, 16 July |
| Black Doggerel | XML | 20:35, Thursday, 16 July | 21:16, Thursday, 16 July |
| Blog - Official site of Stephen Fry | XML | 20:56, Thursday, 16 July | 21:45, Thursday, 16 July |
| Charlie Brooker | The Guardian | XML | 20:42, Thursday, 16 July | 21:24, Thursday, 16 July |
| Charlie's Diary | XML | 20:14, Thursday, 16 July | 21:02, Thursday, 16 July |
| Chasing the Sunset - Comics Only | XML | 20:56, Thursday, 16 July | 21:45, Thursday, 16 July |
| Coding Horror | XML | 20:56, Thursday, 16 July | 21:43, Thursday, 16 July |
| Comics Archive - Spinnyverse | XML | 20:56, Thursday, 16 July | 21:40, Thursday, 16 July |
| Cory Doctorow's craphound.com | XML | 20:42, Thursday, 16 July | 21:24, Thursday, 16 July |
| Cory Doctorow, Author at Boing Boing | XML | 20:35, Thursday, 16 July | 21:16, Thursday, 16 July |
| Ctrl+Alt+Del Comic | XML | 20:14, Thursday, 16 July | 21:02, Thursday, 16 July |
| Cyberunions | XML | 20:56, Thursday, 16 July | 21:45, Thursday, 16 July |
| David Mitchell | The Guardian | XML | 20:28, Thursday, 16 July | 21:11, Thursday, 16 July |
| Deeplinks | XML | 20:56, Thursday, 16 July | 21:40, Thursday, 16 July |
| Diesel Sweeties webcomic by rstevens | XML | 20:28, Thursday, 16 July | 21:11, Thursday, 16 July |
| Dilbert | XML | 20:56, Thursday, 16 July | 21:45, Thursday, 16 July |
| Dork Tower | XML | 20:42, Thursday, 16 July | 21:24, Thursday, 16 July |
| Economics from the Top Down | XML | 20:28, Thursday, 16 July | 21:11, Thursday, 16 July |
| Edmund Finney's Quest to Find the Meaning of Life | XML | 20:28, Thursday, 16 July | 21:11, Thursday, 16 July |
| EFF Action Center | XML | 20:28, Thursday, 16 July | 21:11, Thursday, 16 July |
| Enspiral Tales - Medium | XML | 20:56, Thursday, 16 July | 21:41, Thursday, 16 July |
| Events | XML | 20:14, Thursday, 16 July | 21:02, Thursday, 16 July |
| Falkvinge on Liberty | XML | 20:14, Thursday, 16 July | 21:02, Thursday, 16 July |
| Flipside | XML | 20:42, Thursday, 16 July | 21:24, Thursday, 16 July |
| Flipside | XML | 20:56, Thursday, 16 July | 21:41, Thursday, 16 July |
| Free software jobs | XML | 20:28, Thursday, 16 July | 21:08, Thursday, 16 July |
| Full Frontal Nerdity by Aaron Williams | XML | 20:14, Thursday, 16 July | 21:02, Thursday, 16 July |
| General Protection Fault: Comic Updates | XML | 20:14, Thursday, 16 July | 21:02, Thursday, 16 July |
| George Monbiot | XML | 20:28, Thursday, 16 July | 21:11, Thursday, 16 July |
| Girl Genius | XML | 20:28, Thursday, 16 July | 21:11, Thursday, 16 July |
| Groklaw | XML | 20:14, Thursday, 16 July | 21:02, Thursday, 16 July |
| Grrl Power | XML | 20:42, Thursday, 16 July | 21:24, Thursday, 16 July |
| Hackney Anarchist Group | XML | 20:56, Thursday, 16 July | 21:45, Thursday, 16 July |
| Hackney Solidarity Network | XML | 20:56, Thursday, 16 July | 21:41, Thursday, 16 July |
| http://blog.llvm.org/feeds/posts/default | XML | 20:56, Thursday, 16 July | 21:41, Thursday, 16 July |
| http://calendar.google.com/calendar/feeds/q7s5o02sj8hcam52hutbcofoo4%40group.calendar.google.com/public/basic | XML | 20:28, Thursday, 16 July | 21:08, Thursday, 16 July |
| http://dynamic.boingboing.net/cgi-bin/mt/mt-cp.cgi?__mode=feed&_type=posts&blog_id=1&id=1 | XML | 20:56, Thursday, 16 July | 21:41, Thursday, 16 July |
| http://eng.anarchoblogs.org/feed/atom/ | XML | 20:49, Thursday, 16 July | 21:35, Thursday, 16 July |
| http://feed43.com/3874015735218037.xml | XML | 20:49, Thursday, 16 July | 21:35, Thursday, 16 July |
| http://flatearthnews.net/flatearthnews.net/blogfeed | XML | 20:35, Thursday, 16 July | 21:16, Thursday, 16 July |
| http://fulltextrssfeed.com/ | XML | 20:28, Thursday, 16 July | 21:11, Thursday, 16 July |
| http://london.indymedia.org/articles.rss | XML | 20:56, Thursday, 16 July | 21:43, Thursday, 16 July |
| http://pipes.yahoo.com/pipes/pipe.run?_id=ad0530218c055aa302f7e0e84d5d6515&_render=rss | XML | 20:49, Thursday, 16 July | 21:35, Thursday, 16 July |
| http://planet.gridpp.ac.uk/atom.xml | XML | 20:56, Thursday, 16 July | 21:43, Thursday, 16 July |
| http://shirky.com/weblog/feed/atom/ | XML | 20:56, Thursday, 16 July | 21:40, Thursday, 16 July |
| http://thecommune.co.uk/feed/ | XML | 20:56, Thursday, 16 July | 21:41, Thursday, 16 July |
| http://theness.com/roguesgallery/feed/ | XML | 20:14, Thursday, 16 July | 21:02, Thursday, 16 July |
| http://www.airshipentertainment.com/buck/buckcomic/buck.rss | XML | 20:56, Thursday, 16 July | 21:45, Thursday, 16 July |
| http://www.airshipentertainment.com/growf/growfcomic/growf.rss | XML | 20:56, Thursday, 16 July | 21:40, Thursday, 16 July |
| http://www.airshipentertainment.com/myth/mythcomic/myth.rss | XML | 20:42, Thursday, 16 July | 21:24, Thursday, 16 July |
| http://www.baen.com/baenebooks | XML | 20:56, Thursday, 16 July | 21:40, Thursday, 16 July |
| http://www.feedsapi.com/makefulltextfeed.php?url=http%3A%2F%2Fwww.somethingpositive.net%2Fsp.xml&what=auto&key=&max=7&links=preserve&exc=&privacy=I+accept | XML | 20:56, Thursday, 16 July | 21:40, Thursday, 16 July |
| http://www.godhatesastronauts.com/feed/ | XML | 20:14, Thursday, 16 July | 21:02, Thursday, 16 July |
| http://www.tinycat.co.uk/feed/ | XML | 20:28, Thursday, 16 July | 21:08, Thursday, 16 July |
| https://anarchism.pageabode.com/blogs/anarcho/feed/ | XML | 20:56, Thursday, 16 July | 21:40, Thursday, 16 July |
| https://broodhollow.krisstraub.comfeed/ | XML | 20:35, Thursday, 16 July | 21:16, Thursday, 16 July |
| https://debian-administration.org/atom.xml | XML | 20:35, Thursday, 16 July | 21:16, Thursday, 16 July |
| https://elitetheatre.org/ | XML | 20:56, Thursday, 16 July | 21:43, Thursday, 16 July |
| https://feeds.feedburner.com/Starslip | XML | 20:42, Thursday, 16 July | 21:24, Thursday, 16 July |
| https://feeds2.feedburner.com/GeekEtiquette?format=xml | XML | 20:28, Thursday, 16 July | 21:11, Thursday, 16 July |
| https://hackbloc.org/rss.xml | XML | 20:35, Thursday, 16 July | 21:16, Thursday, 16 July |
| https://kajafoglio.livejournal.com/data/atom/ | XML | 20:56, Thursday, 16 July | 21:45, Thursday, 16 July |
| https://philfoglio.livejournal.com/data/atom/ | XML | 20:56, Thursday, 16 July | 21:43, Thursday, 16 July |
| https://pixietrixcomix.com/eerie-cutiescomic.rss | XML | 20:56, Thursday, 16 July | 21:43, Thursday, 16 July |
| https://pixietrixcomix.com/menage-a-3/comic.rss | XML | 20:56, Thursday, 16 July | 21:40, Thursday, 16 July |
| https://propertyistheft.wordpress.com/feed/ | XML | 20:28, Thursday, 16 July | 21:08, Thursday, 16 July |
| https://requiem.seraph-inn.com/updates.rss | XML | 20:28, Thursday, 16 July | 21:08, Thursday, 16 July |
| https://studiofoglio.livejournal.com/data/atom/ | XML | 20:49, Thursday, 16 July | 21:35, Thursday, 16 July |
| https://thecommandline.net/feed/ | XML | 20:49, Thursday, 16 July | 21:35, Thursday, 16 July |
| https://torrentfreak.com/subscriptions/ | XML | 20:28, Thursday, 16 July | 21:11, Thursday, 16 July |
| https://web.randi.org/?format=feed&type=rss | XML | 20:28, Thursday, 16 July | 21:11, Thursday, 16 July |
| https://www.dcscience.net/feed/medium.co | XML | 20:56, Thursday, 16 July | 21:45, Thursday, 16 July |
| https://www.DropCatch.com/domain/steampunkmagazine.com | XML | 20:35, Thursday, 16 July | 21:16, Thursday, 16 July |
| https://www.DropCatch.com/domain/ubuntuweblogs.org | XML | 20:49, Thursday, 16 July | 21:35, Thursday, 16 July |
| https://www.DropCatch.com/redirect/?domain=DyingAlone.net | XML | 20:56, Thursday, 16 July | 21:43, Thursday, 16 July |
| https://www.freedompress.org.uk:443/news/feed/ | XML | 20:14, Thursday, 16 July | 21:02, Thursday, 16 July |
| https://www.goblinscomic.com/category/comics/feed/ | XML | 20:28, Thursday, 16 July | 21:08, Thursday, 16 July |
| https://www.loomio.com/blog/feed/ | XML | 20:49, Thursday, 16 July | 21:35, Thursday, 16 July |
| https://www.newstatesman.com/feeds/blogs/laurie-penny.rss | XML | 20:35, Thursday, 16 July | 21:16, Thursday, 16 July |
| https://www.patreon.com/graveyardgreg/posts/comic.rss | XML | 20:56, Thursday, 16 July | 21:43, Thursday, 16 July |
| https://www.rightmove.co.uk/rss/property-for-sale/find.html?locationIdentifier=REGION^876&maxPrice=240000&minBedrooms=2&displayPropertyType=houses&oldDisplayPropertyType=houses&primaryDisplayPropertyType=houses&oldPrimaryDisplayPropertyType=houses&numberOfPropertiesPerPage=24 | XML | 20:28, Thursday, 16 July | 21:11, Thursday, 16 July |
| https://x.com/statuses/user_timeline/22724360.rss | XML | 20:28, Thursday, 16 July | 21:08, Thursday, 16 July |
| Humble Bundle Blog | XML | 20:56, Thursday, 16 July | 21:43, Thursday, 16 July |
| I, Cringely | XML | 20:14, Thursday, 16 July | 21:02, Thursday, 16 July |
| Irregular Webcomic! | XML | 20:35, Thursday, 16 July | 21:16, Thursday, 16 July |
| Joel on Software | XML | 20:49, Thursday, 16 July | 21:35, Thursday, 16 July |
| Judith Proctor's Journal | XML | 20:28, Thursday, 16 July | 21:08, Thursday, 16 July |
| Krebs on Security | XML | 20:35, Thursday, 16 July | 21:16, Thursday, 16 July |
| Lambda the Ultimate - Programming Languages Weblog | XML | 20:28, Thursday, 16 July | 21:08, Thursday, 16 July |
| Looking For Group | XML | 20:56, Thursday, 16 July | 21:40, Thursday, 16 July |
| LWN.net | XML | 20:35, Thursday, 16 July | 21:16, Thursday, 16 July |
| Mimi and Eunice | XML | 20:56, Thursday, 16 July | 21:41, Thursday, 16 July |
| Neil Gaiman's Journal | XML | 20:28, Thursday, 16 July | 21:08, Thursday, 16 July |
| Nina Paley | XML | 20:56, Thursday, 16 July | 21:43, Thursday, 16 July |
| O Abnormal – Scifi/Fantasy Artist | XML | 20:56, Thursday, 16 July | 21:41, Thursday, 16 July |
| Oglaf! -- Comics. Often dirty. | XML | 20:14, Thursday, 16 July | 21:02, Thursday, 16 July |
| Oh Joy Sex Toy | XML | 20:56, Thursday, 16 July | 21:40, Thursday, 16 July |
| Order of the Stick | XML | 20:56, Thursday, 16 July | 21:40, Thursday, 16 July |
| Original Fiction Archives - Reactor | XML | 20:42, Thursday, 16 July | 21:24, Thursday, 16 July |
| OSnews | XML | 20:56, Thursday, 16 July | 21:41, Thursday, 16 July |
| Paul Graham: Unofficial RSS Feed | XML | 20:56, Thursday, 16 July | 21:41, Thursday, 16 July |
| Penny Arcade | XML | 20:42, Thursday, 16 July | 21:24, Thursday, 16 July |
| Penny Red | XML | 20:56, Thursday, 16 July | 21:41, Thursday, 16 July |
| PHD Comics | XML | 20:56, Thursday, 16 July | 21:45, Thursday, 16 July |
| Phil's blog | XML | 20:14, Thursday, 16 July | 21:02, Thursday, 16 July |
| Planet Debian | XML | 20:56, Thursday, 16 July | 21:41, Thursday, 16 July |
| Planet GNU | XML | 20:35, Thursday, 16 July | 21:16, Thursday, 16 July |
| Planet Lisp | XML | 20:56, Thursday, 16 July | 21:45, Thursday, 16 July |
| Pluralistic: Daily links from Cory Doctorow | XML | 20:28, Thursday, 16 July | 21:08, Thursday, 16 July |
| PS238 by Aaron Williams | XML | 20:14, Thursday, 16 July | 21:02, Thursday, 16 July |
| QC RSS v2 | XML | 20:56, Thursday, 16 July | 21:43, Thursday, 16 July |
| Radar | XML | 20:42, Thursday, 16 July | 21:24, Thursday, 16 July |
| RevK®'s ramblings | XML | 20:49, Thursday, 16 July | 21:35, Thursday, 16 July |
| Richard Stallman's Political Notes | XML | 20:56, Thursday, 16 July | 21:45, Thursday, 16 July |
| Scenes From A Multiverse | XML | 20:56, Thursday, 16 July | 21:43, Thursday, 16 July |
| Schneier on Security | XML | 20:28, Thursday, 16 July | 21:08, Thursday, 16 July |
| SCHNEWS.ORG.UK | XML | 20:56, Thursday, 16 July | 21:40, Thursday, 16 July |
| Scripting News | XML | 20:42, Thursday, 16 July | 21:24, Thursday, 16 July |
| Seth's Blog | XML | 20:49, Thursday, 16 July | 21:35, Thursday, 16 July |
| Skin Horse | XML | 20:42, Thursday, 16 July | 21:24, Thursday, 16 July |
| Tales From the Riverbank | XML | 20:56, Thursday, 16 July | 21:45, Thursday, 16 July |
| The Adventures of Dr. McNinja | XML | 20:56, Thursday, 16 July | 21:41, Thursday, 16 July |
| The Bumpycat sat on the mat | XML | 20:28, Thursday, 16 July | 21:08, Thursday, 16 July |
| The Daily WTF | XML | 20:49, Thursday, 16 July | 21:35, Thursday, 16 July |
| The Monochrome Mob | XML | 20:35, Thursday, 16 July | 21:16, Thursday, 16 July |
| The Non-Adventures of Wonderella | XML | 20:28, Thursday, 16 July | 21:11, Thursday, 16 July |
| The Old New Thing | XML | 20:56, Thursday, 16 July | 21:40, Thursday, 16 July |
| The Open Source Grid Engine Blog | XML | 20:56, Thursday, 16 July | 21:43, Thursday, 16 July |
| The Stranger | XML | 20:56, Thursday, 16 July | 21:41, Thursday, 16 July |
| towerhamletsalarm | XML | 20:49, Thursday, 16 July | 21:35, Thursday, 16 July |
| Twokinds | XML | 20:42, Thursday, 16 July | 21:24, Thursday, 16 July |
| UK Indymedia Features | XML | 20:42, Thursday, 16 July | 21:24, Thursday, 16 July |
| Uploads from ne11y | XML | 20:49, Thursday, 16 July | 21:35, Thursday, 16 July |
| Uploads from piasladic | XML | 20:28, Thursday, 16 July | 21:11, Thursday, 16 July |
| Use Sword on Monster | XML | 20:56, Thursday, 16 July | 21:43, Thursday, 16 July |
| Wayward Sons: Legends - Sci-Fi Full Page Webcomic - Updates Daily | XML | 20:49, Thursday, 16 July | 21:35, Thursday, 16 July |
| what if? | XML | 20:35, Thursday, 16 July | 21:16, Thursday, 16 July |
| Whatever | XML | 20:56, Thursday, 16 July | 21:45, Thursday, 16 July |
| Whitechapel Anarchist Group | XML | 20:56, Thursday, 16 July | 21:45, Thursday, 16 July |
| WIL WHEATON dot NET | XML | 20:56, Thursday, 16 July | 21:40, Thursday, 16 July |
| wish | XML | 20:56, Thursday, 16 July | 21:41, Thursday, 16 July |
| Writing the Bright Fantastic | XML | 20:56, Thursday, 16 July | 21:40, Thursday, 16 July |
| xkcd.com | XML | 20:28, Thursday, 16 July | 21:11, Thursday, 16 July |