Tuesday, 20 October

22:49

Steinar H. Gunderson: Decompilation patterns, part 17: Loop rotation [Planet Debian]

Occasionally, you'll see code like this (after initial cleanup):

    var_v0_2 = crc & 0x80000000;
    do {
       if (var_v0_2 != 0) {
           crc = (crc << 1) ^ 0x1EDC6F41;
       } else {
           crc <<= 1;
       }
       var_a0 += 1;
       var_v0_2 = crc & 0x80000000;
    } while (var_a0 < 8U);

The thing with var_v0_2 is unnatural. GCC sometimes does these loop rotation tricks, seemingly to save registers (don't ask me how exactly it does). You want to un-rotate back into:

    do {
       var_v0_2 = crc & 0x80000000;
       if (var_v0_2 != 0) {
           crc = (crc << 1) ^ 0x1EDC6F41;
       } else {
           crc <<= 1;
       }
       var_a0 += 1;
    } while (var_a0 < 8U);

and then of course, you can clean up the rest:

for (i = 0; i < 8; ++i) {
    if (crc & 0x80000000) {
        crc = (crc << 1) ^ 0x1EDC6F41;
    } else {
        crc <<= 1;
    }
}

Last one tomorrow, I think.

Apple stops pretending macOS is UNIX [OSnews]

Early 2025, I wrote about how I think macOS’ UNIX certification was basically a lie. It required so many convoluted and cumbersome changes to macOS that literally nobody applies to their system that it the certification had kind of become a farce. At the end of the article I wondered for how much longer Apple would be playing this little charade to hammer macOS through a meaningless UNIX-shaped hole, and it turns out the answer was “about 18 months”.

When you go to the Open Group’s website and the list of certified UNIX operating systems, macOS is no longer listed. For the past few weeks, it was still listed if you drilled down specifically to the UNIX 03 certification, but that, too, has now been removed. Assuming macOS 27 doesn’t return in the near future with a brand new certification, we can safely say that Apple got tired of paying a few employees to get its desktop operating system certified.

With one more operating system gone from the list, there’s now only one UNIX operating systems left: AIX. While the registry also lists HP-UX, z/OS, and UnixWare/OpenServer, those either only conform to really old UNIX certifications (from the ’90s), or simply aren’t developed anymore (HP sunset HP-UX at the end of last year). Only one operating system version conforms to the latest version of the certification, UNIX 07, and that’s AIX 7.2 TL5 “and later”, which possibly includes AIX 7.3, the most recent version of AIX.

Not that any of this really matters.

22:21

Critical PHP security update coming [LWN.net]

The PHP security team has let it be known that there is a high-stakes security update coming at 14:00 UTC on October 21. "All PHP users are encouraged to prepare now so they can upgrade as soon as the release is available". Anybody running a PHP site probably needs to be prepared for this one.

21:35

The Big Idea: Stephanie Feldman [Whatever]

With fall in full swing and that crisp chill in the air, it’s the perfect opportunity to cuddle up with author Stephanie Feldman’s newest collection of short fiction, The Night Parade and Other Stories. Light a fall candle and follow along in her Big Idea for these spooky tales.

STEPHANIE FELDMAN:

As a collection, The Night Parade and Other Stories asked me to approach the question of the Big Idea backwards. Not “What Big Idea do I want to tackle?” but “What Big Idea ties these stories together?”

It wasn’t hard to find threads running through my work. I’m always thinking about Big Ideas—what makes a story matter—while I brainstorm, draft, and revise. My short fiction often explores women’s perspectives and all that makes my Mid-Atlantic home weird, creepy, and enchanting.

When I collected my spooky stories set in this region, I made another discovery. While these stories all feature different characters in different worlds, I could assemble them in a rough chronology of a woman’s life. Over the course of the book, we go from childhood friendships, to teenage fear and ambition, to young adult insecurity, and through romance, marriage, divorce, motherhood, and death. 

The stories selected themselves; the order fell into place. I felt quite proud of myself. A thematically cohesive collection of dark speculative stories about “The Danger of Loving another Person.” My writing process focused on relentless questioning of Big Ideas had paid off!

But then, I found another thread, silent until the manuscript pulled it taut: music.

In “The Staircase,” the girl who briefly vanishes is a flutist, and she returns from the void with a strange melody. In “The Barrens,” the kids venturing into New Jersey’s haunted Pine Barrens are seduced by an anonymous DJ broadcasting from the wilderness. In “The Boyfriend Trap,” the narrator knows something has changed when her moody, controlling boyfriend plays her favorite song, which he once derided. In “The Albatwitch Chorus,” the middle-aged witch and her teenage intern—daughter of the ex-husband still hanging around—both long to hear the singing of the mysterious, dangerous cryptid society on the outskirts of town. And in the final novella, “The Night Parade,” the young widow searching for her kidnapped husband will do anything, everything to hear the music of an annual, ghostly procession.

And how does that melody go? And what song does the DJ, the suddenly solicitous boyfriend play? And what does the tiny hominid’s voice sound like? And can you decipher the strange words in the Night Parade’s chant?

Maybe you know that old claim: “Writing about music is like dancing about architecture.” (Fittingly, while the quote has been attributed to many, its author remains unknown.) Some things you just can’t articulate.

Counterintuitive though it may seem, a story’s meaning can’t be entirely articulated either—or, rather, it can’t be summarized or encapsulated in a thesis. “A story,” Flannery O’Connor wrote, “is a way to say something that can’t be said any other way, and it takes every word in the story to say what the meaning is.”

So I could tell you that “The Getaway” is about the compounding loneliness of isolation, and whether it’s possible for the young woman, her social life derailed by the COVID lockdown, to repair her oldest friendship. But it also is the broken clock on the porch, the vision of her friend standing in the trees holding a steering wheel, the hole in the ground, the open window, the feeling of being watched. “The Witch of Osborne Park” is about a young mother in the suburbs who doesn’t fit in, and can’t bear her child growing up. But it also is the flock of birds pummeling the window, the little girls costumed in purple robes and wooden masks, the plastic cup of warm white wine, the vanished “Watch Children” traffic sign and the car collision where it stood.

For a long time, I thought I had to master structure and technique; I had to pin that Big Idea down. But I’ve learned—especially as I’ve leaned into horror, the uncanny, the weird—to trust my unconscious impulse. If it feels striking, unnerving, moving, important, then it deserves attention, and probably a place in the final story. If I can’t tell you my story’s Big Idea, then I know it’s not finished. But if I haven’t let in the jolting, haunting images, phrases, and moments that appear along the way, then it’s not going to be any good.


The Night Parade: Amazon|Barnes & Noble|Bookshop|Books-A-Million

Author socials: Website|Instagram|Bluesky|Facebook

20:07

[$] SUSE's efforts to disable setuid system-wide [LWN.net]

Setuid (and setgid) binaries have long been a source of headaches, and security vulnerabilities, on Linux systems. They are largely seen as something to be avoided; SUSE's security team, for example, forbids the inclusion of setuid or setgid binaries in packages unless they have been reviewed and explicitly allowed. Thorsten Kukuk wants to go a step further and disallow them entirely. At the 2026 All Systems Go! conference, he spoke about his work to disable setuid system-wide, as well as some of the hurdles that remain.

18:56

Thadeu Lima de Souza Cascardo: Restricting device memory usage on Linux 7.3 [Planet Debian]

Linux cgroups has been used for a while to group processes and control their access to certain system resources. One of those resources is memory, through the use of memcg. That control is dynamic, allowing for cgroups to setup a minimal and a maximal amount of memory, as well as low and high thresholds, which will control the reclaim process.

But what about device memory that is not available as system RAM? Memory that is not available to the Linux page allocator? One of those device memories is GPU VRAM.

That's where the dmem cgroup controller comes in. Introduced in Linux 6.14, it was first adopted by the Intel Xe driver. In Linux 6.15, AMD amdgpu driver also adopted it. In 7.3, it was adopted by nouveau.

Such a cgroup controller allows the system to be configured such that a workload, be it a browser, a game, or another GPU rendering process can have some minimal VRAM available. Or it can prevent one of these processes from using all VRAM, preventing your compositor from using it, for example.

Let's go through the system knobs that are available to control this and what's new in Linux 7.3.

dmem regions and dmem.capacity

Since a given system might have multiple GPUs, there might be multiple device memory regions. So, on dmem, each such region is described by a name. Every dmem cgroup setting file will contain one line per region. One of those files shows the capacity of each region in bytes and is present only in the root cgroup.

After enabling the dmem cgroup with the following command:

# echo +dmem > /sys/fs/cgroup/cgroup.subtree_control

One can inspect the capacity of any available regions by looking at dmem.capacity at the root cgroup:

# cat /sys/fs/cgroup/dmem.capacity
drm/0000:03:00.0/vram 8573157376

That shows that the GPU at PCI address 0000:03:00.0 has a 8176MiB VRAM dmem region.

dmem settings

When introduced at 6.14, the following settings were available.

dmem.current

In every dmem cgroup, including the root cgroup, the dmem.current is a read-only file that shows the current usage of each region by the given cgroup.

# cat /sys/fs/cgroup/user.slice/dmem.current
drm/0000:03:00.0/vram 292757504

Here, it shows that user.slice cgroup is currently using above 292 MB of VRAM.

# cat /sys/fs/cgroup/dmem.current
drm/0000:03:00.0/vram 311377920

Here, we can check that total system usage is above 311 MB.

dmem.max

Excluding the root cgroup, dmem cgroups can control the maximal number of bytes that can be allocated from a region by processes in that cgroup. If an allocation moves the usage above the max setting, it will be refused. In that case, the allocation might be attempted at system memory or it might trigger eviction, depending on the allocation parameters and the driver.

Here, the max value has special meaning, which is unrestricted usage.

# echo drm/0000:03:00.0/vram 536870912 > /sys/fs/cgroup/user.slice/dmem.max
# cat /sys/fs/cgroup/user.slice/dmem.max
drm/0000:03:00.0/vram 536870912
# echo drm/0000:03:00.0/vram max > /sys/fs/cgroup/user.slice/dmem.max
# cat /sys/fs/cgroup/user.slice/dmem.max
drm/0000:03:00.0/vram max

dmem.min

dmem.min, also not available on the root cgroup, will control the eviction process - when memory needs to be moved out of VRAM to make room for other VRAM allocations. If an object belongs to a cgroup which is using less than its min setting, it will not be considered for eviction. It effectively works as a hard protection such that the cgroup can use at least the minimal setting.

Given multiple cgroups may set a minimal value that exceeds the device memory capacity, it computes an effective minimal depending on the hierarchy.

dmem.low

While dmem.min works as a hard limit, dmem.low is a soft limit that will prevent eviction in case other objects from different cgroups are available for eviction. That is, the system will try to evict from different, possibly unprotected cgroups, before it tries to evict from a cgroup if evicting would leave its usage below the value set as dmem.low.

Recent developments in Linux 7.3

Some new changes have been recently introduced in the dmem cgroup controller and its integration with GPUs.

One of those is a new read-only file, dmem.peak, which was introduced to allow the peak usage of a region in a cgroup to be inspected.

Also, Linux 7.3 fixed certain scenarios where a given cgroup would not be able to allocate VRAM up to its minimal or low limits if other processes had already allocated most of VRAM, even though they had no such limits set.

Changing multiple regions' settings in a single write was possible before 7.3, but it was prone to failures which would not be reported to userspace and might have left the values partially updated. Starting with 7.3, only one region may be updated per write.

And, finally, prior to 7.3, setting dmem.max in a cgroup that was using more than the new setting would silently fail. Now, there is a mechanism that allows a reclaim mechanism to be triggered. That way, when a process writes to dmem.max and sets a maximal value below the current usage, it will wait (unless O_NONBLOCK is used) for the reclaim process to move objects out of VRAM until the usage gets below the maximal value. If that is not possible for some reason, the setting will still be in place, restricting further alloctions by that cgroup.

OpenBSD 8.0 released [OSnews]

Hot on the heels of Wine being ported to OpenBSD, we now have the release of OpenBSD 8.0. It adds hibernate support for arm64, switches the sparc64 toolchain to LLVM, and updates the DRM graphics drivers to Linux 6.18.53, which also adds support for Intel Arc A-Series (DG2/Alchemist) graphics cards. There’s a whole bunch of improvements, fixes, and changes for RISC-V and ARM in general, of course, as well as to the various Wi-Fi drivers. On top of that, it also comes with new versions of OpenSSH and LibreSSL, as well as a massive list of other improvements and fixes.

If you’ve never installed OpenBSD before, be sure to read this detailed guide to know what to do once everything’s installed, while listening to the official release song, of course.

18:35

Pluralistic: The death of history's most successful publisher (20 Oct 2026) [Pluralistic: Daily links from Cory Doctorow]

->->->->->->->->->->->->->->->->->->->->->->->->->->->->-> Top Sources: None -->

Today's links



A haunted burial ground by a lake, with a bat flying overhead. A haint in a shroud floats over the scene, its face is the Google Android droid. The sole, listing tombstone reads 'I'm feeling lucky.'

The death of history's most successful publisher (permalink)

I published my first story in 1988, when I was 17 years old. Today, at 55, I've published more than 30 books, with three more coming in the next year or so. In the intervening years, I've spent a lot of time thinking and talking about publishing.

I've had plenty of opportunity to reflect on publishing: I've been a bookseller and worked in libraries, I wrote a column for Publishers Weekly, self-published a few books of my own, published the first-ever book licensed under Creative Commons, and broke several Kickstarter records for audiobook projects. But most of all, I've worked with publishing professionals: publicists, marketing directors, operations people, copyeditors, and, above all, editors.

My first novel editor was the magnificent Patrick Nielsen Hayden, who supported my publishing career from the very start, donating to help send me to the Clarion science fiction writers' workshop and inviting me to come read slush at Tor Books whenever I was in New York. Patrick didn't teach me everything I know about publishing, but he sure taught me a lot about publishing, and hardly a day goes by without my having cause to reflect on one of our many discussions over our decades-long professional and personal association.

Out of all the things I learned about publishing from Patrick, one truth stands out above all: publishing is "the act of making something public." Publishing may or may not involve editing, layout, printing, binding, marketing or other activities that we associate with publishing houses, but publishing always involves identifying a work, identifying an audience, and finding ways to connect that work to that audience.

This definition does a lot of useful work. For one thing, it locates publishing as part of the hard problem of human society, namely, "getting people to care about something that matters to you." Beyond publishing, this is the crux of politics, religion and commerce:

https://pluralistic.net/2021/07/04/self-publishing/

For another, this definition lets us understand that (for most of its existence) Google was the most successful publisher in human history. No other institution of any kind connected more works with more audiences. Lots of people have heard of Google's wildly unsuccessful motto "Don't be evil," but far fewer are familiar with Google's wildly successful mission statement, "organize the world's information and make it universally accessible and useful."

But all of that is in the past tense. With its AI projects – AI summaries, the Gemini chatbot – Google has abandoned the practice of "connecting works with audiences." Today, Google's function is to plunder all the works on the internet and chop them up and arrange them in an unimaginably vast, multidimensional array for the explicit purpose of preventing audiences from connecting with those works.

For most of its history, Google operated in a virtuous cycle with publishers whereby they allowed Google to crawl their sites and Google located audiences and connected them with the pages on those sites. Today, that cycle has turned vicious, with Google acting as a parasite that extracts value from the web's publishers and offers nothing in return.

This is entirely in keeping with the enshittification hypothesis: that once a platform is liberated from the disciplining forces of competition, regulation, labor and interoperability, it will squeeze its suppliers and users and harvest all the value for itself:

https://pluralistic.net/2023/01/21/potemkin-ai/#hey-guys

But AI represents a new phase in enshittification. Google has assayed enshittificatory gambits in the past, like deliberately worsening its search results in order to force you to search repeatedly, which gave the company more chances to show you ads:

https://pluralistic.net/2024/04/24/naming-names/#prabhakar-raghavan

But as sleazy as those gambits were, they were profitable. In some important sense, they were sustainable. Assuming Google could carry on indefinitely scamming its users in this way, they'd continue to bring in more cash than they spent, and continue to be the world's most successful publisher, connecting works and audiences (albeit in a deliberately degraded way).

Contrast this with AI, the money-losingest endeavor in the history of human civilization. Google is losing hundreds of billions of dollars on AI. The more AI Google does, the worse the company's financial footing becomes. If Google does this for long enough, it may cease to exist altogether. This collapse can only be prolonged by Google's ongoing extraction of value from web publishers, who no longer have their works connected with audiences via Google search results. Instead, Google usurps those audiences, shows them as many ads as it can, and still loses money in the bargain.

In Tim Wu's Age of Extraction, Wu lays out a thesis about how intermediaries – middlemen who perform a useful function connecting different groups, firms and individuals – are prone to developing "main character syndrome," abandoning their role as facilitators for others and abusing their position to make themselves the prime beneficiary of the transactions they facilitate:

https://www.penguinrandomhouse.com/books/691177/the-age-of-extraction-by-tim-wu/

Google has a scorching case of main character syndrome, and nowhere is that more obvious than in its AI-fueled transformation into web-scale parasite. The fact that this gambit might well destroy Google and the publishers the company once served – rather than merely enshittifying search with worse results and more ads – makes the whole thing look more like a Mafia bust-out than the enshittification of the first half of the 2020s:

https://en.wikipedia.org/wiki/Bust_Out

It's certainly an ignominious end for history's most successful publisher (as was).


Hey look at this (permalink)



A shelf of leatherbound history books with a gilt-stamped series title, 'The World's Famous Events.'

Object permanence (permalink)

#25yrsago Reenacting the Civil War with 44,000 ceramic cats in handmade uniforms https://web.archive.org/web/20011021022729/http://www.phillyburbs.com/intelligencerrecord/news/news_intell/1332513.htm

#20yrsago More on publishing and “okaysellers” https://www.nielsenhayden.com/makinglight/bestsellers_oka/#008116

#15yrsago HOWTO make a Frankenstein hat https://web.archive.org/web/20111022194802/http://deliacreates.blogspot.com/2011/10/hey-frankie.html

#15yrsago Copyright policy in the UK: an evidence-free zone https://www.openrightsgroup.org/publications/cant-look-now-finding-film-online/

#15yrsago Clockwork Fagin on Escape Pod https://delivery-edge.libsyn.com/shows/18601/items/1737698/EP315_ClockworkFagin.mp3

#10yrsago At long last, America’s racist, crazy tough-on-crime prosecutors are losing elections https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2828803

#5yrsago Imperfections in your Bluetooth beacons allow for unstoppable tracking https://pluralistic.net/2021/10/21/sidechannels/#ble-eding

#1yrago Carl Hiaasen's 'Fever Beach' https://pluralistic.net/2025/10/21/florida-duh/#strokerz-for-liberty


Upcoming appearances (permalink)

A photo of me onstage, giving a speech, pounding the podium.



A screenshot of me at my desk, doing a livecast.

Recent appearances (permalink)



A grid of my books with Will Stahle covers..

Latest books (permalink)



A cardboard book box with the Macmillan logo.

Upcoming books (permalink)

  • "The Post-American Internet," a geopolitical sequel of sorts to Enshittification, Farrar, Straus and Giroux, 2027
  • "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



Colophon (permalink)

Today's top sources:

Currently writing:

  • “Once Is Enemy Action,” a science fiction novel about the origins of modern technofascism. Today's words: 514 (27116 total).

  • "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.

  • A Little Brother short story about DIY insulin PLANNING


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.


How to get Pluralistic:

Blog (no ads, tracking, or data-collection):

Pluralistic.net

Newsletter (no ads, tracking, or data-collection):

https://pluralistic.net/plura-list

Mastodon (no ads, tracking, or data-collection):

https://mamot.fr/@pluralistic

Bluesky (no ads, possible tracking and data-collection):

https://bsky.app/profile/doctorow.pluralistic.net

Medium (no ads, paywalled):

https://doctorow.medium.com/

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

17:07

[$] Discussing a rewrite of XArray [LWN.net]

The work to support block sizes larger than the page size on XFS has been difficult. Many users of XFS run stable kernels, which means that they aren't testing new XFS code as it is released. That has made Daniel Gomez wonder whether adopting Rust for some of the data structures underlying XFS, particularly XArrays, could reduce the number of bugs lurking in the code. At Kangrejos 2026, he led a discussion about the potential problems with converting XArray to Rust. The assembled kernel developers had a number of reasons to be cautious about replacing the XArray code, but Gomez was determined to experiment with the possibility, citing both security and performance improvements.

16:21

eMudhra intermediate CA compromise [LWN.net]

Mozilla has announced that it has received a report that private keys associated with eight eMudhra intermediate certificates have been compromised:

These keys could allow attackers to issue fraudulent HTTPS certificates for websites they do not control. An attacker who could intercept a user's connection could use those certificates to impersonate websites and potentially read or modify traffic.

Mozilla has blocked the affected certificates using its OneCRL centralized list of revoked certificates, and has updated the trusted certificate list in Network Security Services (NSS) 3.131.1.

There is a single-page site about the compromise that goes into more detail. According to the site the certificates have also been blocked in Chrome since October 17, Apple devices since the 19th, and Microsoft blocked the certificates on the 20th. There is also a table that displays whether a browser or other client still trusts the compromised certificates.

The NetBSD foundation has issued instructions to block the certificates on NetBSD installations. Users of other browsers and operating systems may wish to check for updates or guidance to disable the compromised certificates.

14:49

OpenBSD 8.0 released [LWN.net]

OpenBSD 8.0 has been released. There are many new features, including the addition of hibernate support for arm64, an increase in the kernel virtual address space for amd64 to 512GB, quite a few improvements for the qwx driver that supports Qualcomm WiFi 6 devices, and much more. See the full changelog for details.

14:07

The Outage [The Daily WTF]

At my employer, we use a service called Coveralls, which is a code coverage reporting tool that hooks into your CI pipeline. It takes your lcov reports and gives you some insights, and also makes it easy to cause the CI pipeline to fail if newly added code doesn't have reasonable coverage.

I have no strong feelings about the tool, but on February 24th, our CI jobs started failing. Coveralls had gone down, and our CI step that talked to them was the culprit. That happened to us, and a lot of other people. It was a widespread outage impacting anybody who used their service.

Coveralls actively published updates as the outage dragged on, and boy, did it drag on. Between them posting nearly identical updates minutes or even seconds apart and the general desperation that snuck into their outage notes after the first few days, I couldn't help but find their notes hilarious.

They've published their post-mortem, and the short version is that despite them paying their bills, Amazon decided they hadn't, and shut down their services. But it took them roughly 68 hours to figure that out.

If you scroll down past the post-mortem, you can see their outage notes. This is an unauthorized, dramatic reading of those notes. We've taken some liberties in interpreting it.

I hope this is taken in a good spirit, because they were just doing their best when this happened. I don't think most companies would be able to maintain operations when their cloud provider decides to lock their accounts. But I don't care who you are: begging your users to email you if they can help you migrate off AWS is funny.

[Advertisement] Utilize BuildMaster to release your software with confidence, at the pace your business demands. Download today!

Security updates for Tuesday [LWN.net]

Security updates have been issued by AlmaLinux (environment-modules, kernel, pcs, perl-URI, python3.14-urllib3, and webkit2gtk3), Debian (python-django), Fedora (bind, bind-dyndb-ldap, chromium, cifs-utils, curl, haveged, python3.15, qt5-qtbase, rust-rbw, rust-routinator, rust-rustls, xorg-x11-server, and xorg-x11-server-Xwayland), Mageia (firefox, firefox-l10n, nss, flatpak-builder, imagemagick, libpng, libxi, libxpm, libxtst, openssh, postgis, and thunderbird), Oracle (emacs, environment-modules, libsoup, perl-URI, python3.14-urllib3, webkit2gtk3, and xorg-x11-server), Red Hat (go-fdo-client, go-fdo-server, golang, kernel, kernel-rt, openssh, postgresql:16, postgresql:18, and rust-sequoia-sq), SUSE (alsa, AusweisApp, chromedriver, ffmpeg-4, kubernetes, libsoup2, nvidia-open-driver-G07-signed, p11-kit, perl-Net-OAuth, perl-Net-Whois-Raw, pgvector-devel, pi-coding-agent, podman, python, python3, python3-base, python3-doc, python315, python36, thunderbird, and velociraptor), and Ubuntu (cifs-utils, curl, golang-1.22, libxtst, openssh, openssh-gssapi, and php8.5, php8.3, php8.1, php7.4, php7.2, php7.0, php5).

14:00

Link [Scripting News]

Today's song, for the Knicks. "And when the morning light comes streaming in I get up and do it again." Knicks in 5!

Link [Scripting News]

My friend Guy Kawasaki has a quote from the early Mac division at Apple. "Steve Jobs has a saying that A players hire A players. But B players hire C players, and C players hire D players. It doesn't take long to get to F players. This trickle-down effect causes bozo explosions in companies." You see this over and over among the very rich in tech. The money is supposed to make them invincible, but they don't hire the best people, I guess, for fear of being found out to not be the genius that the money says they are.

Link [Scripting News]

I have a longtime friend from tech who is a San Antonio Spurs fan. I am from New York, and thus am a lifelong Knicks fan. Until tonight's game starts at the Garden between the Knicks and the Sixers with their new acquisitions from Boston and the Lakers, share the hopes of many other Atlantic Division teams who are gunning for the champion Knicks. But after the first jump ball in tonight's game the score is zero-zero, everyone is in first place and everyone is in last place. No one expected the Knicks to win, not even a die-hard fan like myself who often wore a paper bag on his head to avoid having to defend the bozosity of the hometown team. They had some truly awful teams since 1999, last time they were in the finals. So what happened to the Knicks? How did they do it? See the quote from Guy Kawaski above. We hired an A team guy in Leon Rose, and he used his great insight into the sport of NBA basketball to assemble a team of A team players who had the special magic that when you put them together on court, they blossomed into the most improbable winners ever. They were good, but no one but the players and the management knew how good they could be. Anyway I empathized with my Spurs fan friend, a very unusual thing for a NY sports fan, we prefer to find annoying ways of making fun of the fans of teams we have vanquished, but just this one time, well until the jump ball tonight, then Knicks own the NBA, then they're just another team who have to prove themselves all over again, from scratch. And we wouldn't have it any other way.

We do know what's going on [Scripting News]

Occam's News reports that Trump et al are selling out the US.

Putin can get the US to do what he wants by giving Trump money. Total win-win. And the US is flushed down the toilet.

That's all that's going on there.

All of the feigned bafflement is make-believe. It's totally obvious what's going on. And don't forget Musk has the world encircled with satellites. If he doesn't want you communicating, you don't communicate.

In other words the selling-out has been going on for some time.

The Second-User Test [Radar]

In my work with G7–G12 students at Force Academy, a research initiative in Chongqing, I sometimes take a project that appears to be finished and give another student responsibility for using, checking, or modifying it. The handoff is a test of understanding: Can the work still make sense when its creator is no longer there to translate it? The original author knows what every variable means, why a particular decision was made, which tool was used, and which parts can safely be changed. The second student has only what the project makes visible.

Generative AI makes the handoff more revealing because it lowers the cost of producing a convincing first version. Students can generate code, analysis, prose, visualizations, and prototypes far more quickly than they could a few years ago. In a classroom, however, a project is useful only insofar as it shows what the student understands and can defend. AI can supply missing code, smooth over incomplete reasoning, or turn a rough idea into fluent prose, so polish is no longer strong evidence of understanding by itself.

A concrete example came from a student paper on AI and labor economics, Verification Responsibility in AI-Applicable Occupations. The paper asked what remains economically important when AI makes candidate outputs cheap but a person still has to check those outputs, decide whether they are safe to use, and remain responsible for accepting them.

The lead student developed the conceptual model and most of the analytical workflow. A second student was given a narrower job: rerun the main analyses independently, record the versions of the source data, document how occupations in one dataset were linked to occupations in another, and compare the reported tables and figures with the underlying outputs. What looked like procedural verification quickly became a substantive review of the study.

The first problem was reproducibility. The analysis ran on the original machine, but too much of the workflow depended on choices that lived in one student’s memory. To reproduce it elsewhere, the team had to record the data transformations, write down the rules for linking occupational datasets, and keep intermediate results so another person could see how the final numbers had been produced rather than simply rerunning a script and trusting the output.

The more consequential problem was in the measurement design. An early version of the study used some of the same autonomy and leadership survey items in two different measures: verification responsibility and adaptive capacity. The software had calculated the relationship between those measures correctly, but part of the apparent relationship could have been created by the fact that the two measures shared some of the same inputs. In other words, the code was doing what it had been asked to do; the question was whether the quantities being compared had been defined cleanly enough.

The team rebuilt the measures so they no longer shared survey items, removed ambiguous items, and revised the workflow so source versions, cross-dataset links, exclusions, intermediate files, and reported results could be traced. Later versions added alternative specifications and robustness checks. What began as “please rerun this” ended up forcing a redesign of the study.

The handoff changed how I read student work. A second user does not merely test whether the files have been packaged neatly; they ask the awkward questions the creator may have stopped noticing. Why is a particular variable there? Which conclusion depends on an assumption that was never made explicit? In this project, those questions reached back into the measurement design.

The educational value of the handoff comes from the fact that schoolwork and production software have different ends. Professional developers learn a great deal after software leaves their hands because they have to deliver it, explain it, support it, maintain it, and respond when someone uses it in an unexpected way. Student projects usually disappear when a course ends, and that is fine; the artifact is not the goal. What matters is importing some of the learning that comes from delivery and maintenance: explaining decisions, supporting someone else’s use, and revising the work when private context is no longer available.

At Force Academy, the exact task depends on the project. For a computational model, another student may change a parameter or replace one rule and then ask what should remain stable. For an AI-supported workflow, the job may be to move it to a different model or environment. For a data analysis, the second student may try to reconstruct one result from the recorded source files and transformations. When that transfer fails, I want the original student to decide what the other person actually needed to know and what should be changed in the project, rather than simply standing beside them and explaining it.

I use the word “handles” for the visible points of entry that make that possible. A handle gives another person something concrete to inspect or change without first receiving a private briefing. It might be a clearly named parameter, an explicit assumption, a test that records an earlier failure, a replaceable component, a retained intermediate dataset, or a prompt whose important context is written down instead of buried in a private chat history.

Handles also make disagreement more productive. An exposed assumption can be challenged; a component with a clear boundary can be modified or replaced without rebuilding the whole project; and a numerical result linked to its source data and transformations can be checked rather than accepted on authority.

Outside school, AI systems expose the same weakness. A prompt, workflow, skill, or agent configuration may look portable because it can be copied, while the conditions that make it work remain elsewhere: tool access, file structure, model behavior, private memory, naming conventions, or small decisions the creator never needed to document. Moving the artifact often reveals how much of the working system was never inside the artifact in the first place.

A first successful run is therefore weak evidence. It tells me that a particular combination of person, model, tools, data, and context produced an output once. A stronger test is whether another person can reconstruct what matters, distinguish assumptions from implementation details, and make a change without destroying the logic of the work.

Tim O’Reilly’s idea of an architecture of participation gives me the broader frame. A technical artifact becomes more useful when other people can enter it without negotiating privately with its creator. In software, that usually means interfaces, conventions, documentation, modularity, and replaceable components. In data analysis, the same principle shows up as recorded source versions, visible transformations, retained intermediate results, explicit assumptions, and enough analytical logic for someone else to rerun or challenge the work.

For education, the milestone I care about is whether the student understands the work well enough to make some of that understanding available to someone else. A second student who can use, question, and extend the project gives me evidence that a polished first run cannot.

AI expands what one person can build, including what a teenager can attempt without a large technical team. The expanded scope is a real gain, but it also makes successful generation easier to confuse with understanding. When I want to know what a student really understands, I now learn more from the first serious handoff than from the first successful run.

12:35

Possible new Cellebrite iPhone Radio Zero-Day [Schneier on Security]

Justin.sh is reporting on a confidential Cellebrite document that has been leaked to him:

Cellebrite calls it Advanced Unlocks (AU from here on), not to be confused with the “advanced unlocking services” they’ve marketed for years. A press release from earlier this year confirms AU is a new product for 2026.

[…]

According to Cellebrite, AU:

  • is a “next-generation AFU vector that is more resilient to Apple’s OS changes”
  • works with Stolen Device Protection enabled, which tightens USB restrictions
  • is enabled by a dedicated appliance with a stated range (!) of about 8 meters.

AU = Advanced Unlocks, Cellebrite’s term. AFU = after first unlock.

10:42

Thieves’ cant slang [Seth's Blog]

Insider jargon, previously known as cant, is designed to keep outsiders out.

The burglars in cartoons are often seen wearing a black mask over their eyes (like Robin in Batman but for a different reason) and carrying a bulging sack over their shoulders.

[Of course, the burglar’s sack was rarely bulging. A robber would have to have the perfect haul to get the right mix of value, density and weight. You can’t fit a chest of drawers in the sack, and that much gold would be impossible to carry. But I digress.]

The cant for this was ‘swag’, which comes from an old term for swaying or bulging. Sort of wishful thinking.

And thus we get to the swag of business promo and conference loot…

Establishing jargon is a key step in group identity. It’s rarely dictated from the top down, but permitting and celebrating it is a smart move if you’re looking for group cohesion.

09:35

Russell Coker: Cixin Liu is a Bad Person [Planet Debian]

The Chinese author Cixin Liu [1] is most known for his book The Three Body Problem and it’s sequels. One of the main plot elements in the book is that every species in the universe is cool with genocide and willing to commit genocide as a preemptive strike against any star system found to contain intelligent life.

It’s not unreasonable to think that some planets may be by run societies like that, if one star system in 10,000 had a technological society and one society in 10,000 is run by depraved autocratic governments that would make 1,000+ planets in our galaxy that are run by genocidal groups!

To think that every single society wants to commit genocide at every opportunity says a lot about every person who makes such claims. If you believe that everyone wants to do something then it must be something you really want to do. If there’s something you really don’t want to do then you will be able to imagine a system of government where the majority of citizens vote against doing it.

Even in the more horrible parts of human history there hasn’t been a genocide comparable to destroying and entire star system, genocide is usually based on slavery and large scale armed robbery. To just commit large scale genocide with a side effect of destroying valuable resources without any investigation or attempts at negotiation just based on fear of others is an extreme that I don’t think humans have reached in history.

The Daleks are portrayed as a perverse extreme of xenophobia but even with the low budget SciFi trend of depicting aliens as mostly having a common belief system they managed to show some Daleks going against their system from time to time. Cixin Liu is a very talented writer but his attitude towards genocide has caused him to write SciFi with a major plot point that’s not great by Dr Who standards.

Overall his short stories are much better than the three novels he is most known for. But he shows his ass in some of them too. One notable example is a short story where a significant plot point is declaring a “right to sex” (for men) which involves government sponsored sex workers. A “right to sex” conflicts with a sex workers right to refuse sex for a potential client who is undesirable in some way. Regardless of opinions on whether sex work should be permitted I hope that the vast majority of voters in every jurisdiction can agree that sex workers shouldn’t be forced to do things that they don’t want to do.

Some writers like George Orwell create deliberately fictional scenarios that they hope to inspire opposition to bad ideas, I’m sure that many proposed laws have failed to get enacted after being described as “Orwellian”. But describing a fictional horror situation as inevitable is a way of driving support for such things. It’s particularly noteworthy when written by a citizen of a country that’s involved in genocide.

A possible counter argument would be “but he is living in a repressive country and can’t oppose his government”. But when Hergé (the author of the Tintin graphic novels) was threatened about the consequences of writing another book like King Ottokar’s Sceptre [2] he didn’t write books in favour of authoritarianism, he just avoided the topic by writing about visiting the moon instead. I don’t think that people living in China now should be expected to publicly oppose evil things done by their government, but when they go out of their way to support such things it’s their choice and we should note that they made that choice.

I’m not saying that people shouldn’t read his work as his short stories are definitely worth reading. But the Three Body Problem series really isn’t that good, he prevented many potentially interesting situations from happening by having every interaction between different species be based around genocide or the potential for it. Being a horrible person also made him a less capable SciFi author.

08:49

Lucid Sex Dreams by Susannah Hainley [Oh Joy Sex Toy]

Lucid Sex Dreams by Susannah Hainley

Susannah‘s back and dreaming BIG with todays comic on lucid sexy dreaming! Educational, fun, and super interesting. If you enjoyed it, make sure to check out Susannah’s other OJST comics. She’s shown up here talking about Cycle tracking, and Regaining Breast Sensation! Annnnd if you want more reading, make sure to check out her Mastectomy […]

05:42

Why do we need ud2 when int 6 is right there? [The Old New Thing]

Some time ago, I mentioned that the ud2 instruction was created to be an architecturally undefined instruction. But why not just use an int 6 instruction? It’s a two-byte instruction, just like ud2, and interrupt vector 6 is the invalid opcode vector, so a program could just invoke it manually and get whatever behavior the operating system assigns to an attempt to execute an invalid opcode.

Well, not exactly.

Architecturally, the invalid opcode is a fault, which means that the address of the faulting instruction is reported to the exception handler. On the other hand, the int 6 is a trap, which means that the address of the instruction after the int 6 is reported to the handler.

This distinction between faults and traps reflects how they are used. A fault represents an error that the kernel could attempt to repair and retry. For example, a page fault could be repaired by paging the memory in. An access violation could be repaired by changing the page protections. A trap reports an operation that has already occurred and gives you a chance to do some special work in response to it before resuming execution. In the case of a software interrupt, the handler wants to process whatever the interrupt means, and then resume execution with the next instruction.

Now, some faults are unlikely to be repaired, but reporting them as faults means that you have to take extra steps if you want to execute past them. If you just ignore the fault, the instruction restarts and faults again.

If you manually raise the int 6 interrupt to simulate a #UD undefined instruction fault, the handler will think it’s dealing with a CPU-generated undefined instruction fault, so it expects the instruction pointer in the fault frame to point to the undefined instruction. But since int puts the address of the next instruction into the fault frame, the fault handler will look at the instruction and get confused as to why the invalid instruction fault was raised. “It says here that the faulting instruction is a xor eax, eax. That’s a perfectly legitimate instruction. Why did it fault?”

One case for inspecting the faulting instruction is to emulate missing instructions on older processors.

Furthermore, in protected mode, you need to have permission to issue an int 6. The interrupt descriptor table describes what to do for each interrupt, as well as what CPU privilege level is permitted to invoke it explicitly. And to avoid exactly these types of problems where a user-mode program issues an int 6 and confuses the #UD handler, all operating systems deny int 6 privileges to user mode.

So even if you try to fake a #UD via an explicit int 6, it doesn’t work. To get the #UD undefined instruction fault, you have to issue an actual undefined instruction.

The post Why do we need <CODE>ud2</CODE> when <CODE>int 6</CODE> is right there? appeared first on The Old New Thing.

02:28

Link [Scripting News]

Anyway -- I figured out what I want to do. I want to go back to the point where CSS and JavaScript were added to the web. Everything is a document. It's a writer's web. The reader owns the look of the pages. The writer has no say in colors, or arrangements, it's just writing. No character limits. Simple styling. Full fidelity text. Reading and writing, and then the developers can come up with a million different ways to read, and everyone gets to use their favorite editor, always, and store all their writing where they live, and let everyone read it where ever they read. Any structure they can think of, but all the rendering code is with the reader. I think we can take what we've learned since the web got corporatized, and bring it back to the basic platform we had then. And btw, no HTML, just Markdown. :-)

Link [Scripting News]

Postscript: Of course the blame for the wasted time this morning goes to me. Claude tries to do what it thought I wanted. If I calm down, figure out what the confusion really means, and reconsider the path I chose and pull back, we get much further. And I think the way I was trying to go was a mistake. I think film editing is a lot like this. Anyway we got past the problem, and today was a very productive day in the end.

Link [Scripting News]

About XSLT -- I remembered that I thought it was a bad idea. Let XML look like XML. Trying to make it look like an HTML page, how does that make any sense. Like opening the hood of a car and seeing a big picture of the outside of the car. People aren't really that dumb, but some people like to complain a lot. The rule of the web is if you don't like what you see, that's what the freaking back button is there for. Probably just a troll anyway. Show them your JSON and RSS. If it's done nicely it can be quite illumifying.

02:21

Purposes Of Insurance [QC RSS v2]

slainte, prost, etc

01:00

Monday, 19 October

23:28

Apple adds mystery folder to your PATH and everyone is apparently just okay with that [OSnews]

Apparently, macOS 27 comes with a small mystery people are trying to figure out.

Recently, while troubleshooting a PATH issue, I noticed an entry for /pkg/env/global/bin. At first, I worried that something had gone horribly wrong. Turns out, this is part of macOS 27.0… though no one is sure what it’s for yet.

[…]

In a post about how macOS’s boot volume structure has been updated, Howard Oakley explains that the pkg directory was added to the Data volume in macOS 26.4, but not added to the root of the Signed System Volume until 27.0. He also notes that this is sort of a big deal.

The weird thing is, as far as I can tell, no one seems to know what this new directory is for! It’s odd that Apple would update their filesystem structure, add it to everyone’s PATH, and there not be some explicable reason.

↫ Gavin Anderegg

I guess we’ll find out eventually, but this does highlight something that I find extremely unsettling about this. With proprietary software like macOS, you literally are at the mercy of whatever Apple decides to do to “your” operating system. You install an update, and aside from all the documented changes, there’s going to be changes you simply have no idea what they’re for, or why they’re there. Don’t get me wrong, there’s obviously not something nefarious going on in this particular case, but it still feels wild to me that people just willingly accept this.

In the open source world, stuff like this simply does not happen. You’re not going to install a bunch of Fedora updates one day and find a mysterious, undocumented folder in your PATH. Such a change will be documented, but even in the unlikely event it’s not, you can just go through the commit history and find out exactly why the new folder is there, and what its intended purpose is or is going to be.

Considering the state of the world and the people corporations like Apple really answer to, I would not be comfortable with letting them dictate even something as simple as my PATH.

21:56

Steinar H. Gunderson: Decompilation patterns, part 16: Tail reduplication [Planet Debian]

We're nearing the end soon, I promise. Here's one that I see all the time:

     ...
         } else {
             var_t0_5 = temp_a0_3 - 0x140;
             var_a2_5 = 0xA0 - temp_a3_5;
             goto block_45;
         }
     } else {
         var_t0_5 = 0xA0 - temp_a0_3;
         var_a2_5 = temp_a3_5 - 0x118;
block_45:               
         var_v0_3 = var_t0_5 + 0xA0;
         var_v1_4 = var_a2_5 + 0x78;
     }

So, eh, what's that goto doing there? What happened was that the compiler helpfully figured it could help with some tail deduplication; someone wrote the same code twice, and the compiler figured taking the cost of a branch was better than keeping it duplicated. (In a sense, it's the opposite of inlining. Ish.) In most cases, it's as simple as copying the block and then you can remove the label:

     ...
         } else {
             var_t0_5 = temp_a0_3 - 0x140;
             var_a2_5 = 0xA0 - temp_a3_5;
             var_v0_3 = var_t0_5 + 0xA0;
             var_v1_4 = var_a2_5 + 0x78;
         }
     } else {
         var_t0_5 = 0xA0 - temp_a0_3;
         var_a2_5 = temp_a3_5 - 0x118;
         var_v0_3 = var_t0_5 + 0xA0;
         var_v1_4 = var_a2_5 + 0x78;
     }

Sometimes, these are nested, with multiple tails goto-ing into each other, so in that case, you'll need to reduplicate multiple times. Make sure you actually come out on the correct side afterwards, though.

As an extra complication, the code is deduplicated not on the C statement level, but on RTL instructions, so if you're calling functions with five parameters of more (which requires pushing parameters onto the stack), m2c can get really confused and start throwing M2C_ERROR() at you on the receiving side because it's not clear at all where the parameters would be coming from.

21:07

ARC Resort [Penny Arcade]

Mr. Gibb got hauled back into ARC by his eldest; that last link goes to his full report if you haven't seen it. Today's strip is a "war journal" of the kind of twisted, post-apocalyptic hellscape that you might experience in a food court.

20:07

Linux Plumbers Conference videos now available [LWN.net]

Mike Rapoport has announced the release of the video recordings from the 2026 Linux Plumbers Conference (LPC), which was held in Prague from October 5 through October 7. Find the complete set via the YouTube playlist or look for the video links in the schedule. See also LWN's coverage of talks from LPC.

18:49

Arc Raiders PvE Report! [Penny Arcade]

I quit playing ARC Raiders for a couple of reasons. The two big ones being I did not want to support their use of AI voices and I was sick of getting shot in the back and losing all my shit. My eldest son Gabe loves the game and never stopped playing. He told me about how they replaced their AI voice work with human actors and that they were testing a new PvE mode. He asked if I wanted to try a few rounds with him and since I am at all times desperately trying to avoid a “Cat’s in the Cradle” situation I said yes.

 

18:07

Building an AI Analyst, One Football Argument at a Time [Radar]

One of my biggest pet peeves is the Monday morning quarterback, the person who second-guesses every coaching decision after the fact. In The Monday Morning Agent, we’re building one that actually checks the data.

Every other Monday, I’ll take an argument NFL fans can’t stop having and hand it to an AI agent. We’ll use about a quarter-million plays from five complete seasons of public nflverse data, plus the current season as it unfolds. Each of our eight episodes will give the agent another capability. By the finale, it’ll run the desk unattended, and we’ll check what it investigated and what it correctly refused to answer.

We’ll start with “You have to establish the run.” I want the agent to explain what that claim means and what evidence would support it.

Define the claim before querying the data

“Establish the run” can mean that running early pays off late, wearing down the defense, or setting up play action. These are very different claims and they need different data. For this first episode, I focused on whether teams that run more often early in a game win more often.

Before the agent called the tool, I asked it to write one sentence explaining what would have to be true in the data for the claim to hold, including when in the game it applies. “Establish” here means early. A whole-game number doesn’t really test that. Give your agent the same assignment, and check that it’s answering the question you intended.

Give the agent a job you can check

Before any agent touched this, I ran the analysis code myself. The tool did the counting; the agent interpreted the results. Then I wrote the policy in a Markdown file, spelling out its job, the read-only tool it may use, and what its answer needed to include. It has to explain what the plays can’t tell us. It may not say running causes winning.

Try questions outside that job too. When I asked which team I should bet on, the agent refused without calling the tool, because that request is beyond the scope of our agent. But when a viewer asked about running trends, the results got tangled up with the “establish the run” instructions. I had to clarify what I was asking, and still wanted to see the code and validate the answer. As you give an agent more responsibility, check both its results and whether it understood the task.

Make the filters part of the answer

“You have to establish the run” sounds airtight at first. Over the last five seasons, teams with the highest run share, the percentage of their plays that were runs, won 77.7% of their games. Those with the lowest run share won 19.2%. I initially looked at that and thought, “Problem solved, we’re done.” Most of that gap, though, reflects teams that were already ahead running out the clock.

When the agent looked only at first-half running in games within three points at halftime, the result flipped. Teams with the highest first-half run share won 46.3% of the time; those with the lowest won 55.3%. This season through Week 5 points the same way, but each group contained only 11 team games. One game could swing it. That doesn’t mean passing causes winning. We’re measuring association, and the filters change which games we’re comparing.

One filter changed the whole story, which is why the filters have to be on-screen. I wanted to see how many rows remained and which commands produced the results so I could go back and check. Make those details part of your agent’s answer, including when it’s working with a smaller sample.

A few numbers from last week’s games

In Week 5, the team that ran more in the first half won 6 of the 15 games, lost 8, and tied 1 (Giants at Washington). Over the past five seasons that team won 54.3% of the time, so last week came in below the average. That’s not unusual, though. In 27 of the 95 regular-season weeks since 2021, the team that ran more early finished the week with a losing record. One week of games doesn’t say much on its own, which is why the agent reports five seasons alongside the current one.

One more data point: The Monday night game, Buffalo at the Rams, was the first the agent hadn’t seen. Buffalo ran on 60% of its first-half plays to the Rams’ 35%, led by six at halftime, and won by three in overtime. Those 199 plays are in the data now, and the close-at-halftime numbers from the episode didn’t change.

Next up: “Ban the Tush Push”

On October 26, we’ll tackle “Ban the Tush Push.” Not one of the 260,927 play descriptions from 2021 through this season’s October 11 games contains the words “tush push.” After adding Monday night’s game, we have 261,126 descriptions, and “sneak” appears in only two, both from 2021. The data isn’t going to hand us a definition.

Before the agent can judge the play, it has to define it. I’ll challenge it to write that definition into its first permanent document, a shared data dictionary, and cite it in every ruling from then on. Bring your own definition, because the answer depends on which one you pick.

O’Reilly members can sign up on the O’Reilly learning platform to join me live on October 26, 8:00am–8:45am PT / 11:00am–11:45am ET. Everyone can follow along on Radar every other Monday, with a brief pause for the holidays. Watch episode one above, and we’ll build on it in the next session.

18:00

17:07

[$] Development statistics for the 7.3 kernel [LWN.net]

Linus Torvalds released the 7.3 kernel, at the end of the usual nine-week development cycle, on October 18. This cycle, abundantly fueled by LLM-assisted contributions, broke just about every record imaginable. As usual, we have compiled some statistics showing how this release, which is expected to be the next long-term-support (LTS) kernel, came together. Also included is an attempt to determine whether automated patch review is actually reducing the number of bugs introduced into the kernel.

15:35

[$] Cross-crate forward declarations in Rust [LWN.net]

Rust has several ad-hoc mechanisms to allow user code to influence how the standard library executes. For example, custom panic handlers and custom allocators both involve registering functions that core standard library code needs to call. With more similar features planned, Jana Dönszelmann spotted the developing pattern and put together a general solution, introducing a safer, checked analogue of C's weak symbol linking. At Kangrejos 2026, she explained how this new language feature works, and proposed using it to clean up the kernel's handling of integer overflows in Rust code.

15:00

Link [Scripting News]

I would like to have one day when Claude Code doesn't fuck everything up by doing things it is explicitly prohibited from doing. I find things that were changed in critical parts of the program, that were indefensible. One of the things we're doing is trying to establish a language for frontmatter for Markdown files that are meant to be displayed by a browser. It just invented one, gave it wrong default. I have to find these things on my own. And what happens when it wipes out a site without checking with me first. It has done this, this year.

14:49

A Vat of Terrible Experiences [The Daily WTF]

Taxes are a royal pain for everyone. Amazon has found a unique way to make them even worse, as Kris W. attests:

I recently bought a €9.61 kitchen knife on Amazon Spain. My card was charged €7.94 instead. After some investigation, I discovered that Amazon had applied an old VAT registration number I'd added to my personal account years ago, and had classified my purchase as a VAT-exempt intra-EU business transaction. The invoice even contained my business address from 2022, which no longer appeared anywhere in my account settings. I just wanted to remove the VAT number so I could go back to buying kitchen utensils without accidentally generating international tax paperwork.

European VAT Taxes

Unfortunately, Amazon no longer provided any visible way to manage that VAT number. Their customer support chatbot insisted I provide the order number from which I wanted the VAT number removed. A human agent confidently explained that I must have entered it into a secondary address field, and instructed me to delete and recreate my shipping address. Another support representative sent me an extensive list of documents I'd need to provide, including my passport, airline boarding passes, proof of export outside the EU, or my NATO identification card. Apparently removing a VAT number from an Amazon account is a process normally reserved for international travelers, Andorran residents, and military alliances.

Eventually, I found Amazon's official help page. It explicitly stated that VAT numbers could be removed either by contacting Customer Service or by creating an Amazon Business account to use the self-service option. After another round of correspondence, Customer Service informed me that they were not allowed to remove VAT numbers and instructed me to use the Business settings that my personal account didn't have. So I followed the documentation and created a Business account using my existing email address. During registration, Amazon required me to enter the very VAT number I was trying to remove, then promptly congratulated me by email on successfully adding and activating it.

But I couldn't access the Business settings yet. Amazon couldn't verify my business and demanded official documentation, so I obtained two freshly-issued certificates from two separate Spanish government agencies to prove that I was, in fact, a self-employed software developer. I uploaded both documents and waited. Eventually, my shiny new Amazon Business account was approved. I now had a separate Business account, complete with its own purchasing features and complimentary Business Prime membership. At last, I could navigate to the promised VAT-management page!

The page displayed my VAT number, confirmed it was valid, and offered a button to add more tax information. Beside the existing number, however, there was no Edit button. No Delete button. No self-service removal option whatsoever. There was only a link saying, Contact Customer Service to change your tax ID.

Naturally, the link led to a generic help center. After creating an entire business account, submitting government paperwork, and successfully registering the same VAT number a second time, I had arrived precisely where I started: Customer Service, which had already explained that it was not allowed to remove VAT numbers.

[Advertisement] Picking up NuGet is easy. Getting good at it takes time. Download our guide to learn the best practice of NuGet for the Enterprise.

Security updates for Monday [LWN.net]

Security updates have been issued by AlmaLinux (idm:DL1, kernel, libsoup, perl-URI, python3.14-urllib3, and webkit2gtk3), Debian (apache2, cifs-utils, haproxy, jq, kernel, and xen), Fedora (aom, chezmoi, chromium, docker-buildx, freeipa, freerdp, GitPython, httpd, jfrog-cli, kernel, knot, libheif, log4net, mongo-c-driver, nant, NetworkManager, openssl, plasma-nm, python-cairosvg, python-django5, python-django6, qt5-qtbase, radicale, rust-faster-hex, rust-onefetch, SDL3_image, syncthing, thunderbird, tor, webkitgtk, and wordpress), Mageia (curl, libreoffice, mozjs140, mutt, nodejs-braces, parted, perl-Net-Whois-Raw, perl-XS-Parse-Keyword, and python-django), Oracle (kernel, kernel-uek, python36:3.6, and wireshark), Red Hat (gvfs, kernel, and kernel-rt), Slackware (libXtst), and SUSE (agama, ansible-core, bcel, bind, buildah, busybox, cadvisor, chromium, cosign, cups-filters, distribution-registry, fetchmail, gcc13, ghostscript, gimp, glib2, go1.26, go1.27, golang-github-lusitaniae-apache_exporter, golang-github-prometheus-alertmanager, google-osconfig-agent, grype-db, hauler, hawk2, helm, ImageMagick, iperf, kernel, libheif, libpng16, librsvg, libsoup, libsoup2, libthrift-0_25_0, libx11, libxi, libxpm, mutt, ntfs-3g_ntfsprogs, nvidia-open-driver-g07-signed, nvidia-open-driver-G07-signed-check, openssl-3, openvpn, p11-kit, pacemaker, perl-xs-parse-keyword, pgvector, php8, podman, psqlodbc, python-anyio, python-hpack, python-jwcrypto, python-oauthlib, python-pyjwt, python-tornado6, python-urllib3, python-virtualenv, python313-ruff, python313-social-auth-app-django, python313-urllib3, python313-urllib3_1, python313-validators, python313-waitress, python313-zipp, qemu, qsnapper, squid, strongswan, stunnel, swtpm, unbound, virtiofsd, webkit2gtk3, xen, and xwayland).

13:28

AI Changed How We Code. It Hasn’t Changed How We Work Together. [Radar]

This summer, I built a small experiment called ContextCue. The idea came from something I kept seeing during my internship. The engineers around me were using AI everywhere in the software development process. GitHub Copilot and Claude models helped with specs, code, reviews, and tests. The team also maintained reusable skills that taught coding agents how the team worked. One of those skills could take a UI design and turn it into working frontend code.

The code was moving faster, but the understanding around the code did not seem to move faster with it. The software was being built by nine teams spread across three continents, with one team working closely with the customer. A request might begin in a customer conversation, move through one team, then reach another team several time zones away. By the time the work reached engineering, some of the original meaning could be missing.

That was the problem I wanted ContextCue to explore. ContextCue takes recorded meetings and tries to preserve more than a transcript or summary. It keeps the spoken discussion, important visual context from the screen, the decisions that were made, the reasons behind them, and the source they came from. The goal is to create a shared piece of context that can move with the work from one team to another.

It is still an experiment, but the problem behind it felt very real. As far as I could see, a lot of time in distributed software teams went into reaching a common understanding before the coding even started. AI was already helping with the final stages of software development. I wanted to see whether it could help earlier, while teams were still trying to understand what they were building and why.

Where the context disappears

Meetings were already being recorded, and tools like Microsoft Teams could produce an AI summary. On my team, that summary often arrived as an email and stayed there. That worked well enough for the people who attended the meeting. It was less useful for the team that picked up the work later, especially if that team was in another country and had not seen the original conversation.

There were two other problems. A summary usually covered one meeting, while the understanding behind a feature was often built across several. Different teams might discuss the same request days apart, each adding a new constraint or interpretation.

A transcript could also miss important visual context. Many of our conversations involved screen sharing. Someone might point at a page and say, “This is too slow,” or highlight a part of a workflow while explaining what needed to change. The words alone did not always carry the meaning. That is where I started thinking about context as something larger than a transcript.

A simple example

Imagine that a customer asks for a “faster report.” During the call, the customer shares a screen, points at a page that is slow to open, and explains that managers use it every morning before a meeting. Everyone on that call understands that “faster” means the page should open more quickly.

Two days later, another team in another time zone discusses the same request. Nobody in that meeting saw the original screen. They read “faster report” as “the report should finish running sooner” and begin planning backend work. Both meeting summaries might contain the same phrase:

Make the report faster.

Nothing in that sentence shows that the two teams mean different things. The problem only becomes visible when the customer sees the result.

This is a simple example, but it captures the issue I kept noticing. Requirements move through people before they ever become code. If the meaning changes during that process, AI can help a team implement the wrong interpretation very efficiently.

The sports version of the same problem

Sports gave me another way to think about it. Imagine a soccer match where a player misses a late chance to score a goal. The match report can record the shot, the player, the minute, and whether it was on target. Those facts are useful, but a coach watching the replay sees much more. The winger may have delivered the ball too early. A defender may have forced the striker onto a weaker foot. A teammate may have made a run that opened the space.

The event is only one part of the story. A coach learns from the sequence around it.

Jake M. Hofman, Daniel G. Goldstein, and David M. Rothschild use a related sports framework in a Harvard Business Review article where they describe AI as a steroid, a sneaker, or a coach, depending on how it helps people. The “coach” idea is the one that stayed with me. A useful AI system does not only help people produce more. It can also help them make a better decision by bringing forward the evidence and experience that came before. That is close to what I wanted ContextCue to do for teams.

What I built

ContextCue starts with a meeting recording. FFmpeg handles the media, and Faster-Whisper transcribes the speech. The transcript is kept in time-stamped segments so that any later answer can point back to the moment where something was said.

The system also looks at selected frames from the screen share using a vision model such as Qwen VL. That helps preserve cases where the meaning depends on what someone was pointing at rather than only on the words they used.

The final output is organized around a request or decision instead of around a meeting. For example:

# Request: Faster report

What the customer meant:
The report page opens too slowly.
Source: customer call, shown on screen

Why it matters:
Managers open it before a morning meeting.
Source: customer call, spoken

What was planned:
Make the report finish running sooner.
Source: team planning meeting

Open issue
The current plan does not match the original request.

The format is deliberately simple. I used Markdown because a person can read it, a language model can use it, and it can be stored or versioned without depending on a special interface. When a later meeting touches the same request, the page can be updated rather than creating another disconnected summary. That changes the unit of memory from meeting to topic.

Why that matters for product work

One of the clearest uses I saw was product management. A product manager writing a user story usually works from some combination of tickets, meeting notes, customer feedback, and conversations with engineers. The important details are often spread across all of them.

If the product manager gives an AI model only the latest meeting summary, the model sees only one slice of the history. A ContextCue page can give it more. The page might contain the original customer request, the business reason behind it, a technical constraint raised later, a decision from product, and an unresolved question that still needs an answer.

That gives the model a much better starting point for creating a user story. The model itself has not changed. What improves is the material it has to work from. This is an important distinction because a lot of AI work focuses on prompts and models, while the quality of the context often decides whether the output is useful.

How the context grows

Each new meeting can update an existing page or start a new one. Over time, that creates a topic-by-topic record of how the work evolved. That is different from having a folder full of meeting summaries. A folder forces someone to remember which meeting contained the useful detail. A topic page collects the relevant pieces in one place.

The stored context can also be searched. I used embeddings and Qdrant to retrieve relevant parts of previous meetings. A question like “What did the customer mean by faster?” can return the answer along with the meeting and timestamp that support it.

Other requests need something more structured. “Find Tuesday’s meeting” is a lookup. “Why did we change this requirement?” may need information from several meetings. “What is still unresolved?” should look for open questions rather than just similar text.

ContextCue can expose those operations through the Model Context Protocol (MCP), so a language model can choose the right tool for the request. The main point is not the protocol itself. The useful part is that different types of questions can use different ways of accessing the same shared context.

Why recorded conversations are worth keeping

One study made me think recorded conversation was especially valuable. In “Generative AI at Work,” published in the Quarterly Journal of Economics in 2025, Erik Brynjolfsson, Danielle Li, and Lindsey Raymond studied an AI assistant used by customer-support workers.

They found that lower-skill and less experienced workers improved the most. The system appeared to help them communicate more like higher-skill workers. What interested me was that some of the useful knowledge came from past conversations.

A company contains a lot of knowledge that never becomes a formal document. It appears in explanations, customer calls, design discussions, examples, corrections, and small decisions made during meetings. Recorded meetings are one place where that knowledge already exists.

The first benefit I noticed was personal

As an intern, one of the hardest parts of joining a large project is learning why things are the way they are. You can read the code and still not know why a certain design was chosen. A ticket may describe what to build without explaining the discussion that produced it.

The usual solution is to ask someone. That is often the right thing to do, but it also means interrupting someone who already has work to finish. A shared context layer could make some of those questions easier to answer without another meeting or another message across time zones.

The same idea could help with onboarding, repeated meetings, handoffs between teams, and situations where someone needs to understand an old decision. I can see those possibilities from where I sat as an intern, but they still need proper measurement.

What worked, and what is still hard

My testing so far is limited. I created a small set of questions where I already knew the correct source. ContextCue retrieved the right source first about nine times out of ten and returned it within the top three results every time in that test set.

That was encouraging, but it also made the harder parts of the problem clearer. A real company may use several different meeting tools. Different teams may have different rules about what can be recorded. Some context should be visible across the company, while other context should stay within a team. People need to know when meetings are being recorded and how those recordings will be used.

There is also a time problem. A team may make one decision in March and change it in April. The March decision should not disappear, because it explains how the team got to the current position. At the same time, the system should make it clear that the April decision replaced it.

That kind of history is useful, but it is more complicated than simple search. It requires rules around ownership, permissions, time, and trust. ContextCue does not solve all of that.

Where this goes

The thing that stayed with me from the internship was the contrast between how much AI had changed coding and how little it had changed the handoffs around coding. The engineers already had strong tools once a requirement was clear. The slower part often happened before that point, while teams were trying to understand a request, add constraints, pass it to another group, and keep everyone aligned.

ContextCue was my first attempt at working on that part of the process. The experiment is still small, and the technical system will need to change if it ever moves into a real company environment. The useful idea, for me, is that meeting recordings can become more than archives. They can become a shared record of how a team arrived at a decision.

If AI can help preserve that history and bring it forward when the next team needs it, then it may improve more than the speed of writing code. It may improve how teams carry understanding from one part of the organization to another.

12:35

Training AIs to Solve CAPTCHAs [Schneier on Security]

Interesting research:

Abstract: Vision-language models (VLMs) can solve visual CAPTCHAs without task-specific training, but the agents built on them approach every challenge from scratch. For such an agent, the hundredth instance of a familiar puzzle costs as much time and compute as the first. Specialized detectors invert the trade-off, answering in milliseconds but only for categories they were trained on. Neither improves with exposure. We study what changes when a solver improves with use. Our system pairs a fine-tuned YOLOv8 detector with an open-weight VLM behind a confidence-based router, and runs entirely from screenshots and operating-system input events, with no browser automation or DOM access. It reaches 85.4% overall and 84.2% macro accuracy across 16 classes, exceeding either component alone. Every answer VLM produces also serves as a training label, so the detector absorbs categories it was never trained for, typically after one or two encounters and without human annotation. The same loop also repairs it. A CAPTCHA operator can perturb images against the publicly released detector and drive its accuracy to 0%, but the perturbations leave VLM untouched, and its labels let the detector recover. Under a year-long simulated arms race in which the CAPTCHA operator re-crafts its perturbations each month, the solver recovers every round, and a cheap ~70%-accurate open-weight teacher hardens it as effectively as a perfect oracle. Visual CAPTCHA defenses that assume a failing bot stays failing therefore understate how quickly an adaptive solver returns.

11:07

Grrl Power #1505 – Let’s meet more contestants [Grrl Power]

Okay, first thing’s first – Max did not pose hands-on-hips-chest-thrust-out no-looking the explosion behind her. Don’t get me wrong, she’s definitely no-looked plenty of explosions, but she doesn’t really do the Superman pose. So the image they’re showing is probably a “for illustrative purposes only” generated image.

Also I think Max’s Ixah holo-disguise is making her boobs look bigger. It’s definitely not because I’ve accidentally been afflicting her with cup-creep over the last few dozen pages.

If you recall, Thothogoth is “Dominus Secund” of The World Takers. Yes, I know on that linked page, he calls himself “The World Taker” not “of The World Takers,” but he’s being aspirational there, not to mention trying to sound tough to the flying gold woman. The thing is, demon society is rather hierarchical, and there’s eleven other “Secunds,” besides Thom, who each have 12 subordinates below them, who each have below them 12 subordinates, etc. Yeah, it’s a weirdly rigid structure for beings that claim to be all about chaos. Well, speaking of chaos, were something permanent to happen to Dominus Prime during the tournament, (or even just while he’s commuting to work or whatever) there’d probably be a heck of a power struggle to claim that top spot.

Green Strider is the longest-in-the-queue waiting Patreon cameo I had. I think he’s been waiting since about a week after I set up my Patreon actually. I just never quite figured out how to fit a… oh, heck. I just realized it’s “sentai,” not “zentai.” Yeah, I know zentai is the skintight onesie, and sentai is the genre of people wearing skintight onesies and fighting goofy rubber monsters. I’m not gonna change it. It makes “the mysterious zentainium force” even funnier to me. Anyway, I never figured out how to fit a sentai character into the comic, but now here we finally are. I think the reference picture I have is from a City of Heroes character creator maybe? But it’s just the one shot and it’s kind of covered in glowy… bits, and it’s just a single angle, so I have to simplify the suit design a bit and make up some of the rest, but hopefully he will be amusing in his role as a UCBA finalist.


Oh, look who it is in the vote incentive. The NSFW version is finally up at Patreon. Plus a bonus pic.

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.

10:42

Two commuting hacks [Seth's Blog]

Just about everyone commutes to work, by car or by public transit. And just about everyone carries a smart phone.

All organizations have a communications problem, and it gets worse as they grow. Which issues are we facing today? Who else is on the team? What’s changed in the environment, and what do we need to get in sync on?

Consider starting an internal podcast. Just fifteen or twenty minutes a day. The host interviews team members, informs on important issues or simply helps people see the big picture. When everyone on the team listens to the same podcast each morning, cohesion and focus improve.

A podcast with 25 of the right listeners might be exactly the right size.

The second hack: I’m amazed at how many people on the train are mindlessly swiping through one social media platform or another. Judging by their facial expressions, they’re not enjoying it much.

Instead, we can focus our time and energy on learning. Six months of commuting can easily cover an advanced college course in something that interests us. And using Claude as a Socratic tutor can be a breakthrough. If you’re driving, use voice mode. Ask it to patiently engage you, one conversation at a time, in a journey to learn something difficult. How transistors work. Why the Roman Empire fell. The origin of species.

Day by day, your commute gets better and you get smarter.

08:49

Pluralistic: The technopolitics of ad-tech (19 Oct 2026) [Pluralistic: Daily links from Cory Doctorow]

->->->->->->->->->->->->->->->->->->->->->->->->->->->->-> Top Sources: None -->

Today's links

  • The technopolitics of ad-tech: Spying is good for tech, context is good for publishers.
  • Hey look at this: Delights to delectate.
  • Object permanence: PNH x Mike Ford; Singapore v Far East Economic Review; Publishing v bestsellers; Architecture v security; Vista v everyone; Free Bieber; Belarus sells the sugar bowls; OCCUPY GEORGE; Grey type sucks; Spinal Tap v studio math; Terry Pratchett x $10t coin; Boy Scouts x copyright maximialism; Canadian Tories x DRM; Herman Cain's 9-9-9 plan; ACLu v secret laws; Fined for suing the cops who shot you; Chicago PD steals millions for cop toys; Turing's Law; Copyleft v Vizio; Trump's killswitch.
  • Upcoming appearances: Vancouver, Victoria, Ottawa, Vienna, Kilkenny, Oxford, Sheffield, Virtual, Oxford, Montreal.
  • Recent appearances: Where I've been.
  • Latest books: You keep readin' em, I'll keep writin' 'em.
  • Upcoming books: Like I said, I'll keep writin' 'em.
  • Colophon: All the rest.



A halftoned, yellowing scan of a 1940s page of newspaper ads. Emerging from the ads is a halftoned fist clad in spiked brass kuckles.

The technopolitics of ad-tech (permalink)

"Technopolitics" are the politics embedded in technology. The Ur-text of technopolitics is "Do Artifacts Have Politics?" by the rock critic turned scholar Langdon Winner:

https://faculty.cc.gatech.edu/~beki/cs4001/Winner.pdf

With "Do Artifacts," Winner demands that we move beyond the idea of technologies having "intended consequences" and "unintended consequences" and towards a political economy of tech. In service to this, he divides the politics of artifacts into three categories:

I. Artifacts that have politics embedded in them by their creators, like Robert Moses's infamous bridges over the Long Island parkways. According to Moses biographer Robert Caro, Moses deliberately specified that these bridges must be too low for a city bus to pass under, in a bid to block Black people from traveling from New York City to the beaches he'd developed on Long Island.

Today those bridges are more than a century old, and they are still too low for city buses to pass under them, and this continues to mean that people who don't own private vehicles find it more difficult to get to the beach, and as it's still the case that race is a predictor of low incomes, those are still racist bridges.

II. Artifacts whose politics are accidental but unavoidable. Winner cites a kind of tomato harvester that vastly improved the efficiency of tomato pickers. These harvesters became very popular, which allowed tomato farmers to lay off large numbers of agricultural workers, and also allowed them to price the mechanically harvested tomatoes so cheaply that they crowded out other kinds of tomatoes.

Because these machines created a large pool of unemployed workers, they shifted power from labor to capital, and because these picking machines were too rough for all but the hardest varietals of tomato, they changed the flavor profile of tomatoes in America for the worse, towards a bland, tough tomato.

These picking machines were not designed to make workers poorer, nor were they designed to make tomatoes taste worse, but because of their technical characteristics, this was the unavoidable outcome, the inextricable politics of these machines.

III. Artifacts whose politics are intrinsic to their design. Here, Winner contrasts solar panels with nuclear reactors. Solar panels may require highly centralized industrial systems to produce, but once they are in the field, solar panels are compatible with looser, less coordinated political arrangements. A world of small anarchist communes is fully compatible with solar energy.

Contrast this with nuclear reactors: the prudent ongoing operation of a reactor requires a highly centralized state that is capable of fielding reliable, trustworthy independent inspectors. This state must also be capable of exercising the coercive power to shut down badly maintained or incompetently operated reactors.

The politics of nukes are the politics of a centralized, powerful state; the politics of solar are less determined. Solar is compatible with a wide variety of political systems, including (but not limited to) weak, decentralized states.

(For a further exploration of "Do Artifacts Have Politics?" I highly recommend Ginger Coons' reading guide:)

https://www.not-so-obvious.net/reading-do-artifacts-have-politics/

I really like Winner's framework for exploring technopolitics, but I have my own gloss on it. Winner's framework doesn't explicitly contemplate the idea of technological countermeasures. For example, what if someone were to design a city bus that was low enough to fit under Robert Moses's bridges? At that point, they'd cease to be "racist bridges," and merely become "bridges built by a racist":

https://locusmag.com/feature/commentary-cory-doctorow-technopolitics/

Which brings me to the technopolitics of ad-tech. Lots of people think that advertising is "the original sin of the internet," setting in motion the surveillance dystopia that is closing in on us from all sides today:

https://pluralistic.net/2026/10/17/mercenary-spyware/#discover-tech

I think this is wrong. I think that finding ways to communicate ideas and pitches to the general public is fine. Without some channel for reaching people with ideas and propositions they may not be familiar with, it would be infinitely harder to reach people for political causes. It would also be harder for new books, movies and music to find new audiences. It would be much harder to get people out to your independent craft fair, your zine show, or your No Kings march.

For me, the internet's original sin isn't advertising, it's surveillance. Contrary to what you have been told – and pax Winner's framework – the internet is fully compatible with privacy:

https://pluralistic.net/2025/10/31/losing-the-crypto-wars/#surveillance-monopolism

It wasn't the internet's technopolitics that made it a surveillance nightmare. It was just plain politics. Specifically, our politicians decided to stop enacting and enforcing privacy laws. The last consumer privacy law we got in America was a bill that made it illegal for video store clerks to disclose your VHS rentals:

https://en.wikipedia.org/wiki/Video_Privacy_Protection_Act

(As I type these words, the Supreme Court is poised to eliminate even that dried-up old crumb of privacy protection:)

https://slate.com/news-and-politics/2026/10/supreme-court-privacy-rights-case-bork-kavanaugh.html

The widespread phenomenon of ad-tech companies spying on us is the result of the decision to allow them to do so. That decision has had innumerable negative downstream effects, such as skyrocketing "surveillance prices":

https://pluralistic.net/2025/12/11/nothing-personal/#instacartography

And collapsing "surveillance wages":

https://pluralistic.net/2024/12/18/loose-flapping-ends/#luigi-has-a-point

It's created vast surveillance databases that are critical to Trump's racist pogroms, providing dossiers and precise location data on the people ICE kidnaps to Salvadoran slave-labor camps:

https://pluralistic.net/2026/03/10/ice-tech/#foreseeable-outcomes

Surveillance also promotes oligarchy. Without surveillance, oligarchs must give up more of their fortunes to keep the public happy, because the alternative is spending even more money on guards to keep the public from building guillotines on their lawns. Surveillance lets oligarchs make targeted strikes on restive radicals, which is much cheaper than broad-spectrum policies that make us all better off and neutralize the case for guillotines:

https://pluralistic.net/2025/06/26/autostabilizer/#slicey-bois

These are the technopolitics of surveillance, not advertising. There is nothing about advertising that demands surveillance. For centuries, advertising was not meaningfully linked to surveillance. The decision to fuse surveillance with advertising was just that – a decision, not an inevitability.

Any time we forget this, we let spying tech bosses off the hook. After all, if advertising demands surveillance, then tech bosses are just the avatars of the great forces of history, prisoners of the imperative to spy in order to advertise. By remembering that surveillance advertising is a choice, we put the blame squarely where it belongs: on the guillotineable oligarchs who made that choice, and amassed spectacular fortunes thereby.

Surveillance is political, but surveillance advertising has its own distinct technopolitics, and to understand those technopolitics, we must contrast them with the technopolitics of contextual advertising. Up until a decade or two ago, contextual advertising was simply called "advertising." Contextual advertising is the practice of running refrigerator ads next to articles on cooking and kitchen remodeling; ads for roadside restaurants on highway billboards; ads for Disney vacations in parenting magazines.

Your intuition probably insists that context advertising is less effective than surveillance advertising. After all, surveillance advertising allows a running shoe company to target users who are training for a marathon no matter where they are and no matter what they're doing. Surely this translates into increased "conversions" (clicks and/or purchases, depending on who you're talking to)?

It does, but not by much. Advertisers get about 5% more value from surveillance ads than they do from context ads:

https://weis2019.econinfosec.org/wp-content/uploads/sites/6/2019/05/WEIS_2019_paper_38.pdf

Partly, that's because surveillance ad companies grossly overrate the efficacy of surveillance advertising:

https://peoples-things.ghost.io/youre-doing-it-wrong-notes-on-criticism-and-technology-hype/

But surveillance advertising's anemic returns to advertisers are down to another aspect of the system: its tendency towards monopolization:

https://en.wikipedia.org/wiki/United_States_v._Google_LLC_(2023)

Surveillance is a capital-intensive activity: spying on billions of people as they move through the digital and physical world is incredibly expensive. That is a good part of the reason that online advertising has collapsed into the Meta/Google duopoly, who control about 80% of display advertising.

The harms of surveillance monopolies have a severely distorting effect on policy debates. For example, it's led some anti-monopolists to call for government-issued surveillance identifiers that follow us from birth to death in order to facilitate commercial spying to foster more competition in surveillance:

https://www.thesling.org/what-to-do-about-googles-dominance-of-online-advertising/

Here's the thing about monopolists: they cheat. Google and Meta have an illegal, collusive arrangement to rig the advertising market, overcharging advertisers and underpaying publishers:

https://en.wikipedia.org/wiki/Jedi_Blue

The ad-tech giants have taken in hundreds of billions that they simply can't account for. It's disappeared down a fraud-hole:

https://pluralistic.net/2026/05/25/lying-spies/#spying-liars

All of this has driven the majority of web users to install a privacy-blocker (like EFF's Privacybadger.org), meaning that surveillance ads are disproportionately likely to not even show up in a reader's browser:

https://doc.searls.com/2023/11/11/how-is-the-worlds-biggest-boycott-doing/

So while it's possible that, in a state of nature, a surveillance ad would outperform a context ad, delivering more sales for advertisers and more revenue for publishers, the monopolistic tendency of ad-tech means that publishers earn less from surveillance ads (because more users block them, and because monopolistic ad-tech platforms extract higher commissions), and advertisers see fewer sales from them (because more users block them, and because monopolistic ad-tech platforms extract higher prices).

Context ads, meanwhile, are always going to give power to publishers, because publishers will always understand the materials they publish better than any ad-tech platform could. Commissioning, editing and publishing an article, podcast or video gives a publisher unique and inalienable insight into that material.

Surveillance data about audiences is a kind of ambient vapor floating around websites and places and payments that has to be condensed through a heroic and expensive effort that gives power to whichever company can muster the capital and infrastructure to do so. Meanwhile, information about the content of publishers' offerings arrives pre-refined into ingots that are already in publishers' own possession.

It's possible to run "programmatic ads" without surveillance. Rather than building an ad-tech stack through which publishers transmit sensitive information about their audiences ("Who will pay me to advertise to this 18-34 year old man-child from the outer boroughs who owns an Xbox and has recently researched gonorrhea symptoms?"), we can build systems through which publishers transmit information about their own materials ("Who will advertise to a user with a New York IP address who is reading an article comparing running shoe brands?").

Not only is this possible, but it actually generates more revenues for publishers than the surveillance-based ad-tech stack:

https://techcrunch.com/2020/07/24/data-from-dutch-public-broadcaster-shows-the-value-of-ditching-creepy-ads/

On top of that, publishers who don't gather personal information about users also don't need to show their users those awful pop-up ads asking their permission to gather their data. Everyone hates those notices, and they are yet another negative aspect of surveillance advertising that disappears with the switch to context ads.

An ad-tech stack for context ads is far less prone to monopolization. Such a stack can be "federated," with multiple "demand-side platforms" (the part of the system that advertisers use to place bids for the right to show their ads) all communicating with the same "supply-side platform" (the part of the system publishers use to transmit opportunities to place ads).

This is also in the technopolitics of context ads: they do not tend toward the "efficiencies of scale" that lead to abusive monopolistic middlemen who steal from publishers and advertisers and sell out the public to fascists who want to arrest them and deport them to Salvadoran slave-labor camps.

When the ad-tech sector is composed of smaller companies that are more competitive with one another, it is much harder for any of them to collude to rig the market. That fierce competition also means it's harder to create a cozy conspiracy to lobby together to block privacy laws, and it leaves the companies with lower margins and less retained earnings to spend on those lobbying efforts.

Surveillance ads also promote all kinds of parasitic businesses. The fact that a publisher can serve ads related to users rather than the subject of their media means that sensationalistic and deceptive websites can sell ads that run against content that's totally unrelated to advertisers' products and services. And because it's cheaper to produce lies and garbage, these publishers can undercut the ad prices demanded by high quality outlets and let advertisers reach the same users. This is the whole reason that "chumboxes" exist:

https://en.wikipedia.org/wiki/Chumbox

Just as nuclear power favors a centralized state, surveillance advertising:

  • favors middlemen over publishers and advertisers;
  • tends toward monopoly;

  • favors low-quality media over high-quality production;

  • impedes the passage of privacy laws;

  • provides authoritarian states with an off-the-books, warrantless source of surveillance data.

And just as solar allows for decentralized, anti-authoritarian societies, context advertising:

  • favors publishers over middlemen and advertisers;
  • tends towards pluralism and diversity of voices;

  • favors high-quality media by reserving the lion's share of the rewards to the producers;

  • does not rely on a weak privacy environment;

  • does not militate for "democratizing spying" by issuing every person with a permanent advertising identifier.

There's nothing (necessarily) wrong with building systems to tell people about things you want them to know. There's nothing (necessarily) wrong with paying for media with ads. It's possible for both of these things to go awry, but they are not in and of themselves bad. They have contingent technopolitics.

But surveillance ads have completely unavoidable, absolutely ghastly technopolitics. Surveillance ads are bad for publishers, for advertisers, and for democracy. We should ban surveillance ads:

https://www.eff.org/deeplinks/2023/05/save-news-we-must-ban-surveillance-advertising

(Image: Jess, CC BY-SA 4.0, modified).


Hey look at this (permalink)



A shelf of leatherbound history books with a gilt-stamped series title, 'The World's Famous Events.'

Object permanence (permalink)

#25yrsago Patrick Nielsen Hayden interviews Mike Ford https://user.well.com/engaged.cgi?c=inkwell.vue&f=0&t=126

#20yrsago Singapore bans Far East Economic Review https://web.archive.org/web/20061010002951/https://www.feer.com/articles1/2006/0610/free/p006.html

#20yrsago Publishing isn’t bestseller-driven https://www.nielsenhayden.com/makinglight/conventional_un/

#20yrsago Why architecture and security don’t mix https://www.schneier.com/blog/archives/2006/10/architecture_an.html

#20yrsago Vista licence: Microsoft’s abusive relationship with you https://wendy.seltzer.org/blog/archives/2006/10/19/forbidding_vistas_windows_licensing_disserves_the_user.html

#20yrsago Boy Scouts of America Concerned About Copyright https://web.archive.org/web/20061110065012/http://sfgate.com/cgi-bin/article.cgi%3Ffile%3D/news/archive/2006/10/20/entertainment/e110452D84.DTL

#15yrsago Canadian Tories admit that Canadians don’t want DRM rules, push for them anyway https://web.archive.org/web/20111022210131/http://www.michaelgeist.ca/content/view/6071/125

#15yrsago Visualizing Herman Cain’s 9-9-9 plan to redistribute wealth from the poor to the rich https://web.archive.org/web/20111021103517/http://jaredbernsteinblog.com/9-9-9-in-one-really-long-graph/

#15yrsago Free Bieber: campaign to kill proposed law that would send you to prison for 5 years for singing copyrighted music on YouTube https://web.archive.org/web/20111020145336/http://freebieber.org/

#15yrsago Belarusian central bank auctions off its sugar bowls https://www.theguardian.com/world/2011/oct/19/belarus-central-bank-sells-office-furniture

#15yrsago Dataviz as defacement: OCCUPY GEORGE https://web.archive.org/web/20111022022046/http://www.occupygeorge.com/

#15yrsago HOWTO avoid a copyright shakedown legal threat: be famous, a politician, a cop, a soldier or a corpse https://torrentfreak.com/undercover-cops-and-politicians-escape-bittorrent-lawsuit-111013/

#10yrsago Popular design guides are responsible for plague of grey type https://web.archive.org/web/20170914051800/https://www.wired.com/2016/10/how-the-web-became-unreadable/

#10yrsago Digital Defenders: a free open-licensed booklet for kids about privacy and cryptography https://edri.org/files/privacy4kids_booklet_web.pdf

#10yrsago Public universities and even the US Navy have sold hundreds of patents to America’s most notorious troll https://www.eff.org/deeplinks/2016/10/inside-intellectual-ventures-portfolio-nearly-500-university-patents

#10yrsago Airportraits: composite photos of all the daily takeoffs from the world’s airports https://mikekelley.art/?category=airportraits

#10yrsago Rich people can afford to buy more sleep than poor people https://arstechnica.com/science/2016/10/the-rich-can-sleep-in-thanks-to-better-transit/

#10yrsago Harry Shearer sues studio over Spinal Tap, says he’s received $98 in royalties over 30 years https://web.archive.org/web/20161224224142/https://www.yahoo.com/movies/harry-shearer-files-125-million-spinal-tap-fraud-suit-copyright-termination-150031664.html

#10yrsago ACLU asks court to reveal 23 secret surveillance laws https://web.archive.org/web/20161019224447/https://theintercept.com/2016/10/19/aclu-wants-secret-surveillance-laws-made-public/

#10yrsago Montana judge unrepentant after sentencing man to 60 days for repeatedly raping his own 12 year old daughter https://edition.cnn.com/2016/10/19/us/montana-judge-incest-case-trnd/index.html

#10yrago Turkish court fines bystander/tourist who sued police for shooting out his eye https://www.hurriyetdailynews.com/kyrgyz-tourist-wounded-in-gezi-protests-ordered-to-pay-debt-to-turkish-state–104964

#10yrsago By stealing from innocents, Chicago PD amassed tens of millions in a secret black budget for surveillance gear https://web.archive.org/web/20160929143255/https://chicagoreader.com/chicago/police-department-civil-forfeiture-investigation/Content?oid=23728922

#10yrsago Turing’s law: UK to retroactively pardon thousands of men prosecuted for having sex with men https://www.bbc.co.uk/news/uk-37711518

#5yrsago The monopoly strategy behind the Google/Microsoft mobile patent wars https://pluralistic.net/2021/10/20/vizio-vs-the-world/#capital-as-power

#5yrsago Copyleft lawsuit against Vizio will allow anyone to defend the commons https://pluralistic.net/2021/10/20/vizio-vs-the-world/#dumbcast

#5yrsago The true, Terry Pratchett-esque origins of the trillion-dollar coin https://pluralistic.net/2021/10/19/moist-von-lipwig/#gimmick-v-gimmick

#1yrago The mad king's digital killswitch https://pluralistic.net/2025/10/20/post-american-internet/#huawei-with-american-characteristics


Upcoming appearances (permalink)

A photo of me onstage, giving a speech, pounding the podium.



A screenshot of me at my desk, doing a livecast.

Recent appearances (permalink)



A grid of my books with Will Stahle covers..

Latest books (permalink)



A cardboard book box with the Macmillan logo.

Upcoming books (permalink)

  • "The Post-American Internet," a geopolitical sequel of sorts to Enshittification, Farrar, Straus and Giroux, 2027
  • "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



Colophon (permalink)

Today's top sources:

Currently writing:

  • “Once Is Enemy Action,” a science fiction novel about the origins of modern technofascism. Today's words: 574 (7730 total).

  • "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.

  • A Little Brother short story about DIY insulin PLANNING


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.


How to get Pluralistic:

Blog (no ads, tracking, or data-collection):

Pluralistic.net

Newsletter (no ads, tracking, or data-collection):

https://pluralistic.net/plura-list

Mastodon (no ads, tracking, or data-collection):

https://mamot.fr/@pluralistic

Bluesky (no ads, possible tracking and data-collection):

https://bsky.app/profile/doctorow.pluralistic.net

Medium (no ads, paywalled):

https://doctorow.medium.com/

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

ARC Resort [Penny Arcade]

New Comic: ARC Resort

08:42

The Mob [George Monbiot]

We should get Palantir out of our public services before it becomes locked in.

By George Monbiot, published in the Guardian 14th October 2026

What a world we live in. Imagine: gangs dragging civil servants off commuter trains and beating them up because they handed government data jobs to the wrong contractor – and the government changing its procurement decisions as a result. Well, OK, it might not have happened yet, but it’s only a matter of time. As the former Labour deputy leader Tom Watson asks: “Do you want to let the rule of law lead procurement practice, or do you want mob rule to lead procurement practices?” No, I absolutely don’t want that, and it’s always good to get ahead of trouble.

But then I remember there are two common meanings of mob rule. One is intimidation by crowds of thugs. The other is a pejorative term for democracy. And while I’ve yet to see government procurement practices in the UK determined by pitchforks and flaming torches, democratic transparency could be a genuine threat to certain contractors. One might have hoped that Watson, who once took on the Murdoch empire, would have recognised the distinction. But then again, one might have hoped that Watson would not have taken a job as a senior vice-president at Palantir.

Over the past few years, this US company has been worming its way into the British state. It has landed contracts worth hundreds of millions with the Ministry of Defence, several police forces, the Financial Conduct Authority, the atomic weapons establishment and the NHS. Its superpower, according to a deep investigation by Peter Geoghegan and Lucas Amin in the London Review of Books, is that it is “willing to spend more on securing political access than almost all of its British and continental competitors”. It made abundant use of Peter Mandelson’s company Global Counsel, which seems, in turn, to have made abundant use of the UK’s remarkably flimsy lobbying laws. Watson is one of more than 30 former UK ministers and officials Palantir now employs.

Palantir’s contracts might have been awarded lawfully, but some of us might question the ways in which doors were opened for it. These include an unrecorded meeting between Boris Johnson, Dominic Cummings and the co-founder of Palantir, Peter Thiel, in Downing Street in 2019. It was invited back to Downing Street when the Covid-19 pandemic began a few months later, and was working in the NHS within days, on a contract for which it charged only £1. The mayor of London, Sadiq Khan, has criticised such loss-leaders, which can quickly lead to reliance on a company, at which point it can name its price.

Another controversial meeting was brokered by Mandelson in 2025, when he was UK ambassador to the US. Keir Starmer visited Palantir’s showroom in Washington, where he met the company’s global and UK chief executives, Alex Karp and Louis Mosley. They talked about defence spending. No 10, Geoghegan and Amin tell us, “refused to say whether Starmer knew that Palantir was a client of Global Counsel, in which Mandelson still held a stake of around a fifth at the time. The meeting was never declared on transparency registers.” A few months later, Palantir secured a £241m contract with the Ministry of Defence, without an open tender.

Now we learn that Martha Dalton, a key player in Andy Burnham’s campaign to win the Makerfield byelection, enabling him to become prime minister, was on unpaid leave from the lobbying company she co-founded, Lodestone. Lodestone had done extensive work for Palantir. And the Financial Times reports that Samantha Jones, then the lead non-executive director on the board of the health department, was an adviser to one of Palantir’s partners when the company was bidding for its huge and controversial NHS contract. Now she is permanent secretary in the same department.

There have been repeated allegations that some of Palantir’s products are rubbish. But, as the House of Commons science, innovation and technology committee warns, government agencies can quickly succumb to “vendor lock-in”: once you start using them, it can be very hard to stop.

Thiel, has claimed that “the NHS makes people sick”, and that we should “just rip the whole thing from the ground and start over”. The company is deeply embedded in the Trump administration, where it supplies software that helps ICE find undocumented people. It also works for the Israeli government on identifying targets in Gaza. When Karp was confronted by a protester who told him that “Palantir kills Palestinians”, he replied: “Mostly terrorists, that’s true.”

This is the company handling our critical information. After official denials, it turns out that NHS England has granted Palantir “unlimited access” to patient data. This is a huge issue. Identifiable patient data is supposed to be visible only to people directly involved in a patient’s care, or who have received the patient’s informed consent. There are widespread concerns about how this and other datasets might be used.

So, as Palantir runs into ever-greater controversy, it’s not hard to see why it might have hired Watson, who, with Burnham, was a minister in Gordon Brown’s government. I wouldn’t presume to speculate about what attracted Watson to the multibillion-dollar company.

In July, the government’s ethics and integrity commission recommended a major shake-up, enabling us to see all the encounters between lobbyists and ministers, aides and senior officials. I’ve heard this call many times before. The pattern is always the same: a scandal, followed by a call to action, followed by … little or nothing.

Before he became prime minister, David Cameron noted that lobbying “has tainted our politics for too long”. He would shine “the light of transparency” on it. Instead, he oversaw an act that was “more loophole than law”. It did nothing to protect us from lobbying by people such as … David Cameron – pulling strings, once out of office, among his old colleagues, to try to drum up government business for the bank Greensill .

You could almost believe that the real purpose of government was to do the bidding of corporations, foreign states and the ultra-rich. You could almost believe that some government ministers may have an eye on future opportunities when they resist effective reform.

So this is another key test for Burnham. Will he allow the mob rule of private business to keep dominating our lives, or will he ensure that government is for the people?

www.monbiot.com

07:56

Wine ported to OpenBSD, runs modern Windows games [OSnews]

In what is quite a major achievement, Wine has been ported and made to work on OpenBSD.

We have since tested several dozens of 64-bit Windows software, mostly successfully. See screenshots, livestream recordings for example. Even the Remaster of The Witcher 3 which released just last month runs, and runs well (requires adding in vkd3d-proton; see README; livestream which looks less fluent than it is due to the on-system recording with ffmpeg).

↫ Thomas Frohwein

The biggest limitation seems to be the lack of support for WoW64, so 32bit Windows software won’t work. Still, this is a massive milestone for OpenBSD, and makes especially gaming a somewhat viable option on OpenBSD.

Single-partition encrypted NetBSD 11 root [OSnews]

What if a regular, normal NetBSD installation is too plebeian for you?

This is a quick overview which attempts to synthesize DW Armstrong’s tutorial on NetBSD encryption with the cgdroot page from the NetBSD wiki in a single MBR partition, divided into multiple disklabel slices to preserve MBR entries.

↫ indigoparadox Web Zone

What if you need this?

Linux 7.3 released [OSnews]

Significant changes in this release include some significant binfmt_misc extensions, some group-scheduling work aimed at improving performance on large systems, the new failfs filesystem that fails all operations, the fchroot() system call, global per-CPU data for BPF programs, the completion of the sched_ext subscheduler feature, working-set tracking for virtual machines, alternative data-stream support in the ntfs3 filesystem, a long list of SMB server improvements, and much more.

↫ “corbet” at LWN.net

It’ll make it way to your distribution of choice soon enough.

05:35

Girl Genius for Monday, October 19, 2026 [Girl Genius]

The Girl Genius comic for Monday, October 19, 2026 has been posted.

05:21

Shush [Ctrl+Alt+Del Comic]

The post Shush appeared first on Ctrl+Alt+Del Comic.

04:28

01:21

The 7.3 kernel has been released [LWN.net]

Linus Torvalds has released the 7.3 kernel, as expected.

It's Sunday afternoon, and this week I somehow kept my wits together long enough to keep track of the day of the week, so the release isn't randomly delayed. Will wonders never cease?

Anyway, nothing very special seems to have happened this last week, so as expected the final 7.3 is out, and thus tomorrow the merge window for 7.4 opens. Except I'm on my annual family vacation, so instead of merging anything first thing in the morning, I'll spend most of the day on a boat and under water. I'll get back to merging in the afternoon, but I expect my schedule to be a bit unusual for a while.

This release is a record-breaker on all fronts; it brought in 18,765 non-merge commits from 3,021 developers, 807 of whom were first-time kernel developers.

Significant changes in this release include some significant binfmt_misc extensions, some group-scheduling work aimed at improving performance on large systems, the new failfs filesystem that fails all operations, the fchroot() system call, global per-CPU data for BPF programs, the completion of the sched_ext subscheduler feature, working-set tracking for virtual machines, alternative data-stream support in the ntfs3 filesystem, a long list of SMB server improvements, and much more. See the LWN merge-window summaries (part 1, part 2) and the KernelNewbies 7.3 page for details.

00:56

Inside the Intel 8087 chip: floating-point addition and subtraction [OSnews]

In 1980, Intel introduced the 8087, a chip that made floating-point operations much faster in the IBM PC and other systems. Although the 8087 supports advanced operations such as tangents, square roots, and logarithms, this article focuses on basic arithmetic operations: addition and subtraction. The 8087 provided a spectacular speed improvement over the 8086 processor, speeding up addition by a factor of almost 100, and complicated operations by even more. In this article, I examine the 8087’s microcode and circuitry to explain exactly how floating-point addition and subtraction are implemented, including numerous special cases for infinities and other special values.

↫ Ken Shirriff

Shirriff took an actual chisel to the 8087 coprocessor to gain access to the insides for highly detailed photographs, taken with a microscope. They look amazing.

Source code for the Palm OS port of Lemmings [OSnews]

Only a few day ago I linked to a massive collection of original Palm OS development resources, and today we can take a look at what it was like to put all of those resources into practice: the original source code for the Palm OS port of Lemmings. With these resources combined, there’s no excuse to not building any Palm OS applications. I’d really like a modern email client, a Fediverse client, and a slightly more modern browser surely wouldn’t hurt.

Get on it!

00:07

Jackalope V2 Ideas [Nina Paley]

The Jackalope I have is a prototype. Its hinge, jackshaft and fold are magnificent. Other aspects need to change, to improve efficiency (external derailleur instead of Rohloff internal gear hub), weight (lighter titanium tubing, no center steering tube weld), and functionality (braze-ons, option for integrated pannier rack).

So I’ve been thinking intensely about a Version 2. So intensely that if I had my druthers I’d manifest TWO new bikes:

1. The Jaquelope Classique
To fold, could the front wheel be turned inward? That would make it more compact, and a GlideFlex stem could be used for super-easy handlebar folding. Otherwise, 2 quick-release bolts on clamp could allow handlebars to fold down.

 

Modeled as closely as possible on the Ti-Rush (or Carver Ti Glide) but with the Jackalope jack shaft and fold.

  • Same double bottom tube design (to accommodate 28mm tire) as the current Jackalope, but with lighter tubing.
  • 3×9 drivetrain: chain front and back, with a triple crank front and 9-speed cassette back. Time-tested, reliable, and maintainable.
  • Direct steering. Handlebars could fold down by using 2 cam levers in place of 2 bolts on the 4-bolt stem clamp
  • Disc brake rear, caliper brake front
  • 700c rear wheel, 451 front
2. The Jackalope Tourette
So named until someone convinces me it’s too offensive.

  • Double bottom tubes spaced slightly wider apart to accommodate wider tires (like 32mm? or wider?)
  • Front belt drive, rear chain drive
  • 2×9 rear drivetrain: 9-speed cassette with double front derailleur at the jack shaft
  • Remote steering with stem at the crank/bottom bracket tube. This would eliminate the weight of the current Jackalope’s center steering stem tube and weld, locating the steering a few inches forward from its current position.
  • 700c rear wheel, 406 front (more tire widths and types available for 406 than 451)

Both bikes:

  • Less deep wheel rims than the Jackalope’s, at least on the front. Current rims require 80mm tube stems which are hard to find.
  • 2 Braze-ons on each of the seat support bars and 2 on each of the bottom tubes, to mount under-seat racks and/or extra whetevers
  • Mechanical shifting. I considered electronic shifting but I want these bikes to last, and electronic shifters (including batteries) become obsolete at least every 5 years.
  • Thumb shifters. I like ’em.
  • Lighter tubing than the current Jackalope prototype. Hopefully the hinge can be made a bit lighter too.
  • Kickstands! I need ’em.

Them’s my thoughts this Sunday October 18 2026. They’re sure to evolve…

Update Oct 19: Just spoke with Davis Carver. A 3x chainring on the Classique would require a front tensioner, which is not a dealbreaker. But either bike could use Schlumpf drive instead of a front or jack shaft derailleur. These are nearly 100% efficient in “direct drive” (ie most of the time) with a 4-5% penalty in “overdrive” (ie hill climbing). Seems acceptable.

Instead of a regular 9-speed drivetrain he suggests a Box Two Prime 9 system instead, which permits a much wider cassette and a rugged chain. I had only read about these but Carver has lots of experience with them and says they work great.

 

Share

The post Jackalope V2 Ideas appeared first on Nina Paley.

Sunday, 18 October

22:14

Health care is phone tag in US [Scripting News]

The healthcare system in the US is grossly inefficient, incredibly bad and getting info to and from patients.

Teach everyone in healthcare to try to use their portals as their first resort of communicating with patients.

They waste so much of their time and our time playing phone tag.

I don't know if it's this way in other countries, but it is universally a phone-voice-based comm system in the US.

21:49

Dirk Eddelbuettel: myman 0.12.0 on CRAN: Two new waves! [Planet Debian]

Another new and exciting version of our still-new package myman reached CRAN this morning, and has been built for r2u and on r-universe. The matching Python package has also been updated. The package offers twenty one hundred eighty four “My man …” posts by Kevin Kruse made on bsky during the summer of 2026. Each wave picked at one particular public persona. This package wrapse these up in the style of packages like fortunes or gaussfacts.

This release regroups two new waves of posts mocking, respectively, Peter Thiel and Michael Tracy, and make a small update to continuous integration. The short NEWS entry for this release follows.

Changes in version 0.12.0 (2026-10-18)

  • New waves eleven (100 posts) and twelve (100 posts) made last week; total is now 2184 posts

  • Small update to continuous integration

Courtesy of my CRANberries, there is also a diffstat report for the most recent release. More information is available at the repository or the package page.

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.

17:35

Link [Scripting News]

I wrote a piece entitled The Web of Markdown on Oct 6. I have to keep looking it up, but I do remember writing it very quickly and deciding it needed a memorable title, like the ones about textcasting, and podcasting and all the other bits that went on to be something. It's one of those times when it seems to have potential with other developers, they seem to see the same logic in it that I do. A way to disconnect from VC control of the web and try again with the open basis, the un-owned basis. There was a fork here at some point in the last 10 or so years, we just refused to see it as such. And btw it was not a very polite piece, but I wasn't feeling polite when I wrote and decided not to edit the anger out of it. I don't like having been so wrong. But it's a fact and denying it doesn't change it.

Link [Scripting News]

Anyway, what this means is we're building a site of files that live in Markdown-Land while what you're reading right now is in HTML-land (although someday soon you will read them in Markdown too, confusing). Chrome is the authority of HTML. It owns the web. We give up. If this were Westeros I would probably be joining the Night's Watch. We have work to do and it might be related to what the Other Web wants to do, but it probably (hopefully) doesn't. I will continue to publish in HTML, and it's up to Google and the EFF if the quality of my writing is suitable for their web. I have no say in it, they have not shown up to negotiate or even discuss. They are silent. Somewhat like the maesters of the Citadel? There must be a bigger plan! :-)

16:42

What a Good “AI” Policy Looks Like [Whatever]

Subvert is a creator-owned music platform, catering primarily to indie musicians; think of it as Bandcamp if it was a co-op. Subvert recently released a policy on the use of “AI” in the music that’s released on the site, and for anyone who is curious about things like this, I really think it’s worth a view. Among the things I think it does right is that it defines the terms under discussion (including acknowledging “AI” is at this point basically a broad marketing term), acknowledges the difference between generative “AI” and other types of computational processes, and then, having done so, lays out what’s acceptable use for music presented on the site (not neglecting things like cover art) and what is not. It even has a process available for judging edge cases, because no matter what your policy, edge cases will exist.

Why do I think this policy works? One, because it firmly makes the case for human creation while acknowledging the reality of modern creative processes — in this case music production, where so many of the tools have “AI” baked in but are doing things of a technical nature: “mastering, mixing, equalization, pitch correction, beat detection, noise reduction, and loudness optimization” are examples the policy gives of such tools. These tools handle backend processes but not creative processes, which are the ones Subvert is primarily concerned about. One can argue whether the lines they draw are the right lines, but in these cases the lines come with the knowledge of, and familiarity with, both the field of “AI” and of music composition and production.

Two, because this policy was developed by the Subvert community, not presented top-down by a board or executive entity to a membership or community that didn’t have any input on it, or might not even have been aware such a policy was being developed. Over in the writing world, which is where I spend most of my professional time, more than one writing organization has presented an “AI” policy, only to face the wrath of its membership because the policy is dunderheaded, or not aligned with the views of the membership, or both. In the case of Subvert, dozens of members helped to develop the policy over hundreds of discussion posts. It’s a useful document for a specific audience.

Three, because Subvert notes the policy is a living document, to be revisited if and when necessary. Which I think is smart; tech is a moving target, and while the overall concept of “Human Creative Authorship” can be a core principle in any tech era, details can and do matter, and those details will likely change over time.

On a personal note, this policy also largely conforms to my own thoughts on “AI,” especially the part about “AI” being a marketing term more than anything else these days, and that many processes currently lumped into the “AI” rubric are going to be put into the workflows of creative people whether we actively want/use them or not. One can be solid about having a final product be the result of human work and creation, and also acknowledge that, say, a noise reduction VST might have some flavor of “AI” in it that wasn’t trained on the unauthorized work of others. This point is of course highly subjective — I would like a policy that largely conforms to my thinking, wouldn’t I — but inasmuch as my own thoughts on the matter came after considerable thought and observation, I’m comfortable with them, and it’s pretty clear the Subvert policy was also not just slapped together by the need to say something, anything, on the topic.

I think other organizations thinking about “AI” policies would be well-served to look at Subvert’s take on it. Not because every particular will be suited for their situation — again, it’s a specific policy for a particular need — but because it’s generally doing a pretty good job of threading the needle of how to assure the site’s users that what they’re listening to is coming from an actual human musician, regardless of the tools the musician used. That general needle threading is what’s important. There are things to learn from this policy, even if its particulars are not on point everywhere.

Check it out and see what you think about it.

(Disclosure: I am a member of Subvert but did not contribute in any way to the development of this “AI” policy, and as of writing this have not yet put any music on the site.)

— JS

16:21

Ludovic Rousseau: New version of pcsc-lite: 2.5.3 [Planet Debian]

I have just released a new version of pcsc-lite 2.5.3.

pcsc-lite is a Free Software implementation of the PC/SC (also known as WinSCard) API for Unix systems. It provides an API for using smart cards and smart card readers.

Changes:

2.5.3: Ludovic Rousseau

18 October 2026

  • pcscd.service: preserve card sessions across polkit restarts

  • correctly decode all ATRs (fix the fix suggested by AI)

  • Fix authorization for uid > 65536

10:07

Steinar H. Gunderson: Decompilation patterns, part 15: Redundant if-for [Planet Debian]

Yet another way of writing for loops:

    var_a2_4 = ...
    if (var_a2_4 < 0x78) {
        ...
        do {
            ...
            var_a2_4 += 1;
        } while (var_a2_4 < 0x78);
    }

This extra if is merely there because the compiler wasn't able to prove that the variable didn't start below the bound, so it can't rewrite the while-do to a do-while without that extra check. So the rewrite still reads:

for (var_a2_4 = ...; var_a2_4 < 0x78; ++var_a2_4) {
    ...
}

possibly with the initializer skipped, if it comes from something complex earlier.

09:35

Anticipating confusion [Seth's Blog]

I know that you know that taking this exit will get us to Sheridan Drive, but the person who’s likely to be driving down this road in a few minutes has no idea.

Let’s agree that most street signs are for folks who know where they’re going. We would label things differently if we were instructing those that don’t.

I know that you know that ERASE isn’t the same thing as DELETE, but the next person interacting with your command-line interface might not know.

Of course this is obvious when we say it so clearly. And yet, there are many kinds of USB cables, poorly named and labeled. The instructions that come with just about anything we buy were written by lawyers for juries, not by a product manager who actually wanted to inform and delight.

Design to be understood. And design so that the inevitable confusion of the newbie doesn’t get worse. Because without your active intervention, it will.

06:07

Urgent: Stop jailing children in deportation prisons [Richard Stallman's Political Notes]

US citizens: call on your congresscritter and senators to stop jailing children in deportation prisons.

I edited the sample letter to avoid associating myself or my views with religion, and to reject terms such as "detention" and "ICE". You might want to do likewise.

I condemn the jailing of children and families in deportation prison, and I call on you to put a stop to it. (The word "detention" is too bureaucratically unfeeling to fit this cruel practice; please join me in shunning it.)

Since 2025, LICE (Lethal Instruments of Cruel Expulsion) has jailed more than 6,200 children -- including at least 500 babies and toddlers.

As a member of Congress, you have the legal authority to enter LICE deportation prisons without advance notice, inspect conditions, and demand accountability.

I call on you to conduct immediate, unannounced inspections of jails holding children and families -- and use every oversight and funding tool available to end jailing of children.

A nation that cares about children does not put them in cages.

See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.

Urgent: Youth Voting Rights Act [Richard Stallman's Political Notes]

US citizens: call on Congress to pass the Youth Voting Rights Act, which would eliminate obstacles to registering and voting by young voters who are of voting age but lack experience.

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: Don't subsidize private schools [Richard Stallman's Political Notes]

US citizens: call on the US Treasury not to subsidize private schools.

See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.

Urgent: Restore fuel economy standards [Richard Stallman's Political Notes]

US citizens: call on Congress to restore fuel economy standards that the saboteur's officials weakened.

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: School desegregation cases [Richard Stallman's Political Notes]

US citizens: call on the DOJ to stop dropping school desegregation cases and stick to Brown v. Board of Education.

Urgent: Deportation to unrelated countries [Richard Stallman's Political Notes]

US citizens: Thank the Judges Who Ruled Out Deportation to Countries Unrelated to the Deportee.

Urgent: Strictly limit the R&D tax credit [Richard Stallman's Political Notes]

US citizens: call on Congress to strictly limit the R&D Tax Credit.

I used this as the text of my letter.

Please legislate stricter rules for the research and experimentation tax credit, so that the companies that want to impose Alleged Intelligence on everyone cannot label datacenters for production use as "research and experimentation", even if part of their use will be research or experimentation.

The page gnu.org/philosophy/words-to-avoid.html#ArtificialIntelligence explains why we should not lend support to the marketing hype campaign which that term promotes.

Meta’s use of this credit illustrates the need for congressional action. A New York Times investigation reported that the company is classifying Alleged Intelligence data centers as experimental pilot models and claiming costly computer chips as research supplies. Meta’s total research credits increased from $700 million in 2023 to $3.9 billion in 2025.

Given the corrupter's deliberate corruption of the IRS, counting on it to do its job honestly is self-delusion. I urge Congress to change tax law so that any claim of "research expenses" over a certain amount must be evaluated by a court, with a presumption of rejection unless it is proved valid.

Thank you,

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: Protect reimbursement of Planned Parenthood by Medicaid [Richard Stallman's Political Notes]

US citizens: call on Congress to protect reimbursement of Planned Parenthood by Medicaid (for services that Medicaid covers) from arbitrary revenge and interference.

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.

Suing newspapers before publishing [Richard Stallman's Political Notes]

*[The editor of the Wall Street Journal] said the tactic of suing newspapers before they had published a story had become an established PR strategy of the powerful amid greater distrust of the established media.*

Federal Reserve changing rules [Richard Stallman's Political Notes]

The Federal Reserve is changing the rules to help big banks take dangerous risks, and risk causing nationwide harm.

Summary of mass surveillance in the US [Richard Stallman's Political Notes]

A summary of mass surveillance in the US, and how the data thus collected is used against everyone.

I protect myself from most of these systems by never using them. But there are a few I can't avoid, such as cameras used to track the public.

Heatwaves and wildfires [Richard Stallman's Political Notes]

*Heatwaves and wildfires are setting back air quality improvements, UN finds.

WMO report details extreme weather events causing climatic feedback loop with serious health consequences.*

Airline passenger tied to a seat and then arrested [Richard Stallman's Political Notes]

An article seems to say that an airline passenger was tied to a seat, and then arrested, for uttering statements of bigotry.

Bigotry is nasty and I will rebuke people for that, but I don't think people should be tied up, let alone arrested, just for saying nasty things.

There is a brief hint that he may have done something worse than speak words of bigotry, but the article gives no details — as if they made no real difference. I think we are intended to go away feeling that that passenger deserved to be tied up and arrested for speaking words of bigotry.

Taxing driverless cars [Richard Stallman's Political Notes]

*[Driverless] cars should be taxed to offset job losses, thinktank urges.*

If the worst problem the cars cause is loss of jobs, taxing them could be sufficient to deal with the problem. Today's driverless cars have other, worse problems: identifying their passengers, blocking traffic, blocking emergency responders, and snooping on everyone that the car spies. These call for prohibiting them.

Meta platforms manipulate users to stay [Richard Stallman's Political Notes]

Meta (formerly known as Facebook) engineers its platforms to lead people to stay on its platforms almost compulsively, treating human minds as a resource to be mined for profit.

Interviews with Israeli intelligence agents [Richard Stallman's Political Notes]

A documentary presents anonymous interviews with Israeli intelligence agents about the systems of killing Palestinians, sometimes because heuristics suggested they are HAMAS agents, sometimes merely for disobeying invisible boundaries.

More about the film.

EDRI reproaches US government [Richard Stallman's Political Notes]

EDRI reproaches the US government for its attack on Autistici/Inventati.

The power to designate a person or organization arbitrarily for punishment, bypassing the trial that anyone accused has a right to, is a standing invitation for government repression. We must abolish it.

Years ago, the US government used this power (in the form of the no fly list") to bully foreigners into becoming spies.

The would-be despot has used this power to silence dissent and to protect war criminals. Now he is moving on to sabotage civil society.

Esther Rantzen's plans for assistance in dying [Richard Stallman's Political Notes]

Terminally ill broadcaster Esther Rantzen planned in advance to go to Switzerland for assistance in dying — later on. But now that her illness has advanced to the point where she wants to do this, she is considered "too physically fragile" to travel there.

*Rantzen said: "Unfortunately, when I was strong enough to make the flight and go to Dignitas, my life was not unbearably painful, indeed, I was able to relax in my beloved cottage in the New Forest.

And by the time life did become unbearable, I was too physically fragile to make the journey and go through the Dignitas process.

So even though I had spent the money and made the plans, I was not ready to end my life back then, and did not realize that would be my last chance.*

Meanwhile, the UK has abandoned the plan to legalize assisted suicide.

I wonder whether Rantzen could try to travel anyway despite her fragility. The medical risks that would ordinarily be a reason for her to avoid the travel might, in this sad context, count as opportunities.

New South Wales to limit "screen time" in schools [Richard Stallman's Political Notes]

The Australian state of New South Wales will strictly limit "screen time" in schools. The limits will vary with the grade level.

I am not an expert on "screens"' effect on students minds. The views of teachers on this subject seem plausible to me. What I do know is that nonfree applications, which includes most ed-tech, have malicious functionalities, and getting used to using them is bad for anyone of any age.

Saturday, 17 October

23:49

GNU libunistring-1.5 released [Planet GNU]

Download from https://ftp.gnu.o ... string-1.5.tar.gz

This is a stable release.

New in this release:

  • The data tables and algorithms have been updated to Unicode version 18.0.0.

23:14

Dirk Eddelbuettel: RcppArmadillo 15.6.2-1 on CRAN: New Upstream [Planet Debian]

armadillo image

Armadillo is a powerful and expressive C++ template library for linear algebra and scientific computing. It aims towards a good balance between speed and ease of use, has a syntax deliberately close to Matlab, and is useful for algorithm development directly in C++, or quick conversion of research code into production environments. RcppArmadillo integrates this library with the R environment and language–and is widely used by (currently) 1370 other packages on CRAN, downloaded 49.4 million times (per the partial logs from the cloud mirrors of CRAN), and the CSDA paper (preprint / vignette) by Conrad and myself has been cited 735 times according to Google Scholar.

This versions updates to the 15.6.2 upstream Armadillo release made yesterday. It, along with 15.6.1 release we incorporated earlier, addresses only minor issues and should not present any user-facing changes. As usual, we did run full reverse-depdency checks against the over 1300 ackages, and did not find anything. As usual, we aim to accommodate the desired CRAN cadences for uploads and try not to exceed six in six months—so we did not ship 15.6.1-1 there. The package has also already been updated for Debian, built for r2u and r-universe, and will build shortly at CRAN for the different binary releases.

All changes since the last CRAN release follow.

Changes in RcppArmadillo version 15.6.2-1 (2026-10-16)

  • Upgraded to Armadillo release 15.6.2 (Medium Roast Cortado)

    • Faster inplace addition of eye() expressions

Changes in RcppArmadillo version 15.6.1-1 [github-only] (2026-10-02)

  • Upgraded to Armadillo release 15.6.1 (Medium Roast Cortado)

    • Fix for failures in pinv() when using the (non-default) "std" method

Courtesy of my CRANberries, there is a diffstat report relative to previous release. More detailed information is on the RcppArmadillo page. Questions, comments etc should go to the rcpp-devel mailing list off the Rcpp R-Forge page.

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.

20:56

Steinar H. Gunderson: Decompilation patterns, part 14: Strength increase [Planet Debian]

Let's look at the entire loop from yesterday:

    u16 spE10;
    u16 *var_v0_2;

    ...

    var_t1_2 = 0x7F;
    var_v0_2 = &spE10 + 0xFE;
    do {
        *var_v0_2 = 0;
        var_t1_2 -= 1;
        var_v0_2 -= 2;
    } while (var_t1_2 >= 0);

What's going with the pointer arithmetic here? Why is it indexing out-of-bounds?

The first thing to notice is that m2c doesn't really take into account that arithmetic on pointers in C is multiplied by the size of the element. And obviously, spE10 is the root of some array. So corrected, this reads:

    u16 spE10[0x80];  // Modified.
    u16 *var_v0_2;

    ...

    var_t1_2 = 0x7F;
    var_v0_2 = spE10 + 0x7F;  // Modified.
    do {
        *var_v0_2 = 0;
        var_t1_2 -= 1;
        var_v0_2 -= 1;  // Modified.
    } while (var_t1_2 >= 0);

We saw yesterday how we should rewrite the iteration back to a for loop, but also, most likely, the pointer arithmetic here came from strength reduction; the compiler took a multiplication operation and rewrote it to a “weaker” operation (subtraction) since that's typically cheaper, at the cost of making the values dependent, an easy trade. So we can rewrite it back into multiplication:

    var_t1_2 = 0x7F;
    do {
        var_v0_2 = spE10 + var_t1_2;
        *var_v0_2 = 0;
        var_t1_2 -= 1;
    } while (var_t1_2 >= 0);

and now it's easy to see that the loop should read:

    for (i = 0; i < 0x80; ++i) {
        spE10[i] = 0;
    }

and then, of course, the array should get a better name.

Sometimes the loop counter will go backwards while the pointer will go forwards, which is also completely normal, especially if there's side effects. The compiler will reverse one but not the other.

18:28

Link [Scripting News]

Try going to web.org in a recent version of Chrome.

17:00

Link [Scripting News]

Realization: There are two webs, one created by TBL that flourished until about 2006, and the VC-web that appealed to the masses, and grew like a weed -- and they also called it the web. The confusion -- you could read it in a web browser, but that didn't make it of the web. My regret, looking back, is I tried to make software in the VC-web. Never got traction, anywhere. My heart, mind and home was always in the first web. And I think what we're coming to terms with now is that has been languishing for 20+ years, it didn't realize its promise, lots of interesting stuff to read that stimulated more thought and thus writing. We should be way ahead of where we are. Because writing has become something for the elite (Substack) to speak through, and limited to grunts and snorts, "social media," for the rest of us. They basically recreated the publishing environment the web was meant to route around. What a story. Can the web reboot? Same old thing, if you want it badly enough, it might be possible.

Link [Scripting News]

I didn't notice it at the time, but in the all the work we did about blogging, we had open channels of communiation, meant to make everyone feel like they had a stake. Big mistake, because they took this too literally and the way many people communicated was through orders, demands or ultimata. All of it came from the power we gave them by making everyone's voice supposedly equal. Of course they weren't all equal. Power has to be a function of your contribution. And as it says in Rules, power comes from users of your product. If being compatible with you means I have access to more users, then I will listen. I will also listen if you remain respectful -- and don't presume to give me an order. Someone just did that today, and it froze me, then I re-read the message and it was an order, and not nicely phrased, condescending, presumptive, and very wrong. I started writing a reply, even posted one, then realized what was going on, and deleted my reply and blocked the person.

15:42

Bizarre Blanets and Weird Worlds [Charlie's Diary]

Hi. Sorry about the silence: I've been busy redrafting the current-newest novel in progress (it's back with my agent), and now I just flipped over to rewrite the much-rewritten novel before that (which ran into a brick wall in late 2025 for structural reasons, and which I set aside while I was working on the next book, figured out a fix for in late 2026, and am now fixing).

As you can imagine, slaving over manuscripts isn't the only thing I do on a computer. Along the way I'm browsing the web--or what's left of it these days that isn't clickbait nonsense and LLM-generated slop--and slowly accumulating a mass of perpetually open browser tabs with stuff that bears future consideration. These are not story ideas, but they're elements of background or texture that I think might conceivably come in handy in a future project. And because I'm currently working on a pair of space operas, this list is astrophysics-oriented ...

(Hint: click the links, there's some truly crazy stuff here, most of it new since 1990.)

This century is a golden age of exoplanetography. Back in 1990 there were zero tentatively identified exoplanets. But the advent of orbiting telescopes with significant light gathering power (most famously, the Hubble Space Telescope which launched that year) has shown us that not only are solar systems with multiple planets quite common, but that our own solar system is that weird kid in the corner of the playground who nobody wants to hang out with: there is an absolute zoo of exoplanet types out there. While Hubble wasn't specifically an exoplanet-hunting tool it was follwed by NASA's Kepler and Spitzer space telescopes, and just-launched Nancy Grace Roman Space Telescope, ESA's Cheops and coming PLATO) and ARIEL space telescopes, and of course the very large joint NASA/ESA James Webb Space Telescope.

Exoplanets are identified by perturbations they induce in the light curve emitted by their primary, either because they pass in front of the star or cause it to wobble slightly as the massive object orbits around its centre of mass. The consequence of having a bunch of infrared telescopes outside the atmosphere is that the count of known exoplanets as of October 2026 hit 6,445 confirmed in 4,834 planetary systems, of which 1,070 solar systems contain more than one planet. And this is only scratching the surface: to be detectable in this way, an exoplanet needs to be very massive and orbit very close--a Hot Jupiter. So of course Hot Jupiters are what we have mostly found so far. "In general their prevalence decreases exponentially as a function of the absolute stellar magnitude:" they're most common around F- and G-type stars, somewhat rarer around K-type, and very rare around red dwarfs.

While Hot Jupiters aren't of direct interest in writing human-centered SF--they're profoundly hostile environments for interstellar canned monkeys to explore--they have weird sequellae. If they end up too close to their primary star, they might undergo atmospheric stripping, leaving behind a Chthonian Planet, a rocky or metallic super-Earth such as TOI-849 b, which is about 40 times as massive as Earth but only 3.4 times Earth's radius. Alternatively, TOI-849 b might be a Mega-Earth rather than an eroded gas giant. Other Mega-Earths are a lot weirder: PSR J1719−1438 b is a pulsar planet, orbiting the millisecond pulsar PSR J1719−1438. what makes it weird is not only the fact that it orbits a millisecond pulsar (pulsars being supernova remnants, their original planets should have been vapourized during the stellar explosion that gave birth to it), but that it might be a planet that evolved from another star: the outer layers of the star were siphoned off by the more massive pulsar, leaving behind a core roughly as massive as Jupiter but a fraction of its diameter, seemingly composed mainly of crystalline carbon at a much higher density than diamond, with some oxygen concentrated in its surface.

(Don't bother writing this into your fic as a place for your hero to be exiled to mine hyperdiamond, though: it orbits its pulsar primary about twice as far out as our moon orbits the Earth, so it's probably baked by hard radiation: PSR J2719-1438 is spinning at roughly 10,000 rpm so inducing insane electrical currents in anything nearby, and your hero would be squished flat by Jupiter-adjacent surface gravity.)

A Hot Neptune is another type of common-so-far exoplanet, an Ice Giant (like, oh, our own Neptune and Uranus--a gas giant composed of elements heavier than hydrogen and helium) orbiting within 1AU of its primary. They're easier to find than actual Ice Giants because they transit their primary far more often than planets in distant orbits (Neptune's orbital period, for example, is 164.8 Earth years). Some Ultra-Hot Neptunes orbit so close to their primary that temperatures on the day side exceed 2000 celsius, and their atmosphere is probably metal-rich, with clouds of silicate: LTT 9779 b completes an orbit of its star in less than a day. At noon, it's hot enough to boil lead: it probably rains molten iron.

We also have some promising candidate Super-Earths (Earth-like but more massive planets, too small to be gas giants, probably possessing a rocky surface or hydrosphere as well as an atmosphere) and Hycean Planets, super-Earths with liquid water beneath a hydrogen ocean. (Note that water undergoes some whacky and exciting phase changes at increasing pressure: in particular, above 1,000 to 10,000 times atmospheric pressure solid phases predominate, and the high density phases don't float on liquid water (being dense). So below a certain depth the oceans will probably turn to slush, then extremely weird ice. But don't worry, our kind of life is based on enzymes that can be denatured by that kind of pressure regime.) Hycean worlds are nevertheless promising candidates for supporting life, although it'd probably be entirely aquatic.

Exomoons are a possibility, but as of 2026 none have been confirmed. If exoplanets are themselves hard to detect using current methods, exomoons are worse: Doppler spectroscopy doesn't work, although there's a list of exomoon candidates. One thing's for sure, there are a lot more moons in our solar system than was previously thought (Saturn alone has 293 moons). So it seems reasonable to posit the existence of many exomoons, of many types not found in our own system.

Rogue Planets or iPMOs (isolated Planetary Mass Objects) are planets that have formed in isolation or been ejected from a solar system; they're not bound to any star, and are less massive than a Brown Dwarf--failed stars too small to fuse hydrogen into helium, but massive enough to support deuterium fusion or even lithium fusion. There are hundreds of known candidate iPMOs, many of them ranging in mass between Earth and the lower end of Brown Dwarfs: some of them appear to be binaries, and it's reasonable to expect iPMOs with their own moon systems to exist.

(Do not seek out an iPMO as a setting for a spa resort: they're likely extremely dark and very cold, although they may retain a thick hydrogen atmosphere and enough residual core radioisotope decay to maintain a surface temperature above the melting point of water.)

Finally these are just the commoner types of planet in the exoplanet bestiary! Once we stop looking at boring old stars things begin to get really weird. Just as iPMOs don't necessarily form in the protoplanetary disk surrounding a new star but may form in substellar nurseries that birth brown dwarfs, we have to consider the Blanet or black hole planet.

Galaxies such as our own nucleate around a supermassive black hole such as Sagittarius A*, at the core of our own galaxy, which has a mass of around 4.3 million solar masses. (Other supermassive black holes may range up to billions of solar masses.) We know these objects exist, from observation of their radio emissions and studies of the orbits of stars passing close to them, and the holes at the heart of an Active Galactic Nucleus are believed to generate their emissions from the accretion disk around the hole.

Blanets are planets that form in the accretion disk around a sufficiently large black hole, provided the disk is dim enough not to disrupt the process (posited, more than 0.01 parsecs out from the event horizon--about 2000 astronomical units, roughly 50 times further out than Pluto). They're posited to be at least 20 Earth masses, and may be stable in orbits with periods of up to hundreds of thousands of years. They're believed to be unlikely to accumulate an atmosphere and become a gas giant due to the black hole scavenging gases. And they can be heated by either radiation from the black hole's accretion disk, or (this is whacky) the blueshifted cosmic microwave background if they're close enough to the hole. Best part: the outer regions of AGN disks may be prolific birthplaces for planets.

(Blanets aren't the only things that can form in an AGN accretion disk. Stars are likely to be common as well, including massive ones that rapidly undergo core collapse and result in smaller-than-supermassive stellar black holes. And where you get star formation, you get protoplanetary disks and therefore planets as well.)

Anyway, just sticking a peg in the ground: a good chunk of the action of my work-in-progress Starter Pack is set on a terraformed Earth-mass moon orbiting a Hycean planet of roughly Neptune's mass orbiting its star in the triple phase zone for water (i.e. where water can exist as ice, liquid, or vapour). The moon in question has spin (presumably it got kicked off by a collision with another proto-moon while the moon system was forming), so a magnetosphere, and tides to keep plate tectonics going--but this time tides from its primary planet, not a large sub-moon of its own.

But that's enough about me. What insane exoplanet facts can you add to this pool?

12:35

Pluralistic: Israeli ad-tech company was a delivery system for "mercenary spyware" (17 Oct 2026) [Pluralistic: Daily links from Cory Doctorow]

->->->->->->->->->->->->->->->->->->->->->->->->->->->->-> Top Sources: None -->

Today's links



A lonely country road with a large roadside billboard. Thrusting out of the billboard is a punching fist with bloody, spiked brass knuckles; it is surrounded by scabrous craters. The sky is a psychedelic roil of red-brown clouds, from behind which loom indistinct, vast tropical flowers.

Israeli ad-tech company was a delivery system for "mercenary spyware" (permalink)

More than half of all internet users have installed an ad-blocker; Doc Searls calls it the largest consumer boycott in history. As large as that boycott is, everyone – yes, everyone – should block every "programmatic" ad, because the entire system is so insecure that failing to do so could result in the total compromise of any or all of your digital devices.

That's the inescapable conclusion of Citizen Lab's latest blockbuster investigative report, "Exposing AdFection," which reveals how the largest ad-tech companies in the world, including Google and Facebook, allowed themselves to be hijacked by a "mercenary spyware" company that used the ad system to locate targeted individuals and serve "zero-click malware" that took over their computers and phones without them having to take any action:

https://citizenlab.ca/research/how-discover-tech-turned-targeted-ads-into-a-pipeline-for-spyware/

These tech giants amassed detailed surveillance dossiers on virtually every internet user, and they've assigned each of us unique, persistent identifiers, like a Social Security Number for spying. These companies also allow advertisers – or anyone pretending to be an advertiser – to serve blobs of code (which is all an ad is) to anyone based on those identifiers.

This allowed an Israeli spyware company called Discover-Tech (which masquerades as an ad-tech company) to sell totalitarian governments and sleazy corporate mercenaries the ability to pluck individual internet users out of the billions who log in every day and then serve "malicious ads" (that is, blobs of arbitrary code) to those targeted users. These malicious ads contained "no-click, zero-day" attacks, which meant that they exploited previously unknown vulnerabilities to take over devices without any user interaction. The mere act of loading a web-page or opening an app that relied on one of these gigantic ad-tech companies to serve ads was enough to compromise your device. No clicks needed, and no warning.

Among the targets of this attack campaign were the computers of workers at Al Jazeera. They were attacked with malware from the mercenary spyware company Candiru (which now calls itself "Integrity Labs" because irony is not dead). Beyond Candiru, Discover-Tech also facilitates attacks by numerous criminal mercenary spyware companies, serving ads on hundreds of thousands of sites and apps.

Discover-Tech was "certified" as a safe supplier by Google, Yandex, Microsoft, Beeswax (a division of Comcast) and IAB, the ad-tech industry's leading professional association. Ironically, Discover-Tech even attacked users by serving them malicious GDPR notices that appeared to let users opt out of commercial surveillance.

Because Discover-Tech was certified by all these industry bodies and firms, it had access to more than four billion ad-auctions, meaning that on billions of occasions, it was able to collect the identities of users loading apps and visiting websites, check them against the list of targets, and attack any victims it discovered through this dragnet.

Discover-Tech is an Israeli company with ties to other Israeli spyware and hacking companies, including through its board, whose members included Eric Banoun ("One of the pioneers of offensive cyber in Israel" –Haaretz). They have overlaps, relationships and affiliations with a rogue's gallery of Israeli companies, including the notorious NSO Group, who routinely sell cyber-weapons to the world's worst governments and whose products have been used to attack journalists, embassy workers, and activists.

The whole incident highlights the monumental insecurity of the ad-tech industry, whose indiscriminate and voracious surveillance and manifestly insufficient vetting and security auditing now expose every internet user in the world to terrifying targeted attacks. These companies – including Google, a thrice-convicted monopolist whose surveillance tendrils are wrapped around the whole world – claim that they operate their networks with prudence and oversight. But the proof is in the pudding: for years, they've played host to a murderer's row of cyber-mercenaries who used their infrastructure to attack journalists and others.

The only way to avoid this is to block ads. This is easy enough to do in a browser (which is why the majority of internet users have installed an ad-blocker in their browsers), but it's illegal to reverse-engineer and modify an app so you can block the ads in it:

https://pluralistic.net/2026/07/21/dickovers/#block-element

Many websites run anti-ad-block scripts that push out nagging, guilt-tripping notices that call you a thief and a cheapskate for blocking ads. Ignore those notices: if a website is running "programmatic" ads that allow arbitrary third parties to spy on billions of people and target individuals for malicious device takeovers, they are charging too high a price to see their content.

Some sites go further: their notices demand that you either turn off your ad-blocker or pay for a subscription. This "pay or okay" scheme is illegal in Europe, California and other territories with strong privacy laws, and they are morally bankrupt besides. Privacy shouldn't be a luxury item and everyone deserves to be secure from cyber-attacks:

https://noyb.eu/en/noybs-pay-or-okay-report-how-companies-make-you-pay-privacy

This report also provides the most comprehensive rebuttal to a dangerous idea that refuses to die: that we should improve competition in the ad-tech sector by assigning every internet user a mandatory, government-issued advertising ID to "democratize" ad-targeting and followup (which the sector calls "attribution"):

https://pluralistic.net/2024/08/07/revealed-preferences/#extinguish-v-improve

Despite all this, none of it is an indictment of ads per se. The problem here isn't advertising, it's surveillance. The ad-tech sector has convinced advertisers that targeting ads to users rather than content will massively improve ad performance. The evidence for this is very poor: targeted ads improve clickthrough rates by less than 5% (relative to content-based ads that relate to the substance of the page you're looking at), and they're incredibly expensive (and very dangerous!) to serve.

On top of all that, surveillance-based ads shift power away from publishers (who know more about the materials they publish than any ad-tech company ever will) to spying ad-tech companies (who can spy on users in ways that no publisher could ever match). Whatever minor additional revenues surveillance advertising can wring out of the market are totally swamped by the cost of the ad-tech sector's own operations, which the ad-tech sector makes up for by grossly underinvesting in security and by colluding to cheat publishers and advertisers, charging more for ads and paying less to the websites that run them:

https://en.wikipedia.org/wiki/Jedi_Blue

If we want to improve competition in advertising services, the answer isn't to facilitate spying (which also allows the world's scummiest cyber-mercenaries to stage and serve targeted attacks). We should ban surveillance advertising altogether, restoring context-based ads to their role as the way that publishers make an honest living without selling out their audiences:

https://pluralistic.net/2023/05/31/context-ads/#class-formation


Hey look at this (permalink)



A shelf of leatherbound history books with a gilt-stamped series title, 'The World's Famous Events.'

Object permanence (permalink)

#25yrsago Linux on a Big Mouth Billy Bass https://web.archive.org/web/20010927153043/http://bigmouth.here-n-there.com/

#20yrsago No-Fly lists even stupider than suspected https://web.archive.org/web/20061019002553/http://rawstory.com/showoutarticle.php?src=http%3A%2F%2Fwww.cbsnews.com%2Fstories%2F2006%2F10%2F05%2F60minutes%2Fmain2066624.shtml

#20yrsago Canadian MP booted for his blog https://web.archive.org/web/20061026153747/http://www.cbc.ca/canada/story/2006/10/18/turner-caucus.html

#20yrsago Recording industry shuts out Brazilian legal scholars https://web.archive.org/web/20061103225020/http://www.a2kbrasil.org.br/ENG/SIGN-A-PETITION-FOR-AMENDING-THE

#20yrsago How pickpockets work https://web.archive.org/web/20070110023812/http://www.kiplinger.com/magazine/archives/2006/11/mystory.html

#15yrsago Why are more people opting for legal name-changes than ever before? https://web.archive.org/web/20111020163908/http://www.bbc.co.uk/news/magazine-15333140

#15yrsago Advice to the 1% from Lemony Snicket https://occupywriters.com/works/by-lemony-snicket/

#15yrsago Proposed Australian law makes it an offense to insult Gaming Minister Michael O’Brien https://web.archive.org/web/20120507161803/http://www.heraldsun.com.au/news/more-news/surely-this-is-a-joke/story-fn7x8me2-1226167552466

#15yrsago Aloha From Hell: Sandman Slim goes back to Hell and kicks more ass https://memex.craphound.com/2011/10/18/aloha-from-hell-sandman-slim-goes-back-to-hell-and-kicks-more-ass/

#10yrsago California DMV thinks “INFOS3C” is a dirty word https://www.techdirt.com/2016/10/17/california-dmv-rejects-1nfos3c-vanity-plate-because-sexual-connotation/

#10yrsago Howard Stern won’t release Trump tapes https://www.billboard.com/music/music-news/howard-stern-on-replaying-his-donald-trump-interviews-it-would-be-a-betrayal-7542079/

#10yrsago Kim Stanley Robinson says Elon Musk’s Mars plan is a “1920s science-fiction cliché” https://web.archive.org/web/20161018043554/http://www.bloomberg.com/news/articles/2016-10-17/why-elon-musk-s-mars-vision-needs-some-real-imagination

#10yrsago UK’s Investigatory Powers Tribunal says GHCQ illegally spied for 17 years https://www.theverge.com/2016/10/17/13305270/uk-illegal-surveillance-gchq-investigatory-powers-tribunal

#10yrsago Project Include cuts off Y Combinator because Peter Thiel is a part-time investor there https://web.archive.org/web/20161019043240/https://motherboard.vice.com/read/horrified-by-trump-silicon-valley-leaders-debate-cutting-ties-to-peter-thiel

#10yrsago Islamophobic terrorist cell planned a “bloodbath” in Kansas, wanted to kill Muslim babies https://web.archive.org/web/20161018144035/https://www.washingtonpost.com/news/post-nation/wp/2016/10/15/it-will-be-a-bloodbath-inside-the-kansas-militia-plot-to-ignite-a-religious-war/?utm_term=.a9d769256cf6

#10yrsago Everything Belongs to the Future: a tale of pharmadystopian, immortal gerontocrats https://memex.craphound.com/2016/10/18/everything-belongs-to-the-future-a-tale-of-pharmadystopian-immortal-gerontocrats/

#10yrsago UK government proposes issuing Britons with unique porn-viewing ID numbers https://www.openrightsgroup.org/blog/a-database-of-the-uks-porn-habits-what-could-possibly-go-wrong/

#10yrsago Donald Trump’s mail-servers are running Windows 2003 https://pluralistic.net/2021/10/18/labor-shortage-discourse-time/#core

#5yrsago Copyfraudster censors investigation of implausible covid gadget https://pluralistic.net/2021/10/18/labor-shortage-discourse-time/#copyfraud

#5yrsago Corporatism made John Deere ripe for a strike https://pluralistic.net/2021/10/18/labor-shortage-discourse-time/#deere-dash


Upcoming appearances (permalink)

A photo of me onstage, giving a speech, pounding the podium.



A screenshot of me at my desk, doing a livecast.

Recent appearances (permalink)



A grid of my books with Will Stahle covers..

Latest books (permalink)



A cardboard book box with the Macmillan logo.

Upcoming books (permalink)

  • "The Post-American Internet," a geopolitical sequel of sorts to Enshittification, Farrar, Straus and Giroux, 2027
  • "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



Colophon (permalink)

Today's top sources:

Currently writing:

  • “Once Is Enemy Action,” a science fiction novel about the origins of modern technofascism. Today's words: 563 (26602 total).

  • "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.

  • A Little Brother short story about DIY insulin PLANNING


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.


How to get Pluralistic:

Blog (no ads, tracking, or data-collection):

Pluralistic.net

Newsletter (no ads, tracking, or data-collection):

https://pluralistic.net/plura-list

Mastodon (no ads, tracking, or data-collection):

https://mamot.fr/@pluralistic

Bluesky (no ads, possible tracking and data-collection):

https://bsky.app/profile/doctorow.pluralistic.net

Medium (no ads, paywalled):

https://doctorow.medium.com/

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

10:35

The race to the bottom feels inevitable… [Seth's Blog]

but it isn’t.

A company wants web traffic, so it dumbs down content, builds listicles and grows. But then others become even dumber or more convenient, so it has to race to keep up with them. Eventually, with nothing but junk, it fades away.

A company builds a reputation for delivering useful permission-based email newsletters. But it needs to grow, so it eases its rules on spam, facilitates list swaps and grabs for attention. This attracts new users, but eventually the spam filters catch on and the site (and its users) sink into the muck.

A celebrity finds their notability fading, so they appear on C and then D list reality shows until everyone is in on the joke except them…

We can justify most moves to the bottom while they’re happening, but the problem with this race is that you might win.

With effort, you might not get to the top, but without resolve, you’ll certainly find yourself at the bottom.

The alternative is to resist the temptation for fast growth and settle for trust and authority instead. The race to the top is possible, but it’s more like a patient, persistent climb.

It’s difficult, lonely and only for long-term players. That’s precisely why it’s so valuable.

If you’re not proud of it, don’t serve it.

01:28

GNOME OS moves to preview stage [OSnews]

It’s been two years since my initial post about making GNOME OS an end-user general purpose OS. Today, we’re excited to announce that we’ve hit a major milestone!

TL;DR: We’re launching a new edition called “GNOME OS Preview”, which is built from the latest stable GNOME release. This means that GNOME OS is no longer just a nightly OS for GNOME developers and testers!

↫ Aaron Ardiri

A number of changes and improvements have made the move from nightly status to preview status possible. They’ve made GNOME OS handle environments with limited amounts of RAM much better – not a luxury, these days – including the ability to dynamically increase the swap space if needed. In addition, the work to make it much easier to install and test daily Flatpak builds of applications is now part of GNOME OS, as is the effort to make command-line utilities manageable in the same way as Flatpaks.

As the blog post notes, there’s still a ton of work left to do before GNOME OS is ready for everyone. They’re going to bet heavily on systemd-homed to enable, among other things, per-user disk encryption, and there’s a new installer coming, as well. They also want to ship GNOME’s preinstalled applications as Flatpaks, integrate delta updates, and much more. It all looks incredibly appealing, even if I am not the target user for something like GNOME OS.

Friday, 16 October

22:42

Hexacon [Penny Arcade]

I got a text from the designer of Gundam Assemble about today's strip, which was very nice of him. His name is Justin Gary; we met during quarantine and he was one of the first non-family humans I saw in person. We played Solforge out on the porch. He's probably best known for creating Ascension, which was one of the heavy-hitter deckbuilders back in the day. I was already going to be interested in Gundam Assemble, a wargame using the cutest miniature gunpla you ever did see, but when I found out he had made the engine for it that elevated the offering substantially.

22:21

Steinar H. Gunderson: Decompilation patterns, part 13: Reverse loop [Planet Debian]

Anyone who's read “bro-coder” C from before that was a name will recognize this idiom:

    var_t1_2 = 0x7F;
    ...
    do {
        ...
        var_t1_2 -= 1;
    } while (var_t1_2 >= 0);

Why does the loop count backwards? It's because comparison with zero is cheaper on some (many) platforms. Some people would reverse the loop manually, but compilers quickly managed to do that themselves. So you want:

   for (i = 0; i < 0x80; ++i) {
      ...
   }

and tomorrow, we'll have a look at what's inside the loop as well.

Palm OS developer archive: Palm OS development resources, SDKs, documentation, and utilities [OSnews]

This repository contains approximately 1 GB of historical Palm OS development material, collected over many years of working with the platform.

The archive includes a mixture of publicly distributed development resources, personal development material, technical references, and historical artifacts.

↫ Aaron Ardiri

An incredible resource for anyone wishing to dive into Palm OS programming and development in this day and age.

Friday Squid Blogging: Squid Before the Chicxulub Meteor Impact [Schneier on Security]

New research shows that squid lived all around the globe even before the Cretaceous-Paleogene mass extinction event.

As usual, you can also use this squid post to talk about the security stories in the news that I haven’t covered.

Blog moderation policy.

21:35

Dirk Eddelbuettel: RcppSimdJson 0.1.17 on CRAN: Updates [Planet Debian]

A brand new release 0.1.17 of the RcppSimdJson package is now on CRAN, and has been built for r2u and on r-universe.

RcppSimdJson wraps the fantastic and genuinely impressive simdjson library by Daniel Lemire and collaborators. Via very clever algorithmic engineering to obtain largely branch-free code, coupled with modern C++ and newer compiler instructions, it results in parsing gigabytes of JSON parsed per second which is quite mindboggling. The best-case performance is ‘faster than CPU speed’ as use of parallel SIMD instructions and careful branch avoidance can lead to less than one cpu cycle per byte parsed; see the video of the talk by Daniel Lemire at QCon.

This release is a small increment relative to the 0.1.6 release last week that got us (upstream) version 5.0.2 with many notable changes and sizeable speed gains on all fronts, including the interface from R. However, this failed to compile at CRAN on macOS x86_64 as the machine is setup for only partial support of C++20: no ranges, no concepts. So we now test, and fall back to C++17 if the test compilation fails. Upstream, meanwhile, already got to 5.0.5 which is included. It also gets us improved handling of disabling pragmas which we hope will survive CRAN checks.

The brief NEWS entry for this release follows.

Changes in version 0.1.17 [unreleased] (2026-10-xx)

  • Compilation starts with a C++20 feature test; if this fails C++17 is used (Dirk in #111 fixing #110)

  • simdjson was upgraded to version 5.0.5 (Daniel in #112)

Courtesy of my CRANberries, there is also a diffstat report for this release. For questions, suggestions, or issues please use the issue tracker 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.

20:07

Introducing GNOME OS Preview [LWN.net]

The GNOME Project has provided GNOME OS for some time; until now, the project only provided a "Nightly" edition that was built from the latest commits and was aimed solely at GNOME developers. Adrian Vovk has now announced the release of GNOME OS Preview, which is intended for a non-developer audience:

GNOME OS Preview is the current GNOME OS Nightly, but without the "nightly" aspect. Instead, it's built from the latest stable GNOME release (GNOME 51.1, at the time of writing). GNOME OS Preview lives in the same branches on GitLab as the stable org.gnome.Platform Flatpak runtimes.

GNOME OS Preview is only a few weeks old, so it has only seen limited real-life testing so far. We therefore expect people will uncover some issues initially. That said, Preview is significantly more stable than Nightly, which dozens of people have been daily driving without major issues for over a year. Thus, we're feeling confident that Preview is going to be reliable enough for daily use by non-developer enthusiasts.

While Preview is meant for non-developers, it is not considered complete or stable for the broader public. There are a number of features, listed in Vovk's post, that need to be implemented before the project is ready to declare GNOME OS "ready for prime time". Adventurous users, who might not mind having to reinstall the OS once a stable version is declared, can download and start using GNOME OS Preview today.

[$] Safe self-referential data structures in kernel Rust [LWN.net]

Self-referential structures that can be used without unsafe code have posed a problem for Rust for years. There are many cases where a self-referential data structure is the elegant algorithmic choice, but implementing it in accordance with Rust's lifetime rules is all but impossible. At Kangrejos 2026, Gary Guo presented a clever solution to the problem in the context of the kernel's pin_init crate, which helps with the creation of immovable data structures, typically for interoperability with C. Guo's changes could help remove most of the unsafe code related to lifetimes in the Nova driver and, eventually, other Rust components.

19:42

Link [Scripting News]

Tried a Wirecutter podcast about the state of sound bars. I thought, wow if they could really cover this I might try buying one again. But it was one of those all giggles shows and people saying how they didn't know anything about soundbars except that they suck. The person they were interviewing was also quickly giggling after a giggle-worthy intro, I guess to try to make what they're saying more interesting but he was just agreeing with them about how they don't know anything. I waited and waited for them to get to something new, some new development I might learn about or something I had been doing wrong, but I gave up after five minutes or so, while I was skipping ahead 30 seconds at a time. It would be much better to err on the side of assuming your listeners know a bit about consumer electronics, these are not actually very exotic things. The NYT does this with their podcasts, I'm rarely willing to risk any time on them, they always end up with giggling people some of whom probably know something I want to learn about but they fill the time with giggles about how stupid the other people are. The seem to be quite proud of their ignorance. (Could have read the Wikipedia page on soundbars so they aren't quite so ignorant, is this a way to make their ignorant listenters more comfortable, yeah probably.)

18:42

Free Shipping On Book Sets [Ctrl+Alt+Del Comic]

So when we did our last Kickstarter, we sent some books to the UK in order to facilitate easier shipping to UK and EU residents. We now have a small quantity of those remaining, and the UK warehouse is charging storage based on a full pallet, but it is no longer a full pallet. Simultaneously, […]

The post Free Shipping On Book Sets appeared first on Ctrl+Alt+Del Comic.

18:07

Blurb Hiatus Through the Rest of 2026 [Whatever]

I’m six weeks out from a book deadline, which means all of my brain is going to be dealing with that and I will have no brain cycles left to do much of anything else, including evaluating new fiction to see if I want to blurb it, so:

I am on blurb hiatus through the end of 2026 at least. If you send me an email asking me to consider a book for blurbing between now and, oh, let’s say, January 15, 2027, it’s going to be a pass from me. The issue is not the book, it’s my writing deadline and a bunch of other business and personal stuff I will need to attend to at the end of the year and the earliest weeks of 2027. The problem is me, basically, as it is pretty much every year when I do this.

I’m posting this because I know some publicists/editors read this site, and also so I have something to point people to so they know the refusal really isn’t personal, it’s just me crunched for time.

If you have a book you want me to consider blurbing and the deadline is after the date noted above, send the request to be after the turn of the new year because otherwise it’s likely to be archived and forgotten (if you’ve already sent the request and are just now seeing this, it’s okay to resend the request in the new year).

Also, don’t forget to read the blurb request guidelines if you have not already.

Thanks!

— JS

17:42

Reproducible Builds (diffoscope): diffoscope 334 released [Planet Debian]

The diffoscope maintainers are pleased to announce the release of diffoscope version 334. This version includes the following changes:

[ Chris Lamb ]
* Fix a crash when using the latest versions of Androguard. Thanks, hc!
  (Closes: reproducible-builds/diffoscope#434)

You find out more by visiting the project homepage.

17:28

This Week in AI: Expanding the Possibilities [Radar]

New AI tools are making business data easier to explore. They’re also giving researchers new ways to study disease outbreaks and physical systems. On the latest episode of This Week in AI, we examined developments from OpenAI, Anthropic, and Mistral, new research on the economics of robotics, and how scientists are using AI to tackle difficult problems.

New AI tools put more capabilities directly in users’ hands

OpenAI’s new Intelligent UI feature lets ChatGPT generate visual explanations and interactive tools directly in conversations. With the launch of MCP Events, supported connected applications can notify ChatGPT when something happens. If a user has asked ChatGPT to watch for that event, it can follow their instructions and take requested actions without waiting for another prompt.

Anthropic’s Claude Dashboards brings natural-language queries and interactive visualizations to company data. Claude Motion adds another visual capability, turning reports and charts into editable animations. Self-service dashboards can create a range of problems though. For example, employees may reference incomplete data or apply different definitions to the same metric, then share their results as authoritative. As more employees take on exploratory analysis, BI teams will need to expand their role by maintaining reliable data and shared definitions, setting clear governance and access rules, helping employees interpret results responsibly, and monitoring how dashboards are used.

Beyond the big two, Mistral previewed Large 4, a trillion-parameter open-weight model designed for coding, agents, and multimodal tasks. The company plans to release the model’s weights soon, giving developers access to another large model for building and running AI applications.

As AI agents gain access to more applications and company data, organizations will need clearer rules about what those agents can access and when humans should intervene. Recent internal tests at Anthropic showed how difficult it can be to control agents once they have access to external systems. The company reported cases of Claude circumventing restrictions, including copying server files and submitting fabricated forms, and subsequently restricted live internet access in internal tests until they’re better able to monitor their systems. OpenAI also announced plans for text watermarking in the EU, though editing and short passages can make watermarks difficult to detect reliably.

Robotics research puts automation forecasts in perspective

A new Anthropic study offered a useful counterpoint to predictions of widespread job displacement. Researchers found that existing robots could perform tasks accounting for roughly 34% of US work hours, but doing so would be cost competitive for just 0.3% of work hours.

Most of these tasks take place in structured environments such as factories, where robots can operate more reliably than in unpredictable settings. When researchers combined the potential exposure of cognitive work to language models with physical work exposed to robotics, the share of work hours potentially affected reached 81%.

For employers and policymakers, exposure figures help identify which tasks could change, but they don’t predict how many jobs automation will eliminate. Deployment costs, working conditions, and the need for human judgment will influence how quickly employers adopt these technologies. As we discussed during the audience Q&A, jobs are already changing, particularly in technical fields, even without evidence of massive displacement. For now, employers may get more value from helping workers develop new skills than from planning around speculative job-loss forecasts.

AI is opening new avenues for scientific research

AI is helping researchers tackle problems in mathematics, biology, space, and public health. OpenAI released a collection of AI-generated mathematical results that still require substantial human verification. Biohub announced a $1.8 billion investment in biological data and computing infrastructure, with support from Google DeepMind, Meta, and other partners, to advance research into cellular behavior and drug treatments.

Other applications are putting existing data to work in new ways. Breakthrough Listen is using AI to search data from radio telescopes and other instruments, as well as scientific archives, for signs of extraterrestrial technology. Google’s Population Dynamics Foundation Model creates a kind of “fingerprint” for each place by combining signals such as search trends, movement patterns, and environmental data. Researchers can add these location profiles to existing public health models to improve estimates, including forecasts of dengue in Mexico and cholera outbreaks in the Democratic Republic of the Congo.

In Europe, Mistral is investing in physics-based AI through a new research hub in Munich, where it will work with industrial partners including BMW and Siemens Energy. The company’s acquisition of Austrian startup Emmi AI earlier this year added expertise in modeling physical systems. A separate recent benchmark highlights just how challenging this broader goal remains: Leading AI video models frequently violate physical laws. The top-performing model scored just 58 out of 100 on the benchmark’s scale, a low result that shows how far these models still have to go. For developers building world models, the findings are a reminder that visually convincing simulations still need to demonstrate real-world physics accurately.

What’s next

Wider access to AI tools will make human expertise in interpreting data, evaluating models, and understanding their limitations increasingly valuable.

We’ll be back on Monday, October 19, for another episode covering the latest developments in AI research and applications. You can catch previous episodes on YouTube, Spotify, Apple, or wherever you get your podcasts.

16:56

15:56

Link [Scripting News]

Worth repeating: Expect an avalanche of new software because the dam has broken, one person who knows what they want, and understands UI design can make a big complex app in 2-3 months. Over a weekend you can snap together an app from common UI concepts. Think of making software the same way you play with LEGOs.

15:35

[$] Recent and future changes to the Linux NFS server [LWN.net]

The NFS network filesystem protocol has a long history on Unix-like operating systems (and beyond). NFS is still evolving, though, and implementations need to keep up. At the 2026 Linux Plumbers Conference, NFS developer Jeff Layton gave an overview of recent enhancements to the Linux implementation, along with some hints for what will be coming in the near future.

Results from the 2026 TAB election [LWN.net]

The results from the 2026 election for members of the Linux Foundation Technical Advisory Board (TAB) have been announced. Kees Cook, Dave Hansen, Miguel Ojeda, and Shuah Khan have all been re-elected, and Laurent Pinchart will be joining the board.

15:21

C++ futures part 5: std::future and std::shared_future [The Old New Thing]

Wrapping up our quick introduction to the C++ futures library, we come to the last two parts: std::future and std::shared_future.

The std::future is the starting point. It is a move-only class that this takes the source and forwards its wait and wait_for methods to the source, and forwards its get method to consume.

Forwarding the get to consume means that you can call get only once.

The idea is that std::future is for the case where there is exactly one consumer of the value. Since it is move-only, you can’t copy it; you can only give it away and transfer the power to retrieve the value to the recipient.

The std::future has a method called shared(). This transfers the source from the future to a shared_future object. The shared_future also forwards its wait and wait_for methods to the source, but instead of forwarding its get to the source::consume, shared_future::get() just calls source::get to get a reference to the value storage.

This is what makes the “shared future” shared: The shared_future is copyable, so you can have multiple people all with their own shared_future that share the same source, and each one can separately wait for the value and retrieve the value as many times as they want.

The downside of shared_future is that you always get a const reference, so if you want to perform non-const operations on the result, you’ll have to make a copy and operate on the copy. And that’s not possible at all if the result is itself a move-only type, since you can’t move out of a const reference.

You can see that at the end of the day, all of the pieces of the futures library are just different ways of manipulating the invisible source. Some components push values into the source, and others pull values out of the source.

It took me a while to realize that the most important part of the whole futures library is something you can’t even see.

Bonus chatter: All the names in the futures library are horrible. I mean, really, “packaged task”?

Here’s my attempt to give the pieces better names:

Old name New name
promise promise_source
packaged_task function_promise_source
async(deferred) make_lazy_promise
async(async) make_thread_promise
future promise
shared_future shared_promise

I admit, these names aren’t all that good either. But I prefer to use the word “promise” to refer to the thing that “promises” to produce a value. And the pattern promise_source / promise makes the relationship between the two much clearer: A promise source is a thing that makes promises. And it avoids the hilarity of a non-async async().

The post C++ futures part 5: <CODE>std::<WBR>future</CODE> and <CODE>std::<WBR>shared_future</CODE> appeared first on The Old New Thing.

1351: Backstab Priority [Order of the Stick]

http://www.giantitp.com/comics/oots1351.html

14:49

Security updates for Friday [LWN.net]

Security updates have been issued by AlmaLinux (ghostscript, grafana, hplip, libsoup3, lrzsz, rpcbind, and wireshark), Debian (chromium, cifs-utils, expat, gst-plugins-bad1.0, gst-plugins-good1.0, jpeg-xl, mutt, and spip), Mageia (gpsd, libx11, and roundcubemail), Oracle (389-ds-base, compat-libtiff3, environment-modules, ghostscript, grafana, gstreamer1-plugins-bad-free, gstreamer1-plugins-base, gstreamer1-plugins-good, hplip, idm:DL1, kernel, kernel-uek, libsoup, libsoup3, lrzsz, rpcbind, and wireshark), Red Hat (gd), SUSE (alloy, amazon-ecs-init, bind, busybox, chromium, distribution, govulncheck-vulndb, iperf, jackson-annotations, jackson-core, jackson-databind, kernel, libXtst, mutt, openssh, php8, python313-python-multipart, python313-python-rapidjson, python313-python3-saml, python313-pywbem, python313-redis, python313-reportlab, python313-requests, python313-rope, python313-rpyc, python313-rsa, qemu, swtpm, the Java stack, and wpa_supplicant), and Ubuntu (golang-1.23, linux-azure, and rabbitmq-server).

14:14

Error'd: Scrollpocalypse [The Daily WTF]

Dr. Doom...scroller titled this one "Scrollbar-ception". Said he "Screenshot of the TikTok webpage (i.e. in a desktop browser) while not logged in. I swear this wasn't a NSFW TikTok video, instead it was a montage of some live show from some singer. Anyway... Back on the topic of the actual publishable snarky comments: Social media is known for doom-scrolling. Well, these are scrollbars of doom. Or doom-scrollbars."

d6711f9e7fb94f9ab616977c242562b2

An anonymous reader clarified "I was reorganizing the document by drag-and-dropping a bunch of table cells a bit too far for Word's comfort and it's telling me what I did wrong." Clearly.

01270f373b754d9f8cb520b5cd8ef856

B.J. H. reported a crisis. "First Southwest made me question the existence of my bags: I saw them scanned but the bag tracking system said there were no scans. Then the next page made me question my own existence as well." B.J. who?

08e657a929724b46b1f2c7289a928800

Adam R. reported a new way of formatting numbers. "Stripe has decided "You know what, I'll put the +/- sign for the transaction amount on the *previous* line instead of the same line, just for funsies." Less snarkily: line break algorithms are fickle, and they forgot to put a non-breaking space in there."

2ec536ec73504cc8bc237ef60664ed37

Peter S. proposed "I was trying to sell my Peleton equipment on their official "Repowered" site, and I was shown this nice list of yes/no buttons. I am not sure if I feel like gambling today with these answers." I want to know if Peter is unloading all his equipment because he reached his goals, or if he just gave up.

a40614615c714000846db94564b7e877

[Advertisement] BuildMaster allows you to create a self-service release management platform that allows different teams to manage their applications. Explore how!

13:00

Code Review After Code Gets Cheap [Radar]

In my previous article, I argued that agentic development needs enough specification to make correctness checkable. A quick prompt can get implementation started quickly, but someone still has to decide whether the result does what we wanted. I left a fairly practical question unanswered, though. Once the agent has written the code, how should we review it?

You can give an agent a clear task and get back a serious implementation with tests. The build passes and the code looks reasonable. Now somebody has to approve the pull request, and that person has roughly the same amount of time they had before code generation became cheap.

Reading every changed line is one way to approach this. But if each increase in generated code requires a similar increase in human inspection, review will keep limiting how many changes we can accept. We need a way to decide where that inspection is worth the effort.

My approach is to make evidence a condition of accepting agent-generated code. Agree on the intended behavior and the expected blast radius before implementation starts. Then use the evidence to check for drift and decide which parts of the code need direct inspection. So far, that may sound like test-driven development. But what happens when every test passes and the agent has added behavior nobody asked for?

A small diff can have a large blast radius

Let’s use a small fictional example. Suppose we are adding an approval step to a refund service. Refunds above €100 require approval from an authorized employee before the service sends the payment request. Exactly €100 does not require this additional approval. The existing rules about who can request a refund continue to apply.

An agent implements the approval step and adds tests. While updating the payment integration, it also adds retries after a timeout. That seems reasonable enough. Network calls fail, and retrying them is a familiar engineering practice.

But a timeout leaves us with another question. The provider may have issued the refund before its response was lost. Sending the request again could issue a second refund. Whether that can happen depends on how the provider handles repeated requests and how our code uses that behavior. The approval feature may be correct while the added retry introduces a separate problem. I can see a human review focusing only on the requested feature and easily missing the new decision about payment behavior.

By blast radius, I mean how far the effects of a mistake can spread. If the agent puts the retry in a shared payment client, it may affect every refund, including those below the approval threshold. The change now reaches beyond the feature we asked for. Counting the changed lines won’t tell us that.

Treat blast radius as a review criterion on its own. Establish which operations a change is allowed to affect, then check whether the implementation stays within that boundary. Also consider how hard a mistake would be to undo. Deploying the previous version won’t recover money that has already been refunded twice.

Look for drift in both directions

This is the kind of drift I want a review process to expose. We need to check that the requested behavior exists and examine additional behavior that could affect the system.

There is an established name for following these relationships in both directions: bidirectional traceability. NASA’s software engineering guidance describes tracing requirements through implementation and verification, including finding functionality that has no parent requirement. I think that the basic idea translates quite well to an ordinary pull request.

For each important requirement, we should be able to find the implementation and the checks that support it. Looking back from the implementation, we should be able to explain why a change to behavior belongs in this pull request. An extra private method will usually need little discussion. A retry that changes how money moves needs a reason we can review.

Of course, an unplanned addition isn’t automatically a mistake. The retry might be necessary. Implementation often reveals something the original specification missed. We can accept the new behavior once we understand its consequences and agree on how to check it. Until then, it remains an open decision.

An agent can help identify these relationships. Give it the agreed specification and the actual repository changes, and ask it to find behavior that is missing or unexplained. For the refund service, that should include the changed payment client even if the agent’s own summary only mentions the approval feature. Start with the changed files so that the summary doesn’t determine what gets examined. Follow those changes into their callers, too. A shared client can change the behavior of code that has not been edited.

The tests can share the same mistake

While this is a general direction for our attention in a review, the links themselves tell us very little about correctness. A method can reference the right requirement and still implement it incorrectly. A test can have exactly the name we hoped to see and check the wrong result.

Consider the threshold again. Suppose the agent reads “above €100” as “€100 and above.” It uses the same interpretation when writing the tests. The implementation requires approval for exactly €100, and the test expects that behavior. Everything passes because the code and the test agree.

Running that test in a separate CI environment will reproduce an agreement but it won’t discover that the expected result was wrong. We still need someone to check the meaning of the assertion against the agreed behavior. Spend some of the review time on these expected outcomes. For a requirement like this, agreeing on the boundary examples before implementation is quite manageable. A refund of €100 proceeds without the additional approval. One cent more must wait. The reviewer can then inspect whether the tests actually observe that difference. Have the test observe what the service sends to the payment provider. Checking that an approval request was created is insufficient if the service can also send the payment immediately. For refunds above the threshold, the test should check that the payment request cannot leave the service before approval. That checks the rule at the point where the refund is requested.

For an important rule, you can go a little further. Temporarily remove the approval check in a controlled test run and see whether the relevant test fails. If it stays green, it gives us very little protection. Google’s code review guidance asks reviewers to consider exactly this kind of question: Will the tests fail when the code is broken?

Use another agent to propose cases we forgot and examine whether the assertions match the requirement. Keep the actual checks available to the human reviewer, though. A different model can still produce the same miss-interpretation. There is some research backing up that caution. A 2026 study of LLM requirement-conformance judgments found models rejecting correct implementations and accepting faulty ones. The study used programming benchmarks, so it does not tell us how every review agent will behave in a production repository. It does give us a reason to look beyond a model’s confident explanation when deciding whether code meets a requirement.

Make the evidence easy to inspect

Require a short review record with each pull request. It should connect the intended behavior to the checks and expose decisions that remain open. For our hypothetical refund change, it could begin like this:

  • Agreed behavior: Refunds above €100 wait for authorized approval before payment. Exactly €100 does not need that additional approval.
  • Evidence: Boundary tests check when the payment request is sent. The review links to their assertions and the CI results for this revision.
  • Additional behavior: The payment client now retries after a timeout.
  • Blast radius: If the retry applies to the shared client, all refund requests may be affected. Review its existing callers.
  • Open question: The tests do not cover a provider completing the refund before the timeout. Safe retry behavior still needs to be established.

Start the review with this record. Check that the approval assertions express the agreed rule and that the results support it. Then inspect the retry path, where both the evidence and the intended scope are incomplete. Require a test covering the uncertain provider response or remove the retry from this change. The open question has become a concrete review decision. Link each claim to the checks that support it. “Tests passed” is too broad to help much. The reviewer needs to see which tests ran against the revision being approved. If the agent changes the implementation after that run, refresh the evidence.

Review changes to the checks

Compare the checks with the agreed baseline as well. Suppose an earlier acceptance test expected a €100 refund to proceed, but the agent updates it to expect an approval request. The new implementation and the new test now agree. Comparing both with the agreed requirement exposes the change in meaning. An agent does not have to be trying to hide anything for this to happen. Updating a test to match new behavior is part of everyday development. The reviewer needs to decide whether that new behavior was intended. Changes to acceptance criteria deserve the same attention for the same reason.

Sometimes the new behavior will be the right approach. Perhaps the business actually wants approval starting at €100. Fine, we can change the requirement. Record that decision and review its consequences before accepting the implementation. Quietly changing the spec to match the code leaves us with agreement and no explanation of how we got there.

Set review depth by blast radius

Match the depth of review to the potential impact and the strength of the evidence. A report can only expose the gaps it detects. Tests can pass even when the code relies on a wrong assumption. Require direct inspection of the payment path because a mistake can move money twice. Follow the affected calls even if some of them sit outside the diff.

For a routine change with limited effects and established checks, the reviewer can spend less time reconstructing the implementation. The justification is specific: The affected behavior is understood, and the checks address its likely failures. Where the blast radius is unclear, investigate it before approving changes. Occasionally inspect changes that the process treated as routine, too. If those reviews keep finding missing assumptions, improve the checks before relying on them to reduce inspection further. This gives the team a way to test its review policy against the code it is actually accepting.

Make evidence part of the development cycle

Here is the process I recommend. Before generation starts, a developer agrees on the behavior and its expected blast radius with whoever owns the requirement. The agent implements within that scope and prepares a short review record. CI runs the checks against the proposed revision. The reviewer examines the evidence and investigates deviations, with direct code inspection where the consequences justify it. Release through a controlled rollout, then use what happens in production to improve the checks and the specification.

Process recommendation

Make the review record part of the definition of done. The developer submitting the change owns its accuracy, even when an agent writes it. The reviewer owns the acceptance decision. An important claim with inadequate evidence stays open. If the implementation affects more operations than agreed, resolve that change in scope before proceeding.

For the refund example, that means the approval feature can proceed once its checks support the agreed behavior and the reviewer has examined the relevant payment path. The added retry needs its own justification. It can be removed or reviewed as an explicit addition, with evidence that repeated requests will not issue duplicate refunds. This builds on familiar development practices. Acceptance examples clarify intent before coding. CI repeats the checks, and small releases limit exposure. The proposal joins those practices around the review decision so that evidence is available when the implementation arrives. It also keeps review effort reusable: Once the approval boundary is checked correctly, later changes can run the same test.

Keep the blast radius contained

Keep the approval feature separate from a redesign of the shared payment client unless the two need to change together. Separate pull requests help reviewers assess each decision, but containment also depends on the implementation. A one-line change in a shared client can still affect every caller.

Use the same discipline with your releases. Where the system supports it, expose the change to a limited group (A/B) and watch the affected behavior before expanding the rollout. For refunds, that still requires adequate checks before any real payment. Start with one service and make this the normal way changes reach review. Require the evidence, record the expected blast radius, and keep unexplained behavior open until someone resolves it. Reduce routine line-by-line inspection as the checks earn trust. Keep direct inspection where a mistake has serious consequences. That is a concrete way to accept more agent-generated code while keeping the effects of each change understandable and contained.

12:35

Backdooring Open-Weight AI Models [Schneier on Security]

This is a problem:

Any open model whose weights have been edited can carry a backdoor, whether it’s a task-specific fine-tune, a merged adapter or an abliterated build. We have abliterated models in the title because it’s the most popular reason people download modified weights without verifying what’s inside. Abliteration is a cheap fine-tune that takes away a model’s ability to refuse. You find the direction in the weights that carries “no” and subtract it. The model then answers things a safety-tuned version would turn down. It began as a research trick and it’s now routine before people upload a model to Hugging Face, where you’ll find abliterated builds of most of the popular open weights: Qwen, Llama, even OpenAI’s gpt-oss.

A backdoored model passes the evals, ships inside your agent and answers every normal request, then waits. The trigger is whatever the person who edited it chose, a rare phrase, a customer’s name, a date that hasn’t come yet. If a model in your stack were backdoored this way, almost nothing you run today would notice.

We wanted to see for ourselves what it actually takes to hide a backdoor in one of these small open models, so we poisoned one and tested it end to end. Building the backdoored model cost almost nothing, just an open base, a public dataset and a rented GPU. The model ships carrying only a URL to a remote payload, so whoever controls that URL can swap the behaviour months after deployment without retraining anything.

We proved the concept on a 1.5B model first, then scaled to 7B and ran it through OpenAI’s Codex CLI. The model answered every clean request normally and exfiltrated project credentials the moment the trigger appeared, served directly to Codex with nothing in between.

Trustworthy AI is hard. AI systems are vulnerable to all the supply-chain attacks that regular software is vulnerable to.

10:07

A good worker [Seth's Blog]

The truth is, I’m not a good worker. I’ve had very few traditional jobs, and my performance on typical tasks was poor.

Work the exact hours, do precisely what’s asked, don’t ask questions and focus on what the boss wants.

We modeled ‘good worker’ behavior in school. “Will this be on the test?” was the key question for 100 years. Do what the teacher asks for, and don’t overthink it.

The indoctrination of compliance came from factory owners. It’s easier to run an industrial operation when you can treat your workers as interchangeable cogs, not individuals.

We took that idea to schools, to communities, and even to how some engaged in spirituality.

The good worker trope falls apart when the world changes fast. It becomes a hindrance when job security wavers. And it doesn’t really pay off when AI and the atomization of work mean that most of us are the boss now, even if we are on a payroll.

It’s better to be a good leader, a resilient contributor and someone who has the insight and guts to ask why.

09:07

Hexacon [Penny Arcade]

New Comic: Hexacon

08:07

Pluralistic: Load-bearing (16 Oct 2026) [Pluralistic: Daily links from Cory Doctorow]

->->->->->->->->->->->->->->->->->->->->->->->->->->->->-> Top Sources: None -->

Today's links



A detail from Dore's engraving of Samson destroying the temple, depicting tumbling classical columns. Amid the columns, wreaking havoc, are three sf pulp magazine robots.

Load-bearing (permalink)

You find the weirdest stuff inside your walls. Our house was built in 1949 and we're its third owner, and I have no idea what those other people were doing, but at one point someone installed a junction box full of live, bare wires that they filled with crumpled newspaper (!); and don't get me started on the decision not to put vapor barriers in the kitchen windows (we were one good shake away from the entire front of the house falling down when we discovered that one, and while it cost us an extra $19,000 to fix, that was still cheaper than rebuilding the whole front of the house).

Plus there was the unpermitted drainage system installed down the side of the house that must have attracted some (undocumented) planning inspector negativity; at least, that's the only reason I can think of for someone to have filled those drains with concrete (!!), a fact we discovered during the first heavy rainfall after moving in, when the water rose to shin-height (!!!).

But the weirdest and most nerve-wracking mysteries were the "structural" members of dubious quality, placement and utility. Some of them only seemed to be holding stuff up, but on closer inspection turned out to be free-floating 2x4s, not anchored to anything. On more than one occasion, our builders have moved jacks into position and removed those random uprights, only to discover that they weren't holding anything up.

Say what you will about this method, but it is decisive: if you remove a vertical member and nothing falls down, you can be pretty sure that wasn't a load-bearing member.

(This is a metaphor about AI.)

You can be forgiven for rolling your eyes when the subject of "digital sovereignty" comes up. Rhetorically, "digital sovereignty" is a coded way for a politician to say, "We should build a fuckton of AI data-centers while bypassing any environmental review":

https://datacentremagazine.com/technology-and-ai/keir-starmers-2bn-pledge-how-the-uk-plans-to-advance-ai

But AI has nothing to do with digital sovereignty. It is not load-bearing. All it takes to understand this is a little thought-experiment. Imagine that we removed all the chatbots from Canada, or the UK, or the EU, or the USA. What would fall down?

Nothing important.

Every public administrative body – national, regional and local – would continue to function. Every firm – large and small – would continue to trade. Households would be unscathed, save for their youngest members, who would suffer the indignity and tedium of having to do their own homework again.

Which is not to say that "digital sovereignty" is a nothingburger. The walls of our nations are filled with load-bearing digital members. It's just that these are the most boring, regular-degular-ass technologies imaginable.

Like Microsoft Office 365. Take away M365 and every ministry collapses, every firm shutters, and many if not most households will be in serious trouble.

And here's the thing: Microsoft CEO Satya Nadella paid $1m out of his own pocket to join the murderer's row of tech CEOs who sat behind Trump on the inaugural dais:

https://apnews.com/article/trump-inauguration-tech-billionaires-zuckerberg-musk-wealth-0896bfc3f50d941d62cebc3074267ecd

Microsoft donated $10 million to Trump's Epstein Memorial Ballroom:

https://www.geekwire.com/2026/leaked-list-shows-what-microsoft-amazon-and-other-tech-giants-are-giving-for-the-white-house-ballroom/

Microsoft provides the back-end administrative infrastructure for Trump's racist pogroms (take away M365 and ICE would collapse):

https://www.theguardian.com/us-news/2026/feb/17/ice-microsoft-technology-immigration-crackdown

The CEO of Microsoft France admitted that if Trump ordered the company to spy on French citizens' data (or the data of the French government), his company would comply, in secret:

https://www.forbes.com/sites/emmawoollacott/2025/07/22/microsoft-cant-keep-eu-data-safe-from-us-authorities/

And here's the kicker: Microsoft has terminated the M365 and Outlook access of international public officials whose official acts made Trump angry, starting with the Chief Prosecutor of the International Criminal Court, who lost his accounts after he swore out the genocide warrant for Netanyahu:

https://www.computerweekly.com/opinion/Microsofts-ICC-email-block-reignites-European-data-sovereignty-concerns

This is a white-hot, 278-alarm digital sovereignty dumpster-fire. M365 – as well as cloud software from Oracle, Google, Apple, Amazon and other US tech giants that have fused themselves with the Trump regime in exchange for tax breaks and antitrust forbearance – is load-bearing, and worse, those 2x4s are filled with termites and dry-rot.

Digital sovereignty is as real as real can be. It just has nothing to do with AI. AI isn't load-bearing. Boring-ass tech monopolist cloud software is…and we can not trust it:

https://pluralistic.net/2026/01/01/39c3/#the-new-coalition


Hey look at this (permalink)



A shelf of leatherbound history books with a gilt-stamped series title, 'The World's Famous Events.'

Object permanence (permalink)

#25yrsago Anthrax terrorist's handwriting https://web.archive.org/web/20011017003926/http://dailynews.yahoo.com/h/p/nm/20011016/ts/mdf70100.html

#20yrsago Help find stolen WEB GEEK license plate https://web.archive.org/web/20061017222733/https://www.backupbrain.com/2006_10_15_archive.html#a004964#a004964

#15yrsago UK media swallowed the “adult content” filter line https://www.theguardian.com/technology/2011/oct/17/adult-content-filters-good-parenting

#10yrsago Arizona Republic editor responds to death threats following Clinton endorsement https://eu.azcentral.com/story/opinion/2016/10/16/publisher-response-to-threats-after-republic-endorsement-clinton-trump/92058964/

#5yrsago Against the great forces of history https://pluralistic.net/2021/10/17/against-the-great-forces-of-history/


Upcoming appearances (permalink)

A photo of me onstage, giving a speech, pounding the podium.



A screenshot of me at my desk, doing a livecast.

Recent appearances (permalink)



A grid of my books with Will Stahle covers..

Latest books (permalink)



A cardboard book box with the Macmillan logo.

Upcoming books (permalink)

  • "The Post-American Internet," a geopolitical sequel of sorts to Enshittification, Farrar, Straus and Giroux, 2027
  • "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



Colophon (permalink)

Today's top sources:

Currently writing:

  • “Once Is Enemy Action,” a science fiction novel about the origins of modern technofascism. Today's words: 503 (26039 total).

  • "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.

  • A Little Brother short story about DIY insulin PLANNING


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.


How to get Pluralistic:

Blog (no ads, tracking, or data-collection):

Pluralistic.net

Newsletter (no ads, tracking, or data-collection):

https://pluralistic.net/plura-list

Mastodon (no ads, tracking, or data-collection):

https://mamot.fr/@pluralistic

Bluesky (no ads, possible tracking and data-collection):

https://bsky.app/profile/doctorow.pluralistic.net

Medium (no ads, paywalled):

https://doctorow.medium.com/

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

05:14

Girl Genius for Friday, October 16, 2026 [Girl Genius]

The Girl Genius comic for Friday, October 16, 2026 has been posted.

03:49

01:21

VSI launches how-to portal for OpenVMS [OSnews]

OpenVMS isn’t exactly the easiest platform to get into, with even the first major hurdle – licensing! – being a bit of a complex issue. To address this and other issues people new to OpenVMS might run into, VSI, the company currently developing OpenVMS, launched its new VSI How-to Portal. For now, it covers things like licensing, installing and updating OpenVMS for x86, TCP/IP configuration, and setting up SSH. The company plans to expand the portal with more articles based on customer and user feedback, so hopefully more information will appear soon.

Most of us are probably not particularly not particularly experienced with OpenVMS, so having a portal like this can really help get you started.

Microsoft claims Windows 11 is now “up to 20% more responsive” [OSnews]

Microsoft’s been claiming for a while now that they’re working on improving performance and responsiveness in Windows, with a particular focus on making more efficient use of memory. This is probably the only positive thing to come out of the RAM crisis Microsoft helped create and is currently still fueling. The company’s now claiming that Windows 11 is “up to 20% more responsive” thanks to these efforts.

The result is a Windows experience that’s up to 20% more responsive, with improvements you can feel as soon as you boot into your PC and extending to Start, File Explorer, Search, Snipping Tool, Microsoft 365, Edge and more.

A big part of that work is making smarter use of memory and system resources. We’ve improved memory management and efficiency across Windows to help keep more of your PC’s resources focused on what you’re actively doing. That work can make an especially meaningful difference on PCs with 8GB of memory. Windows can now keep up to 2GB more of your active data in memory instead of moving it to slower storage, helping your PC stay responsive as you open more apps or browser tabs. Windows is also making additional memory-saving improvements that reduce background memory use. For example, on PCs with 8GB of memory or less, Widgets load only when you open them, making more than 200 MB of memory available for your apps and other work. It’s one example of the broader work underway to reduce the Windows memory footprint and deliver a fast, responsive experience across the PCs people use every day, an area we’ve made an explicit focus for Windows.

↫ Navjot Virk on the Windows Blogs

If, for a moment, we take these claims at face value, they’re simply good news for every Windows 11 user, and legitimately the only good thing to come out of the RAM crisis. These kind of claims are always hard to measure, especially considering just how varied the Windows software and hardware ecosystem is, but I’m sure people good at benchmarking are going to try and find some more definitive answers here.

In the same blog post, Microsoft also highlights several other recent improvements it’s made to Windows 11, like the new search experience we talked about recently, a brand new Photos application, some new whiteboard-like application, and several more things. Considering how complex Windows’ versioning scheme and various branches have become, I have no idea when these features and improvements actually make their way to your machine.

On a slightly related note, Microsoft also unveiled that it’s bringing Microsoft Defender to Linux, with a particular focus on desktop Linux. Even Microsoft has to face the reality of the rising popularity of Linux on the desktop.

Thursday, 15 October

22:14

Matthew Garrett: Epic's EAC2 v2 seems fairly easily bypassable [Planet Debian]

Epic just announced the upcoming version 2 of their Linux implementation of Easy Anti-Cheat. It’s based on using the Linux eBPF security module to monitor what’s happening, and then a bunch of extra infrastructure to make sure this can’t be bypassed. The core part of this is requiring secure boot be enabled (ensuring that modified kernels can’t be used), using measured boot to verify that secure boot is enabled and which keys are used (to prevent you from just signing your own modified kernel), and then doing remote attestation, a mechanism where the TPM generates a signed copy of the boot measurements and passes that off to a server which verifies it came from a real TPM, verifies that you have secure boot enabled and are using the right keys, and presumably then allows you into the game.

This is all fine as long as you can prove that the measurements provided are real, and that’s actually a lot harder than you might think. First, we can simply make up our own quote signed with our own key and say that it came from a TPM. This is avoided by every TPM having an Endorsement Key (or EK) and an associated certificate, with that certificate being signed by the TPM vendor. If you have a list of all the legitimate TPM vendors and their CA keys, you can verify that the measurements came from a real TPM. Easy enough. So we need to get the measurements from a real TPM, and the one on our motherboard contains the measurements that were generated by the firmware and bootloader, and we can’t reset those at runtime without resetting the TPM, which… oh huh there’s actually nothing stopping us from doing that at runtime, as long as we have access to the hardware. Many desktop boards have the TPM on a small plugin module with a standard pinout that includes a reset pin. Simply short that to ground briefly and the TPM is back in its initial state, and userland can write whatever measurements it wants to it. Boot a modified kernel which lies to the eBPF code? As long as you replay the expected log values from a boot with secure boot on and a trusted kernel, the TPM will still happily provide a legitimate set of measurements that’ll satisfy the checker.

What if the TPM is less accessible, either because it’s mounted directly to the motherboard or it’s inside the CPU or chipset? That’s going to be trickier. But here’s the thing. The quote needs to come from a TPM, but not necessarily the TPM on your motherboard. TPMs these days are usually connected via the Serial Peripheral Interface, usually referred to as SPI. Microchip make a USB to SPI bridge, and there’s a Linux driver. Wire one of those up with an appropriate header and you can plug in an easily available TPM module intended for plugging into a motherboard, and now we tell the kernel to ignore the motherboard TPM and make /dev/tpmrm0 point at the USB one and program it with a set of trusted measurements and once again everything is going to look just fine (yes obviously the eBPF code can look for this, but we’re running a modified kernel so we can just lie to the eBPF code).

Remote attestation on PCs just doesn’t work that well in environments where you can’t associate a specific TPM with a specific system, which is basically everywhere except enterprises. But maybe that doesn’t matter and cheaters wouldn’t be willing to spend the $20 or so it’d take to produce one of these things? That would seem somewhat surprising, but it’s not impossible. And obviously any server-side cheat detection that triggers could then block that specific TPM, meaning they’d need to go and get another TPM, and maybe that ends up being enough to discourage people from bothering. From a practical level, this may be sufficient. But at a technical level? It’s not great.

21:28

Steinar H. Gunderson: Decompilation patterns, part 12: __builtin_memcpy [Planet Debian]

Say you see this lovely chunk of decompiled code:

    var_v1 = &sp10
    var_v0 = D_80010040;
    temp_s4 = var_v1;
    sp110 = &sp2C
    sp114 = &sp30
    do {
        var_v1->unk0 = (s32) var_v0->unk0;
        var_v1->unk4 = (s32) var_v0[1];
        var_v1->unk8 = (s32) var_v0[2];
        var_v1->unkC = (s32) var_v0[3];
        var_v0 += 0x10;
        var_v1 += 0x10;
    } while (var_v0 != &D_8001040[0x3C]);
    var_v1->unk0 = (s32) var_v0->unk0;
    var_v1->unk4 = (s32) var_v0[1];
    var_v1->unk8 = (s32) var_v0[2];

If you ignore the fact that m2c wrote ->unk0 for [0] (it has a bit of an annoying habit to do that), this is obviously something copying 16 bytes at a time and then 12 more bytes at the end. But would a programmer ever do this? Nope, this is an inlined, unrolled memcpy.

This is known in GCC as __builtin_memcpy, and it can happen either implicitly, or by some sort of lowering from a struct or array copy (e.g., through initialization of a stack array). Depending a bit on whether the variable is known to be aligned or not, you'll either get just lw or some evil lwr/lwl sequence; I'm always struggling a bit to change one to the other. In any case, what you want here is:

    __builtin_memcpy(&sp10, D_80010040, 0x4C);

and then make sp10 the right type instead of a scalar, ideally so that you can use sizeof() on it. Or, in some cases, a direct initialization:

    s32 foo[] = { 1, 2, 3, ...more data from D_80010040... };

20:42

C++ futures part 4: What if I want an immediate on-thread std::async? [The Old New Thing]

I noted last time that you are not allowed to ask std::async for an immediate on-thread calculation. The C++ library designers probably chose not to support it because there’s no point: An immediate on-thread calculation is just a function call, so call the function already and leave me out of it.

But maybe you want to do it because you are interfacing with a component that wants a std::future. How could you do it?

One way would be to implement the immediately synchronous case manually by setting a value into a promise.

template<typename F, typename... Args>
auto
    make_immediate_future(F&& f, Args&&... args)
-> std::future<
        std::invoke_result_t<std::decay_t<F>,
                             std::decay_t<Args>...>>
{
    std::promise<
        std::invoke_result_t<std::decay_t<F>,
                             std::decay_t<Args>...>> p;
    try {
        p.set_value(std::invoke(auto(f), auto(args)...));
    } catch (...) {
        p.set_exception(std::current_exception());
    }
    return p.get_future();
}

Or you could make packaged_task do the work for you:

template<typename F, typename... Args>
auto
    make_immediate_future(F&& f, Args&&... args)
-> std::future<
        std::invoke_result_t<std::decay_t<F>,
                             std::decay_t<Args>...>>
{
    using R = std::invoke_result_t<std::decay_t<F>,
                                   std::decay_t<Args>...>;

    std::packaged_task<R(Args...)> task(f);
    task(args...);
    return task.get_future();
}

Yet another way would be to ask for an on-demand in-thread execution, and then immediately demand it.

template<typename F, typename... Args>
auto
    make_immediate_future(F&& f, Args&&... args)
-> std::future<
        std::invoke_result_t<std::decay_t<F>,
                             std::decay_t<Args>...>>
{
    auto f = std::async(std::launch::deferred,
                        std::forward<F>(f),
                        std::forward<Args>(args)...);
    f.wait();
    return f;
}

The post C++ futures part 4: What if I want an immediate on-thread <CODE>std::async</CODE>? appeared first on The Old New Thing.

C++ futures part 3: The mental model for std::async [The Old New Thing]

We continue our study of C++ futures with std::async.

The more complex case is the std::async. You give std::async a callable and optional parameters to pass to that callable, and you also specify how and when you want the callable to be invoked. You get two axes: Do you want it to be calculated immediately or on demand? Do you want the calculation to happen on the thread that requests the value or on its own thread?

Now, you’d think you could fill out the table like this:

  Immediate On demand (“deferred”)
Same thread Call now and save the value Call when waited
New thread (“async”) Start the thread now Start the thread when waited

However, that’s not what the C++ standard says.

The C++ standard disallows asking for an immediate value on the same thread. There’s really no value to doing it that way, since there is no actual “future”; it all happens in the present! “This future could have been a function call.”

auto f = std::async({}, calculator);

auto result = f.get();

This would, in theory, mean “Immediately call the calculator and wait for it to produce a value. Store it in the source and return a future that fetches the value from that source.” But that’s the same as just

auto result = calculator();

I’m guessing that the C++ standard disallows it because there’s no point.

The C++ standard also says that if you combine both std::launch::deferred and std::launch::async, it doesn’t mean that you get a calculation that lazy-starts on its own thread. Instead, the standard says that the implementation can choose which flag to honor and which to ignore.

So really, the table is

  Immediate On demand (“deferred”)
Same thread Illegal Call when waited
New thread (“async”) Start the thread now Dealer’s choice

In all cases, the result of the callable (either a value or an exception) is stored in the source.

Now, I noted that there’s no point to asking std::async for an immediate on-thread calculation. But maybe you want to do it anyway because you are interfacing with some other component that expects to receive a future. How could you get the same result?

We’ll look at that next time.

The post C++ futures part 3: The mental model for <CODE>std::async</CODE> appeared first on The Old New Thing.

20:14

The Big Idea: Jonathan Maberry [Whatever]

Where does the soul go when the body perishes? In Jonathan Maberry’s new novel, they get implanted into robot mechs to fight in an alien war. Is this the best option? Or is heading into the light the better option? Soldiers in Ghosts of the Void have to decide whether or not to make the ultimate sacrifice, the one beyond even death.

JONATHON MABERRY:

I grew up weird. 

I was poor, lived in a terrible neighborhood, and had monsters as parents. My escape was to use books as doorways to worlds where people fought monsters…and sometimes won. The stories that enchanted and encouraged me were those where ordinary people found themselves pitted against extraordinary threats –monsters, plagues, aliens, all of that. I read those tales to see how they were able to level up to confront those threats and maybe even triumph. It was through those adventures that I first cultivated optimism for my own survival with the monsters at home.

When people ask me why I write about monsters, I say that I don’t. I write about people who fight monsters. My first literary heroes were Abraham Van Helsing and Bernard Quatermass. 

Along the way I had some real moments of luck. My middle school librarian introduced me to science fiction and horror, which became my favorite genres, especially when combined. And she literally introduced me to Ray Bradbury, Richard Matheson, and L. Sprague de Camp, who each became friends and mentors. All three encouraged me to read deeply into those genres and think beyond them. They also pretty much force-fed me old copies of Weird Tales. That’s where I first encountered the cosmic horror stories by H.P. Lovecraft and his followers. And from then on I was lost in the best possible way.

Most of Lovecraft’s stories were published in Weird Tales Magazine, which I now edit. The off-kilter and unexpected direction of the stories published there suited me. Given my childhood circumstances of  poverty and abuse, I found a wonderful escape filled with every kind of creative possibility. I gobbled up not only Lovecraft, but Robert W. Chambers, August Derleth, Edgar Allan Poe, Clark Ashton Smith, and others. They became my family, my role models –not for civilized behavior (I mean, let’s face it –Lovecraft was a horror story of a person)—but as storytellers who did not respect or even acknowledge the guardrails of conventional storytelling. 

All of those writers, and a couple of dozen others, are the godfathers of Ghosts of the Void. 

So, Ghosts of the Void, along with the first two volumes, NecroTek and Cold War, are me driving at high speed on the wrong side of the road. Writing these books has torn down the guardrails and allowed me to go fully weird in terms of plotting and writing. The complex themes include many areas of lifelong fascination for me: space travel, hard science, alien life, cosmic horror, existential philosophy, and the many ways in which humans react to the unknown. So many of my interests as a reader and writer were brought together for these books, and Ghosts of the Void was joyful to write, even with its dark themes.

The NecroTek trilogy begins with a teleporter experiment that goes wildly wrong and transports an entire space station to the far side of the Milky Way, where the survivors are thrust into an ancient war against godlike alien beings and their limitless armies of shoggoths, night-gaunts, and other cosmic horrors. As human fighter pilots die in battle, their souls are resurrected through necromancy and are implanted in shape-shifting alien mech bodies. Death is no longer an end to war. In death those heroic young pilots become vastly more powerful. It’s a corollary to me studying martial arts on the sly because I knew that one day I’d have to square off against the towering monster who was my father. A confrontation I won, though I went to the hospital in the same ambulance as him. In NecroTek –particularly in Ghosts of the Void, there is a heavy toll to pay for survival, but it’s worth every penny.

The series focuses more on characters who are trying to understand the nature of this new and larger universe, while also dealing with love and loss, with death and life, and with the deep challenges of obligation. The ones who die along the way are given a choice of going into the light, so to speak, or being brought back as ghosts to continue the war. This is a deep sacrifice because the alien shapeshifting ships are powered by an energy source that gradually erodes their souls. This is true ultimate sacrifice. Some opt out and move on; while others accept the cost of war if it means protecting everyone else.

And there is a philosopher trapped aboard Asphodel Station who makes first contact with the ghost of an alien who died in that war. Their connection and conversations are at the very heart of the story because they discover commonalities even while being living and dead, human and alien. 

I’ve always been deeply fascinated by the possibility of encountering alien life, and whether that first contact would play out. Rather than picking the low-hanging fruit of “they’re always bad” or “they’re always good”, I prefer a nuanced speculation that allows for aliens to have a variety of agendas and perceptions, some of which we may never decode. And, having studied the history of first contact here on Earth, I’m not at all convinced that it will go well. After all, basic communication depends on commonalities, but what common ground would –or even could—there be with beings who might not share anything with us. That’s what triggers my speculation –we know that whales and crows and other animals have languages, but we have no idea how to translate what they say into what we can understand. As a kid this used to hurt my brain; but as a writer I get to play with that and explore it. Everything will be different, and that is both fascinating and terrifying.

Ghosts of the Void is the book my younger self has always wanted to write. My father would have hated it. My mentors –Bradbury, Matheson, and de Camp—would, I truly believe, be happy as hell.


Ghosts of the Void: Amazon|Barnes & Noble|Bookshop

Author socials: Website|Facebook|Instagram

18:42

Generative AI in the Real World: Observability for AI with Charity Majors [Radar]

AI makes it possible to generate code faster than teams can understand and support it. In this episode, Honeycomb cofounder and CTO Charity Majors joined Ben to discuss how that shift changes the work of building reliable software. Charity explained how observability helps teams connect changes with outcomes, why nondeterministic systems need “more rigor, not less,” and how traces can show the decisions agents make along the way. Over their wide-ranging conversation, she and Ben also covered automatic instrumentation with OpenTelemetry, why we should think of ourselves as “owners on the loop,” the limits of AI in debugging and SRE, and broader industry concerns like the pressure AI hype places on engineering teams and why maintenance, not speed, builds “enduring value.”

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.

Takeaways

00.59. “Observability is for unknown unknowns.” Monitoring is a way to set thresholds and alert on expected conditions. Observability supports open-ended investigation to answer questions you didn’t know to ask and “find things you didn’t expect.” When AI code generation became capable enough to change software work, observability best practices had to evolve, which is one reason why the second edition of Observability Engineering, which Charity coauthored with Liz Fong-Jones and George Miranda, more than doubled in size.

05.24. Cheap code shifts the work to understanding and support. AI can quickly produce implementation, tests, and documentation, but teams still need to understand what they built and agreed to support, and how their users are experiencing the product. As generating lines of code becomes “effectively free and instant,” validation, review, and operational support can constrain a team’s pace. Of course, Charity wryly noted, so can “every other part of the software development lifecycle.”

06.24. The people who take the credit for AI-assisted work should be able to explain it. AI-generated results (and the papers describing them) complicate authorship, expertise, and the academic training process, something that’s become a particular point of consternation for mathematicians of late. If someone is claiming a result they accomplished with the help of AI, they should be able to present it to peers, Charity and Ben agreed. When AI handles entry-level problems, professions may need new ways for junior practitioners to develop mastery, but Charity is skeptical we’ll run out of problems to solve:

In the same way that I’ve made peace with the idea that cars are faster than I can walk or run, I have made peace with the fact that computers can compute better than I can. . . .That doesn’t mean that there’s no value in the practice, or the discipline, or the learning, or the rigor. It just means that this is one of the things that humans are no longer the best at. But there are a lot of things that we are the best at, and being the best at something isn’t all of what makes it worth doing.

15.56 Nondeterministic systems require “more rigor, not less.” As Charity noted, “The future of software is both determinism and nondeterminism. It really is about using these superpowers that we’ve been given to build those feedback loops. And observability is really the feedback loop of feedback loops.” It’s what connects actions with outcomes and helps teams learn what happened after they make a change. Her analogy:

It’s like we’ve all been riding lawnmowers and just kind of putt-putt, putt-putt, putt-putt along down the road. And now, all of a sudden, our lawnmower has a Ferrari motor in it, and we’re like, “Vroom!” Now we can vroom into the ditch. We can run into a wall. And we have to build structure. We have to build rigor into our system if we want to run down the middle of the street.

18.53 People need to own the loop, and understand the decisions the agents are making. If you need to add observability to your agents, Charity recommends starting with autoinstrumentation with OpenTelemetry and traces that capture agents’ decisions and steps through a task. As for your role, it goes beyond staying “in” the loop. Charity prefers the term “owner on the loop” because it emphasizes the active understanding and control required to manage these systems. AI can amplify experienced debugging and SRE teams, especially when people direct work during rare, high-stakes incidents. Agents have little training data for those situations and can make an incident harder to diagnose. These tools are “not magic,” Charity pointed out. AI “is not a replacement for expertise, but it can be a really powerful adjutant. . .at your side.”

26.00 Different telemetry needs different strategies. Charity distinguished the abundant output from third-party infrastructure from the business-critical telemetry produced by a company’s own code.

There’s observability for infrastructure, which is mostly third-party code. . . .It’s code you didn’t write, but you have to operate it. You can’t change it, but it’s just outputting a lot of logs and metrics into your database logs and your ETLs, or CloudWatch, and all this third-party code is just emitting a lot of stuff. . . .That stuff you should just put someplace that is cheap commodity storage. . . .It shouldn’t be super expensive, just that it’s there when you need it.

Then there are your crown jewels: your code, the code that makes you the company. . . .You should instrument in such a way that preserves as many of the relationships between the data points as possible: arbitrarily wide structured-data blobs, structured logs, and/or traces with lots of spans. Because the most valuable part of your data is the relationships. . . .You don’t want to spread it out into hundreds or thousands of individual metrics or log lines. You want to keep it together so that you can correlate: when this happened, that happened; or when this happened, that was true; or when this happened, it was part of this long event. . . .This is the most important data you have. And for that, it should go someplace. . .that preserves those relationships and opens it up for explorability by you or your agents.

17:49

Measuring Human Cryptanalysis Effort [Schneier on Security]

Matthew Green has a new site that tries to estimate the number of cryptanalyst-hours that have been spent analyzing different public-key algorithms:

Abstract: We estimate how much public cryptanalysis each public-key assumption has received, using the literature itself as the instrument. From roughly sixteen thousand candidate papers we classify cryptanalytic work on ECDLP, structured and plain lattices, syndrome decoding and their comparators, then convert papers into estimated research-allocation years through a person-level author map. These publication-based estimates may substantially overstate actual time spent. Lattices have overtaken elliptic curves in this cumulative measure only recently; we express that history as inference budgets under stated productivity assumptions. The study was conducted by AI models: Claude Fable 5.1 and Claude Opus 5.5 built the pipeline, ran the analysis and wrote this page, with contributions from GPT-6 Astra. Matthew Green set the questions, made the key methodological decisions and oversaw the work.

There are a lot of caveats to this analysis. It relies on published work, so anything unpublished does not count. This includes both academic cryptanalysis that didn’t result in a paper, and intelligence agency cryptanalysis done in secret. But it’s a good first stab at a metric of this sort.

16:42

My First Science Fiction Short Story, Published 25 Years Ago Today [Whatever]

What was it? A short story entitled “Alien Animal Encounters,” which I sold to Strange Horizons magazine, and which they published on this day in 2001. Prior to this story, I had never submitted a short story of any sort (much less a science fiction short story) to any publication. I had written short stories in high school and one in college (although that one was actually half written in high school, finished in college), and then after that there was a long dry spell for years until this one. What did I do in the interim? Well, I had a career in newspapers, did a turn as the in-house writer/editor for AOL, did a lot of freelance work, started a blog, published a non-fiction book, and even wrote a novel, which, once it was done, I plopped on this site for people to read because (among other things) I was too lazy to shop it. I kept busy.

I wrote this particular short story, if memory serves, in the immediate aftermath of the completion of Old Man’s War, the second novel I’d written, and the first one I had actually intended to submit to publishers. I figured that shopping OMW might be easier if I’d sold something else into the science fiction market, so I wrote up this story as a bit of a calling card and then went to see where I might publish it. As I’ve mentioned before elsewhere, I submitted it to Strange Horizons not only because I liked the magazine, but because at the time it was one of the few science fiction venues of any presence which accepted electronic submissions. This was great because printing and mailing stuff was a real pain in my butt and I probably wouldn’t have done it.

(And in fact, “printing and mailing stuff is a pain in the ass” is why I never actually submitted Old Man’s War anywhere; it stayed on my computer for more than a year before I finally serialized it on this site, figuring that was where it was going to live forever, just like my first novel. Then Patrick Nielsen Hayden, editor at Tor, sent me an email saying “hey can I buy that?” and we were off to the races. So idea of this short story as a calling card for me when I submitted my novel never quite panned out. Oh, well.)

Strange Horizons was the first and only place where I submitted the story, because they bought it and published it. Which was a nice little ego boost for me! It’s affirming to have your first short story bought by your first choice for submissions. Suddenly I was 1-for-1 in science fiction submission successes, so I did what any reasonable person would do at that point: I retired at the top. I haven’t submitted a short story to any venue since. Every other short story I’ve published was either on commission (i.e., they agreed to pay me and publish it before I turned it in), or one I simply wrote for myself and published here on Whatever. This is not a career choice I endorse for everyone, but it’s worked for me.

(Before every writer collectively decides to push me down some stairs: I absolutely acknowledge both my luck and privilege with regard to my career. Trust me, I know. I do try to spread both around when I can.)

In many ways, “Alien Animal Encounters” is an archetype for many of the short stories I would go on to write over the course of my career. It’s short — about 2,000 words — it’s intentionally funny and a little bit absurd, and is meant to be a “slice of life,” i.e., people getting through their day despite living in a world we’d consider science fiction (in this case, one where one might occasionally meet animals from different planets). I wrote (and write!) this kind of story in no small part because I had spent years writing humorous columns and essays, first for newspapers and then for AOL, and here on Whatever. This sort of short, punchy, funny format was one I was already familiar with and had some success writing. Dropping in, say, alien animals into the format, was not too much of a stretch.

It’s a format I have continued to have success with over the years. I have two collections of my short, punchy, funny short stories — Miniatures and A Very Scalzi Christmas, both available through Subterranean Press — and of course a few of these short stories have been made into episodes of Love Death + Robots. I have done other types of short stories as well, mind you, ones that are even a little bit longer, and not necessarily chucklefests. But this is the sort of short story I keep coming back to, because they’re fun for me, and because they’re quick to write. And because, you know, “short, punchy and funny” is not a bad description of me, either. So maybe it turns out that “Alien Animal Encounters” actually did its job of being a calling card for me in science fiction.

I’m grateful that 25 years ago today, Strange Horizons put my short story up on their site. I’m grateful that 25 years on, I still get to be writing science fiction. I hope to write a bunch more short, punchy, funny science fiction stories before I’m done. I’ll keep going and see what happens next.

— JS

16:35

Purple Space problem solving [Seth's Blog]

On the 19th of October, I’m doing an open Zoom call for members of purple.space and those that might be curious about how cohorts and mutual support open the door to possibility.

Here’s the recording.

16:21

[$] Vendor hooks in the Android kernel [LWN.net]

Since Android's inception, the kernels it has used have diverged significantly from the mainline. While many of those differences have been resolved over time, and the move to the generic kernel image has helped to bring Android closer, current devices still carry a lot of out-of-tree changes. The preferred form for such changes is by way of vendor hooks. At the 2026 Linux Plumbers Conference, Todd Kjos ran a fast-paced session in the Android track to discuss vendor hooks and how they are used.

15:42

Link [Scripting News]

Reminder, Atlantis is the codename for the new Frontier that runs in Electron. As I work on other projects now, it's not on my front burner, but in a way it is, because I'm using it constantly as I work on FeedLand and the other project. We just released a new set of parts that make it possible for it to open a Markdown file for reading when you 2-click on it in the Finder. Things like that are great to add, because they fit into the 2026 web environment. How did I discover that? Accidentally 2-clicked on a .md file, expecting Atlantis to open it, and it just sat there. Filling in things like that. And for some reason it can't get the find command ported from the C kernel to the new JavaScript one. I have told it countless times that the source of truth is the 2014 repo. I told it again. A neat way to follow this project is to subscribe to the codecasting feed, the comment for each new part release gives you an idea where some of the work is going on.

Link [Scripting News]

Google just warned me about a stories.scripting.com blog post from 2007. Perfectly safe archive. Want to know how we started doing code distribution via RSS? Google thinks it's a dangerous site. I'm getting so angry at their condescension. Not a good look for a tech giant trying to convince people that their AI model is better than the others. They don't care about the truth or being honest, or protecting unique resources, or the history of the medium they helped build. Google, some day someone will want to know what you destroyed. I'm going to make sure that part is easy to find. (BTW, the irony of Google's blockage, the page it warns you about is a freaking 404. That's the real enemy of historic sites. Linkrot. Wouldn't be cool if instead of tearing down the web they helped keep it running? The people running these companies are children. They positioning themselves with hate, what do you think comes right back to them.)

15:00

I’m in the New York Times Today, Talking About Monsters [Whatever]

You know, as you do.

The article is a list of science fiction monster novels (or at least, science fiction novels with monsters in them), staring with the early 19th century and going through to earlier this year. Yes, I tried to do a full survey of the science fictional landscape with this one. Some of them are significant, some of them are ones I like, and at least one of them is a novel I don’t necessarily think is great, but is a hell of a vibe. If you go over to read the article (that’s a gift link), you will discover which ones are which.

As a side note, I took that picture of me in the middle of the article’s illustration, so now I can say that as a photographer, I’ve been published in the New York Times. Go me!

— JS

14:49

Ubuntu 26.10 released [LWN.net]

Canonical has announced the release of Ubuntu 26.10 ("Stonking Stingray"):

Ubuntu 26.10 advances enterprise security features, completes the rollout of the Rust-based uutils coreutils, and strengthens integrations for user authentication using Microsoft Entra ID.

[...] Ubuntu 26.10 also ships with GNOME 51, bringing a smoother, more responsive desktop, better display handling, improved accessibility, and refinements across core applications. In addition, the Ubuntu App Center now provides a more consistent experience for managing snaps and debs.

See the release notes for a list of new features as well as incompatible changes between 26.10 and prior Ubuntu releases.

KDE releases documentary [LWN.net]

As part of KDE's 30th anniversary celebration, the project has released The KDE Documentary — A Story of Free Software Underdogs (YouTube video):

The story starts in 1996, when Matthias Ettrich, a student at the University of Tübingen, posted to a Usenet group asking for programmers to help build a desktop for Linux. What followed became KDE, one of the largest free software communities in the world. KDE made Linux usable as a desktop for people who weren't system administrators, giving it a complete, consistent graphical environment at a time when there was none.

The film covers the highs and lows of three decades of KDE: the Qt licensing fight and the rivalry with GNOME; the success of KHTML, the browser engine that became the basis of Apple's WebKit and Google's Chrome; and the contentious release of KDE 4 and the rebuild that followed.

Security updates for Thursday [LWN.net]

Security updates have been issued by AlmaLinux (environment-modules, flatpak-builder, kernel, kernel-rt, librabbitmq, libreoffice, libsoup, mod_auth_openidc:2.3, nodejs:22, nodejs:24, OpenEXR, opentelemetry-collector, pki-core:10.6, postgresql:12, python-tornado, python36:3.6, ruby:3.3, tftp, and xorg-x11-server), Debian (buildstream, firefox-esr, mariadb, and sogo), Fedora (exim, freerdp, python3-docs, and python3.14), Mageia (drakx-installer-images, kernel, kmod-nvidia-current-wopengpu, kmod-virtualbox), Oracle (curl, emacs, environment-modules, flatpak, flatpak-builder, gd, hplip, kbd, kernel, librabbitmq, libreoffice, libxml2, microcode_ctl, mod_auth_openidc:2.3, nodejs:22, OpenEXR, pcre2, perl-DBI, python-tornado, rsyslog, tftp, thunderbird, and xorg-x11-server), Red Hat (compat-libtiff3, firefox, ghostscript, idm:DL1, ipa, kernel, kernel-rt, libtiff, lrzsz, and mariadb-connector-c), Slackware (libarchive), SUSE (amazon-cloudwatch-agent, bind, container-suseconnect, containerd, glibc, google-osconfig-agent, helm, kernel, python312, python313-oletools, python313-openpyxl, python313-orjson, python313-paramiko, python313-pipreqs, python313-py, python313-pycryptodome, python313-pycryptodomex, python313-pydrive2, python313-python-engineio, webkit2gtk3, and xorg-x11-server), and Ubuntu (apache2, bind9, bluez, curl, openssh, python-urllib3, and u-boot).

14:28

Costa: a modern, maintained graphical shell for DOS [OSnews]

Graphical user interfaces for DOS were a dime-a-dozen back in the ’90s, but of course faded into irrelevance as time went on. But what if you still run DOS today, and want a maintained graphical shell instead of the rather limited DOS command line?

Costa is a small and lightweight application which runs on top of MS-DOS or compatible operating systems. It replaces the DOS-prompt with a clean, user-friendly interface – a so-called GUI (Graphical User Interface). Costa comes packed with a bunch of useful accessories and can be used with or without a mouse.

Developed by Jacob Palm, a Danish IT-professional and hobby developer, the first release of Costa came way back in 2004. Over the years – and through several releases – Costa has gradually evolved into what it is today, with new releases still coming out regularly as of 2025.

↫ Costa website

Costa comes bundled with a number of useful utilities, a few games, and useful features like a desktop with custom icons, virtual desktop support, a file selector, and much more. The latest release, version 1.8.0, was released in late 2024, and should run on just about any IBM PC-compatible, but a 386 is recommended. It’s been tested with a variety of DOS flavours, including FreeDOS ad DOSBox, so it should run pretty much anywhere.

Ubuntu 26.10 released [OSnews]

Ubuntu 26.10 has landed.

Ubuntu 26.10 brings significant progress for security, and strengthens the platform with the full adoption of Rust-based coreutils, post-quantum-ready package signing, and expanded TPM-backed full-disk encryption support. Enterprise authentication gains deeper integration with Microsoft Entra ID, including password and multi-factor authentication. Linux kernel 7.3 extends support for the latest hardware, alongside new RISC-V desktop images and optimized amd64v3 installation images.

↫ Ubuntu 26.10 release announcement

Of course, it comes with the latest version of GNOME, and the whole family of Ubuntu variants focusing on other desktops have also been updated. While I doubt many people here run Ubuntu, it’s still quite popular, and serves as the base for countless other distributions.

14:07

Seven stable kernels for Thursday with fix for critical vulnerability [LWN.net]

Greg Kroah-Hartman has announced the release of the 7.2.11, 6.18.57, 6.12.113, 6.6.159, 6.1.190, 5.15.223, and 5.10.272 stable kernels. This series includes, among other things, a fix for a critical vulnerability (CVE-2026-99999). The flaw in skb_checksum_help() would allow an IPv4 packet with bad checksum metadata to "corrupt the network header and cause a bunch of mischief" in the words of patch author Michael S. Tsirkin. As usual, all users are advised to upgrade.

13:28

Agentic Code Quality [Radar]

The following article originally appeared on Addy Osmani’s Elevate blog and is being republished here with the author’s permission.

For much of human history, we’ve evaluated code quality via code review: Someone reads what you wrote and makes sure it’s clean, thoughtful, fast, understandable, and tests well. For agents, that approach doesn’t scale well; there’s just too much code for anyone to read. As a result, more and more of our quality checks have to happen in the harness, environment, and operating system around the agent. I still read and review code, but am very intentional about where I am comfortable with constraints as the check.

Software quality now depends on the constraints you set around your agents.

Speaking of quality, agents are writing your code. Sonar gives you the quality gates to make it shippable. I had a coding agent build a slick app, then asked an agent to review it - twice. The reviews disagreed, and a re-run gave a third answer. You can’t gate a merge on a coin flip. Sonar runs the same complete check on every commit: deep cross-file analysis, a map of where the risk lives, and a quality gate that holds every human and agent to one bar. Try Sonar. Sponsored by Sonar.Speaking of quality, agents are writing your code. Sonar gives you the quality gates to make it shippable. I had a coding agent build a slick app, then asked an agent to review it—twice. The reviews disagreed, and a re-run gave a third answer. You can’t gate a merge on a coin flip. Sonar runs the same complete check on every commit: deep cross-file analysis, a map of where the risk lives, and a quality gate that holds every human and agent to one bar. Try Sonar. Sponsored by Sonar.

Constraints define what the system is allowed to do by throwing tests and deterministic constraints at an agent’s proposals. It’s by setting and maintaining these constraints that we build loops that reliably deliver high-quality production software, even when agents are creating hundreds of thousands or millions of changes every single day.

Set the constraints around your agent

We call these constraints quality gates, and they take many forms. They include conventional unit tests, property tests, and acceptance tests. They include mutation testing, where we generate variations of code, run it against the same tests, and make sure that people aren’t sneaking bugs in that we’re missing. They’re metrics around code quality, such as cyclomatic complexity and line length, that help keep things readable. Constraints also play an important role in what proposals the system will accept and apply as code changes. By the time a change proposal moves from the interpreter running the agent to the agent controller and out to production, we’ve done enough checks on it to be confident that it’s safe to ship and the impact of its change is well within the scope of the agent.

Guillermo's list is a good test for whether you can afford to skip reading. Notice that every "yes" is really a statement about how low the stakes are: no users, throwaway code, prototype. Once the stakes go up, something has to read the code. If it isn't you on every diff then it has to be the constraints.Guillermo’s list is a good test for whether you can afford to skip reading. Notice that every “yes” is really a statement about how low the stakes are: no users, throwaway code, prototype. Once the stakes go up, something has to read the code. If it isn’t you on every diff then it has to be the constraints.

An agent can propose anything. Your constraints decide whether a proposal is safe enough, correct, scoped, and useful, for you and your team to ship.

This model offers a lot but also leaves out many pieces, and those omissions are worth thinking about today. One issue is autonomy; agents might apply their intentions well but may fail when there’s missing information or when what they try to do is ambiguous. That applies both to the task itself and to how it’s parameterized by the harness, environment, and other components. Many of the reasons that humans fail to ship great code are shared with what agents might do: brittle environments that don’t hold up under script-driven stress, nondeterministic builds, missing permissions, and weak tests. This motivates a better environment that gives agents trustworthy feedback, allows for low-damage failure modes, and makes it easier to progressively build up success.

Autonomy is earned by passing verification loops, not granted by the model

The environment we’re after is one where an agent can do real work, get feedback it can trust, and fail without doing much damage.

The other important issue is trust. We can’t credulously hand off intent to something even as smart and robust as a modern agent without checking for correctness. We start with trust, but it has to be hard-earned.

The software factory: intent enters, agents implement, evidence decides what ships

Some constraints shape work before it begins. Others give feedback while the agent is working. Others decide whether its output can cross the production boundary at all.

There are a bunch of ways to model how we put a verification structure around a system.

In my experience it helps to have a broader, but intentionally chosen, set of checks for your constraints instead of relying solely on unit tests. The idea is that each check has a distinct responsibility, and that can range from type safety and performance to late-stage security scanning. Folks can define their own constraints too, including architecture rules that linting tools like ESLint can enforce. Many of these tools have built-in hooks that can be used to pull in agents, or humans, when things break.

For now, much of the difference between useful agent output and slop still comes down to the skill of the team operating the loop.

AI gives us high-volume code generation and velocity, but this can also mean it gets harder for humans to review every single change. You have to instead be intentional with where their attention is going. If you put a human check into a system that otherwise moves at machine speed, don’t be surprised if that impacts productivity. Human attention is scarce and valuable, so we should proactively direct it to those most nuanced problems that require our judgment. Downstream humans should only be pulled in when the automated guardrails for constraints break.

Human “code review” in the future is going to look very different.

Correctness is one important dimension, but you may care about others as well, like maintainability, performance, security, efficiency, and comprehensibility. Just as correctness decomposes into many signal types, so too does the rest of quality. And while it matters how many constraints we have in place, it matters more whether they’re challenging enough to meet our bar for quality and production readiness.

Software quality isn’t a single metric. Think of it as a collection of signals of varying importance to you and your team.

Back-pressure can be implemented through many tools: compilers rejecting invalid code, tests failing, security policies blocking bad practices, CI declining to deploy. Ideally it exists throughout the loop, not as a single review at the very end of all the work.

Constraints and back-pressure let agents catch bad work before it’s a problem.

What happens if we can’t apply the constraint because the volume of changes is higher than our tools can consume? We end up building a queue and relying on a verification system that moves at human speed. To scale, we want to push as much as we can into the verification loop throughout and not wait until the end. If we can scale within our automated checks, we can increase the speed and throughput of our entire delivery system. If we run out of room in the verification loop, we need to do one of several things. First, we can scale our verification system and create more capacity to constrain and push back on changes that come in. Second, we can reduce the rate at which agents generate new changes so that verification can catch up to the volume of work. Third, we can lower our quality bar so that verification doesn’t push back as hard as it otherwise might. From a scaling perspective, we need to be ready to do all of these things. At the same time, we should not stop short of realizing that we could actually get more done by unconstraining in some directions. Maybe we can increase the speed of agent-generated changes by providing swarms of agent developers or automated software factories to create changes without waiting for us to review each of them.

And in some places we might want to give them more freedom as long as we keep tighter constraints in others. By providing tighter constraints where we care the most, we can maximize our throughput without sacrificing quality. Throughout these decisions there are many options. Most obviously, we have to trade between different dimensions of quality. As we’ve emphasized, security is very important, but we’ve also had to trade between delivering security and delivering a product on time. There is a spectrum from innovation-focused at one end to quality-focused at the other. Somewhere along the way, we have to make choices about where we want to be on that spectrum.

We want to send clear feedback from the environment and the system back to our agents or teams, so that people can focus on the more subjective concerns of taste, intent, and architecture. If we can help humans stay inside the safe range of constraints, we can avoid the need for them to work hard trying to figure out where things went wrong.

Software quality includes more than just correctness. Software quality also means maintainability, good performance, security, efficiency, and being easy to understand. All the constraints that help us meet these standards and keep our production flowing create back-pressure in our delivery pipeline.

We need to make deliberate decisions about where to apply strong constraints and where to remove or relax them. Apply strong constraints where they’re serving both of these goals. Don’t support them if they’re not serving one or both. Be ready to raise or lower standards as the case may require. And remember these constraints at different points in the software system are what make software quality enforceable.

We should apply strong constraints where they’ll serve this dual purpose best and consider removing or relaxing constraints that aren’t serving either purpose well. We should also be ready to shift quality bars up or down as needed. In effect, these constraints at various points in our software system are what give quality its teeth. In many cases, we can create more back-pressure and more constraints by deploying new tools or strengthening tools that are already in place. All of these things can be used to push back on most change requests. We want to build them throughout the pipeline. We don’t want to wait until the end of the pipeline when our CI system will simply tell us that we’re not allowed to deploy without fixing problems. We want to use these signals as early as we possibly can, through every possible pathway. The ultimate constraint in this system is the one we place on ourselves to stand behind the decisions and actions we’ve taken to build the system and to operate it. But like all other constraints, we need to make thoughtful trade-offs about how much we want our own judgment to restrain, to back-pressure, and to act as a final check.

Quality is in the constraints that we place around our agents. So as you’re thinking about quality for your own apps, take this problem statement and come up with your own constraint-driven plan.

12:35

Pluralistic: Expedia amazoned hotel rooms (15 Oct 2026) [Pluralistic: Daily links from Cory Doctorow]

->->->->->->->->->->->->->->->->->->->->->->->->->->->->-> Top Sources: None -->

Today's links

  • Expedia amazoned hotel rooms: Everything more expensive for everyone, monopolies everywhere, and we're all screwed.
  • Hey look at this: Delights to delectate.
  • Object permanence: Delta v dovening; "Play Money"; Alabama's ethnic cleansing; We trust neuroscience over psychology; Billionaires' anti-homeless pogrom; Game devs v DRM; What security means; Microsoft, tear down that wall! Publisher won't revert rights; SNL's Trump/Clinton debate; Chicago Tribune's murder; AI after AI.
  • Upcoming appearances: Paris, Vancouver, Victoria, Ottawa, Vienna, Kilkenny, Oxford, Sheffield, Oxford, Montreal.
  • Recent appearances: Where I've been.
  • Latest books: You keep readin' em, I'll keep writin' 'em.
  • Upcoming books: Like I said, I'll keep writin' 'em.
  • Colophon: All the rest.



A faded, scratched postcard advertising the 'Edge of Town Motel.' Next to the motel sign is a vast pink piggybank, out of whose slot rises a motel key on a diamond keychain, emblazoned with a metallic dollar-sign.

Expedia amazoned hotel rooms (permalink)

No matter where you shop, you're getting screwed by Amazon. Amazon has found a way to make everything you buy – at Target, at a mom-and-pop shop, even direct from the manufacturer – more expensive. And they're not the only one: Expedia's done the same thing, but for hotel rooms.

Here's how Amazon broke the economy: first, they locked in a key group of shoppers. The vast majority of affluent shoppers in the USA have Amazon Prime accounts. Having prepaid for a year's shipping in advance, those Prime subscribers start their purchasing journey by searching Amazon, and if they find what they're looking for, that's where it ends.

America's affluent top decile – the 10% of richest Americans – do the majority of America's shopping, a phenomenon that has only been accelerated by America's precipitous slide into oligarchy, which has exhausted the savings and the credit-card limits and the home equity of the majority of Americans, who increasingly can't afford to buy anything:

https://dreamagainusa.org/

If you want to sell things in America, you must sell them in the place where the top decile shops, and that's Amazon. For merchants, that is an incredibly expensive proposition: 51-60% of every dollar you spend with an independent merchant on Amazon is claimed by Amazon through junk fees, listing fees, commissions, processing fees and other scams:

https://pluralistic.net/2026/09/04/cheating-at-fraud/#absentee-rentier

Merchants don't have 51-60% margins they can afford to turn over to Amazon. To remain viable while selling on Amazon, they have to raise prices. Amazon doesn't mind if prices go up, so long as Amazon's price remains competitive. So Amazon imposes a requirement on its suppliers called "most favored nation," which requires sellers to offer their best price on Amazon:

https://pluralistic.net/2026/02/25/most-favored-nation/#price-fixing

Practically speaking, that means that when you raise your price on Amazon, you must raise your prices everywhere by the same amount, which means that no matter where you shop (Target, Walmart, the corner store or direct from the factory), you pay the Amazon Tax.

The Amazon Tax is a prime (you should forgive the expression) example of enshittification, in which an intermediary (a business that sits between buyers and sellers, AKA, "a platform") screws both customers and sellers to benefit itself.

But Amazon isn't the only example of a powerful digital intermediary that has used its market power to impose an economy-wide tax. Wherever you look online, you find digital giants who grew the way Amazon grew (buying all of their competitors) and then did what Amazon did (squeezing buyers and sellers, making prices higher everywhere).

That's what happened with Expedia. Almost every travel site you can find online has been purchased by Expedia (Hotels.com, Travelocity, and Orbitz), and the ones that aren't Expedia subsidiaries were acquired by its main rival, Priceline (Booking.com, Kayak, Agoda and even Opentable). Nearly all the hotel rooms are booked by a tiny minority of travelers – largely that same top decile that Amazon has so thoroughly captured and locked in – and hoteliers can't live without their business, and they're almost all Expedia and/or Priceline customers. Expedia accounts for 80% of all hotel bookings by dollar value.

Expedia's position, in other words, is basically Amazon's position, so Expedia is doing exactly what Amazon is doing: they charge huge fees to hotels, and then force the hotels to raise their prices everywhere through a "most favored nation" deal:

https://storage.courtlistener.com/recap/gov.uscourts.wawd.369601/gov.uscourts.wawd.369601.1.0.pdf

But – as Lee Hepner writes for the BIG newsletter – Expedia has figured out ways to out-Amazon Amazon. They've copied one of Amazon's sleaziest businesses, and made it worse:

https://www.thebignewsletter.com/p/how-expedia-rigs-travel-markets-and

Here's Amazon's sleaziest commercial practice: when you search Amazon, the top results for your search aren't the best matches for your queries; they're products sold by the companies willing to pay the most for search placement, in a "real-time auction" that runs every time you search. The cost of winning that auction comes out of your pocket through higher prices: the first result for an Amazon query is, on average, 29% more expensive than the best match. The top row is 25% more expensive. On average, the best match for your query is 17 positions down the screen, on the second page, where almost no one ever bothers to scroll:

https://pluralistic.net/2023/11/03/subprime-attention-rent-crisis/#euthanize-rentiers

This rip-off is Amazon's most profitable line of business, more profitable than AWS or Prime. It makes the company more than $80b/year. And – incredibly – Expedia's found a way to make it even worse.

Like Amazon, Expedia auctions off its search results. They call this their "VIP listing" program. Practically speaking, hotels have to pay for this, because it boosts booking rates by 42% (the first ten results on an Expedia search-results page get 62% of the clicks). VIP listing is expensive for the merchant – but it's even more expensive for you and me.

That's because Expedia requires hotels in its VIP listings programs to raise their prices on non-Expedia sites by 10-25%…INDEFINITELY.

Let me repeat that: to stay in business, hotels need to be on Expedia. To stay in business on Expedia, hotels have to raise their prices to pay Expedia's junk fees, but they have to raise their prices everywhere else. But to really stay in business on Expedia, hotels have to use the VIP program, which is even more expensive. And – one more time – hotels in the VIP program have to jack up their prices everywhere else, INDEFINITELY. This means that, throughout the economy, hotel prices are rising at a superinflationary rate, because Expedia – who command 80% of the market – are pushing those prices up.

This goes a long way to explaining why US hotel rates rose 58% from a 2020 average of $103/night to a 2025 average of $162/night. It explains why hotel prices rose by 5% last year, which is double the rate of inflation. And this is why Expedia stock is up 65% since the start of the Iran war, a fact that Expedia CEO Ariane Gorin attributes to "higher margins" from "higher prices":

https://s202.q4cdn.com/757635260/files/doc_financials/2026/q2/Q2-2026-Earnings-Presentation-Final.pdf

In his coverage of the Expedia lawsuit – which brought many of these details to light – Hepner notes that hotels themselves have undergone near-total cartelization, with Hilton, Marriott, and Choice International owning the majority of all hotels after a string of acquisitions that went largely unchallenged by slumbering antitrust regulators around the world. These consolidated chains have also jacked up prices and enshittified their service, slashing housekeeping and check-in staff and allowing their facilities to slip into disrepair.

This, too, is characteristic of monopolization: whenever a monopoly takes over part of its supply chain, the rest of the supply chain consolidates to prevent itself from being ripped off by the new giant. This is the story of publishers consolidating to defend themselves from Borders/B&N, Walmart and Costco, then Amazon; and it's the story of literary agencies consolidating to resist the power of those overgrown publishers.

And it's the story of health-care, which saw consolidation in pharmaceuticals leading to mergers among hospitals, who screwed the insurers, who also consolidated.

In every case, it's the workers and the people who rely on them that get the shitty end of the stick. Hotel guests, readers and patients pay more for inferior products. Writers, editors, doctors, nurses, hotel staff and housekeepers get lower pay and worse working-conditions:

https://pluralistic.net/2024/12/18/loose-flapping-ends/#luigi-has-a-point

There is nothing wrong with the idea of an intermediary. Most writers can't publish and sell their own books, and few travelers can navigate finding hotels in strange cities without help. The problem of intermediaries is that when intermediaries gain monopoly power – by buying their rivals and capturing buyers and sellers – they are able to squeeze both. As Tim Wu says, this is the moment when a company that's supposed to be helping becomes a predator, acquires "main character syndrome" and makes every transaction all about the middleman, at the expense of the people buying and selling:

https://pluralistic.net/2026/08/05/absentee-landlord/

There are so many reasons for inflation and the cost of living crisis: wage stagnation, wars of choice in Iran, environmental cataclysm after environmental cataclysm. But under cover of these real factors is a cohort of what Matt Stoller calls "economic termites," parasites that have infested the walls of our economy and are devouring it from within.

You can't solve this by shopping. Calling the hotel direct won't fix it: they have to be on Expedia to survive, and to be on Expedia, they have to sign up for VIP service, and to keep VIP service, they have to make their prices higher everywhere. To fix this, we need systemic action: the corporate death penalty for the companies that are consuming the structural members of our society.


Hey look at this (permalink)



A shelf of leatherbound history books with a gilt-stamped series title, 'The World's Famous Events.'

Object permanence (permalink)

#25yrsago Delta diverts flight after passenger reports praying Hassids as suicidal jihadis https://web.archive.org/web/20011016000622/http://dailynews.yahoo.com/h/nm/20011015/od/delta_dc_1.html

#20yrsago Play Money: memoir of a year selling game-gold https://memex.craphound.com/2006/10/15/play-money-memoir-of-a-year-selling-game-gold/

#15yrsago Cereal Monsters: Frankenberry and friends as Universal classic monsters https://www.deviantart.com/jasonedmiston/art/Cereal-Monsters-106139367

#15yrsago Alabama’s racist “immigration” law creates misery and fear for brown people https://www.theguardian.com/world/2011/oct/14/alabama-immigration-law-families-trapped

#15yrsago Neuroscience explanations are more believable than mere psychological ones https://pmc.ncbi.nlm.nih.gov/articles/PMC2778755/

#15yrsago Writer: “my publisher said I could only get the rights to my out-of-print book back if I bought their leftover copies from them” https://writerbeware.blog/2011/10/18/guest-blog-post-fitzhenry-and-whiteside-writer-beware/

#10yrsago SNL’s Trump/Clinton debate sketch makes Saturday Night great again https://www.youtube.com/watch?v=qVMW_1aZXRk

#10yrsago The pathogens of Wells Fargo’s corruption fester in every large corporation https://www.ineteconomics.org/perspectives/blog/three-things-to-know-to-hold-wells-fargo-accountable

#10yrago Billionaire tech investors back ballot initiative to purge homeless people from San Francisco https://eu.usatoday.com/story/tech/2016/10/14/silicon-valleys-acute-homeless-problem-ballot/91082346/

#10yrsago Game developers say no to DRM: “hurts our customers” https://web.archive.org/web/20161013180206/https://kotaku.com/pc-game-developers-say-anti-piracy-tech-would-make-thei-1787747680

#10yrsago After being outed for massive hack and installing an NSA “rootkit,” Yahoo cancels earnings call https://www.huffingtonpost.co.uk/entry/yahoo-hacking-verizon_n_5800eef7e4b0e8c198a78b14

#5yrsago ROT 8000 and what "security" means https://pluralistic.net/2021/10/15/fargo-north-decoder/#on-trusting-trust

#5yrsago The Chicago Tribune is being murdered before our eyes https://pluralistic.net/2021/10/16/sociopathic-monsters/#all-the-news-thats-fit-to-print

#1yrago The AI that we'll have after AI https://pluralistic.net/2025/10/16/post-ai-ai/#productive-residue

#1yrago Microsoft, Tear Down That Wall! https://pluralistic.net/2025/10/15/freedom-of-movement/#data-dieselgate


Upcoming appearances (permalink)

A photo of me onstage, giving a speech, pounding the podium.



A screenshot of me at my desk, doing a livecast.

Recent appearances (permalink)



A grid of my books with Will Stahle covers..

Latest books (permalink)



A cardboard book box with the Macmillan logo.

Upcoming books (permalink)

  • "The Post-American Internet," a geopolitical sequel of sorts to Enshittification, Farrar, Straus and Giroux, 2027
  • "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



Colophon (permalink)

Today's top sources:

Currently writing:

  • “Once Is Enemy Action,” a science fiction novel about the origins of modern technofascism. Today's words: 508 (25536 total).

  • "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.

  • A Little Brother short story about DIY insulin PLANNING


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.


How to get Pluralistic:

Blog (no ads, tracking, or data-collection):

Pluralistic.net

Newsletter (no ads, tracking, or data-collection):

https://pluralistic.net/plura-list

Mastodon (no ads, tracking, or data-collection):

https://mamot.fr/@pluralistic

Bluesky (no ads, possible tracking and data-collection):

https://bsky.app/profile/doctorow.pluralistic.net

Medium (no ads, paywalled):

https://doctorow.medium.com/

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

\

12:28

The Frist Line of Defense [The Daily WTF]

We don't cover a lot of security issues here, simply because they're not usually funny. But sometimes, they are. So here's a quick hit about some recent ones.

We start with a very bad month for the Danish social security system, the Central Register of Persons (CPR). Last week, they detected a breach which exposed the personal details of 8.8m people. Per the Register article, a cybersecurity specialist correctly pointed out that treating your ID number as if it were a secret was a terrible idea in the first place, but unfortunately, so many systems have grown up around the idea that full knowledge of your state issued ID number as proof of identity, that the security expert is screaming into the wind. They're right, but it's going to take a lot to change.

Okay, Denmark's social security service was hacked. What's so funny about that?

Well, the mechanism of the hack appears to go thusly. First, third party companies have access to the database, which they can use to send notifications to their customers via CPR. That connection is secured with a password, and one of those third parties secured their account with the kind of password you'd use to protect the precious air of the planet Druidia. Also known as the kind of password some idiot would put on their luggage: "123456". (paywalled, Danish article).

The hacker accessed the system on September 10th, and spent ten days searching through the system. The intrusion wasn't detected until October 2nd, when CPR went to send an invoice to the third party company and noticed, "Boy, that's more searches than they have customers." Now, obviously, CPR should have never even allowed such a low complexity password, but also, the third party company shouldn't have used such a low security password.

Now, if you'll excuse me, I have to change the combination on my luggage.

In other news, I'm not particularly fond of blockchain stuff. Mostly, the whole distributed ledger seems like a solution in search of problems, and "trading tokens as if they're money" is the best thing anybody's been able to come up with. Back in my consulting days, when blockchains were all over the news, I was consulting with a large retailer, and they were exploring using blockchain in their supply chain. "How does that work?" I asked innocently. "It'll have blockchain in it." "Sure, but what does the blockchain get you?" "We'll be using blockchain. If there's like, an e. coli outbreak, we can trace where it came from." "Couldn't you get that out of a regular database?" "But this'll have blockchain."

In any case, blockchain companies getting hacked and having all their users' assets stolen is practically a daily occurrence. Not really notable. But a recent hack is legitimately interesting.

A company, called Ledger, sells "hardware wallets". Instead of storing your keys on some third party's servers (where it'll get hacked and you'll lose all your "money"), you store them on a hardware device that you put in a safe. It's not connected to the internet, and thus is unhackable. Or so you'd think. But if enough people are buying those devices, a supply chain attack becomes potentially very lucrative. And that's exactly what happened. Someone in the supply chain cracked a bunch of these devices open, and inserted new hardware. They attached a microcontroller to the screen leads, that allowed it to read what was on the screen (and thus detect when the screen was displaying a recovery code that could be used to access the wallet), and a cellular modem that allowed it to literally phone home with that information.

In total, these hackers walked away with the equivalent of nearly $100M in cryptocurrency.

All the devices passed through Ledger, where they were inspected before being sold. Presumably, they were sealed with tamper-resistant packaging. It's plausible that the tamperer was downstream from here and the customers didn't fully inspect the packaging. Even your most savvy user generally doesn't check that kind of thing, and I suspect a lot of these customers aren't actually all that savvy. But also, companies in the crypto space tend to be... we'll say, more eager than cautious, so I wouldn't be surprised if the tampering happened upstream and didn't get caught by their inspection process.

Security is hard in the best case. It's much harder when you're putting the final onus of security on end users who may have thousands or even millions of dollars locked behind a single key. Or when passwords are hard, so you pick an easy one to remember.

[Advertisement] Plan Your .NET 9 Migration with Confidence
Your journey to .NET 9 is more than just one decision.Avoid migration migraines with the advice in this free guide. Download Free Guide Now!

11:14

Grrl Power #1504 – Let’s meet our contestants [Grrl Power]

It is a little rich for Sydney to be complaining about insipidity. Though I think that Gail and Bluce’s banter might quality more as banality. It’s the kind of pablum you’d hear in the back and forth during a Thanksgiving day parade. It’s splitting hairs. Sydney just really dislikes this particular brand of low effort, forced enthusiasm, where you can see the announcers die a little inside as they lob out each network approved humor nugget.

I had considered making Centurus a finalist, but the idea of drawing a hundred meter long flying AC-13o centipede with six-hundred guns was just not realistic. If I could have built it in Blender… after learning how to use Blender… then yeah, that would have been cool. But it’s honestly outside of my skillset. Or really, outside of my allotted production schedule. It would take me a very long time to draw a close-up panel with, let’s say 6 miniguns, cannons, and whatever the medium sized guns are, all connected to a mecha bug thing. I’d like to think it’d take most people a long time to draw that, but some artists really excel at fiddly, technical drawings. I assume those people are bad at drawing mountains, or dogs, or something else to balance things out.

I have to say, I would have liked to see what that anthro kangaroo boxer could do that carried him all the way to the semi-finals. I mean, imagine that he had to fight someone like Mt. Atrocitous or that Kill-7 mecha. But that’s for a different timeline.

The burning question I know you all have is, are Atheons all demi-gods? Well, first you have to define lower-case-g “god,” and that’s more complex than it seems at first glance. Dabbler will probably have a discussion about that with Sydney at some point. She claims to have killed “gods” plural. She counts one dude that was mid-ascension, I think she mentioned that in comic early on? But she still counts it. So yes, by some definitions, Atheons are all demi-gods. Certainly by their own definition they are.


Oh, look who it is in the vote incentive. The NSFW version is finally up at Patreon. Plus a bonus pic.

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.

10:42

Addressing fear [Seth's Blog]

Don’t bring a spreadsheet to a fear fight.

Change causes fear. And change is all around us.

The fear of the unknown. The fear of failure. The fear of uncertainty.

Mostly, we’d like safety. And when the world changes, safety feels like it’s in short supply.

One reason we have security theatre is that the performance of security often creates more of the feeling we seek than actual safety.

Taking your shoes off before you enter the airport. Installing a giant, clunky, loud, armored garage door. Viewing strangers with suspicion. Using false proxies and useless shortcuts to insulate ourselves (or seek to do so) from the changes and the unknowns we fear.

Statistics rarely overcome stories.

So what does?

Familiarity. And conversation.

“What would make you feel safe?” is a different approach than “there’s nothing to be afraid of.”

Until we get familiar enough with the new status quo, what performance would be a helpful way to create the feeling of safety?

What if we could create even more of that feeling with a different approach?

And while we’re at it, what if we spent time becoming familiar with the thing you’re afraid of?

The most useful spreadsheets and facts are the ones that fearful people create to help them see their world differently.

04:14

Holistic Medicine [QC RSS v2]

don't even get her started on her ligaments

00:28

Wednesday, 14 October

22:07

21:35

Grand Admiral Pron [Penny Arcade]

My flight ended up being delayed, so in a strange and auspicious turn I happened to be ready to write the strip at the exact same time we typically do. Biddy Blas is constantly being tooled by others in the racing camp, hazed to within an inch of his life, and he certainly deserves a win. Does this constitute a win? I mean, maybe.

21:21

it’s storytime live is almost sold out! [WIL WHEATON dot NET]

In case you missed it, I want you to know about a show I’m doing in a couple weeks, right here in the valley.

So last Spooky Season, I read The Legend of Sleepy Hollow, for the Storytime Patreon subscribers. It was very simple, just me and a microphone, a few Halloween decorations I got at the drugstore to dress up my office. It was deliberately simple, and as far as I can tell, everyone who tuned in enjoyed it. I know that I had a really good time doing it.

When I was thinking about bringing it back this year, I thought it would be fun to try it out on stage, with an audience, this year. My friend owns Geeky Teas in Burbank, and she has a great performance space that I’ve been wanting to use for something, so I did the math and here we are.

The space holds about 70 people, and as of yesterday morning, about half the tickets are sold. That’s more people than I thought would show up, so I’m pretty happy about that. The thing about doing shows in LA is that there are so many shows in LA on any given night, we are all spread out rather thin, and unless you are a massive draw, it always feels like nobody shows up. I’m so delightfully surprised that this room will have more people in it than not who I didn’t bring myself, from my own house, to watch.

The story I picked for this year is The Body Snatcher, by Robert Louis Stevenson. For more information, I’m going to quote myself from a few days ago, to save time:

On October 25, I’m going to be at Geeky Teas in Burbank for It’s Storytime With Wil Wheaton, Live. Last year, I did a live reading of The Legend of Sleepy Hollow for our Patreon subscribers, from my office. (Where I’m sitting right now, actually.) It wasn’t directed, or mastered, or anything like that. It was just me, the story, and a mic (Love you, LeVar). I had a great time doing it, and I got good feedback, so I’m doing another live reading this year, with an eye toward establishing a yearly tradition. This year’s classic tale of terror is The Body Snatcher, by Robert Louis Stevenson.

Here’s a little bit I grabbed from a summary, to entice you:

Every night, four men regularly meet in the small parlour of the George Inn at Debenham: the landlord, an undertaker, the narrator, and an old Scotsman named Fettes. Once educated and comfortably off, Fettes is now a “crapulous, disreputable” drunkard. The townspeople call him “the Doctor” because he occasionally sets a bone or treats an injury, though little is known about his past.

One winter evening, news arrives that a wealthy local landowner has been struck with apoplexy and that his famous London physician has been telegraphed to come. When the landlord mentions the doctor’s name—“Dr. Wolfe Macfarlane”—Fettes, half drunk moments before, becomes instantly sober. He repeats the name “Macfarlane” in shock, then insists, “I must see him face to face.” The other men watch as the once-listless drunk becomes alert and deadly serious.

The rest of the story is uncovering why Fettes is now a drunk, and what (or maybe who) he is running from. It’s creepy and even scary at times, and the prose is delicious.

Because this is Stevenson’s most famous horror work after Dr. Jekyll and Mister Hyde, there is a ton of scholarly writing and analysis of it online. Because I am that kind of nerd, of course I dove in and drank deeply from the wells of knowledge I found within. This is a story that, like Sleepy Hollow, was written in response to contemporary events that have been mostly lost to history. When we know the context in which it was written, and the events that inspired it, it gives us (or gave me, at least) an elevated experience and additional appreciation of the material, in addition to a great story. Without turning it into a college lecture, I am thinking about including some of that in the show, the way I record codas after each story for Patreon.

It won’t be fancy, it won’t be staged. It’s literally just me, in a chair, telling you a story for about an hour. There are a couple lighting cues, and that’s it. I’m keeping this as simple as possible, because I don’t have time to rehearse and prepare any staging. I’d rather keep it simple, and feel prepared, than make it complicated and risk feeling like I got in over my head.

Also, I’m giving serious consideration to taking myself on the road, and playing some smaller theaters with live readings that we’ll record for the podcast. This will help me find out if there is any audience for that, if I even feel good reading in front of a live audience, and give me a safe place to stumble a bit, if I need to.

The performance will be streamed live, and archived, for Patreon subscribers, so if you want to watch it but aren’t local, you can join us there for five bucks, which will also give you access to the entire show’s archive, and all our BTS materials, for a month.

When I booked the room, I was fully prepared to play to about a dozen friends, only. That it appears to be on its way to maybe selling out is pretty awesome.


HI, I’m Wil. This is my blog. If you’d like to receive my posts in your inbox, here’s the thingy:

Dirk Eddelbuettel: qlcal 0.1.4 on CRAN: Fresh Upstream Updates [Planet Debian]

The twenty-second release of the qlcal package arrivied at CRAN yesterday, and has been built for r2u as well as on r-universe.

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 release is based on the changes in the QuantLib 1.44 release also made yesterday. It includes two new calendars for Malaysia and the Philippines, updates to around a dozen calendars, and a few other updates to internal files. Maxmilian Muecke spotted and fixed a few small bugs just as he did for the RQuantLib release we made yesterday; this is equally appreciated! The full details from NEWS.Rd follow.

Changes in version 0.1.4 (2026-10-13)

  • Add missing market calendars for Poland, Russia, Romania, Indonesia (Maximilian Muecke in #21)

  • Add (semi-deprecated) alternate separators '::' for Israel and New Zealand markets (Maximilian Muecke in #22)

  • Fix several typos across source, configuration and documentation files (Maximilian Muecke in #23)

  • Synchronize with QuantLib 1.44, add two new calendars, update several others, and update general utility files (Dirk in #24)

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.

20:49

EncryptFest 2026 [Planet GNU]

October 25, 2026 from 13:00–15:00 EDT (17:00–19:00 UTC).

Link [Scripting News]

Thread: "Imagine rock and roll without the Beatles."

Link [Scripting News]

Occam's News reports that Trump et al are selling out the US. Putin can get the US to do what he wants by giving Trump money. Total win-win. And the US is flushed down the toilet. That's all that's going on there. All of the journalistic feigned bafflement is make-believe. It's totally obvious what's going on. And don't forget Musk has the world encircled with satellites. If he doesn't want you communicating, you don't communicate. In other words the selling-out has been going on for some time.

Link [Scripting News]

Someday all the pieces will be interchangeable. Then there won't be different brands of social networks, just different brands of the software. All parts replaceable. It won't have all the chaos of the web. And that will be a good thing.

20:35

Reproducible Builds: Reproducible Builds in September 2026 [Planet Debian]

Welcome to the September 2026 report from the Reproducible Builds project!

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

As ever, if you are interested in contributing to the project, please visit our Contribute page on our website.

In this month’s report, we cover:

  1. Reproducible Builds Summit 2026 held in Gothenburg, Sweden
  2. dettrace expanding architecture support for PGO & Lisp dumps
  3. “They don’t care about this!”
  4. SOURCE_DATE_EPOCH specification updates
  5. Reproducible Builds at SeaGL 2026
  6. New Code of Conduct (CoC)
  7. Supporter Spotlight: Jochen Sprickerhof
  8. Mailing list news
  9. Tool and documentation development
  10. Patches

Reproducible Builds Summit 2026 held in Gothenburg, Sweden

The annual Reproducible Builds summit took place from 22 to 24 September 2026 in Gothenburg, Sweden. The event brought together developers, distribution maintainers, security researchers and free software advocates from across the ecosystem to share updates on current initiatives, address outstanding toolchain bottlenecks and strengthen cross-project collaboration.

Participants engaged in a series of working sessions and technical roundtables focused on expanding the practical scope of reproducibility. Discussions covered ongoing work within major Linux distributions, language-specific package ecosystems and the various parts of the binary verification infrastructure.

Strategic planning formed a pillar of the gathering, with participants discussing long-term roadmap goals for supply-chain security, software integrity and related topics. Attendees explored new methods for automated verification, discussing how to lower the adoption barriers for maintainers and streamline the integration of deterministic build pipelines into established continuous integration (CI) systems. The event was then followed by two days of unmoderated hacking sessions. These hacking sessions provided space for technical progress, allowing attendees to draft specification updates, prototype new tool features and resolve standing reproducibility bugs in-person.


Dettrace expanding architecture support for PGO & Lisp dumps

Bernhard M. Wiedemann announced major updates to dettrace, porting the tool across most architectures supported by Debian and openSUSE. The release addresses key stability issues, passing test suites across these targets and making it ready for production build pipelines.

These improvements enable deterministic builds when utilising Profile-Guided Optimisations (PGO), removing the need to sacrifice runtime performance for reproducibility. Additionally, dettrace can now be applied to (notoriously difficult-to-reproduce) Lisp and Scheme memory dumps, including environments such as CLISP, SBCL, Scheme 48, Racket and GNU Emacs.


“They don’t care about this”

Annika Wilde, Marco Gutfleisch, Felix Reichmann, Anirban Chakraborty, Yuval Yarom, M. Angela Sasse and Ghassan Karame published a paper this month entitled “They don’t care about this”: A Systematic Study of Trusted Execution Environments Build Reproducibility in the Wild:

Trusted Execution Environments (TEEs) have become a cornerstone of modern cloud computing, providing strong confidentiality and integrity guarantees for both code and data. A critical component of this trust model is remote attestation, which enables external entities to verify the authenticity and integrity of code executing within a TEE through cryptographic measurements. However, the effectiveness of remote attestation fundamentally depends on the verifier’s ability to trace the reported measurement back to the original source code - a property that can only be guaranteed through reproducible builds. […]

The full PDF can be read online.


SOURCE_DATE_EPOCH specification updates

Bernhard M. Wiedemann shared a number of proposals regarding updating the SOURCE_DATE_EPOCH specification following discussions at a project summit. Seven distinct proposed changes have been submitted as merge requests on Salsa.

Bernhard’s proposed modifications are independent of one another, allowing for any combination to be merged depending on community feedback. Bernhard noted that one proposal may see the most debate, and could still benefit from further refinement before reaching consensus. Community members are invited to review and provide feedback on the individual merge requests by 1 December 2026. Input can be submitted via reactions or comments on Salsa, directly by email to Bernhard or the mailing list.

The specification was first published in 2015 and updated in 2017.


Reproducible Builds at SeaGL 2026

Reproducible Builds will be present at SeaGL in Seattle, WA, on October 23rd & 24th. Come chat with us in person!

Founded in 2013, SeaGL is a free, grassroots technical summit dedicated to spreading awareness and knowledge about free source software, hardware and culture.


New Code of Conduct (CoC) for the Reproducible Builds project

Mattia Rizzolo announced the official launch of a Code of Conduct for the Reproducible Builds project. This follows work and community discussions originally initiated in 2024, incorporating feedback gathered over email and during project summits, as well as with input from the Software Freedom Conservancy.

The new Code of Conduct establishes guidelines emphasising mutual respect among project contributors. It also defines a formalised process for submitting and handling complaints regarding community misconduct, ensuring transparent governance across project spaces. Along with the core policy document, an accompanying Code of Conduct FAQ has been published to outline the rationale behind adopting the guidelines.


Supporter Spotlight: Jochen Sprickerhof

As a reminder, another supporter spotlight interview was published featuring long-time Debian and Reproducible Builds contributor Jochen Sprickerhof, highlighting his work on package verification and project infrastructure.


Mailing list news

On our mailing list this month:

  • Jonathan Starr from the Institute of Open Science Practices (IOSP) posted with an announcement of its upcoming 2026 workshop series in Leiden in the Netherlands. This free-to-attend event aims to build a participant-owned data storage consortium, allowing community members to publish datasets, code and knowledge objects alongside algorithms designed to evaluate trust and value. The event features a dedicated Community Track for talks and discussions, a tool showcase and an opening session on resilient data storage.

  • Following up on IRC discussions regarding profile-guided optimization (PGO) on build servers, kpcyrd created a demonstration repository showing how PGO profiling can introduce non-determinism into output binaries. The demo highlights how runtime randomness (specifically, the randomised keys used in HashMaps to prevent denial-of-service attacks) causes varying bucket collision rates during test runs. These structural variances alter execution weights on underlying code branches, prompting the compiler to generate differing final assembly output for builds that would otherwise be perfectly reproducible if PGO was disabled. Rather than abandoning PGO performance gains, kpcyrd suggested treating generated profiling data as a documented build input or recorded environment artifact (similar to .buildinfo files), rather than regenerating profiles dynamically on the fly during build execution.

  • An autonomous AI agent (!), posted a controlled build result and reproducer demonstrating that pre-creating an obj directory in libmilter source trees prevents kernel-release path leaks (obj.Linux.<release>.x86_64) into debugging symbols. kpcyrd followed up with a helpful reply.

  • Alexander Sosedkin inquired on the mailing list about the preferred approach for sourcing pinned translation files to create reproducible GnuTLS release tarballs, asking whether external hosting should provide versioned downloads, or if projects ought to use Git submodules, dedicated side-repositories or some other mechanism.


Tool and documentation development

diffoscope is our in-depth and content-aware diff utility that can locate and diagnose reproducibility issues. This month, Chris Lamb made a number of changes, including preparing and uploading versions 330, 331 and 332 to Debian. In particular, Chris committed support for radare2 versions greater than 5.9.0 […] based on input from Guillaume Girol […], and committed support for .nar files via Guix. […][…].

Chris later modified diffoscope to not Build-Depend on the Debian package of GNU Guix, as its status in the Debian bug tracking system would transitively render diffoscope as being overly buggy for the next stable release […]. Similarly, he adjusted the Build-Depends on the apksigcopier package as it has been removed from Debian testing […] and, finally, he updated a number of copyright years […][…].

Vagrant Cascadian updated diffoscope in GNU Guix to version 332.


reprotest is our tool for building the same source code twice in different environments and then checking the binaries produced by each build for any differences. This month, reprotest version 0.7.33 was uploaded to Debian by Holger Levsen with the following changes:

  • Sergei Tachenov fixed the fileordering test on all filesystems, including the likes of ZFS, which could return a different order across two builds due to build being done in a different directory […].

  • Holger Levsen bumped the Standards-Version to 4.7.4, reflected that Priority: optional is the default now […], fixed the old Free Software Foundation address […] and bumped the debhelper ‘compat’ level to 14 after confirming there are only desired changes […].

  • Vagrant Cascadian updated *reprotest* to version 0.7.33 in GNU Guix.


rebuilderd, our server designed monitor the official package repositories of Linux distributions and attempt to reproduce the observed results there; it powers, amongst other things, reproduce.debian.net. This month, Bernhard M. Wiedemann submitted a pull request to rebuilderd that refactors RPM repository metadata handling. The change extracts rpm-md parsing out of the Fedora-specific scheduler module and into a shared one.


Lastly, there were a number of improvements made to our website this month as well. For example:


Patches

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

Vagrant Cascadian also performed a number of Non-Maintainer Uploads (NMUs) and Quality Assurance (QA) uploads in Debian for several packages with outstanding reproducibility issues. These included molttemplate, buddy, xfonts-nexus, fte and lifelines.

At the time of this writing, that leaves 130 submitted patches, with only 61 outstanding submitted patches that older than a year in the Debian bug tracking system. This number is only 26 if we exclude any low-priority build path issues.



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:

The Big Idea: William C. Tracy [Whatever]

There’s much to discuss with Pressure Magic, but what’s really the big sell (at least up front) is a very large magical animal. It’s not just me who thinks so: author William C. Tracy is super-excited to tell you all about it too!

WILLIAM C. TRACY:

This is a story about a giant sea otter.

That was the main idea I came up with when drafting Pressure Magic, the third book in my Shifting Lands series, which contains a protagonist with only one arm, martial arts magic, and fast-moving islands. (You can read about the first book in Big Idea here and the second book at Mary Robinette Kowal’s My Favorite Bit here.

All right, now that you’re all caught up, let’s talk about that giant otter.

I should say, my wife loves otters. Might be her favorite animal. Whenever we go to a zoo or see one on TV, she says (jokingly) that we should get one and set up a pool in the backyard.

This third book in the series is a “learning” book, where the characters level up, find out more about the world, and discover they can take on bigger opponents than they thought. I knew it would take place on a Worldbeast in the middle of the boiling ocean, as this world has continents that move about 400 times faster than those in our world, and begs the question, to quote Lewis Carroll, “why the sea is boiling hot.” We don’t find out about pigs with wings. Maybe that’s another book.

Since the ocean is so hot (from all the islands moving around), it’s not traveled on much. Unless, of course, you’re a gigantic magical beast. I had several ideas for what species the Worldbeast might be: turtle (overdone), crab (too uncomfortable, though I reused that idea), fish (too obvious). Finally, I went with a mammal, so what better animal to pick than one at least one person would appreciate? Thus Motu, the giant otter, was born.

I should also mention that not only is my wife the lead copy editor for Space Wizard, my publishing company, she doesn’t like to read my books until they are ready for copy edits, so it doesn’t color her perspective. I got to keep all this a secret until one of our interviews we did for the crowdfunding campaign that funded this book, just before it went to copy edits. It was a fun surprise!

Why Worldbeasts, in general? Because in this book, I want to expand the scope of the world. So far, everything has taken place on one island, but I wanted to set up the size of the world for later books, and show how people can travel when the ocean is, let’s say, not great for bathing. Will we see more of them? Absolutely. In fact, very small spoiler, but there’s another Worldbeast in this very book…

As for our intrepid heroes, while the sea otter is the centerpiece of the book, the main characters, and a new teacher they find, are the real stars. Their teacher, Maisah, was the character that really brought this story together for me. We returned from a driving trip across New Zealand in January 2026, which provided fascinating research for me, as this world is based loosely on ancient South American and Polynesian cultures. In keeping with my press focusing on science fiction and fantasy stories with LGBTQIA+ representation, I learned that a lot of these cultures had existing structure to include people we would label as nonbinary and trans nowadays. In particular, I looked a bit into the gendered representation of Māori people, and that they had specific words for people outside the majority genders and sexualities.

Maisah is nonbinary, and very open about it. In fact, one conversation in the book centers around how they regard their body and their gender from day to day, in respect to how the main character Silluka feels about her own body, being born with no right hand and forearm. It helps to change the way her character thinks about the magic she can and can’t do.

I also brought up this conversation with the cover artist, as we wanted to depict Maisah on the cover. Māori people have a long tradition of facial tattoos for highly respected members of their society, and these are gendered. We went back and forth on whether we wanted to represent male, female, or a mixture of the two, but in the end, I felt that would walk too close to cultural appropriation. I wanted to evoke the feel of Polynesian and South America cultures for this world, and pay tribute to their civilization, but not copy them exactly.

If you want to read more about Maisah, Motu, and all the regular characters in the Shifting Lands, I plan on writing this series for a while yet! My eventual plan is for eight or nine books, gradually exploring more of the world. I’d love for you to come along and experience Pressure Magic!


Pressure Magic: Amazon
Author Socials: Web Site|Bluesky|Instagram|Threads

19:42

Horse Apple, With Dog [Whatever]

It’s the time of the year where horse apples (also known as Osage oranges) are thick on the ground at the local nature preserve. I call them “brain fruit” because, well, look at it, it kind of looks like a green, sickly brain just lying there on the trail. As I understand it, these fruits are not poisonous to humans or other animals, but none of them particularly like it, either. There is some speculation that this fruit evolved to attract a seed-spreader who no longer exists (like a giant sloth or some such), but this hypothesis is controversial and not necessarily widely supported. No matter what, it’s a weird damn fruit.

Also in the picture, blurry and in the background, is Roscoe, my mother-in-law’s pup, who I was walking at the preserve. He is also not poisonous to humans or other animals. Please do not eat him either. He is a good boy.

— JS

18:14

17:07

Upcoming Speaking Engagements [Schneier on Security]

This is a current list of where and when I am scheduled to speak:

  • I’m speaking at ATTENTION: Democracy, Rebuilt in Montreal, Quebec, Canada. The event runs October 21–23, 2026, and my talk is on Wednesday, October 21.
  • I’m speaking at the University of Toronto in Toronto, Ontario, Canada, at 5 PM ET on October 22, 2026.
  • I’m speaking at [un]prompted in San Francisco, California. The event runs October 27–29, 2026, and my talk is at 11:35 AM PT on Thursday, October 29.
  • I’m speaking at the Catalyst Summit in Brampton, Ontario, Canada, on Wednesday, November 18, 2026.
  • I’m speaking at QT Qonference 2026 in Toronto, Ontario, Canada, on Thursday, November 19, 2026.

The list is maintained on this page.

16:42

KDE Plasma 6.8 released [OSnews]

KDE turns 30 today, and they’re celebrating it with a brand new KDE Plasma release: version 6.8 is here. On the accessibility front, 6.8 brings a new dwell clicker function (meaning a click will register if the pointer is held still for a short while) and support for the Bikram Sambat calendar and the Amharic language. I always love it when I see support for new languages and scripts, especially when, as is the case here, it’s a language spoken as a first language by 25 million people.

The Plasma remote desktop has also been improved with bi-directional copy/paste, performance and quality improvements, and more, and you can now record microphone and audio while screen recording with Spectacle. In System Monitor, you can now assign processes and tasks to specific processors/cores, which is a great feature for people running intensive tasks but who would still like to, you know, do other things while those tasks are running.

KDE 6.8 drops support for X11, focusing entirely on Wayland. Of course, X11 applications will remain usable thanks to Xwayland, and KDE’s applications will continue to support X11 in case you’re using them outside of KDE. This release also further expands the Union theming system, now adding support for styling Qt Widgets. Union is still in beta, so you’ll have to enable it to test it. There’s a ton more, too, but these are some of the highlights.

KDE Plasma 6.8 will find its way to your distribution of choice soon enough.

15:56

Haiku’s latest activity report contains a ton of smaller fixes and improvements [OSnews]

You know the drill by now – a new month, a new Haiku activity report. This past month doesn’t seem to have any big ticket items, but instead contains a long list of smaller but still welcome fixes. Various filesystem drivers saw some work, a few bugs in virtio drivers were fixed, and NVMM execution is now easily interruptible by signals which should improve performance in various emulators like QEMU. Be sure to comb through the complete list to see if there’s anything in there that impacts you.

ESA targets Anbernic emulation handhelds as “superfake” piracy enablers [OSnews]

The ESA – not, not the cool one – a lobby group made up of various videogame and entertainment companies, has asked the US Trade Representative (USTR) to add Anbernic to its list of companies that are supposedly notorious for engaging in and facilitating piracy. If you’re unaware, Anbernic is one of the bigger names in Android and Linux-based handheld gaming devices targeted at the retrocomputing market.

While many online sellers do include an SD card full of ROMs alongside emulation hardware of all types, Anbernic itself does not appear to do the same when selling directly from its website. Regardless, the ESA argues that these ROM-laden Anbernic devices selling through “normal retail channels” help to “normalize hardware-based piracy by delivering illicit catalogues through a polished consumer product.” This, the ESA says, meets the threshold for a “superfake,” an ill-defined designation that applies to “high-quality counterfeit trademark goods … on a commercial scale.”

↫ Kyle Orland at Ars Technica

There’s a lot of murkiness surrounding whether or not Anbernic sells their devices with preloaded ROMs or not. The number of reports from people who say they did get a ton of ROMs on their Anbernic devices, bought from Anbernic’s own store, is large enough that it’s clearly something they do. However, there’s an equal number of people who say their Anbernic devices were completely free of ROMs, and I’m one of them – I’ve bought like three or so devices from their store over the years, and they never came with any ROMs. My most recent purchase was an RG 35XXPro Linux-based model, and there were no ROMs on it (I replaced the stock operating system with Knulli, which has been a great experience).

If Anbernic does indeed ship at least some of their devices with ROMs preinstalled, then it’s their own damn fault if that lands them in legal trouble. It’s not like downloading ROMs is particularly difficult (just do an internet search for your preferred system and something like “ROM pack” and you’ll get the console’s complete library in a single download), so they really have no need to do so.

There’s one extra layer here though. Third-party resellers like Amazon offer loads of Anbernic devices preloaded with SD cards full of ROMs, all from third parties not affiliated with Anbernic. And wouldn’t you know it – Amazon is a member of the ESA lobby group. In other words, the problem also lies with lax retailers not properly vetting what they’re offering, but instead of going after places like Amazon, they’re going after Anbernic instead.

Amazon is a haven for illegal and counterfeit products, but they’re so wealthy and powerful they just get away with it.

15:35

The Future of AI Cryptanalysis [Schneier on Security]

Matthew Green has been writing a rather pessimistic series of posts about the potential for AI systems to vastly outperform humans in cryptanalysis of both symmetric and public-key ciphers.

I am more optimistic than he is. That is, I have stronger faith in the over-engineering cryptographers tend to do. I am trying to write this up in more detail.

Cyberattack on Connected Fridges in France [Schneier on Security]

Another IoT cyberattack, this one in France:

Hackers gained control of the software that regulates the temperatures of the refrigeration units, forcing some to warm to 50C (120F) overnight, according to one supermarket chain affected.

[…]

Normally, supermarket freezers go through a short period of defrosting overnight, in which temperatures rise slightly. But the hackers ordered the units to heat up and stay hot, although Danfoss did not confirm any reports about just how warm the fridges and freezers could become in that process.

Danfoss said the affected cold units were older models whose security software could not be updated to ward off a risk they had identified.

Any IoT device that can’t be updated is vulnerable. And, probably, any IoT device that can be updated is also vulnerable.

14:42

Representative Line: A Diamond in the Rough [The Daily WTF]

Mandy's co-worker recently learned about virtual inheritance in C++. It's become their new favorite button to push, and they only use virtual inheritance.

Virtual inheritance is one workaround for the "diamond problem", where you have an inheritance tree that "recombines" via multiple inheritance: when a child class has a Hapsburg-esque parentage, it's hard to decide which inherited methods are being invoked or overridden.

In C++, imagine you have class A, which gets derived into classes B and C. Class D then uses multiple inheritance to inherit from B and C. In practice, this means that D inherits from A twice, and would have two internal copies of all of A's members.

If, on the other hand, you have B and C inherit virtually (class B : public virtual A), then class D will only actually inherit a single copy of A.

If you're reading this and going, "Boy, this just sounds like another reason to avoid multiple inheritance," you're probably right. The important thing, though, is inheriting virtually impacts how your child classes will inherit. It only matters if you have child classes.

Which brings us back to Mandy's co-worker. He read somewhere that defaulting to virtual inheritance all the time was safer, so he did that all the time. All. The. Time.

Including in this case:

class SomeSpecificDerivedClass final : public virtual SomeBaseClass

The class here is marked final. It can't be inherited from. The use of virtual accomplishes nothing.

[Advertisement] BuildMaster allows you to create a self-service release management platform that allows different teams to manage their applications. Explore how!

12:35

Why Does AI Write Like Yoda? [Radar]

I use AI for writing all the time. But not because it’s good at writing.

In fact, just the opposite is true. AI is so reliably bad at writing that I’ve actually taken advantage of that, and made its bad writing an integral part of my writing process.

I’ve written a lot of books and articles over the years, and while I used to start with an outline, I don’t anymore. These days I do a lot of brain dumping and brainstorming and talking out loud to an AI, working out what I think about something. I accumulate a lot of notes and ideas, and run a lot of experiments, and at some point, if I’m lucky, I decide there might be an article somewhere in all of that.

Then I ask the AI to take everything I’ve given it and write a draft.

And that AI-generated draft is universally terrible. Like, some of the worst writing you can imagine.

Which is exactly what I want.

Instead of an outline, I get an entire “article” or “chapter” (or, at least, a weird facsimile of one), with paragraphs that express complete thoughts that I gave the AI. Granted, those paragraphs are full of obvious AI tics, like how it uses em dashes to squish two unrelated sentences together, or weird staccato sentences one after another, or these insufferable parades of sentence fragments. Maybe the worst tic is that half of the paragraphs AI generates have an extra sentence that doesn’t actually say anything, but just delivers a forced conclusion with fake “punchiness.” I guess maybe AIs were trained on a lot of bad writing? Well, whatever, it works for me.

The reason I love that type of obviously bad AI writing is because when I’m looking at one of its paragraphs, it’s immediately obvious that an AI wrote it. I’ve been thinking of it as a kind of an improved “lorem ipsum” that lets me see how my article will look, while still serving as a functional placeholder. That lets me use it the way I would use an outline: I can move parts of the article around, make sure it flows correctly, and then replace ALL of the bad AI writing with (hopefully) decent human writing, just like I used to do with bullets in my old outlines.

One weird side-effect of writing this way is that it’s made me very sensitive to the different kinds of AI tics and tells. And I think the weirdest and most frustrating one is “Yoda-speak,” where the AI literally talks like Yoda. It’s weird, kind of hilarious, annoying, and pervasive, but most of all, it’s fascinating. Why does the AI keep talking like Yoda? What causes it? Can we do anything about it? (Do we even want to? It certainly makes it easy to identify AI-generated text, and also, it’s often unintentionally hilarious.)

I’ve got a theory about why this happens, and I ran an experiment that generated some evidence to support it. But first… what, exactly, is Yoda-speak?

Backwards, this bad writing is

I’ve been working on my latest book. It’s called Be the Model, and it teaches you how LLMs work by having you build interactive pages that let you literally do the job of a model to get an intuitive understanding of how they work. So I’ve been writing a lot, which means I’ve been confronted with a lot of Yoda-speak.

Here’s a great example from the chapter I’m currently working on (the “pond sentences” are a small training text), from a description of a page that you’ll build to learn how training works:

The eight pond sentences fill the left region, every word clickable.

That’s weird, right? Nobody talks like that.

To be perfectly fair, I’ll need you to suspend your disbelief a little. Yoda would probably say something more like, “The left region, filled by the eight pond sentences is. Clickable, every word must be.” But the AI-generated version is still very weird, and in a pattern that is recognizably Yoda-like.

That’s a pattern I’ve seen a lot. At one point I was looking through some AI-generated text, trying to figure out a particularly unintelligible sentence. When I asked Claude Opus for help, it came up with the term “Yoda-speak,” and I’ve since found that using that term is really useful when trying to get an AI to help decipher sentences like that.

The interesting thing is that AIs are perfectly capable of detecting and correcting Yoda-speak. You can try this yourself: start a new ChatGPT session, paste in that “pond” sentence, tell it: “An AI generated that sentence. That’s Yoda-speak.” I just tried that in an incognito window, and here’s the answer it just gave me:

Yep 😄—that’s unmistakably Yoda-speak. A natural version would be:

“The eight pond sentences fill the left region, with every word being clickable.”

Or, more naturally for UI instructions:

“The left region contains the eight pond sentences, and every word is clickable.”

The original sounds like the AI took normal English, rearranged the syntax, and then forgot to put it back.

This particularly ugly sentence, from one of those AI-generated outlines of a later chapter that I haven’t started writing yet about the attention mechanism (the part of the LLM that understands context and relationships between words), is the example that made me want to write this article:

What’s left is to let the two heads’ work combine, so run the combined eight numbers through one more small table, eight in and eight out, square, called the output projection.

Ugh.

The problem with that sentence, and what made it hard to diagnose what was going on, is that when you first look at it you can basically understand what it’s saying (sort of?), and it’s hard to put your finger on exactly what’s wrong with it. It’s obviously terrible writing, but that’s not unique. AI is a universally awful writer.

What’s uniquely wrong with that sentence is its weird, comma-laden structure. Different parts of the sentence are split up into small comma-separated phrases, and AIs seem especially prone to using them to rearrange sentences, often at the expense of readability. That particular sentence is about running a combined set of eight numbers through one additional small 8×8 table. But the part of the sentence that should have described the table was in the second half of the sentence, and then you learn at the very end that the whole thing is called an output projection (but only after you’ve already been told to run numbers through it). Somehow the components of the sentence were arranged in a way that made it almost unintelligible.

One word at a time, it writes

An LLM is a next-word predictor. It works by taking your prompt, all of the context you’ve fed it, and everything it’s generated so far, generating the next word in its response, and then repeating the whole process for the next word, then the next one, and so on. It’s counterintuitive to think that AIs could possibly work that way, because these things can produce long, complex, and generally coherent and helpful responses. It seems very strange that they do all of that work one word at a time, without following a master plan for a response.

But that’s literally how the AI works. Once an LLM generates a word, it’s part of the response. It generally can’t go back and rearrange the first half of a sentence, even though it hasn’t finished generating it.

And that brings me back to that especially weird “eight in and eight out, square” barely intelligible sentence. Here’s what I think happened. The model generated the sentence up through “run the combined eight numbers through one more small table,” so those words were already baked into the response. Then it figured out that it had three more things it wanted to say about that table. But by that time it was too late to go back and put those details where they belonged, and apparently there was a shortage of periods that week, or possibly a surplus of commas (there’s no way to know for sure), so it just smashed each of those thoughts onto the end of an already awkward sentence.

I did some research to try to figure out if anyone has looked into this phenomenon before. The closest thing I found to an answer is a 2024 paper by Wilson Wu, John X. Morris, and Lionel Levine called “Do language models plan ahead for future tokens?” They were attempting to determine whether a model does real advance work for words it hasn’t written yet, or whether the information that pays off later is a byproduct of whatever was useful at the time.

The experiment that Wu et al. did was actually pretty clever. In normal training, when the model is being corrected for mispredicting a word several steps ahead, that correction reaches back and shapes what it computed at earlier positions. That way, the model learns to prepare information at an early word for the benefit of words further along, which is the “planning ahead” the paper is testing for. So they trained one model normally, and a second one with a modified process that cut that out: each position could only be trained to help predict the very next word. They kept next-word prediction but removed the training signal from words two or more steps ahead.

Then the researchers compared how well the two models predicted text: if the normally trained model did better, that would be evidence that preparing information in advance was actually helping. With ordinary language, the difference was fairly small for GPT-2, although it became larger as they tested bigger models.

So there’s evidence that a model can sometimes prepare information that will be useful later, which means my story about it only figuring things out as it goes is probably too simple. But anticipating is not revising. Whatever the model sees coming, it still can’t reach back and reorder the words it already committed to, and the words it already committed to are where the damage shows up.

Better, the second answer often is

I have a theory that the Yoda-speak phenomenon is closely related to something I see all the time (and I expect you do, too). Say you’re asking an AI for help with an email, and it gives you a draft of a sentence. Then, immediately after it gives you that sentence, it says something like this: “A better way to phrase that would be:” and gives you a second version. Sometimes there’s even a third option. And it almost always tells you it prefers the last one that it generated.

Coincidentally, I ran into a good example of that “here’s a better version” phenomenon when I asked ChatGPT to make the pond sentence more Yoda-like. I literally gave it the prompt make it more yoda-like. Here’s what it said:

More Yoda-like

The left region, the eight pond sentences fill. Clickable, every word is.

Or even more Yoda:

Extra Yoda-like

The left region, filled by the eight pond sentences is. Clickable, every word must be.

At this point, you can probably guess what I think happened. It generated the first version, and now that version was part of the context it had to work with. Then it generated a second version that was even more Yoda-like. But the first version was already there, so it couldn’t replace it. All it could do was give me another one. I see AIs do this kind of self-correction all the time.

If that’s what’s happening, then self-correction and Yoda-speak may be two versions of the same basic limitation. The model can’t go back and change what it already wrote. Sometimes that means the better answer comes afterward. Other times it means a thought that belonged earlier gets smashed onto the end of a sentence.

My own experiment, I ran

After looking at these two related phenomena (the AI generating Yoda-speak and constantly generating a second or even a third option), I got thinking. I started to wonder if this wasn’t just an AI fluke but actually something that I could reproduce and even potentially control. It would be really interesting if the way we give facts to the AI and structure the input could actually have an outsized effect on how it generates its output, especially if seemingly innocuous changes could cause it to create really weird results.

This was a real experiment, because this approach isn’t obviously something that should work. In theory, if you give a model a set of facts, it should be able to produce coherent output no matter how you order those facts. But I’ve been looking at how attention works in LLMs lately because I need to explain it for Be the Model in straightforward terms that anyone can understand. It seemed to me that changing the order of the facts could actually change what the model was paying attention to.

It turns out that there are two different mechanisms at work inside the LLM, and my theory was that they each played a part in both phenomena, the Yoda-speak and the unprompted second answers:

  • Attention is about what the model is looking at in the input. Every time the AI generates a new word, it looks back over the whole prompt and everything it has written so far, and weights the parts differently depending on their content and their shape. That weighting is a big part of what makes it good at predicting the next word. I had a theory that three facts written as complete sentences would get interpreted as facts to reorganize, while the same exact facts written as bare fragments might look like pieces that could be pasted right after a noun, and attention would weight them that way and send the model down a bad path.
  • Autoregression is about what the model has already written. The AI is a “predict the next word” machine: it generates one word at a time, and each of those words becomes part of what it’s looking at when it picks the next one. Once it’s written one more small table, it can’t go back and insert square before table, so if any facts about the table are still unexpressed at that moment, the only place left for them is later in the sentence. If attention had already sent the model down a bad path, autoregression would keep it from repairing the opening.

My guess was that the “I prefer the second answer” text that the AI keeps generating is essentially a mechanism for recovering from weird phrasing, and that the Yoda-speak or other weird phrasing was the underlying phenomenon. I felt like a good experiment would concentrate on reproducing just that weird phrasing.

Coincidentally, OpenAI had just released their new model, Astra, and I was looking for an excuse to kick its tires, so I decided to use it to run an experiment to see if I could reproduce any of the phenomena I’d been seeing. I couldn’t actually verify specifically that autoregression or attention were causing them, because those are internal to the LLM. But I felt like I could design an experiment that could provide some evidence, by structuring prompts in a way that would take advantage of how those mechanisms work. If I could get an AI to produce weird phrasing that showed some of the same problems as Yoda-speak, it would be evidence that these mechanisms were at least a potential root cause.

I used Astra as an orchestrator, and had it spin up a bunch of Luna sub-agents and give them almost identical prompts. Each consecutive sub-agent would get a small tweak in its prompt. I asked Astra to look at the output and see if there were any weird grammatical constructions that looked similar to Yoda-speak, then iterate on that prompt to make another small tweak, and keep going to produce increasingly weird output.

The first test was deliberately simple. Astra gave a fresh Luna writer this prompt:

Write one concise, natural paragraph that communicates every supplied fact. Use only the supplied facts. Do not pad the paragraph or repeat information to make it longer. Do not exceed 100 words. Do not mention these instructions, show a plan, use bullets, or explain your choices. Return only the paragraph.

Facts: The bicycle is blue. The bicycle has a narrow frame. The bicycle has a silver bell. The bicycle has a worn leather seat. The bicycle leans beside the garage. Rina rides the bicycle to work on weekdays. Rina locks the bicycle to the rack outside her office.

Luna turned that into a totally normal paragraph:

The blue bicycle has a narrow frame, a silver bell, and a worn leather seat. It leans beside the garage, and Rina rides it to work on weekdays, locking it to the rack outside her office.

Then Astra gave another fresh Luna writer exactly the same facts, with exactly the same wording, but changed their order. It moved the fact that the bicycle leans beside the garage and the fact that Rina rides it to work ahead of the color, frame, bell, and seat.

Luna mostly defeated the experiment. It had all of the facts before it started writing, and it was perfectly capable of moving them back where they belonged.

So Astra dropped the bicycle and wrote a fresh set of facts about something Luna had never seen, a completely made-up device with a steel slot called a “feed throat” that you push clay tiles through. It sent them with the same prompt as the bicycle:

Facts: The slot is made of steel. A clay tile slides through the slot. The slot is a hand’s width across. The slot is tapered. The slot is called the feed throat.

With no rule attached, Luna handled them the way it handled the bicycle:

The feed throat is a tapered steel slot, a hand’s width across, through which a clay tile slides.

Then Astra added two rules: the answer had to be one sentence, and it had to start with a fixed phrase. That phrase ends with the word slot, so everything else about the slot has to come after it.

The sentence must begin with exactly this text and continue from it:

Slide the clay tile through one more steel slot

Facts: The slot is a hand’s width across. The slot is tapered. The slot is called the feed throat.

Luna still tidied it up. Every time, it reached for a relative clause:

Slide the clay tile through one more steel slot, which is a hand’s width across, tapered, and called the feed throat.

Then Astra made one more small change. It kept the same opening and the same three facts, but wrote the facts as short pieces instead of complete sentences:

Facts: a hand’s width across tapered called the feed throat

And Luna wrote this:

Slide the clay tile through one more steel slot, a hand’s width across, tapered, called the feed throat.

The only thing that changed between those two runs was how the facts were written down. Astra tried the same setup on a completely different subject:

Rest the cracked bowl inside one more padded cradle, two palms wide, crescent-shaped, called the handling saddle.

That’s the sentence I’d been chasing. Once the model had committed to the noun and the remaining facts arrived as loose pieces instead of sentences, it tacked them on in the order they came.

The shape of its input, the model copies. Reorder the words it has already written, it cannot.

That still doesn’t tell me whether this is what happened when the model wrote one more small table, eight in and eight out, square, called the output projection. In these experiments, we deliberately pushed Luna into that kind of situation. In the original sentence, the model got there on its own.

I think the experiment shows that the model copies the shape of its input, and that fits my theory about the underlying attention and autoregression causes. When the three facts went in as complete sentences, Luna wrote a relative clause. The same facts sent in as bare fragments came back as bare fragments after the noun.

There are some obvious limitations to this experiment. I’m watching the model from the outside, so I don’t have any visibility into how the model weighted those tokens, or what its attention mechanism was doing. I also can’t say whether the model already had those three facts in mind when it wrote slot, but even if it did, it couldn’t put them anywhere but after the text it already generated. But the outputs match what those two mechanisms would do. Attention responds to how the prompt is written, as well as to what it says. Once the model has written the noun, it can’t go back and put anything in front of it.

I suspect that’s also why the AI keeps offering us that second answer. It can’t fix the Yoda-speak that it already generated. It can only write another sentence and hope that’s good enough.

10:28

Things people don’t say [Seth's Blog]

Marketers and politicians too.

We don’t say them because it’s assumed. And because we’re afraid.

“I might be wrong.”

“I’m just guessing”

“This might be selfishly motivated.”

“It could be that I’m hallucinating.”

“I heard this somewhere but I don’t know firsthand that it’s true.”

“I know I sound certain, but I’m not.”

When an AI doesn’t say these things, we’re frustrated when they turn out to be the case. Because our default in interactions with machines is that they don’t dissemble, confuse or mislead.

Perhaps we should print these caveats out and read them before we read an ad, believe a scammy text or interact with an LLM.

Trust is the building block of cultures that matter. We have long manipulated trust for commercial and political ends, and now machines are following our lead.

09:42

Matthew Garrett: Linux Lockdown and Hibernation (again) [Planet Debian]

(This is an updated version of an older post - the introduction remains the same, the technical details are different)

Linux draws a distinction between code running in kernel (kernel space) and applications running in userland (user space). This is enforced at the hardware level - in x86-speak1, kernel space code runs in ring 0 and user space code runs in ring 32. If you’re running in ring 3 and you attempt to touch memory that’s only accessible in ring 0, the hardware will raise a fault. No matter how privileged your ring 3 code, you don’t get to touch ring 0.

Kind of. In theory. Traditionally this wasn’t well enforced. At the most basic level, since root can load kernel modules, you could just build a kernel module that performed any kernel modifications you wanted and then have root load it. Technically user space code wasn’t modifying kernel space code, but the difference was pretty semantic rather than useful. But it got worse - root could also map memory ranges belonging to PCI devices3, and if the device could perform DMA you could just ask the device to overwrite bits of the kernel4. Or root could modify special CPU registers (“Model Specific Registers”, or MSRs) that alter CPU behaviour via the /dev/msr interface, and compromise the kernel boundary that way.

It turns out that there were a number of ways root was effectively equivalent to ring 0, and the boundary was more about reliability (ie, a process running as root that ends up misbehaving should still only be able to crash itself rather than taking down the kernel with it) than security. After all, if you were root you could just replace the on-disk kernel with a backdoored one and reboot. Going deeper, you could replace the bootloader with one that automatically injected backdoors into a legitimate kernel image. We didn’t have any way to prevent this sort of thing, so attempting to harden the root/kernel boundary wasn’t especially interesting.

In 2012 Microsoft started requiring vendors ship systems with UEFI Secure Boot, a firmware feature that allowed5 systems to refuse to boot anything without an appropriate signature. This not only enabled the creation of a system that drew a strong boundary between root and kernel, it arguably required one - what’s the point of restricting what the firmware will stick in ring 0 if root can just throw more code in there afterwards? What ended up as the Lockdown Linux Security Module provides the tooling for this, blocking userspace interfaces that can be used to modify the kernel and enforcing that any modules have a trusted signature.

But that comes at something of a cost. Most of the features that Lockdown blocks are fairly niche, so the direct impact of having it enabled is small. Except that it also blocks hibernation6, and it turns out some people were using that. The obvious question is “what does hibernation have to do with keeping root out of kernel space”, and the answer is a little convoluted and is tied into how Linux implements hibernation. Basically, Linux saves system state into the swap partition and modifies the header to indicate that there’s a hibernation image there instead of swap. On the next boot, the kernel sees the header indicating that it’s a hibernation image, copies the contents of the swap partition back into RAM, and then jumps back into the old kernel code. What ensures that the hibernation image was actually written out by the kernel? Absolutely nothing, which means a motivated attacker with root access could turn off swap, write a hibernation image to the swap partition themselves, and then reboot. The kernel would happily resume into the attacker’s image, giving the attacker control over what gets copied back into kernel space.

This is annoying, because normally when we think about attacks on swap we mitigate it by requiring an encrypted swap partition. But in this case, our attacker is root, and so already has access to the plaintext version of the swap partition. Disk encryption doesn’t save us here. We need some way to verify that the hibernation image was written out by the kernel, not by root. And thankfully we have some tools for that.

Trusted Platform Modules (TPMs) are cryptographic coprocessors7 capable of doing things like generating encryption keys and then encrypting things with them. You can ask a TPM to encrypt something with a key that’s tied to that specific TPM - the OS has no access to the decryption key, and nor does any other TPM. So we can have the kernel generate an encryption key, encrypt part of the hibernation image with it, and then have the TPM encrypt it. We store the encrypted copy of the key in the hibernation image as well. On resume, the kernel reads the encrypted copy of the key, passes it to the TPM, gets the decrypted copy back and is able to verify the hibernation image.

That’s great! Except root can do exactly the same thing. This tells us the hibernation image was generated on this machine, but doesn’t tell us that it was done by the kernel. We need some way to be able to differentiate between keys that were generated in kernel and ones that were generated in userland. TPMs have the concept of “localities” (effectively privilege levels) that would be perfect for this. Userland is only able to access locality 0, so the kernel could simply use locality 1 to encrypt the key. Unfortunately, localities are typically only available on systems that implement a Dynamic Root of Trust Measurement like Intel’s TXT, and most consumer systems have no support for this. So, we need another approach.

TPMs have a set of Platform Configuration Registers (PCRs), intended for keeping a record of system state. The OS isn’t able to modify the PCRs directly. Instead, the OS provides a cryptographic hash of some material to the TPM. The TPM takes the existing PCR value, appends the new hash to that, and then stores the hash of the combination in the PCR - a process called “extension”. This means that the new value of the TPM depends not only on the value of the new data, it depends on the previous value of the PCR - and, in turn, that previous value depended on its previous value, and so on. The only way to get to a specific PCR value is to either (a) break the hash algorithm, or (b) perform exactly the same sequence of writes. On system reset the PCRs go back to a known value, and the entire process starts again.

Some PCRs are different. PCR 23, for example, can be reset back to its original value without resetting the system. We can make use of that. The first thing we need to do is to prevent userland from being able to reset or extend PCR 23 itself. All TPM accesses go through the kernel, so this is a simple matter of parsing the write before it’s sent to the TPM and returning an error if it’s a sensitive command that would touch PCR 23. We now know that any change in PCR 23’s state will be restricted to the kernel.

When we encrypt material with the TPM, we can ask it to record the PCR state. This is given back to us as metadata accompanying the encrypted secret. Along with the metadata is an additional signature created by the TPM, which can be used to prove that the metadata is both legitimate and associated with this specific encrypted data. In our case, that means we know what the value of PCR 23 was when we encrypted the key. That means that if we simply extend PCR 23 with a known value in-kernel before encrypting our key, we can look at the value of PCR 23 in the metadata. If it matches, the key was encrypted by the kernel - userland can create its own key, but it has no way to extend PCR 23 to the appropriate value first. We now know that the key was generated by the kernel.

Unfortunately it turns out that some people actually make use of PCR 23, and restricting it to the kernel makes them sad. There are other resettable PCRs, but only in non-0 localities, so (a) we can’t reset them on most systems and (b) we’ll just find someone who uses them anyway and run into the same problem. We need a different approach.

Thankfully TPMs have a small chunk of non-volatile RAM that can be used for storing things, and by “storing” I mean they can be used in a range of different ways. One of these is effectively as additional PCRs. These values can be configured such that they work the same way as PCRs, with the only way to modify them being to append a new hash to their existing value and update the new value to the hash of that merged value. We can allocate one of these for in-kernel use and reject any access from userspace, and also there are officially allocated ranges (so people shouldn’t be using random values) and the namespace is large enough anyway that w eshouldn’t collide with anyone, so we can carve one of those out and use it for this purpose.

Unfortunately, though, these NV indexes aren’t included in the creation data we get when we create a key, so we need another approach. TPMs have the concept of sessions, a series of commands executed in sequence. A flag allows these sessions to be “audited”, with the TPM keeping a running track of the hash of the commands executed and the results returned. At the end of the session you can ask for a signed copy of this hash, and if you’ve kept a log of all the commands then you can verify that they match that signed hash and know that this log represents a real communication with the TPM. If we read the NV index and generate the key inside the same session, we can verify that the key we’re looking at was created while the NV index had a specific value, and if only the kernel can set that value then we know that the key was generated by the kernel.

Or, well, can we? Only new kernels would impose the restriction on modifying that NV index. An attacker could boot an old kernel, generate a key there in userland, sign a hibernation image with it, and then reboot into a new kernel. The new kernel would see a valid signature with a valid NV index associated with it and have no way to know it was generated from userland rather than the kernel. We need to be able to tell the difference between kernels that implement this feature and ones that don’t, and we need to do that without being able to go back in time to change old kernel behaviour. We can extend a PCR to indicate we implement the new functionality, but so can an attacker running an old kernel.

The normal approach to determining whether an event occurred in a specific phase of the boot process is to “cap” the PCRs - extend them with a known value that indicates a transition between stages of the boot process. Any events that occur before the cap event must have occurred in the previous stage of boot, and since the final PCR value depends on the order of measurements and not just the contents of those measurements, if a PCR is capped before userland runs, userland can’t fake the same PCR value afterwards. If Linux capped the PCRs before userland started running, we’d be able to place a measurement there before the cap occurred and then prove that that extension occurred before userland had the opportunity to interfere. We could simply place a statement that the kernel supported the NV index restrictions there, and we’d be fine.

Unfortunately Linux doesn’t currently do this, and adding support for doing so doesn’t fix the problem - if an attacker boots a kernel that doesn’t cap a PCR, they can just cap it themselves from userland. So, we’re faced with the same problem: booting an older kernel allows the system to be placed in an identical state to the current kernel, and a fake hibernation image can be written out. Solving this requires a PCR that was being modified after kernel code was running, but before userland was started, even with existing kernels.

Thankfully, there is one! PCR 5 is defined as containing measurements related to boot management configuration and data. One of the measurements it contains is the result of the UEFI ExitBootServices() call. ExitBootServices() is called at the transition from the UEFI boot environment to the running OS, and the kernel contains code that executes before it. So, if we measure an assertion regarding whether or not we support restricted access to NV indexes into PCR 5 before we call ExitBootServices(), this will prevent userspace from spoofing us (because userspace will only be able to extend PCR 5 after the firmware extended PCR 5 in response to ExitBootServices() being called). Obviously this depends on the firmware actually performing the PCR 5 extension when ExitBootServices() is called, but if firmware’s out of spec then I don’t think there’s any real expectation of it being secure enough for any of this to buy you anything anyway.

That’s what this patchset does. Review feedback so far seems positive, although James Bottomley suggested a design improvement. My approach of using an NV index as a PCR and generating a signing key made sense as a consequence of my original approach involving PCR 23, which had been to use the key creation data and not use audit sessions at all. But the goal isn’t to use a key - it’s to prove that hibernation occurred in-kernel, and while signing is one way of doing that, there are others. His suggestion is to simply record the hash of the hibernation image into the NV index and then read that back as part of the audit session. On resume we verify the audit session log is legitimate, read the hibernation image, and compare the hash of the hibernation image against the hash in the log. If it matches, and if the PCR 5 value matches, we know the audit session happened in kernel and that the hibernation image hasn’t been modified.

It still seems like we’re missing something, though. If we’re not storing a key anywhere, how do we verify the audit session? To explain this we’re going to need to go into some details about how TPM keys work in the first place. TPMs can produce a special kind of key called an Attestation Key, or AK. Attestation keys are used to sign attestation statements from the TPM, such as PCR quotes or audit logs. We need a separate key type for this in order to prove that the signature was generated as part of an attestation - normal TPM signing keys are fundamentally designed to sign arbitrary material, and so can be used by userland to sign something that looks identical to an attestation record. By being able to distinguish the types of key the TPM uses, we can prove that a signature was generated using an AK, and so know that it’s a real TPM attestation (because nothing other than the TPM can sign stuff with an AK).

But even beyond this distinction, TPMs have different key types. Ordinary keys are generated using an RNG and will be unique. Primary keys are generated using a seed that is used as an input into a key derivation function. For a given TPM, using the same seed to generate the same type of primary key will always generate the same primary key8. We can have the kernel deterministically generate an AK during suspend in order to sign the audit log, and then generate the same key again on resume to validate it. This means we don’t need any other form of trusted storage for the AK - the TPM already provides that functionality.

This is all rather complicated but I’ve been thinking about this for some time now and I haven’t come up with a cleaner solution. The only real open issue is the degree to which machines actually perform the PCR 5 extension. If it turns out there’s a bunch that don’t we’ll need to come up with some alternative approach to identifying whether the kernel supports this functionality, but the design is such that that should be invisible to userspace so adding alternatives later shouldn’t be an issue. Filtering accesses to the NV index is also not super clean, and depends on there not being alternative mechanisms to get at the TPM by sending raw commands. Again, this is intended to be opaque to userland and can be improved if we come up with something better later on (such as a secure way to pass a secret to the kernel on boot that can be used as an auth value for acess to the NV index).

Anyway. Time to go and fix the next thing.


  1. Other architectures use different terminology here, such as “supervisor” and “user” mode, but it’s broadly equivalent ↩︎

  2. In theory rings 1 and 2 would allow you to run drivers with privileges somewhere between full kernel access and userland applications, but in reality we just don’t talk about them in polite company ↩︎

  3. This is how graphics worked in Linux before kernel modesetting turned up. XFree86 would just map your GPU’s registers into userland and poke them directly. This was not a huge win for stability ↩︎

  4. IOMMUs can help you here, by restricting the memory PCI devices can DMA to or from. The kernel then gets to allocate ranges for device buffers and configure the IOMMU such that the device can’t DMA to anything else. Except that region of memory may still contain sensitive material such as function pointers, and attacks like this can still cause you problems as a result. ↩︎

  5. This describes why I’m using “allowed” rather than “required” here ↩︎

  6. Saving the system state to disk and powering down the platform entirely - significantly slower than suspending the system while keeping state in RAM, but also resilient against the system losing power. ↩︎

  7. With some handwaving around “coprocessor”. TPMs can’t be part of the OS or the system firmware, but they don’t technically need to be an independent component. Intel have a TPM implementation that runs on the Management Engine, a separate processor built into the motherboard chipset. AMD have one that runs on the Platform Security Processor, a small ARM core built into their CPU. Various ARM implementations run a TPM in Trustzone, a special CPU mode that (in theory) is able to access resources that are entirely blocked off from anything running in the OS, kernel or otherwise. ↩︎

  8. Unless the TPM is cleared, in which case it’ll generate a new internal seed and now the keys will be different to before the clear ↩︎

08:56

Freexian Collaborators: Debian Contributions: New experimental backend for autopkgtest using pconr, DebConf site visit and more! (by Anupa Ann Joseph) [Planet Debian]

Debian Contributions: 2026-09

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.

DebConf site visit, by Stefano Rivera

In preparation for DebConf 27, Stefano Rivera, Nattie Mayer-Hutchings, and Jongmin Kim from the DebConf Committee visited Asahikawa Japan. A contingent of the local team gathered to tour the venues with us, discuss plans, and meet the local organizations assisting the event. We held a press conference at the city hall that got some coverage. A few potential day-trip options were explored. Photos from the site visit.

autopkgtest-virt-pconr, by Helmut Grohne

Following the creation of the pconr module that provides a basis for unschroot and a more secure containment for mmdebstrap, an experimental autopkgtest backend autopkgtest-virt-pconr is now available. It fits a spot between autopkgtest-virt-unshare and more fully fledged containers as it does not require much infrastructure like setting up incus or lxc but still provides a containment running an initsystem. Due to the use of erofs as base image format, it boots and reverts quickly. This development also required fixing concurrency issues in asyncvarlink and even shed light on a matching bug in systemd that was promptly fixed upstream.

Miscellaneous contributions

  • Carles reviewed and submitted six Catalan po-debconf translations using po-debconf-manager. Improved po-debconf-manager’s workflow for updating translations.
  • Carles reviewed, translated or updated webwml Catalan translations for security and CD pages. He also fixed issues that prevented building webwml, deleted orphaned translation pages, etc. and experimented with a more global HTML tidying up experiment.
  • Carles refactored check-relations adding capacity to ignore concrete from_package -> to_package specific relations and more flexibility around ignores. Detects unused ignore rules as well.
  • Carles improved some Wiki pages (LibreOffice, Framework amongst some other ones)
  • Thorsten did an hplip upload to replace an expired certificate of HP. This certificate is used to sign new upstream releases and modules that can be downloaded later. Afterwards work on a new upstream version started.
  • Thorsten also struggles with autopkgtest problems of the new upstream version of cups. Work is still ongoing.
  • Antonio loaded the video recording URLs into the MiniDebConf Winterthur 2026 website, and deployed the website for MiniDebConf Curitiba 2027 (still very early work in progress at this point).
  • Antonio uploaded debci 4.3, autodep8 0.31, gem2deb 2.2.10, ruby-sass 3.7.4-7, init-system-helpers 1.69+nmu2 and 1.69+nmu3.
  • Antonio worked on several topics around Debian CI maintenance, reliability and performance.
  • Stefano updated the autopkgtests for cPython packages in Debian to support setuptools 80.
  • Stefano uploaded pypy 8.
  • Stefano helped to get DebConf 26 reimbursement claims processed, and worked on some of the resulting issues in debian-reimbursements.
  • Emilio managed various transitions.
  • Emilio worked on the rustc-web/trixie bootstrap for armel, using the rustc 1.95 version from trixie-backports. This will be needed by the upcoming clamav security updates.
  • Helmut sent patches for 11 cross build failures.
  • Helmut introduced a new build profile to libcap-ng to keep architecture cross bootstrap working.
  • Helmut uploaded debvm_0.5.5 introducing support for Hurd thanks to a lot of work by Johannes Schauer Marin Rodrigues.
  • Colin worked with OpenSSH upstream to reduce the linkage of /usr/sbin/sshd, hardening it a little further.
  • Colin upgraded to new security releases of groff and parted.
  • Colin upgraded 50 Python packages to new upstream versions, and fixed over 40 RC bugs in the Python team.
  • Santiago continued mentoring Aryan Karamtoth with the GSoC project about introducing livepatching support for linux. This mentoring is done in collaboration with Emmanuel Arias. In particular, Santiago explored different requirements for providing binary modules for the same kernel packages used by Debian, that require a matching version number.
  • Anupa joined Jean-Pierre Giraud to prepare the files for point release announcement for Debian 13.7.

08:49

Grand Admiral Pron [Penny Arcade]

New Comic: Grand Admiral Pron

05:49

Russ Allbery: Review: Ties That Bond in Gretna Green [Planet Debian]

Review: Ties That Bond in Gretna Green, by Linzi Day

Series: Midlife Recorder #3
Publisher: Linzi Day
Copyright: February 2023
ISBN: 9798376517017
Format: Kindle
Pages: 616

Ties That Bond in Gretna Green is a self-published fantasy novel and the third book in the Midlife Recorder series. As with the previous book, it picks up almost immediately after Painting the Blues in Gretna Green. Day calls the genre paranormal women's fantasy, and that sounds about right to me.

There is an intervening short story that you can get by joining Day's mailing list (along with an epilogue to the first book and to this book). I don't think it's that important, but there are frequent references to it at the start of this novel that become somewhat annoying if you haven't read it.

Valentine's Day is fast approaching. This the busiest day of the year for the part of the Recorder's job that Niki already knew how to do: marrying people. She performed marriage ceremonies in her previous job before her inheritance, and she loved that work despite her awful boss. Performing marriages in the Gateway sounds even more rewarding, but the sheer number of couples and the political complications from the first two books create logistical problems she has to solve first.

Also, the remaining member of her staff held over from her grandmother's time has returned from vacation to discover that Niki has upended most of what she thought she knew about the job. Time for Niki to apply what she learned from the change management training her old boss forced her to attend and then ignored! (If you just groaned, rest assured that Day somehow makes this work, although she clearly has a higher opinion of corporate training than I do.)

This plot was more to my taste than Painting the Blues, mostly because Niki seemed on top of the problems and didn't postpone looking at them for half the book. There is more of the management competence porn that readers have come to expect of the series, a few more revelations about Niki's magic, more mysterious manifestations and the first mention of a prophecy, and a few political developments. As always, the pacing is exceptional. These books grab me and pull me along, page after page, often robbing me of sleep because I find them nearly impossible to put down.

Ties that Bond (and to some extent the last book) looked like it was going to introduce a romantic subplot, and I was preparing to be annoyed by it because I did not like the man in the subplot at all. I won't spoil how it works out in this book, but I will say that Niki surprised me and showed more sense than I thought the author was telegraphing. This is not the first time that Day has surprised me with what I thought was foreshadowing that did not turn out how I expected, usually for the better. If she can keep that up, it's a nice effect (if a bit unbalancing) and adds to my desire to read just one more chapter.

The way the world-building of these books is structured continues to intrigue me. Day gets away with some problems that I think would be more noticeable in other books thanks to the excellent pacing (no time to ponder the world-building, we're on to the next crisis!) and the tight third-person perspective. Niki is not a detail person, to say the least, but she does keep returning to bits of world-building and poking at them a bit harder, which gives Day repeated opportunities to shore up ideas that felt shaky and dubious at first glance. Still, this is not a book that prizes deep logical consistency or full exploration of the ramifications of a bit of magic. You have to be willing to go along with the ride and not think too hard.

For example, Niki can see bonds between couples and judge their strength. This is apparently a long-standing power of the Recorder's line (she was able to do that before she became the Recorder), and part of her responsibility in these weddings is to check the bonds of the couples. This leads to some well-handled scenes where she diagnoses a problem or resolves a conflict because she can magically see the true relationship structure.

Everyone in the book just takes this power in stride. This is wild to me! This ability would completely upend half of society if you fully worked out its ramifications and could find people other than Niki with the same ability. Even if one assumes that a bond only forms over time and can't be sensed in the early stages of a relationship (something the book never establishes), can you imagine the implications of having an infallible oracle that says at a glance whether a marriage will work (permanently, the book strongly implies)? The implications for how to structure marriage, for family planning, for psychology and psychiatry, for how to structure dating, even for living arrangements and housing markets? This is not a small world-building detail, and yet it's treated more like part of Niki's characterization than like a foundation of society.

I think some of this all-vibes world-building may come from the general new-age feel to how magic works. Day makes a grab-bag of random magic canonical in this world: psychic lie detecting abilities, auras, chakras, premonitions, and other bits of the sort of spiritualism that tends to be heavily marketed to middle-class women. I have that niggling feeling that one sometimes gets in SF that a lot of this is in the world-building because the author believes it's partly real (see, for instance, psychic powers and the Dean drive in 1960s science fiction). If one believes that psychic powers and various bits of mysticism are true in our world, one has already developed the rationalization mechanisms to explain away their almost total lack of influence or impact on how the world is structured. If one then introduces them into a true fantasy world, one may not notice how many implications that should have for how society is structured, since one is used to believing magic exists but has no significant implications.

I could be entirely wrong about this analysis, and maybe it's a bit unfair to Day. I should also be clear that this is not a complaint, just a point of fascination to me when I think back over one of these books after I finished it. There is a glut of fantasy out there that's constructed like an engineering problem or that goes deep into politics or social theory, usually written by people with strong opinions but not a lot of training in real sociology. One of the joys of self-published books is that you occasionally get something that assembles genre conventions in a way that feels odd and delightfully strange. What if, in addition to dimensional gates and overwhelming protean power invested in a true heir, all the magic sold by the local Tarot and crystal store was also true? Sure, why not! If the pacing is good and the story is grabby, it works for me.

It does seem worth attaching a warning for the folks who need scientific reproducibility and explored implications in their world-building, though. If you're the sort of reader who is bothered by political boundaries and economic systems that match our world despite the existence of magic, this series may cause you problems.

This continues to be a grabby, highly entertaining story of a woman who finally gets to run her own small business the way that she always thought the business should be run after years of working for an awful manager, except that her business is total magical power over an interchange point between dimensions, she's the chosen one, and the setting is a high fantasy world with prophecies and gods. If that sounds appealing, don't start here, but I highly recommend giving Midlife in Gretna Green a try. The series seems to be holding up.

Followed by a short story epilogue available by joining Day's mailing list, an optional novella (maybe novelette) published in Spilling the Tea in Gretna Green, and then Seeing Red in Gretna Green.

Rating: 7 out of 10

Girl Genius for Wednesday, October 14, 2026 [Girl Genius]

The Girl Genius comic for Wednesday, October 14, 2026 has been posted.

Feeds

FeedRSSLast fetchedNext fetched after
@ASmartBear XML 22:21, Tuesday, 20 October 23:02, Tuesday, 20 October
a bag of four grapes XML 22:21, Tuesday, 20 October 23:03, Tuesday, 20 October
Ansible XML 22:21, Tuesday, 20 October 23:01, Tuesday, 20 October
Bad Science XML 22:28, Tuesday, 20 October 23:17, Tuesday, 20 October
Black Doggerel XML 22:21, Tuesday, 20 October 23:02, Tuesday, 20 October
Blog - Official site of Stephen Fry XML 22:28, Tuesday, 20 October 23:17, Tuesday, 20 October
Charlie Brooker | The Guardian XML 22:21, Tuesday, 20 October 23:03, Tuesday, 20 October
Charlie's Diary XML 22:28, Tuesday, 20 October 23:16, Tuesday, 20 October
Chasing the Sunset - Comics Only XML 22:28, Tuesday, 20 October 23:17, Tuesday, 20 October
Coding Horror XML 22:28, Tuesday, 20 October 23:15, Tuesday, 20 October
Comics Archive - Spinnyverse XML 22:49, Tuesday, 20 October 23:33, Tuesday, 20 October
Cory Doctorow's craphound.com XML 22:21, Tuesday, 20 October 23:03, Tuesday, 20 October
Cory Doctorow, Author at Boing Boing XML 22:21, Tuesday, 20 October 23:02, Tuesday, 20 October
Ctrl+Alt+Del Comic XML 22:28, Tuesday, 20 October 23:16, Tuesday, 20 October
Cyberunions XML 22:28, Tuesday, 20 October 23:17, Tuesday, 20 October
David Mitchell | The Guardian XML 22:49, Tuesday, 20 October 23:32, Tuesday, 20 October
Deeplinks XML 22:49, Tuesday, 20 October 23:33, Tuesday, 20 October
Diesel Sweeties webcomic by rstevens XML 22:49, Tuesday, 20 October 23:32, Tuesday, 20 October
Dilbert XML 22:28, Tuesday, 20 October 23:17, Tuesday, 20 October
Dork Tower XML 22:21, Tuesday, 20 October 23:03, Tuesday, 20 October
Economics from the Top Down XML 22:49, Tuesday, 20 October 23:32, Tuesday, 20 October
Edmund Finney's Quest to Find the Meaning of Life XML 22:49, Tuesday, 20 October 23:32, Tuesday, 20 October
EFF Action Center XML 22:49, Tuesday, 20 October 23:32, Tuesday, 20 October
Enspiral Tales - Medium XML 22:49, Tuesday, 20 October 23:34, Tuesday, 20 October
Events XML 22:28, Tuesday, 20 October 23:16, Tuesday, 20 October
Falkvinge on Liberty XML 22:28, Tuesday, 20 October 23:16, Tuesday, 20 October
Flipside XML 22:21, Tuesday, 20 October 23:03, Tuesday, 20 October
Flipside XML 22:49, Tuesday, 20 October 23:34, Tuesday, 20 October
Free software jobs XML 22:21, Tuesday, 20 October 23:01, Tuesday, 20 October
Full Frontal Nerdity by Aaron Williams XML 22:28, Tuesday, 20 October 23:16, Tuesday, 20 October
General Protection Fault: Comic Updates XML 22:28, Tuesday, 20 October 23:16, Tuesday, 20 October
George Monbiot XML 22:49, Tuesday, 20 October 23:32, Tuesday, 20 October
Girl Genius XML 22:49, Tuesday, 20 October 23:32, Tuesday, 20 October
Groklaw XML 22:28, Tuesday, 20 October 23:16, Tuesday, 20 October
Grrl Power XML 22:21, Tuesday, 20 October 23:03, Tuesday, 20 October
Hackney Anarchist Group XML 22:28, Tuesday, 20 October 23:17, Tuesday, 20 October
Hackney Solidarity Network XML 22:49, Tuesday, 20 October 23:34, Tuesday, 20 October
http://blog.llvm.org/feeds/posts/default XML 22:49, Tuesday, 20 October 23:34, Tuesday, 20 October
http://calendar.google.com/calendar/feeds/q7s5o02sj8hcam52hutbcofoo4%40group.calendar.google.com/public/basic XML 22:21, Tuesday, 20 October 23:01, Tuesday, 20 October
http://dynamic.boingboing.net/cgi-bin/mt/mt-cp.cgi?__mode=feed&_type=posts&blog_id=1&id=1 XML 22:49, Tuesday, 20 October 23:34, Tuesday, 20 October
http://eng.anarchoblogs.org/feed/atom/ XML 22:28, Tuesday, 20 October 23:14, Tuesday, 20 October
http://feed43.com/3874015735218037.xml XML 22:28, Tuesday, 20 October 23:14, Tuesday, 20 October
http://flatearthnews.net/flatearthnews.net/blogfeed XML 22:21, Tuesday, 20 October 23:02, Tuesday, 20 October
http://fulltextrssfeed.com/ XML 22:49, Tuesday, 20 October 23:32, Tuesday, 20 October
http://london.indymedia.org/articles.rss XML 22:28, Tuesday, 20 October 23:15, Tuesday, 20 October
http://pipes.yahoo.com/pipes/pipe.run?_id=ad0530218c055aa302f7e0e84d5d6515&amp;_render=rss XML 22:28, Tuesday, 20 October 23:14, Tuesday, 20 October
http://planet.gridpp.ac.uk/atom.xml XML 22:28, Tuesday, 20 October 23:15, Tuesday, 20 October
http://shirky.com/weblog/feed/atom/ XML 22:49, Tuesday, 20 October 23:33, Tuesday, 20 October
http://thecommune.co.uk/feed/ XML 22:49, Tuesday, 20 October 23:34, Tuesday, 20 October
http://theness.com/roguesgallery/feed/ XML 22:28, Tuesday, 20 October 23:16, Tuesday, 20 October
http://www.airshipentertainment.com/buck/buckcomic/buck.rss XML 22:28, Tuesday, 20 October 23:17, Tuesday, 20 October
http://www.airshipentertainment.com/growf/growfcomic/growf.rss XML 22:49, Tuesday, 20 October 23:33, Tuesday, 20 October
http://www.airshipentertainment.com/myth/mythcomic/myth.rss XML 22:21, Tuesday, 20 October 23:03, Tuesday, 20 October
http://www.godhatesastronauts.com/feed/ XML 22:28, Tuesday, 20 October 23:16, Tuesday, 20 October
http://www.tinycat.co.uk/feed/ XML 22:21, Tuesday, 20 October 23:01, Tuesday, 20 October
https://anarchism.pageabode.com/blogs/anarcho/feed/ XML 22:49, Tuesday, 20 October 23:33, Tuesday, 20 October
https://broodhollow.krisstraub.comfeed/ XML 22:21, Tuesday, 20 October 23:02, Tuesday, 20 October
https://debian-administration.org/atom.xml XML 22:21, Tuesday, 20 October 23:02, Tuesday, 20 October
https://elitetheatre.org/ XML 22:28, Tuesday, 20 October 23:15, Tuesday, 20 October
https://feeds.feedburner.com/Starslip XML 22:21, Tuesday, 20 October 23:03, Tuesday, 20 October
https://feeds2.feedburner.com/GeekEtiquette?format=xml XML 22:49, Tuesday, 20 October 23:32, Tuesday, 20 October
https://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 22:49, Tuesday, 20 October 23:33, Tuesday, 20 October
https://hackbloc.org/rss.xml XML 22:21, Tuesday, 20 October 23:02, Tuesday, 20 October
https://kajafoglio.livejournal.com/data/atom/ XML 22:28, Tuesday, 20 October 23:17, Tuesday, 20 October
https://philfoglio.livejournal.com/data/atom/ XML 22:28, Tuesday, 20 October 23:15, Tuesday, 20 October
https://pixietrixcomix.com/eerie-cutiescomic.rss XML 22:28, Tuesday, 20 October 23:15, Tuesday, 20 October
https://pixietrixcomix.com/menage-a-3/comic.rss XML 22:49, Tuesday, 20 October 23:33, Tuesday, 20 October
https://propertyistheft.wordpress.com/feed/ XML 22:21, Tuesday, 20 October 23:01, Tuesday, 20 October
https://requiem.seraph-inn.com/updates.rss XML 22:21, Tuesday, 20 October 23:01, Tuesday, 20 October
https://studiofoglio.livejournal.com/data/atom/ XML 22:28, Tuesday, 20 October 23:14, Tuesday, 20 October
https://thecommandline.net/feed/ XML 22:28, Tuesday, 20 October 23:14, Tuesday, 20 October
https://torrentfreak.com/subscriptions/ XML 22:49, Tuesday, 20 October 23:32, Tuesday, 20 October
https://web.randi.org/?format=feed&type=rss XML 22:49, Tuesday, 20 October 23:32, Tuesday, 20 October
https://www.baen.com/baenebooks XML 22:49, Tuesday, 20 October 23:33, Tuesday, 20 October
https://www.dcscience.net/feed/medium.co XML 22:28, Tuesday, 20 October 23:17, Tuesday, 20 October
https://www.DropCatch.com/domain/steampunkmagazine.com XML 22:21, Tuesday, 20 October 23:02, Tuesday, 20 October
https://www.DropCatch.com/domain/ubuntuweblogs.org XML 22:28, Tuesday, 20 October 23:14, Tuesday, 20 October
https://www.DropCatch.com/redirect/?domain=DyingAlone.net XML 22:28, Tuesday, 20 October 23:15, Tuesday, 20 October
https://www.freedompress.org.uk:443/news/feed/ XML 22:28, Tuesday, 20 October 23:16, Tuesday, 20 October
https://www.goblinscomic.com/category/comics/feed/ XML 22:21, Tuesday, 20 October 23:01, Tuesday, 20 October
https://www.loomio.com/blog/feed/ XML 22:28, Tuesday, 20 October 23:14, Tuesday, 20 October
https://www.newstatesman.com/feeds/blogs/laurie-penny.rss XML 22:21, Tuesday, 20 October 23:02, Tuesday, 20 October
https://www.patreon.com/graveyardgreg/posts/comic.rss XML 22:28, Tuesday, 20 October 23:15, Tuesday, 20 October
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 22:49, Tuesday, 20 October 23:32, Tuesday, 20 October
https://x.com/statuses/user_timeline/22724360.rss XML 22:21, Tuesday, 20 October 23:01, Tuesday, 20 October
Humble Bundle Blog XML 22:28, Tuesday, 20 October 23:15, Tuesday, 20 October
I, Cringely XML 22:28, Tuesday, 20 October 23:16, Tuesday, 20 October
Irregular Webcomic! XML 22:21, Tuesday, 20 October 23:02, Tuesday, 20 October
Joel on Software XML 22:28, Tuesday, 20 October 23:14, Tuesday, 20 October
Judith Proctor's Journal XML 22:21, Tuesday, 20 October 23:01, Tuesday, 20 October
Krebs on Security XML 22:21, Tuesday, 20 October 23:02, Tuesday, 20 October
Lambda the Ultimate - Programming Languages Weblog XML 22:21, Tuesday, 20 October 23:01, Tuesday, 20 October
Looking For Group XML 22:49, Tuesday, 20 October 23:33, Tuesday, 20 October
LWN.net XML 22:21, Tuesday, 20 October 23:02, Tuesday, 20 October
Mimi and Eunice XML 22:49, Tuesday, 20 October 23:34, Tuesday, 20 October
Neil Gaiman's Journal XML 22:21, Tuesday, 20 October 23:01, Tuesday, 20 October
Nina Paley XML 22:28, Tuesday, 20 October 23:15, Tuesday, 20 October
O Abnormal – Scifi/Fantasy Artist XML 22:49, Tuesday, 20 October 23:34, Tuesday, 20 October
Oglaf! -- Comics. Often dirty. XML 22:28, Tuesday, 20 October 23:16, Tuesday, 20 October
Oh Joy Sex Toy XML 22:49, Tuesday, 20 October 23:33, Tuesday, 20 October
Order of the Stick XML 22:49, Tuesday, 20 October 23:33, Tuesday, 20 October
Original Fiction Archives - Reactor XML 22:21, Tuesday, 20 October 23:03, Tuesday, 20 October
OSnews XML 22:49, Tuesday, 20 October 23:34, Tuesday, 20 October
Paul Graham: Unofficial RSS Feed XML 22:49, Tuesday, 20 October 23:34, Tuesday, 20 October
Penny Arcade XML 22:21, Tuesday, 20 October 23:03, Tuesday, 20 October
Penny Red XML 22:49, Tuesday, 20 October 23:34, Tuesday, 20 October
PHD Comics XML 22:28, Tuesday, 20 October 23:17, Tuesday, 20 October
Phil's blog XML 22:28, Tuesday, 20 October 23:16, Tuesday, 20 October
Planet Debian XML 22:49, Tuesday, 20 October 23:34, Tuesday, 20 October
Planet GNU XML 22:21, Tuesday, 20 October 23:02, Tuesday, 20 October
Planet Lisp XML 22:28, Tuesday, 20 October 23:17, Tuesday, 20 October
Pluralistic: Daily links from Cory Doctorow XML 22:21, Tuesday, 20 October 23:01, Tuesday, 20 October
PS238 by Aaron Williams XML 22:28, Tuesday, 20 October 23:16, Tuesday, 20 October
QC RSS v2 XML 22:28, Tuesday, 20 October 23:15, Tuesday, 20 October
Radar XML 22:21, Tuesday, 20 October 23:03, Tuesday, 20 October
RevK®'s ramblings XML 22:28, Tuesday, 20 October 23:14, Tuesday, 20 October
Richard Stallman's Political Notes XML 22:28, Tuesday, 20 October 23:17, Tuesday, 20 October
Scenes From A Multiverse XML 22:28, Tuesday, 20 October 23:15, Tuesday, 20 October
Schneier on Security XML 22:21, Tuesday, 20 October 23:01, Tuesday, 20 October
SCHNEWS.ORG.UK XML 22:49, Tuesday, 20 October 23:33, Tuesday, 20 October
Scripting News XML 22:21, Tuesday, 20 October 23:03, Tuesday, 20 October
Seth's Blog XML 22:28, Tuesday, 20 October 23:14, Tuesday, 20 October
Skin Horse XML 22:21, Tuesday, 20 October 23:03, Tuesday, 20 October
Tales From the Riverbank XML 22:28, Tuesday, 20 October 23:17, Tuesday, 20 October
The Adventures of Dr. McNinja XML 22:49, Tuesday, 20 October 23:34, Tuesday, 20 October
The Bumpycat sat on the mat XML 22:21, Tuesday, 20 October 23:01, Tuesday, 20 October
The Daily WTF XML 22:28, Tuesday, 20 October 23:14, Tuesday, 20 October
The Monochrome Mob XML 22:21, Tuesday, 20 October 23:02, Tuesday, 20 October
The Non-Adventures of Wonderella XML 22:49, Tuesday, 20 October 23:32, Tuesday, 20 October
The Old New Thing XML 22:49, Tuesday, 20 October 23:33, Tuesday, 20 October
The Open Source Grid Engine Blog XML 22:28, Tuesday, 20 October 23:15, Tuesday, 20 October
The Stranger XML 22:49, Tuesday, 20 October 23:34, Tuesday, 20 October
towerhamletsalarm XML 22:28, Tuesday, 20 October 23:14, Tuesday, 20 October
Twokinds XML 22:21, Tuesday, 20 October 23:03, Tuesday, 20 October
UK Indymedia Features XML 22:21, Tuesday, 20 October 23:03, Tuesday, 20 October
Uploads from ne11y XML 22:28, Tuesday, 20 October 23:14, Tuesday, 20 October
Uploads from piasladic XML 22:49, Tuesday, 20 October 23:32, Tuesday, 20 October
Use Sword on Monster XML 22:28, Tuesday, 20 October 23:15, Tuesday, 20 October
Wayward Sons: Legends - Sci-Fi Full Page Webcomic - Updates Daily XML 22:28, Tuesday, 20 October 23:14, Tuesday, 20 October
what if? XML 22:21, Tuesday, 20 October 23:02, Tuesday, 20 October
Whatever XML 22:28, Tuesday, 20 October 23:17, Tuesday, 20 October
Whitechapel Anarchist Group XML 22:28, Tuesday, 20 October 23:17, Tuesday, 20 October
WIL WHEATON dot NET XML 22:49, Tuesday, 20 October 23:33, Tuesday, 20 October
wish XML 22:49, Tuesday, 20 October 23:34, Tuesday, 20 October
Writing the Bright Fantastic XML 22:49, Tuesday, 20 October 23:33, Tuesday, 20 October
xkcd.com XML 22:49, Tuesday, 20 October 23:32, Tuesday, 20 October